Name: series-workflownh8sh Phase: Succeeded StartedAt: 2026-07-10 08:50:57 +0000 UTC FinishedAt: 2026-07-10 12:13:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[0] Phase: Succeeded StartedAt: 2026-07-10 08:50:57 +0000 UTC FinishedAt: 2026-07-10 10:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 08:50:57 +0000 UTC FinishedAt: 2026-07-10 10:04:58 +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": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "MD_RAID1", "MD_RAID10", "MD_RAID456" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "MD_RAID1", "MD_RAID10", "MD_RAID456" ], "series_id": "eb54f8e1-3b8e-4595-a7d7-556842de17ba" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "badblocks_set", "badblocks_clear", "badblocks_check", "_badblocks_set", "_badblocks_clear" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O01EX1JBSUQ0NTYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jbGVhciYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW52YWxpZCBzaGlmdCB2YWx1ZXMsIGFuZCBpbmNvcnJlY3Qgcm91bmRpbmcgbG9naWMgaW4gdGhlIGJhZGJsb2NrcyBtYW5hZ2VtZW50IGNvZGUuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgZWRnZSBjYXNlcyAobGlrZSBsYXJnZSBzZWN0b3IgbnVtYmVycyBvciBpbnZhbGlkIHNoaWZ0IHZhbHVlcykgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTY0YmJlMGViNmU0ZjIyZTAwOTZkMmFlMjdjYzIwNjY0NzY5ZTdjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAyOjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmZmLi4wMGE1OTcyOTYwMGFhOCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iYWRibG9ja3MuY1xuQEAgLTg1MywxMiAmIzQzOzg1MywyMyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbiBcdFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKHMgXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxuJiM0MztcdFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGJiLVx1MDAzZXNoaWZ0KSB7XG4gXHRcdC8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqL1xuIFx0XHRzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0cyA9IHJvdW5kX2Rvd24ocywgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdG5leHQgPSByb3VuZF91cChuZXh0LCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0aWYgKG5leHQgXHUwMDNjPSBzKVxuJiM0MztcdFx0XHQvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdHNlY3RvcnMgPSBuZXh0IC0gcztcbiBcdH1cbiBcbkBAIC0xMDYxLDcgJiM0MzsxMDcyLDEyIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4gXHRcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdGlmIChzIFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcbiYjNDM7XHRcdC8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCkge1xuJiM0MztcdFx0c2VjdG9yX3Qgb3JpZ19zID0gcztcbiBcdFx0c2VjdG9yX3QgdGFyZ2V0O1xuIFxuIFx0XHQvKiBXaGVuIGNsZWFyaW5nIHdlIHJvdW5kIHRoZSBzdGFydCB1cCBhbmQgdGhlIGVuZCBkb3duLlxuQEAgLTEwNzAsMTAgJiM0MzsxMDg2LDIxIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4gXHRcdCAqIEhvd2V2ZXIgaXQgaXMgYmV0dGVyIHRoZSB0aGluayBhIGJsb2NrIGlzIGJhZCB3aGVuIGl0XG4gXHRcdCAqIGlzbiYjMzk7dCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLlxuIFx0XHQgKi9cbiYjNDM7XHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0XHR0YXJnZXQgPSBzICYjNDM7IHNlY3RvcnM7XG4tXHRcdHJvdW5kdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZGRvd24odGFyZ2V0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuJiM0MztcdFx0cyA9IHJvdW5kX3VwKHMsIChzZWN0b3JfdCkxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4mIzQzO1x0XHR0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmIChzIFx1MDAzYyBvcmlnX3MgfHwgdGFyZ2V0IFx1MDAzYyBzKVxuJiM0MztcdFx0XHQvKiBSb3VuZGluZyB3cmFwcGVkLCBvciByYW5nZSBjb2xsYXBzZWQgKi9cbiYjNDM7XHRcdFx0c2VjdG9ycyA9IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZWN0b3JzID09IDApXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdHdyaXRlX3NlcWxvY2tfaXJxKFx1MDAyNmJiLVx1MDAzZWxvY2spO1xuQEAgLTEzMDMsMTIgJiM0MzsxMzMwLDIzIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4gXG4gXHRXQVJOX09OKGJiLVx1MDAzZXNoaWZ0IFx1MDAzYyAwIHx8IHNlY3RvcnMgPT0gMCk7XG4gXG4mIzQzO1x0aWYgKHMgXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxuJiM0MztcdFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNlIDApIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9ycztcbiBcbi1cdFx0cm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0cm91bmR1cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRzID0gcm91bmRfZG93bihzLCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0dGFyZ2V0ID0gcm91bmRfdXAodGFyZ2V0LCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0aWYgKHRhcmdldCBcdTAwM2M9IHMpXG4mIzQzO1x0XHRcdC8qIFJvdW5kaW5nIHdyYXBwZWQgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDssCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgaW50ZWdlciBvdmVyZmxvd3MsIGludmFsaWQgc2hpZnQgdmFsdWVzLCBhbmQgaW5jb3JyZWN0IHJvdW5kaW5nIGxvZ2ljIGluIHRoZSBiYWRibG9ja3MgbWFuYWdlbWVudCBjb2RlLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGVkZ2UgY2FzZXMgKGxpa2UgbGFyZ2Ugc2VjdG9yIG51bWJlcnMgb3IgaW52YWxpZCBzaGlmdCB2YWx1ZXMpIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTY0YmJlMGViNmU0ZjIyZTAwOTZkMmFlMjdjYzIwNjY0NzY5ZTdjZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAyOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuYwppbmRleCBlY2U2NGU3NmZlOGZmZi4uMDBhNTk3Mjk2MDBhYTggMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JhZGJsb2Nrcy5jCkBAIC04NTMsMTIgJiM0Mzs4NTMsMjMgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsCiAJCS8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi8KIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChzICZndDsgVUxMT05HX01BWCAtIHNlY3RvcnMpCiYjNDM7CQkvKiBSYW5nZSB3cmFwcyBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi8KJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlpZiAoYmItJmd0O3NoaWZ0KSB7CiAJCS8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqLwogCQlzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzOwogCi0JCXJvdW5kZG93bihzLCAxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7Ci0JCXJvdW5kdXAobmV4dCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7PSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQkJLyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqLwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCXMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7CiYjNDM7CQluZXh0ID0gcm91bmRfdXAobmV4dCwgKHNlY3Rvcl90KTEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCWlmIChuZXh0ICZsdDs9IHMpCiYjNDM7CQkJLyogUm91bmRpbmcgd3JhcHBlZCBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi8KJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAJCXNlY3RvcnMgPSBuZXh0IC0gczsKIAl9CiAKQEAgLTEwNjEsNyAmIzQzOzEwNzIsMTIgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycykKIAkJLyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqLwogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHMgJmd0OyBVTExPTkdfTUFYIC0gc2VjdG9ycykKJiM0MzsJCS8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmIChiYi0mZ3Q7c2hpZnQpIHsKJiM0MzsJCXNlY3Rvcl90IG9yaWdfcyA9IHM7CiAJCXNlY3Rvcl90IHRhcmdldDsKIAogCQkvKiBXaGVuIGNsZWFyaW5nIHdlIHJvdW5kIHRoZSBzdGFydCB1cCBhbmQgdGhlIGVuZCBkb3duLgpAQCAtMTA3MCwxMCAmIzQzOzEwODYsMjEgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycykKIAkJICogSG93ZXZlciBpdCBpcyBiZXR0ZXIgdGhlIHRoaW5rIGEgYmxvY2sgaXMgYmFkIHdoZW4gaXQKIAkJICogaXNuJiMzOTt0IHRoYW4gdG8gdGhpbmsgYSBibG9jayBpcyBub3QgYmFkIHdoZW4gaXQgaXMuCiAJCSAqLwomIzQzOwkJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7PSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQkJLyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqLwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkJdGFyZ2V0ID0gcyAmIzQzOyBzZWN0b3JzOwotCQlyb3VuZHVwKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKLQkJcm91bmRkb3duKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKJiM0MzsJCXMgPSByb3VuZF91cChzLCAoc2VjdG9yX3QpMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJdGFyZ2V0ID0gcm91bmRfZG93bih0YXJnZXQsIChzZWN0b3JfdCkxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7CiYjNDM7CQlpZiAocyAmbHQ7IG9yaWdfcyB8fCB0YXJnZXQgJmx0OyBzKQomIzQzOwkJCS8qIFJvdW5kaW5nIHdyYXBwZWQsIG9yIHJhbmdlIGNvbGxhcHNlZCAqLwomIzQzOwkJCXNlY3RvcnMgPSAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXNlY3RvcnMgPSB0YXJnZXQgLSBzOwomIzQzOwomIzQzOwkJaWYgKHNlY3RvcnMgPT0gMCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJd3JpdGVfc2VxbG9ja19pcnEoJmFtcDtiYi0mZ3Q7bG9jayk7CkBAIC0xMzAzLDEyICYjNDM7MTMzMCwyMyBAQCBpbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLAogCiAJV0FSTl9PTihiYi0mZ3Q7c2hpZnQgJmx0OyAwIHx8IHNlY3RvcnMgPT0gMCk7CiAKJiM0MzsJaWYgKHMgJmd0OyBVTExPTkdfTUFYIC0gc2VjdG9ycykKJiM0MzsJCS8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqLwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7IDApIHsKIAkJLyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovCiAJCXNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9yczsKIAotCQlyb3VuZGRvd24ocywgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlyb3VuZHVwKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7PSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQkJLyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqLwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcyA9IHJvdW5kX2Rvd24ocywgKHNlY3Rvcl90KTEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCXRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgKHNlY3Rvcl90KTEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCWlmICh0YXJnZXQgJmx0Oz0gcykKJiM0MzsJCQkvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqLwomIzQzOwkJCXJldHVybiAwOwogCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJhZGJsb2NrcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIHNxdWFyZWx5IGF0IGBibG9jay9iYWRibG9ja3MuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBmb2N1c2VkIG9uIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIGJhZCBibG9jayBoYW5kbGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBzb21lIGNyaXRpY2FsIGNoZWNrcy4gRmlyc3QsIGl0IGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggc2VjdG9yIHJhbmdlcyB0aGF0IHdyYXAgYXJvdW5kIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBzZWN0b3JfdGAgKHRoYXQmIzM5O3MgYFVMTE9OR19NQVhgIGZvciBhIDY0LWJpdCB1bnNpZ25lZCBsb25nIGxvbmcsIGluIGNhc2UgSSBuZWVkIGEgcmVtaW5kZXIgbGF0ZXIpLiBTbWFydC4gSXQmIzM5O3MgYWxzbyBjb25jZXJuZWQgd2l0aCBndWFyZGluZyBhZ2FpbnN0IGNvcnJ1cHRlZCBvciB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBgYmItJmd0O3NoaWZ0YC4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgcm91bmRpbmcgbG9naWMgd2l0aGluIHRoZSBmdW5jdGlvbnMgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIFRoZXkgYXJlIHJlcGxhY2luZyB0aGUgdXNlIG9mIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAgd2l0aCBgcm91bmRfZG93bmAgYW5kIGByb3VuZF91cGAuIEhtbSwgSSB3b25kZXIgd2hhdCB0aGUgZGVhbCBpcyB0aGVyZT8gV2FpdCBhIHNlY29uZC4uLiBUaG9zZSBMaW51eCBrZXJuZWwgbWFjcm9zLCBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgLCAqcmV0dXJuKiB0aGUgcm91bmRlZCB2YWx1ZSwgdGhleSBkb24mIzM5O3QgbW9kaWZ5IHRoZWlyIGFyZ3VtZW50IGluIHBsYWNlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgdGhvc2UgbWFjcm9zIGJ1dCBub3QgYXNzaWduaW5nIHRoZSByZXR1cm5lZCB2YWx1ZSwgc28gaXQgd2FzIGJhc2ljYWxseSBqdXN0IHRocm93aW5nIGF3YXkgdGhlIHJvdW5kZWQgdmFsdWUhIEZvciBleGFtcGxlLCBgcm91bmRkb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTtgIHdhcyBiYXNpY2FsbHkgYSBuby1vcCBhcyBmYXIgYXMgKnMqIHdhcyBjb25jZXJuZWQhIFRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBleHBsaWNpdGx5IGFzc2lnbmluZyB0aGUgcm91bmRlZCB2YWx1ZXMgYmFjayB0byB0aGUgdmFyaWFibGVzOyBgcyA9IHJvdW5kX2Rvd24oLi4uKWAgYW5kIGBuZXh0ID0gcm91bmRfdXAoLi4uKWAuIEJyaWxsaWFudCwgaXTigJlzIGZpeGluZyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGJ1Zy4KClRoZXNlIGFyZSBjcml0aWNhbCBiYWQgYmxvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGF0IHRoZSB2ZXJ5IGhlYXJ0IG9mIHRoZSBibG9jayBsYXllciwgYW5kIHRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgdXNlZCBieSB0aGluZ3MgbGlrZSBNRCAoUkFJRCkgYW5kIE5WRElNTSBtYWtlcyB0aGlzIHBhdGNoIGFsbCB0aGUgbW9yZSBzaWduaWZpY2FudC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBpbnRlZ3JpdHksIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTGV0IG1lIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC4gVGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgYmFkYmxvY2tzLmNgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgIHRvIHNlZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBhbmQgd2hhdCwgaWYgYW55LCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT04PW9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4tLVxuYmxvY2svTWFrZWZpbGUtMTItXHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbmJsb2NrL01ha2VmaWxlOjEzOlx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cdFx0XHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYGJhZGJsb2Nrcy5vYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgdW5jb25kaXRpb25hbGx5LCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBidWlsZHMgKGBvYmoteWApLiBCdXQgdGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBteSBtaW5kIGlzOiB3aG8gYWN0dWFsbHkgKnVzZXMqIGl0PyBJdCYjMzk7cyBhIGJpdCBvZiBhIGNvZGUgc21lbGwgdG8gaW5jbHVkZSBzb21ldGhpbmcgYmxpbmRseSB3aXRob3V0IHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcy4KClNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zZXRgLCBhbmQgYGJhZGJsb2Nrc19jbGVhcmAgYXJlIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGFuZCBmaW5kIG91dCB3aGljaCBkcml2ZXJzLCBpZiBhbnksIGFyZSBsZXZlcmFnaW5nIHRoZSBgYmFkYmxvY2tzYCBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgY29uZmlybSB3aGV0aGVyIGl0cyB1bmNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIHRydWx5IHdhcnJhbnRlZCBvciBpZiBpdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBtYWRlIGNvbmRpdGlvbmFsIHRvIHNhdmUgc29tZSBrZXJuZWwgc2l6ZSBhbmQvb3IgcmVkdWNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgY2hhaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYy0yODItICogICAgIGJsb2NrcyB0YWJsZSBhcmUgYWxsIGFja2VkLCBtZXJnaW5nIHRoZW0gaW50byBhIGxhcmdlciBvbmUgcmFuZ2UgbWF5XG5ibG9jay9iYWRibG9ja3MuYzoyODM6ICogICAgIG9jY3VweSBsZXNzIGJhZCBibG9ja3MgdGFibGUgc3BhY2UgYW5kIG1ha2UgYmFkYmxvY2tzX2NoZWNrKCkgZmFzdGVyLlxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEwNjA9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjEyLS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNoZWNrIGJhZCBibG9ja3MgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMjEzOnN0YXRpYyBpbnQgX2JhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTQtXHRcdFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjkxLS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTI5MjogKiBiYWRibG9ja3NfY2hlY2soKSAtIGNoZWNrIGEgZ2l2ZW4gcmFuZ2UgZm9yIGJhZCBzZWN0b3JzXG5ibG9jay9iYWRibG9ja3MuYy0xMjkzLSAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzA3LSAqXG5ibG9jay9iYWRibG9ja3MuYzoxMzA4OiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMDktICogbWlnaHQgbmVlZCB0byByZXRyeSBpZiBpdCBpcyB2ZXJ5IHVubHVja3kuXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMjU6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjYtXHRcdFx0c2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTQtXHRzZXEgPSByZWFkX3NlcWJlZ2luKFx1MDAyNmJiLVx1MDAzZWxvY2spO1xuYmxvY2svYmFkYmxvY2tzLmM6MTM1NTpcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzU2LVx0aWYgKHJlYWRfc2VxcmV0cnkoXHUwMDI2YmItXHUwMDNlbG9jaywgc2VxKSlcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzYwLX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjE6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NoZWNrKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjItXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU1Olx0aWYgKCFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgKm5yX3NlY3RvcnMsIFx1MDAyNmZpcnN0X2JhZCwgXHUwMDI2YmFkX3NlY3RvcnMpKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1Ni1cdFx0cmV0dXJuIEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9tZC9tZC5oPTI5OT1zdGF0aWMgaW5saW5lIGludCBpc19iYWRibG9jayhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmgtMzAyLVx0aWYgKHVubGlrZWx5KHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50KSkge1xuZHJpdmVycy9tZC9tZC5oOjMwMzpcdFx0aW50IHJ2ID0gYmFkYmxvY2tzX2NoZWNrKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCByZGV2LVx1MDAzZWRhdGFfb2Zmc2V0ICYjNDM7IHMsXG5kcml2ZXJzL21kL21kLmgtMzA0LVx0XHRcdFx0XHRzZWN0b3JzLFxuLS1cbmRyaXZlcnMvbnZkaW1tL25kLmg9Njc2PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19iYWRfcG1lbShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvbnZkaW1tL25kLmgtNjgyLVxuZHJpdmVycy9udmRpbW0vbmQuaDo2ODM6XHRcdHJldHVybiAhIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBsZW4gLyA1MTIsIFx1MDAyNmZpcnN0X2JhZCxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjg0LVx0XHRcdFx0XHUwMDI2bnVtX2JhZCk7XG4tLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYz0zNTM9c3RhdGljIGludCBuZF9wZm5fY2xlYXJfbWVtbWFwX2Vycm9ycyhzdHJ1Y3QgbmRfcGZuICpuZF9wZm4pXG4tLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODMtXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjM4NDpcdFx0YmJfcHJlc2VudCA9IGJhZGJsb2Nrc19jaGVjayhcdTAwMjZuZF9yZWdpb24tXHUwMDNlYmIsIG1ldGFfc3RhcnQsXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4NS1cdFx0XHRcdG1ldGFfbnVtLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNm51bV9iYWQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0yNDI9X193ZWFrIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTgtXHRpZiAoYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU5Olx0ICAgIGJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBudW0sIFx1MDAyNmZpcnN0X2JhZCwgXHUwMDI2bnVtX2JhZCkpIHtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNjAtXHRcdGxvbmcgYWN0dWFsX25yO1xuLS1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NDU9c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTUwLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1MTppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Mi1cdFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQmFkYmxvY2sgU3VwcG9ydCBpbiBOdWxsX2JsayoqCgpPa2F5LCBzbyBgYmFkYmxvY2tzX2NoZWNrYOKApiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGluIGEgZmV3IHBsYWNlcyDigJMgYG51bGxfYmxrYCwgYG1kYCwgYW5kIGBudmRpbW1gIGNvbWUgdG8gbWluZC4gTm93LCBgbnVsbF9ibGtgIGl0c2VsZiwgdGhhdCYjMzk7cyByZWFsbHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcgdGhlIGJsb2NrIGxheWVyIOKAkyBpdCYjMzk7cyBzaW1wbGUsIHByZWRpY3RhYmxlLCBhbmQgZG9lc27igJl0IGhhdmUgdGhlIGNvbXBsZXhpdGllcyBvZiByZWFsIGhhcmR3YXJlLiBHaXZlbiB0aGF0LCBJ4oCZbSB0aGlua2luZyB3ZSBzaG91bGQgc2VlIGlmIGBudWxsX2Jsa2AgYWN0dWFsbHkgc3VwcG9ydHMgdGhlIHNldHRpbmcgb2YgYmFkYmxvY2tzLiBUaGF0IHdvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciB0ZXN0aW5nIGFuZCBkaXNjb3ZlcmluZyBwb3RlbnRpYWwgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYWxyZWFkeSBwcmVzZW50IG9yIGlmIHdlIG5lZWQgdG8gYWRkIGl0IHRvIGZ1bGx5IHV0aWxpemUgYG51bGxfYmxrYCBmb3IgdGhpcyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2NrcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ3NT1OVUxMQl9ERVZJQ0VfQVRUUihyb3RhdGlvbmFsLCBib29sLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ3NjpOVUxMQl9ERVZJQ0VfQVRUUihiYWRibG9ja3Nfb25jZSwgYm9vbCwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0Nzc6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX3BhcnRpYWxfaW8sIGJvb2wsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDc4LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTUyMz1DT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIHBvd2VyKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUyNC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUyNTpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTI2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjgtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1Mjk6XHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCAwKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUzMC19XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzEtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MzI6c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzMtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjEtXHRcdGdvdG8gb3V0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTYyOlx0LyogZW5hYmxlIGJhZGJsb2NrcyAqL1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTYzOlx0Y21weGNoZyhcdTAwMjZ0X2Rldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIC0xLCAwKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2NC1cdGlmIChidWZbMF0gPT0gJiMzOTsmIzQzOyYjMzk7KSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NjU6XHRcdGlmIChiYWRibG9ja3Nfc2V0KFx1MDAyNnRfZGV2LVx1MDAzZWJhZGJsb2Nrcywgc3RhcnQsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjYtXHRcdFx0XHQgIGVuZCAtIHN0YXJ0ICYjNDM7IDEsIDEpKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY3LVx0XHRcdHJldCA9IGNvdW50O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4Olx0fSBlbHNlIGlmIChiYWRibG9ja3NfY2xlYXIoXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2OS1cdFx0XHRcdCAgIGVuZCAtIHN0YXJ0ICYjNDM7IDEpKSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc1LX1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3NjpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIGJhZGJsb2Nrcyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzctXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTk2PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpudWxsYl9kZXZpY2VfYXR0cnNbXSA9IHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5NzpcdFx1MDAyNm51bGxiX2RldmljZV9hdHRyX2JhZGJsb2NrcyxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5ODpcdFx1MDAyNm51bGxiX2RldmljZV9hdHRyX2JhZGJsb2Nrc19vbmNlLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk5Olx0XHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzX3BhcnRpYWxfaW8sXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02MDAtXHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9ibG9ja2luZyxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03Nzc9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzkyLVx0SU5JVF9SQURJWF9UUkVFKFx1MDAyNmRldi1cdTAwM2VjYWNoZSwgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo3OTM6XHRpZiAoYmFkYmxvY2tzX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWJhZGJsb2NrcywgMCkpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTc5NC1cdFx0a2ZyZWUoZGV2KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz04MzQ9c3RhdGljIHZvaWQgbnVsbF9mcmVlX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODM5LVx0bnVsbF9mcmVlX3pvbmVkX2RldihkZXYpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6ODQwOlx0YmFkYmxvY2tzX2V4aXQoXHUwMDI2ZGV2LVx1MDAzZWJhZGJsb2Nrcyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04NDEtXHRrZnJlZShkZXYpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzMTU9c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfdGhyb3R0bGVkKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzM2LS8qXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzM3OiAqIENoZWNrIGlmIHRoZSBjb21tYW5kIHNob3VsZCBmYWlsIGZvciB0aGUgYmFkYmxvY2tzLiBJZiBzbywgcmV0dXJuXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzM4LSAqIEJMS19TVFNfSU9FUlIgYW5kIHJldHVybiBudW1iZXIgb2YgcGFydGlhbCBJL08gc2VjdG9ycyB0byBiZSB3cml0dGVuIG9yIHJlYWQsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM0NS0gKi9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNDY6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDctXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgKm5yX3NlY3RvcnMpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzQ4LXtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNDk6XHRzdHJ1Y3QgYmFkYmxvY2tzICpiYiA9IFx1MDAyNmNtZC1cdTAwM2VucS1cdTAwM2VkZXYtXHUwMDNlYmFkYmxvY2tzO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1MC1cdHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiA9IGNtZC1cdTAwM2VucS1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTU6XHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZiYWRfc2VjdG9ycykpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU2LVx0XHRyZXR1cm4gQkxLX1NUU19PSztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTctXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU4Olx0aWYgKGNtZC1cdTAwM2VucS1cdTAwM2VkZXYtXHUwMDNlYmFkYmxvY2tzX29uY2UpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU5Olx0XHRiYWRibG9ja3NfY2xlYXIoYmIsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2MC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNjE6XHRpZiAoY21kLVx1MDAzZW5xLVx1MDAzZWRldi1cdTAwM2ViYWRibG9ja3NfcGFydGlhbF9pbykge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2Mi1cdFx0aWYgKCFJU19BTElHTkVEKGZpcnN0X2JhZCwgYmxvY2tfc2VjdG9ycykpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTQyMz1ibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjYtXHRzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYgPSBjbWQtXHUwMDNlbnEtXHUwMDNlZGV2O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQyNzpcdGJsa19zdGF0dXNfdCBiYWRibG9ja3NfcmV0ID0gQkxLX1NUU19PSztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjgtXHRibGtfc3RhdHVzX3QgcmV0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQyOS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MzA6XHRpZiAoZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaGlmdCAhPSAtMSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MzE6XHRcdGJhZGJsb2Nrc19yZXQgPSBudWxsX2hhbmRsZV9iYWRibG9ja3MoY21kLCBzZWN0b3IsIFx1MDAyNm5yX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQzMi1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDM4LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQzOTpcdHJldHVybiBiYWRibG9ja3NfcmV0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ0MC19XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbmZpZ2ZzLmhcdTAwM2VcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzojaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTUzPXN0cnVjdCBudWxsYl9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02NC1cdHVuc2lnbmVkIGludCBjdXJyX2NhY2hlO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY1Olx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6NjY6XHRib29sIGJhZGJsb2Nrc19vbmNlO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY3Olx0Ym9vbCBiYWRibG9ja3NfcGFydGlhbF9pbztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02OC1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9MTM0PWJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTM1LVx0XHRcdCAgICAgIHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IG5yX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjEzNjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzNy1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCAqbnJfc2VjdG9ycyk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTM1MD1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfem9uZV93cml0ZShzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU1LVx0c3RydWN0IG51bGxiX3pvbmUgKnpvbmUgPSBcdTAwMjZkZXYtXHUwMDNlem9uZXNbem5vXTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzozNTY6XHRibGtfc3RhdHVzX3QgYmFkYmxvY2tzX3JldCA9IEJMS19TVFNfT0s7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU3LVx0YmxrX3N0YXR1c190IHJldDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNDE1LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxNjpcdGlmIChkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ICE9IC0xKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NDE3Olx0XHRiYWRibG9ja3NfcmV0ID0gbnVsbF9oYW5kbGVfYmFkYmxvY2tzKGNtZCwgc2VjdG9yLCBcdTAwMjZucl9zZWN0b3JzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo0MTg6XHRcdGlmIChiYWRibG9ja3NfcmV0ICE9IEJMS19TVFNfT0sgXHUwMDI2XHUwMDI2ICFucl9zZWN0b3JzKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NDE5Olx0XHRcdHJldCA9IGJhZGJsb2Nrc19yZXQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNDIwLVx0XHRcdGdvdG8gdW5sb2NrX3pvbmU7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTQ0My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo0NDQ6XHRyZXQgPSBiYWRibG9ja3NfcmV0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTQ0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQmFkYmxvY2sgSW1wbGVtZW50YXRpb24gaW4gTGludXggQmxvY2sgRHJpdmVycyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBob3cgYmFkIGJsb2NrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIHdoaWNoIHV0aWxpemVzIGBjb25maWdmc2AgYW5kIGBiYWRibG9ja3NgLiBJbnRlcmVzdGluZywgSSBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBjb25maWdmc2AgZm9yIHRoaXMsIGJ1dCBpdCBtYWtlcyBzZW5zZSBhcyBhIHdheSB0byBleHBvc2UgdGhlc2Ugc2V0dGluZ3MuIFRoZSBrZXkgaXMgdGhhdCBgbnVsbF9ibGtgIGFsbG93cyBzZXR0aW5nIGJhZCBibG9ja3MgdmlhIHRoZSBgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZWAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCBhbGxvd3MgY29uZmlndXJpbmcgYmFkIGJsb2NrIGluZm9ybWF0aW9uLCByaWdodD8gVGhlIGNvbmZpZyBvcHRpb24gcmVsYXRlZCB0byBgbnVsbF9ibGtgIGlzIGBCTEtfREVWX05VTExfQkxLYC4KCk5vdywgdGhlIG1lbnRpb24gb2YgdGhlIGBNRGAgKE11bHRpcGxlIERldmljZSkgZHJpdmVyIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyAqaXQqIGhhbmRsZXMgYmFkIGJsb2NrcyB0b28sIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgb3ZlcmxhcCBpbiBob3cgYmFkIGJsb2NrcyBhcmUgdXNlZCwgbWFuYWdlZCBhbmQgcG9zc2libHkgY29uZmlndXJlZCBhY3Jvc3MgZGlmZmVyZW50IGJsb2NrIGRldmljZSBkcml2ZXJzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIE1EIGNvbmZpZyBvcHRpb25zIHRvIGV4cGxvcmUgaXQgZnVydGhlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBjb21tb24gbWV0aG9kb2xvZ2llcyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHBhcmFsbGVscyBhbmQgSSB3YW50IHRvIHNlZSBpZiBhbnkgZ2VuZXJhbCBwcmluY2lwbGVzIGFyZSBlbWVyZ2luZyBvciBpZiB0aGUgc3RyYXRlZ2llcyBkaWZmZXIgc2lnbmlmaWNhbnRseSBiYXNlZCBvbiB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2NrcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0tZHVzdC5jPTIyND1zdGF0aWMgaW50IGR1c3RfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjM5LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjQwOnN0YXRpYyBib29sIF9fZHVzdF9jbGVhcl9iYWRibG9ja3Moc3RydWN0IHJiX3Jvb3QgKnRyZWUsXG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yNDEtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjYzLVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjY0OnN0YXRpYyBpbnQgZHVzdF9jbGVhcl9iYWRibG9ja3Moc3RydWN0IGR1c3RfZGV2aWNlICpkZCwgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuLFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjY1LVx0XHRcdFx0dW5zaWduZWQgaW50ICpzel9wdHIpXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjc4LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6Mjc5Olx0aWYgKCFfX2R1c3RfY2xlYXJfYmFkYmxvY2tzKFx1MDAyNmJhZGJsb2NrbGlzdCwgYmFkYmxvY2tfY291bnQpKVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjgwOlx0XHRETUVNSVQoXCYjMzQ7JXM6IG5vIGJhZGJsb2NrcyBmb3VuZFwmIzM0OywgX19mdW5jX18pO1xuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjgxLVx0ZWxzZVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjgyOlx0XHRETUVNSVQoXCYjMzQ7JXM6IGJhZGJsb2NrcyBjbGVhcmVkXCYjMzQ7LCBfX2Z1bmNfXyk7XG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yODMtXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjg2LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6Mjg3OnN0YXRpYyBpbnQgZHVzdF9saXN0X2JhZGJsb2NrcyhzdHJ1Y3QgZHVzdF9kZXZpY2UgKmRkLCBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4sXG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yODgtXHRcdFx0XHR1bnNpZ25lZCBpbnQgKnN6X3B0cilcbi0tXG5kcml2ZXJzL21kL2RtLWR1c3QuYz00MDU9c3RhdGljIHZvaWQgZHVzdF9kdHIoc3RydWN0IGRtX3RhcmdldCAqdGkpXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDA4LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDA5Olx0X19kdXN0X2NsZWFyX2JhZGJsb2NrcyhcdTAwMjZkZC1cdTAwM2ViYWRibG9ja2xpc3QsIGRkLVx1MDAzZWJhZGJsb2NrX2NvdW50KTtcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQxMC1cdGRtX3B1dF9kZXZpY2UodGksIGRkLVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmM9NDE0PXN0YXRpYyBpbnQgZHVzdF9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDQwLVx0XHRcdHIgPSAwO1xuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDQxOlx0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sIFwmIzM0O2NvdW50YmFkYmxvY2tzXCYjMzQ7KSkge1xuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDQyLVx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRkLVx1MDAzZWR1c3RfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDQzOlx0XHRcdERNRU1JVChcJiMzNDtjb3VudGJhZGJsb2NrczogJWxsdSBiYWRibG9jayhzKSBmb3VuZFwmIzM0OyxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0NC1cdFx0XHQgICAgICAgZGQtXHUwMDNlYmFkYmxvY2tfY291bnQpO1xuLS1cbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0Ni1cdFx0XHRyID0gMTtcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ0NzpcdFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCBcJiMzNDtjbGVhcmJhZGJsb2Nrc1wmIzM0OykpIHtcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ0ODpcdFx0XHRyID0gZHVzdF9jbGVhcl9iYWRibG9ja3MoZGQsIHJlc3VsdCwgbWF4bGVuLCBcdTAwMjZzeik7XG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDktXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSwgXCYjMzQ7cXVpZXRcJiMzNDspKSB7XG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDU0LVx0XHRcdHIgPSAwO1xuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDU1Olx0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sIFwmIzM0O2xpc3RiYWRibG9ja3NcJiMzNDspKSB7XG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NTY6XHRcdFx0ciA9IGR1c3RfbGlzdF9iYWRibG9ja3MoZGQsIHJlc3VsdCwgbWF4bGVuLCBcdTAwMjZzeik7XG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NTctXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9tZC9tZC5jLTQ0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsay1pbnRlZ3JpdHkuaFx1MDAzZVxuZHJpdmVycy9tZC9tZC5jOjQ1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG5kcml2ZXJzL21kL21kLmMtNDYtI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21kL21kLmM9MTA4MD12b2lkIG1kX3JkZXZfY2xlYXIoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwOTItXHR9XG5kcml2ZXJzL21kL21kLmM6MTA5MzpcdGJhZGJsb2Nrc19leGl0KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzKTtcbmRyaXZlcnMvbWQvbWQuYy0xMDk0LX1cbi0tXG5kcml2ZXJzL21kL21kLmM9MTA5Nz1zdGF0aWMgdm9pZCBzdXBlcl93cml0dGVuKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL21kLmMtMTEyMy0gKiBtZF93cml0ZV9tZXRhZGF0YSAtIHdyaXRlIG1ldGFkYXRhIHRvIHVuZGVybHlpbmcgZGlzaywgaW5jbHVkaW5nXG5kcml2ZXJzL21kL21kLmM6MTEyNDogKiBhcnJheSBzdXBlcmJsb2NrLCBiYWRibG9ja3MsIGJpdG1hcCBzdXBlcmJsb2NrIGFuZCBiaXRtYXAgYml0cy5cbmRyaXZlcnMvbWQvbWQuYy0xMTI1LSAqIEBtZGRldjpcdHRoZSBhcnJheSB0byB3cml0ZVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMzY1PXN0YXRpYyBpbnQgc3VwZXJfOTBfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE0MTItXHRyZGV2LVx1MDAzZXNiX3NpemUgPSBNRF9TQl9CWVRFUztcbmRyaXZlcnMvbWQvbWQuYzoxNDEzOlx0cmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQgPSAtMTtcbmRyaXZlcnMvbWQvbWQuYy0xNDE0LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xODA4PXN0YXRpYyBpbnQgc3VwZXJfMV9sb2FkKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmVmZGV2LCBpbnQgbWlub3JfdmVyc2lvbilcbi0tXG5kcml2ZXJzL21kL21kLmMtMTkwMy1cdGlmICgobGUzMl90b19jcHUoc2ItXHUwMDNlZmVhdHVyZV9tYXApIFx1MDAyNiBNRF9GRUFUVVJFX0JBRF9CTE9DS1MpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5jOjE5MDQ6XHQgICAgcmRldi1cdTAwM2ViYWRibG9ja3MuY291bnQgPT0gMCkge1xuZHJpdmVycy9tZC9tZC5jLTE5MDUtXHRcdC8qIG5lZWQgdG8gbG9hZCB0aGUgYmFkIGJsb2NrIGxpc3QuXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MjItXHRcdGJicCA9IChfX2xlNjQgKilwYWdlX2FkZHJlc3MocmRldi1cdTAwM2ViYl9wYWdlKTtcbmRyaXZlcnMvbWQvbWQuYzoxOTIzOlx0XHRyZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaGlmdCA9IHNiLVx1MDAzZWJibG9nX3NoaWZ0O1xuZHJpdmVycy9tZC9tZC5jLTE5MjQtXHRcdGZvciAoaSA9IDAgOyBpIFx1MDAzYyAoc2VjdG9ycyBcdTAwM2NcdTAwM2MgKDktMykpIDsgaSYjNDM7JiM0MzssIGJicCYjNDM7JiM0MzspIHtcbi0tXG5kcml2ZXJzL21kL21kLmMtMTkzMS1cdFx0XHRcdGJyZWFrO1xuZHJpdmVycy9tZC9tZC5jOjE5MzI6XHRcdFx0aWYgKCFiYWRibG9ja3Nfc2V0KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBzZWN0b3IsIGNvdW50LCAxKSlcbmRyaXZlcnMvbWQvbWQuYy0xOTMzLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MzUtXHR9IGVsc2UgaWYgKHNiLVx1MDAzZWJibG9nX29mZnNldCAhPSAwKVxuZHJpdmVycy9tZC9tZC5jOjE5MzY6XHRcdHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gMDtcbmRyaXZlcnMvbWQvbWQuYy0xOTM3LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yMTk3PXN0YXRpYyB2b2lkIHN1cGVyXzFfc3luYyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMjI4My1cbmRyaXZlcnMvbWQvbWQuYzoyMjg0Olx0aWYgKHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50ID09IDApXG5kcml2ZXJzL21kL21kLmMtMjI4NS1cdFx0LyogTm90aGluZyB0byBkbyBmb3IgYmFkIGJsb2NrcyovIDtcbi0tXG5kcml2ZXJzL21kL21kLmMtMjI4OS1cdGVsc2Uge1xuZHJpdmVycy9tZC9tZC5jOjIyOTA6XHRcdHN0cnVjdCBiYWRibG9ja3MgKmJiID0gXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3M7XG5kcml2ZXJzL21kL21kLmMtMjI5MS1cdFx0X19sZTY0ICpiYnAgPSAoX19sZTY0ICopcGFnZV9hZGRyZXNzKHJkZXYtXHUwMDNlYmJfcGFnZSk7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTI0MzQ9c3VwZXJfMV9hbGxvd19uZXdfb2Zmc2V0KHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuLS1cbmRyaXZlcnMvbWQvbWQuYy0yNDUwLVx0ICogMzZLIGJleW9uZCBzdGFydCBvZiBzdXBlcmJsb2NrXG5kcml2ZXJzL21kL21kLmM6MjQ1MTpcdCAqIGJleW9uZCBlbmQgb2YgYmFkYmxvY2tzXG5kcml2ZXJzL21kL21kLmMtMjQ1Mi1cdCAqIGJleW9uZCB3cml0ZS1pbnRlbnQgYml0bWFwXG4tLVxuZHJpdmVycy9tZC9tZC5jLTI0NjYtXG5kcml2ZXJzL21kL21kLmM6MjQ2NzpcdGlmIChyZGV2LVx1MDAzZWJhZGJsb2Nrcy5zZWN0b3IgJiM0MzsgcmRldi1cdTAwM2ViYWRibG9ja3Muc2l6ZSBcdTAwM2UgbmV3X29mZnNldClcbmRyaXZlcnMvbWQvbWQuYy0yNDY4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL21kLmM9MjU1OD1zdGF0aWMgaW50IGJpbmRfcmRldl90b19hcnJheShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMjYyNC1cdHJkZXYtXHUwMDNlc3lzZnNfc3RhdGUgPSBzeXNmc19nZXRfZGlyZW50X3NhZmUocmRldi1cdTAwM2Vrb2JqLnNkLCBcJiMzNDtzdGF0ZVwmIzM0Oyk7XG5kcml2ZXJzL21kL21kLmM6MjYyNTpcdHJkZXYtXHUwMDNlc3lzZnNfdW5hY2tfYmFkYmxvY2tzID1cbmRyaXZlcnMvbWQvbWQuYy0yNjI2LVx0XHRzeXNmc19nZXRfZGlyZW50X3NhZmUocmRldi1cdTAwM2Vrb2JqLnNkLCBcJiMzNDt1bmFja25vd2xlZGdlZF9iYWRfYmxvY2tzXCYjMzQ7KTtcbmRyaXZlcnMvbWQvbWQuYzoyNjI3Olx0cmRldi1cdTAwM2VzeXNmc19iYWRibG9ja3MgPVxuZHJpdmVycy9tZC9tZC5jLTI2MjgtXHRcdHN5c2ZzX2dldF9kaXJlbnRfc2FmZShyZGV2LVx1MDAzZWtvYmouc2QsIFwmIzM0O2JhZF9ibG9ja3NcJiMzNDspO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0yNjYwPXN0YXRpYyB2b2lkIG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0yNjcwLVx0c3lzZnNfcHV0KHJkZXYtXHUwMDNlc3lzZnNfc3RhdGUpO1xuZHJpdmVycy9tZC9tZC5jOjI2NzE6XHRzeXNmc19wdXQocmRldi1cdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jOjI2NzI6XHRzeXNmc19wdXQocmRldi1cdTAwM2VzeXNmc19iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jLTI2NzMtXHRyZGV2LVx1MDAzZXN5c2ZzX3N0YXRlID0gTlVMTDtcbmRyaXZlcnMvbWQvbWQuYzoyNjc0Olx0cmRldi1cdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MgPSBOVUxMO1xuZHJpdmVycy9tZC9tZC5jOjI2NzU6XHRyZGV2LVx1MDAzZXN5c2ZzX2JhZGJsb2NrcyA9IE5VTEw7XG5kcml2ZXJzL21kL21kLmM6MjY3NjpcdHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50ID0gMDtcbmRyaXZlcnMvbWQvbWQuYy0yNjc3LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yNzkyPXZvaWQgbWRfdXBkYXRlX3NiKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmb3JjZV9jaGFuZ2UpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTI3OTYtXHRpbnQgbm9zcGFyZXMgPSAwO1xuZHJpdmVycy9tZC9tZC5jOjI3OTc6XHRpbnQgYW55X2JhZGJsb2Nrc19jaGFuZ2VkID0gMDtcbmRyaXZlcnMvbWQvbWQuYy0yNzk4LVx0aW50IHJldCA9IC0xO1xuLS1cbmRyaXZlcnMvbWQvbWQuYy0yODUwLVx0XHRcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpIHtcbmRyaXZlcnMvbWQvbWQuYzoyODUxOlx0XHRcdFx0aWYgKHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNoYW5nZWQpIHtcbmRyaXZlcnMvbWQvbWQuYzoyODUyOlx0XHRcdFx0XHRyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkID0gMDtcbmRyaXZlcnMvbWQvbWQuYzoyODUzOlx0XHRcdFx0XHRhY2tfYWxsX2JhZGJsb2NrcyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcyk7XG5kcml2ZXJzL21kL21kLmMtMjg1NC1cdFx0XHRcdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYy0yOTE0LVx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikge1xuZHJpdmVycy9tZC9tZC5jOjI5MTU6XHRcdGlmIChyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkKVxuZHJpdmVycy9tZC9tZC5jOjI5MTY6XHRcdFx0YW55X2JhZGJsb2Nrc19jaGFuZ2VkJiM0MzsmIzQzOztcbmRyaXZlcnMvbWQvbWQuYy0yOTE3LVx0XHRpZiAodGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbi0tXG5kcml2ZXJzL21kL21kLmMtMjk0MS1cdFx0XHRyZGV2LVx1MDAzZXNiX2V2ZW50cyA9IG1kZGV2LVx1MDAzZWV2ZW50cztcbmRyaXZlcnMvbWQvbWQuYzoyOTQyOlx0XHRcdGlmIChyZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaXplKSB7XG5kcml2ZXJzL21kL21kLmMtMjk0My1cdFx0XHRcdG1kX3dyaXRlX21ldGFkYXRhKG1kZGV2LCByZGV2LFxuZHJpdmVycy9tZC9tZC5jOjI5NDQ6XHRcdFx0XHRcdFx0ICByZGV2LVx1MDAzZWJhZGJsb2Nrcy5zZWN0b3IsXG5kcml2ZXJzL21kL21kLmM6Mjk0NTpcdFx0XHRcdFx0XHQgIHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNpemUgXHUwMDNjXHUwMDNjIDksXG5kcml2ZXJzL21kL21kLmMtMjk0Ni1cdFx0XHRcdFx0XHQgIHJkZXYtXHUwMDNlYmJfcGFnZSwgMCk7XG5kcml2ZXJzL21kL21kLmM6Mjk0NzpcdFx0XHRcdHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNpemUgPSAwO1xuZHJpdmVycy9tZC9tZC5jLTI5NDgtXHRcdFx0fVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0yOTczLVxuZHJpdmVycy9tZC9tZC5jOjI5NzQ6XHRcdGlmIChhbnlfYmFkYmxvY2tzX2NoYW5nZWQpXG5kcml2ZXJzL21kL21kLmM6Mjk3NTpcdFx0XHRhY2tfYWxsX2JhZGJsb2NrcyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcyk7XG5kcml2ZXJzL21kL21kLmMtMjk3Ni1cdFx0Y2xlYXJfYml0KEJsb2NrZWRCYWRCbG9ja3MsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0zMDM4PXN0YXRlX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTMwNDUtXHQgICAgKCF0ZXN0X2JpdChFeHRlcm5hbEJibCwgXHUwMDI2ZmxhZ3MpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5jOjMwNDY6XHQgICAgcmRldi1cdTAwM2ViYWRibG9ja3MudW5hY2tlZF9leGlzdCkpXG5kcml2ZXJzL21kL21kLmMtMzA0Ny1cdFx0bGVuICYjNDM7PSBzcHJpbnRmKHBhZ2UmIzQzO2xlbiwgXCYjMzQ7ZmF1bHR5JXNcJiMzNDssIHNlcCk7XG4tLVxuZHJpdmVycy9tZC9tZC5jLTMwNTQtXHRpZiAodGVzdF9iaXQoQmxvY2tlZCwgXHUwMDI2ZmxhZ3MpIHx8XG5kcml2ZXJzL21kL21kLmM6MzA1NTpcdCAgICAocmRldi1cdTAwM2ViYWRibG9ja3MudW5hY2tlZF9leGlzdFxuZHJpdmVycy9tZC9tZC5jLTMwNTYtXHQgICAgIFx1MDAyNlx1MDAyNiAhdGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZmbGFncykpKVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0zMDgwPXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTMxNDItXHRcdCAgICAhdGVzdF9iaXQoRXh0ZXJuYWxCYmwsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5jOjMxNDM6XHRcdCAgICByZGV2LVx1MDAzZWJhZGJsb2Nrcy51bmFja2VkX2V4aXN0KSB7XG5kcml2ZXJzL21kL21kLmM6MzE0NDpcdFx0XHQvKiBtZXRhZGF0YSBoYW5kbGVyIGRvZXNuJiMzOTt0IHVuZGVyc3RhbmQgYmFkYmxvY2tzLFxuZHJpdmVycy9tZC9tZC5jLTMxNDUtXHRcdFx0ICogc28gd2UgbmVlZCB0byBmYWlsIHRoZSBkZXZpY2Vcbi0tXG5kcml2ZXJzL21kL21kLmMtMzIzNS1cdFx0c2V0X2JpdChFeHRlcm5hbEJibCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL21kL21kLmM6MzIzNjpcdFx0cmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQgPSAwO1xuZHJpdmVycy9tZC9tZC5jLTMyMzctXHRcdGVyciA9IDA7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTM2MDg9c3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbmRyaXZlcnMvbWQvbWQuYy0zNjA5LXtcbmRyaXZlcnMvbWQvbWQuYzozNjEwOlx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCAwKTtcbmRyaXZlcnMvbWQvbWQuYy0zNjExLX1cbmRyaXZlcnMvbWQvbWQuYz0zNjEyPXN0YXRpYyBzc2l6ZV90IGJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxuZHJpdmVycy9tZC9tZC5jLTM2MTMte1xuZHJpdmVycy9tZC9tZC5jOjM2MTQ6XHRpbnQgcnYgPSBiYWRibG9ja3Nfc3RvcmUoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMCk7XG5kcml2ZXJzL21kL21kLmMtMzYxNS1cdC8qIE1heWJlIHRoYXQgYWNrIHdhcyBhbGwgd2UgbmVlZGVkICovXG4tLVxuZHJpdmVycy9tZC9tZC5jPTM2MjM9c3RhdGljIHNzaXplX3QgdWJiX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG5kcml2ZXJzL21kL21kLmMtMzYyNC17XG5kcml2ZXJzL21kL21kLmM6MzYyNTpcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XG5kcml2ZXJzL21kL21kLmMtMzYyNi19XG5kcml2ZXJzL21kL21kLmM9MzYyNz1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG5kcml2ZXJzL21kL21kLmMtMzYyOC17XG5kcml2ZXJzL21kL21kLmM6MzYyOTpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMSk7XG5kcml2ZXJzL21kL21kLmMtMzYzMC19XG4tLVxuZHJpdmVycy9tZC9tZC5jPTM3OTE9aW50IG1kX3JkZXZfaW5pdChzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMzgxMy1cdCAqL1xuZHJpdmVycy9tZC9tZC5jOjM4MTQ6XHRyZXR1cm4gYmFkYmxvY2tzX2luaXQoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIDApO1xuZHJpdmVycy9tZC9tZC5jLTM4MTUtfVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDU1MT1FWFBPUlRfU1lNQk9MKG1kX2ZpbmlzaF9yZXNoYXBlKTtcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA1NTUtLyogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUgKi9cbmRyaXZlcnMvbWQvbWQuYzoxMDU1Njpib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3QgcywgaW50IHNlY3RvcnMsXG5kcml2ZXJzL21kL21kLmMtMTA1NTctXHRcdFx0aW50IGlzX25ldylcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA1NjEtXHQvKlxuZHJpdmVycy9tZC9tZC5jOjEwNTYyOlx0ICogUmVjb3JkaW5nIG5ldyBiYWRibG9ja3MgZm9yIGZhdWx0eSByZGV2IHdpbGwgZm9yY2UgdW5uZWNlc3NhcnlcbmRyaXZlcnMvbWQvbWQuYy0xMDU2My1cdCAqIHN1cGVyIGJsb2NrIHVwZGF0aW5nLiBUaGlzIGlzIGZyYWdpbGUgZm9yIGV4dGVybmFsIG1hbmFnZW1lbnQgYmVjYXVzZVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0xMDU3NS1cbmRyaXZlcnMvbWQvbWQuYzoxMDU3NjpcdGlmICghYmFkYmxvY2tzX3NldChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycywgMCkpIHtcbmRyaXZlcnMvbWQvbWQuYy0xMDU3Ny1cdFx0LypcbmRyaXZlcnMvbWQvbWQuYzoxMDU3ODpcdFx0ICogTWFyayB0aGUgZGlzayBhcyBGYXVsdHkgd2hlbiBzZXR0aW5nIGJhZGJsb2NrcyBmYWlscyxcbmRyaXZlcnMvbWQvbWQuYy0xMDU3OS1cdFx0ICogb3RoZXJ3aXNlLCBiYWQgc2VjdG9ycyBtYXkgYmUgcmVhZC5cbi0tXG5kcml2ZXJzL21kL21kLmMtMTA1ODYtXHRpZiAodGVzdF9iaXQoRXh0ZXJuYWxCYmwsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9tZC9tZC5jOjEwNTg3Olx0XHRzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi1cdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jLTEwNTg4LVx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXHUwMDNlc3lzZnNfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYy0xMDU5My19XG5kcml2ZXJzL21kL21kLmM6MTA1OTQ6RVhQT1JUX1NZTUJPTF9HUEwocmRldl9zZXRfYmFkYmxvY2tzKTtcbmRyaXZlcnMvbWQvbWQuYy0xMDU5NS1cbmRyaXZlcnMvbWQvbWQuYzoxMDU5Njp2b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcbmRyaXZlcnMvbWQvbWQuYy0xMDU5Ny1cdFx0XHQgIGludCBpc19uZXcpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNjAzLVxuZHJpdmVycy9tZC9tZC5jOjEwNjA0Olx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMpKVxuZHJpdmVycy9tZC9tZC5jLTEwNjA1LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNjA3LVx0aWYgKHRlc3RfYml0KEV4dGVybmFsQmJsLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvbWQuYzoxMDYwODpcdFx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXHUwMDNlc3lzZnNfYmFkYmxvY2tzKTtcbmRyaXZlcnMvbWQvbWQuYy0xMDYwOS19XG5kcml2ZXJzL21kL21kLmM6MTA2MTA6RVhQT1JUX1NZTUJPTF9HUEwocmRldl9jbGVhcl9iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jLTEwNjExLVxuLS1cbmRyaXZlcnMvbWQvbWQuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG5kcml2ZXJzL21kL21kLmg6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcdTAwM2VcbmRyaXZlcnMvbWQvbWQuaC0xNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21kL21kLmg9MTM0PXN0cnVjdCBtZF9yZGV2IHtcbi0tXG5kcml2ZXJzL21kL21kLmgtMjE0LVx0LyogaGFuZGxlIGZvciAmIzM5O3VuYWNrbm93bGVkZ2VkX2JhZF9ibG9ja3MmIzM5OyBzeXNmcyBkZW50cnkgKi9cbmRyaXZlcnMvbWQvbWQuaDoyMTU6XHRzdHJ1Y3Qga2VybmZzX25vZGUgKnN5c2ZzX3VuYWNrX2JhZGJsb2NrcztcbmRyaXZlcnMvbWQvbWQuaC0yMTYtXHQvKiBoYW5kbGUgZm9yICYjMzk7YmFkX2Jsb2NrcyYjMzk7IHN5c2ZzIGRlbnRyeSAqL1xuZHJpdmVycy9tZC9tZC5oOjIxNzpcdHN0cnVjdCBrZXJuZnNfbm9kZSAqc3lzZnNfYmFkYmxvY2tzO1xuZHJpdmVycy9tZC9tZC5oOjIxODpcdHN0cnVjdCBiYWRibG9ja3MgYmFkYmxvY2tzO1xuZHJpdmVycy9tZC9tZC5oLTIxOS1cbi0tXG5kcml2ZXJzL21kL21kLmg9Mjk5PXN0YXRpYyBpbmxpbmUgaW50IGlzX2JhZGJsb2NrKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmRyaXZlcnMvbWQvbWQuaC0zMDEte1xuZHJpdmVycy9tZC9tZC5oOjMwMjpcdGlmICh1bmxpa2VseShyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jb3VudCkpIHtcbmRyaXZlcnMvbWQvbWQuaDozMDM6XHRcdGludCBydiA9IGJhZGJsb2Nrc19jaGVjayhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcmRldi1cdTAwM2VkYXRhX29mZnNldCAmIzQzOyBzLFxuZHJpdmVycy9tZC9tZC5oLTMwNC1cdFx0XHRcdFx0c2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmg9MzEzPXN0YXRpYyBpbmxpbmUgaW50IHJkZXZfaGFzX2JhZGJsb2NrKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLFxuLS1cbmRyaXZlcnMvbWQvbWQuaC0zMjEtXG5kcml2ZXJzL21kL21kLmg6MzIyOmV4dGVybiBib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3QgcywgaW50IHNlY3RvcnMsXG5kcml2ZXJzL21kL21kLmgtMzIzLVx0XHRcdCAgICAgICBpbnQgaXNfbmV3KTtcbmRyaXZlcnMvbWQvbWQuaDozMjQ6ZXh0ZXJuIHZvaWQgcmRldl9jbGVhcl9iYWRibG9ja3Moc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIGludCBzZWN0b3JzLFxuZHJpdmVycy9tZC9tZC5oLTMyNS1cdFx0XHRcdCBpbnQgaXNfbmV3KTtcbi0tXG5kcml2ZXJzL21kL21kLmg9MTA3Mz1zdGF0aWMgaW5saW5lIGJvb2wgcmRldl9ibG9ja2VkKHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuaC0xMDg5LVxuZHJpdmVycy9tZC9tZC5oOjEwOTA6XHQvKiByZGV2IGlzIGJsb2NrZWQgYnkgYmFkYmxvY2tzLiAqL1xuZHJpdmVycy9tZC9tZC5oLTEwOTEtXHRpZiAodGVzdF9iaXQoQmxvY2tlZEJhZEJsb2NrcywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tLVxuZHJpdmVycy9tZC9yYWlkMS0xMC5jPTI3OD1zdGF0aWMgaW5saW5lIGJvb2wgcmFpZDFfc2hvdWxkX3JlYWRfZmlyc3Qoc3RydWN0IG1kZGV2ICptZGRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjkzLSAqIGJpbyB3aXRoIFJFUV9SQUhFQUQgb3IgUkVRX05PV0FJVCBjYW4gZmFpbCBhdCBhbnl0aW1lLCBiZWZvcmUgc3VjaCBJTyBpc1xuZHJpdmVycy9tZC9yYWlkMS0xMC5jOjI5NDogKiBzdWJtaXR0ZWQgdG8gdGhlIHVuZGVybHlpbmcgZGlza3MsIGhlbmNlIGRvbiYjMzk7dCByZWNvcmQgYmFkYmxvY2tzIG9yIHJldHJ5XG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjk1LSAqIGluIHRoaXMgY2FzZS5cbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MjE0MD1zdGF0aWMgaW50IHIxX3N5bmNfcGFnZV9pbyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yMTUzLVx0LyogbmVlZCB0byByZWNvcmQgYW4gZXJyb3IgLSBlaXRoZXIgZm9yIHRoZSBibG9jayBvciB0aGUgZGV2aWNlICovXG5kcml2ZXJzL21kL3JhaWQxLmM6MjE1NDpcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzZWN0b3IsIHNlY3RvcnMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTIxNTUtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MjE1OD1zdGF0aWMgaW50IGZpeF9zeW5jX3JlYWRfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTIyMzItXHRcdFx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9tZC9yYWlkMS5jOjIyMzM6XHRcdFx0XHRpZiAoIXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzZWN0LCBzLCAwKSlcbmRyaXZlcnMvbWQvcmFpZDEuYy0yMjM0LVx0XHRcdFx0XHRhYm9ydCA9IDE7XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI0MzI9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzItXHRcdFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVx1MDAzZW1pcnJvcnNbcmVhZF9kaXNrXS5yZGV2O1xuZHJpdmVycy9tZC9yYWlkMS5jOjI0NzM6XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3QsIHMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzQtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI1MTc9c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMjUzOC1cbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTM5Olx0aWYgKHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0IFx1MDAzYyAwKVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1NDAtXHRcdGJsb2NrX3NlY3RvcnMgPSBsYnM7XG5kcml2ZXJzL21kL3JhaWQxLmMtMjU0MS1cdGVsc2VcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTQyOlx0XHRibG9ja19zZWN0b3JzID0gcm91bmR1cCgxIFx1MDAzY1x1MDAzYyByZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaGlmdCwgbGJzKTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTQzLVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTcxLVx0XHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9yYWlkMS5jOjI1NzI6XHRcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3Rvciwgc2VjdG9ycywgMCkpIHtcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTczLVx0XHRcdC8qXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI1ODg9c3RhdGljIHZvaWQgaGFuZGxlX3N5bmNfd3JpdGVfZmluaXNoZWQoc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1OTgtXHRcdCAgICB0ZXN0X2JpdChSMUJJT19NYWRlR29vZCwgXHUwMDI2cjFfYmlvLVx1MDAzZXN0YXRlKSlcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTk5Olx0XHRcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cdTAwM2VzZWN0b3IsIHMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDAtXHRcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDEtXHRcdCAgICB0ZXN0X2JpdChSMUJJT19Xcml0ZUVycm9yLCBcdTAwMjZyMV9iaW8tXHUwMDNlc3RhdGUpKVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MDI6XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cdTAwM2VzZWN0b3IsIHMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDMtXHR9XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI2MDg9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjE1LVx0XHRcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cdTAwM2VtaXJyb3JzW21dLnJkZXY7XG5kcml2ZXJzL21kL3JhaWQxLmM6MjYxNjpcdFx0XHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhyZGV2LFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MTctXHRcdFx0XHRcdCAgICAgcjFfYmlvLVx1MDAzZXNlY3Rvcixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MjgwMT1zdGF0aWMgc2VjdG9yX3QgcmFpZDFfc3luY19yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9ucixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk3My1cdFx0XHRcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cdTAwM2VtaXJyb3JzW2ldLnJkZXY7XG5kcml2ZXJzL21kL3JhaWQxLmM6Mjk3NDpcdFx0XHRcdG9rID0gcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3Rvcl9ucixcbmRyaXZlcnMvbWQvcmFpZDEuYy0yOTc1LVx0XHRcdFx0XHRcdFx0bWluX2JhZCwgMFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yOTgyLVx0XHRpZiAoIW9rKVxuZHJpdmVycy9tZC9yYWlkMS5jOjI5ODM6XHRcdFx0LyogQ2Fubm90IHJlY29yZCB0aGUgYmFkYmxvY2tzLCBtZF9lcnJvciBoYXMgc2V0IElOVFIsXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk4NC1cdFx0XHQgKiBhYm9ydCB0aGUgcmVzeW5jLlxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MjQ4Nz1zdGF0aWMgdm9pZCBmaXhfcmVjb3ZlcnlfcmVhZF9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjU0Mi1cdFx0XHQgKi9cbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjU0MzpcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgYWRkciwgcywgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDQtXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNTQ4LVx0XHRcdFx0YWRkciA9IHIxMF9iaW8tXHUwMDNlZGV2c1sxXS5hZGRyICYjNDM7IHNlY3Q7XG5kcml2ZXJzL21kL3JhaWQxMC5jOjI1NDk6XHRcdFx0XHRvayA9IHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2MiwgYWRkciwgcywgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NTAtXHRcdFx0XHRpZiAoIW9rKSB7XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNjA2PXN0YXRpYyBpbnQgcjEwX3N5bmNfcGFnZV9pbyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjYyMS1cdC8qIG5lZWQgdG8gcmVjb3JkIGFuIGVycm9yIC0gZWl0aGVyIGZvciB0aGUgYmxvY2sgb3IgdGhlIGRldmljZSAqL1xuZHJpdmVycy9tZC9yYWlkMTAuYzoyNjIyOlx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3Rvciwgc2VjdG9ycywgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI2MjMtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTI2MzQ9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNjk3LVxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNjk4Olx0XHRcdGlmICghcmRldl9zZXRfYmFkYmxvY2tzKFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNjk5LVx0XHRcdFx0ICAgIHJkZXYsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNzg5PXN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTAtXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4MTE6XHRpZiAocmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQgXHUwMDNjIDApXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTItXHRcdGJsb2NrX3NlY3RvcnMgPSBsYnM7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTMtXHRlbHNlXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4MTQ6XHRcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXHUwMDNjXHUwMDNjIHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xuZHJpdmVycy9tZC9yYWlkMTAuYy0yODE1LVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgzNS1cdFx0aWYgKHN1Ym1pdF9iaW9fd2FpdCh3YmlvKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjgzNjpcdFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgzNy1cdFx0XHQvKlxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9Mjg5MD1zdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfY29tcGxldGVkKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkwOS1cdFx0XHRpZiAoIXIxMF9iaW8tXHUwMDNlZGV2c1ttXS5iaW8tXHUwMDNlYmlfc3RhdHVzKVxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTEwOlx0XHRcdFx0cmRldl9jbGVhcl9iYWRibG9ja3MoXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MTEtXHRcdFx0XHRcdHJkZXYsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE0LVx0XHRcdGVsc2VcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjkxNTpcdFx0XHRcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE2LVx0XHRcdFx0XHRcdCAgIHIxMF9iaW8tXHUwMDNlZGV2c1ttXS5hZGRyLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkyMy1cdFx0XHRpZiAoIXIxMF9iaW8tXHUwMDNlZGV2c1ttXS5yZXBsX2Jpby1cdTAwM2ViaV9zdGF0dXMpXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5MjQ6XHRcdFx0XHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkyNS1cdFx0XHRcdFx0cmRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MjgtXHRcdFx0ZWxzZVxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTI5Olx0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MzAtXHRcdFx0XHRcdFx0ICAgcjEwX2Jpby1cdTAwM2VkZXZzW21dLmFkZHIsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTQwLVx0XHRcdGlmIChiaW8gPT0gSU9fTUFERV9HT09EKSB7XG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5NDE6XHRcdFx0XHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjk0Mi1cdFx0XHRcdFx0cmRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5NTMtXHRcdFx0aWYgKHJkZXYgXHUwMDI2XHUwMDI2IGJpbyA9PSBJT19NQURFX0dPT0QpIHtcbmRyaXZlcnMvbWQvcmFpZDEwLmM6Mjk1NDpcdFx0XHRcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTU1LVx0XHRcdFx0XHRyZGV2LFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzE2OT1zdGF0aWMgc2VjdG9yX3QgcmFpZDEwX3N5bmNfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0zNDcxLVx0XHRcdFx0XHQgICAgIXRlc3RfYml0KEluX3N5bmMsIFx1MDAyNm1yZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzQ3MjpcdFx0XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MoXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzMtXHRcdFx0XHRcdFx0XHRtcmRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzYtXHRcdFx0XHRcdGlmIChtcmVwbGFjZSlcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzQ3NzpcdFx0XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MoXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzgtXHRcdFx0XHRcdFx0XHRtcmVwbGFjZSxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9MjcyNT1zdGF0aWMgdm9pZCByYWlkNV9lbmRfcmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKiBiaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMjgzOS1cdFx0XHRpZiAoIShzZXRfYmFkIFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkpXG5kcml2ZXJzL21kL3JhaWQ1LmM6Mjg0MDpcdFx0XHRcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzaC1cdTAwM2VzZWN0b3IsXG5kcml2ZXJzL21kL3JhaWQ1LmMtMjg0MS1cdFx0XHRcdFx0XHQgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCk7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jPTM2MDE9aGFuZGxlX2ZhaWxlZF9zdHJpcGUoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzYxNy1cdFx0XHRpZiAocmRldikge1xuZHJpdmVycy9tZC9yYWlkNS5jOjM2MTg6XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldixcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNjE5LVx0XHRcdFx0XHRcdCAgIHNoLVx1MDAzZXNlY3Rvcixcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9MzcwMD1oYW5kbGVfZmFpbGVkX3N5bmMoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzcyOC1cdFx0XHQgICAgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKVxuZHJpdmVycy9tZC9yYWlkNS5jOjM3Mjk6XHRcdFx0ICAgIFx1MDAyNlx1MDAyNiAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNoLVx1MDAzZXNlY3RvcixcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNzMwLVx0XHRcdFx0XHRcdCAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzczNi1cdFx0XHQgICAgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKVxuZHJpdmVycy9tZC9yYWlkNS5jOjM3Mzc6XHRcdFx0ICAgIFx1MDAyNlx1MDAyNiAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNoLVx1MDAzZXNlY3RvcixcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNzM4LVx0XHRcdFx0XHRcdCAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NDkyNj1zdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpXG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jLTUyODItXHRcdFx0XHRyZGV2ID0gY29uZi1cdTAwM2VkaXNrc1tpXS5yZGV2O1xuZHJpdmVycy9tZC9yYWlkNS5jOjUyODM6XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2gtXHUwMDNlc2VjdG9yLFxuZHJpdmVycy9tZC9yYWlkNS5jLTUyODQtXHRcdFx0XHRcdFx0ICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy01Mjg4LVx0XHRcdFx0cmRldiA9IGNvbmYtXHUwMDNlZGlza3NbaV0ucmRldjtcbmRyaXZlcnMvbWQvcmFpZDUuYzo1Mjg5Olx0XHRcdFx0cmRldl9jbGVhcl9iYWRibG9ja3MocmRldiwgc2gtXHUwMDNlc2VjdG9yLFxuZHJpdmVycy9tZC9yYWlkNS5jLTUyOTAtXHRcdFx0XHRcdFx0ICAgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCk7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jLTUyOTctXHRcdFx0XHRcdHJkZXYgPSBjb25mLVx1MDAzZWRpc2tzW2ldLnJkZXY7XG5kcml2ZXJzL21kL3JhaWQ1LmM6NTI5ODpcdFx0XHRcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKHJkZXYsIHNoLVx1MDAzZXNlY3RvcixcbmRyaXZlcnMvbWQvcmFpZDUuYy01Mjk5LVx0XHRcdFx0XHRcdCAgICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgYmFkYmxvY2tzYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBicm9hZGx5IHRoZSBgYmFkYmxvY2tzYCBjb2RlIGlzIHV0aWxpemVkLiBJdCYjMzk7cyBub3QganVzdCBhIHN0YW5kYWxvbmUgdXRpbGl0eTsgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHNldmVyYWwgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIEkga25vdyBmb3Igc3VyZSBpdCYjMzk7cyB1c2VkIGJ5IHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBudWxsIGJsb2NrIGRldmljZSBmb3IgdGVzdGluZy4gVGhlbiwgaXQmIzM5O3MgYWxzbyBmdW5kYW1lbnRhbCB0byB0aGUgUkFJRCBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIGBtZGAsIHNwZWNpZmljYWxseSBSQUlEMSwgUkFJRDEwLCBhbmQgUkFJRDUuIFRoYXQgbWFrZXMgc2Vuc2UsIGNoZWNraW5nIHRoZSB1bmRlcmx5aW5nIGRyaXZlcyBpcyBjcnVjaWFsIGZvciBSQUlEIGNvbnNpc3RlbmN5LiBJIGFsc28gcmVjYWxsIGl0IGJlaW5nIHJlbGV2YW50IHRvIE5WRElNTSBkZXZpY2VzOyB0aGUgYG52ZGltbWAgZHJpdmVyLgoKR2l2ZW4gdGhpcyBicmVhZHRoIG9mIHVzYWdlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoZXNlIGZlYXR1cmVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHNwZWNpZmljIHN5bWJvbHMuIEkgYmVsaWV2ZSB0aGV5JiMzOTtyZTogYEJMS19ERVZfTlVMTF9CTEtgIGZvciB0aGUgbnVsbCBibG9jayBkZXZpY2UsIGFuZCBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYW5kIGBNRF9SQUlENDU2YCBmb3IgdGhlIHJlc3BlY3RpdmUgUkFJRCBsZXZlbHMuIEZvciBOVkRJTU0sIHRoZXJlIGFyZSBgQlRUYCwgd2hpY2ggSSB0aGluayBpcyB0aGUgQmxvY2sgVHJhbnNsYXRpb24gVGFibGUsIGFuZCBgQkxLX0RFVl9QTUVNYCwgcmVwcmVzZW50aW5nIHBlcnNpc3RlbnQgbWVtb3J5LgoKVG8gZGV0ZXJtaW5lIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGNvcnJlY3RseSBkZWZpbmVkIGFuZCBwZXJoYXBzIGV4cGxvcmUgdGhlIGRlcGVuZGVuY2llcyBmdXJ0aGVyLCBJIHdpbGwgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGJsb2NrL0tjb25maWdgIGFuZCBwb3RlbnRpYWxseSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBzaW5jZSBgbnVsbF9ibGtgIHNlZW1zIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgY29uZmlndXJlZCBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy01LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTExLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUyNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgdGFzazoKCioqSW52ZXN0aWdhdGluZyBNRCBSQUlEIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlci4gV2hlcmUgd291bGQgSSBmaW5kIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IEtjb25maWcgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBnbyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQgd2hlcmUgd291bGQgdGhlIE1EIGRyaXZlciYjMzk7cyBLY29uZmlnIHJlc2lkZT8gTG9naWNhbGx5LCBpbiBgZHJpdmVycy9tZC9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBwYXRoLiBPa2F5LCBsZXQgbWUgZ28gaGF2ZSBhIGxvb2sgaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIGBDT05GSUdfTURfUkFJRDBgLCBgQ09ORklHX01EX1JBSUQxYCwgZXRjLiwgYW5kIHByb2JhYmx5IHNvbWUgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNodW5rIHNpemVzLCBmYXVsdCB0b2xlcmFuY2UsIGFuZCB0aGUgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1EX1JBSUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9OTE9Y29uZmlnIE1EX0xJTkVBUlxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL21kL0tjb25maWc6MTA0OmNvbmZpZyBNRF9SQUlEMFxuZHJpdmVycy9tZC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMCAoc3RyaXBpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTIzLVxuZHJpdmVycy9tZC9LY29uZmlnOjEyNDpjb25maWcgTURfUkFJRDFcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTEgKG1pcnJvcmluZykgbW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDUtXG5kcml2ZXJzL21kL0tjb25maWc6MTQ2OmNvbmZpZyBNRF9SQUlEMTBcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjQtXG5kcml2ZXJzL21kL0tjb25maWc6MTY1OmNvbmZpZyBNRF9SQUlENDU2XG5kcml2ZXJzL21kL0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC00L1JBSUQtNS9SQUlELTYgbW9kZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAxMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRlbHZpbmcgaW50byBCYWRibG9ja3MgYW5kIGl0cyBQbGFjZSBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCAqYmFkYmxvY2tzKi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBibG9jayBsYXllciwgbm8gZG91YnQuIEJ1dCBJIG5lZWQgdG8gcmVtZW1iZXIsIGl0JiMzOTtzIG5vdCBzb21lIGlzb2xhdGVkIGNvbmZpZ3VyYXRpb24gc3dpdGNoIGxpa2UgYENPTkZJR19GT09CQVJgLiBJdCYjMzk7cyBtb3JlIG9mIGEgKmNhcGFiaWxpdHkqIHRoYXQgZ2V0cyBpbnRlZ3JhdGVkIGJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGJsb2NrIGRldmljZSBkcml2ZXJzLiBTbywgaXRzIHByZXNlbmNlIG9yIGFic2VuY2UgaXNuJiMzOTt0IGFib3V0IGVuYWJsaW5nIGl0IGdsb2JhbGx5LCBpdCYjMzk7cyBhYm91dCB0aGUgZHJpdmVyICp1c2luZyogaXQgd2hlbiBpdCBtYWtlcyBzZW5zZS4KCkp1c3QgdG8gYmUgc3VyZSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZeKAmXMgYSBjb25maWd1cmF0aW9uIHN5bWJvbCDigJMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19CQURCTE9DS1NgIOKAkyBoYW5naW5nIGFyb3VuZCBzb21ld2hlcmUgaW4gdGhlIGtlcm5lbCBjb25maWcgdGhhdCBwcm92aWRlcyBhIG1vcmUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEdvdHRhIGNoZWNrIHRob3NlIGNvbmZpZyBvcHRpb25zIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT04PW9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4tLVxuYmxvY2svTWFrZWZpbGUtMTItXHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbmJsb2NrL01ha2VmaWxlOjEzOlx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cdFx0XHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCYWRibG9ja3MgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBiYWRibG9ja3NgIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBmaWd1cmVkIG91dC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBgYmFkYmxvY2tzLm9gIG1vZHVsZSBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaW4gYGJsb2NrL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgbWVhbnMgd2UgZG9uJiMzOTt0IGFjdHVhbGx5ICpuZWVkKiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGp1c3QgdG8gZ2V0IGBiYWRibG9ja3Mub2AgaXRzZWxmIGJ1aWx0LiBJdCYjMzk7cyBtb3JlIGFib3V0IGVuc3VyaW5nIHRoYXQgZHJpdmVycyB3aGljaCAqdXNlKiBiYWRibG9ja3MgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uCgpUaGlua2luZyBhYm91dCB3aGljaCBkcml2ZXJzIGFyZSBnb29kIHRlc3QgY2FzZXMsIGBCTEtfREVWX05VTExfQkxLYCBzZWVtcyBwZXJmZWN0LiBUaGUgZmFjdCB0aGF0IGl0IGFsbG93cyBzZXR0aW5nIGJhZGJsb2NrcyB2aWEgY29uZmlnZnMgYW5kIHRoZW4gZG9pbmcgSS9PIHRvIHRyaWdnZXIgYGJhZGJsb2Nrc19jaGVja2AgaXMgcmVhbGx5IGNvbnZlbmllbnQuIGBNRF9SQUlEMWAsIGBNRF9SQUlEMTBgLCBhbmQgYE1EX1JBSUQ0NTZgIGFsc28gbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcywgZ2l2ZW4gdGhlaXIgcG90ZW50aWFsIHRvIGludGVyYWN0IHdpdGggYmFkIGJsb2NrIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIGp1c3Qgc2F3IHRoYXQgYF9iYWRibG9ja3Nfc2V0YCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgIGFyZSBzdGF0aWMhIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuIFRoZSBhY3R1YWwgZXhwb3J0ZWQgb25lcyBhcmUgYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWVzLiBPa2F5LCBnb3QgaXQuIEkmIzM5O2xsIHZlcmlmeSB0aGF0IEkgaGF2ZSB0aGUgY29ycmVjdCBuYW1lcyBvZiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipiYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xMzI1PWludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC19XG5ibG9jay9iYWRibG9ja3MuYzoxMzYxOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzYyLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNzk9Ym9vbCBiYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM4NDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODUtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTQwMD1ib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDAzLX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MDQ6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NsZWFyKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MDUtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTQxMz12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NDAtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ0MTpFWFBPUlRfU1lNQk9MX0dQTChhY2tfYWxsX2JhZGJsb2Nrcyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDQyLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE0NTI9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktfVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ5MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2hvdyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDkxLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE1MDI9c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNi19XG5ibG9jay9iYWRibG9ja3MuYzoxNTI3OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE1NjA9aW50IGJhZGJsb2Nrc19pbml0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZW5hYmxlKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NjMtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTU2NDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfaW5pdCk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTY1LVxuYmxvY2svYmFkYmxvY2tzLmM9MTU2Nj1pbnQgZGV2bV9pbml0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NzEtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTU3MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2luaXRfYmFkYmxvY2tzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NzMtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTU3OD12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1ODctfVxuYmxvY2svYmFkYmxvY2tzLmM6MTU4ODpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzgzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDg2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEJhZGJsb2NrcyBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV2aXNlIGEgZnV6emluZyBzdHJhdGVneSBmb3IgdGhlIHJlY2VudCBgYmFkYmxvY2tzYCBjb2RlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZpeGVzIGZvciBpbnRlZ2VyIG92ZXJmbG93cywgc2hpZnQgdmFsdWVzLCBhbmQgcm91bmRpbmcgaXNzdWVzIGFyZSByb2J1c3QsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgZ25hcmx5IGVkZ2UgY2FzZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGNlbnRlciBhcm91bmQgdGhlIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgIGZ1bmN0aW9ucy4gV2hpbGUgYF9iYWRibG9ja3Nfc2V0YCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgIGFyZSBzdGF0aWMsIHRoZXkgY291bGQgc3RpbGwgYmUgdGFyZ2V0ZWQgaWYgdGhlaXIgZGVidWcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiBJJiMzOTtsbCBpbmNsdWRlIGJvdGggc3RhdGljIGFuZCBleHBvcnRlZCBmdW5jdGlvbiBuYW1lcyBpbiBteSBmb2N1cyBsaXN0LgoKSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBob3cgYGJhZGJsb2Nrc19zdG9yZWAgaXMgdXNlZCwgYXMgaXQgcGFyc2VzIHVzZXIgaW5wdXQuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgYG51bGxfYmxrYCBkaXJlY3RseSBjYWxscyBgYmFkYmxvY2tzX3NldGAgYW5kIGBiYWRibG9ja3NfY2xlYXJgLCBieXBhc3NpbmcgYGJhZGJsb2Nrc19zdG9yZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdGUgZm9yIGNvdmVyYWdlLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGNvcmUgZnVuY3Rpb25zIEkgbWVudGlvbmVkOiBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYF9iYWRibG9ja3Nfc2V0YCwgYW5kIGBfYmFkYmxvY2tzX2NsZWFyYC4KCkkgYWxzbyBjaGVja2VkIHRoZSBwYXRjaCBpdHNlbGYsIHdoaWNoIGNsZWFybHkgYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3dzLCBpbnRyb2R1Y2VzIGJldHRlciBzaGlmdCB2YWx1ZSBoYW5kbGluZywgYW5kIGNvcnJlY3RzIHRoZSByb3VuZGluZyBsb2dpYyBieSB1dGlsaXppbmcgYHJvdW5kX2Rvd25gIGFuZCBgcm91bmRfdXBgIHByb3Blcmx5LiBJIHNlZSBjaGVja3Mgd2VyZSBhZGRlZCB0byBlbnN1cmUgdGhlIGNhbGN1bGF0aW9ucyBkb24mIzM5O3Qgd3JhcCBhbmQgdGhhdCBzaGlmdCB2YWx1ZXMgYXJlIHZhbGlkLiBUaGlzIHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGFsbCBhYm91dCBoYW5kbGluZyB0aG9zZSBlZGdlIGNhc2VzIGdyYWNlZnVsbHksIHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIGNvcnJ1cHRpbmcgbWVtb3J5LgoKVG8gZ2V0IHRoZSBuZWNlc3NhcnkgY29kZSBjb3ZlcmFnZSwgdGhlIGBCTEtfREVWX05VTExfQkxLYCBhbmQgYE1EXypgIGNvbmZpZ3MgYXJlIGNydWNpYWwuIFRoZXNlIHdpbGwgZW5hYmxlIHJlbGV2YW50IHBhdGhzLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gaGFzIHNob3duIGBDT05GSUdfQlRUYCBhbmQgYENPTkZJR19CTEtfREVWX1BNRU1gIGFyZSBub3QgcmVxdWlyZWQuCgpTbywgaGVyZSYjMzk7cyBteSBwbGFuOiBJJiMzOTtsbCB0YXJnZXQgdGhvc2Uga2V5IGZ1bmN0aW9ucyAoYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYGJhZGJsb2Nrc19jaGVja2AsIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCkgd2hpbGUgcnVubmluZyB0aGUga2VybmVsIHdpdGggdGhlIGBCTEtfREVWX05VTExfQkxLYCwgYE1EX1JBSUQxYCwgYE1EX1JBSUQxMGAsIGFuZCBgTURfUkFJRDQ1NmAgY29uZmlncyBlbmFibGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3ZlcmFnZSBJIG5lZWQgdG8gZmluZCBhbnkgbGluZ2VyaW5nIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O01EX1JBSUQ0NTYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jbGVhciYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW52YWxpZCBzaGlmdCB2YWx1ZXMsIGFuZCBpbmNvcnJlY3Qgcm91bmRpbmcgbG9naWMgaW4gdGhlIGJhZGJsb2NrcyBtYW5hZ2VtZW50IGNvZGUuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgZWRnZSBjYXNlcyAobGlrZSBsYXJnZSBzZWN0b3IgbnVtYmVycyBvciBpbnZhbGlkIHNoaWZ0IHZhbHVlcykgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDssCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgaW50ZWdlciBvdmVyZmxvd3MsIGludmFsaWQgc2hpZnQgdmFsdWVzLCBhbmQgaW5jb3JyZWN0IHJvdW5kaW5nIGxvZ2ljIGluIHRoZSBiYWRibG9ja3MgbWFuYWdlbWVudCBjb2RlLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGVkZ2UgY2FzZXMgKGxpa2UgbGFyZ2Ugc2VjdG9yIG51bWJlcnMgb3IgaW52YWxpZCBzaGlmdCB2YWx1ZXMpIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAyOjQxLjg0MjUxMTExNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTcwODY4ODUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJNRF9SQUlENDU2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIixcbiAgICBcIl9iYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJfYmFkYmxvY2tzX2NsZWFyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgaW50ZWdlciBvdmVyZmxvd3MsIGludmFsaWQgc2hpZnQgdmFsdWVzLCBhbmQgaW5jb3JyZWN0IHJvdW5kaW5nIGxvZ2ljIGluIHRoZSBiYWRibG9ja3MgbWFuYWdlbWVudCBjb2RlLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGVkZ2UgY2FzZXMgKGxpa2UgbGFyZ2Ugc2VjdG9yIG51bWJlcnMgb3IgaW52YWxpZCBzaGlmdCB2YWx1ZXMpIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDI6NDEuODQyNTE4MDg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU1NTQ0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNjRiYmUwZWI2ZTRmMjJlMDA5NmQyYWUyN2NjMjA2NjQ3NjllN2NmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAyOjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcXG5pbmRleCBlY2U2NGU3NmZlOGZmZi4uMDBhNTk3Mjk2MDBhYTggMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xcbkBAIC04NTMsMTIgKzg1MywyMyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4gXFx0XFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAocyBcXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxcbitcXHRcXHQvKiBSYW5nZSB3cmFwcyBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCkge1xcbiBcXHRcXHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cXG4gXFx0XFx0c2VjdG9yX3QgbmV4dCA9IHMgKyBzZWN0b3JzO1xcbiBcXG4tXFx0XFx0cm91bmRkb3duKHMsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0cm91bmR1cChuZXh0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmIChiYi1cXHUwMDNlc2hpZnQgXFx1MDAzZT0gQklUU19QRVJfTE9OR19MT05HKVxcbitcXHRcXHRcXHQvKiBDb3JydXB0L3Vuc2FuaXRpc2VkIHNoaWZ0IHZhbHVlICovXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdG5leHQgPSByb3VuZF91cChuZXh0LCAoc2VjdG9yX3QpMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbitcXHRcXHRpZiAobmV4dCBcXHUwMDNjPSBzKVxcbitcXHRcXHRcXHQvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdHNlY3RvcnMgPSBuZXh0IC0gcztcXG4gXFx0fVxcbiBcXG5AQCAtMTA2MSw3ICsxMDcyLDEyIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuIFxcdFxcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0aWYgKHMgXFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcXG4rXFx0XFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdGlmIChiYi1cXHUwMDNlc2hpZnQpIHtcXG4rXFx0XFx0c2VjdG9yX3Qgb3JpZ19zID0gcztcXG4gXFx0XFx0c2VjdG9yX3QgdGFyZ2V0O1xcbiBcXG4gXFx0XFx0LyogV2hlbiBjbGVhcmluZyB3ZSByb3VuZCB0aGUgc3RhcnQgdXAgYW5kIHRoZSBlbmQgZG93bi5cXG5AQCAtMTA3MCwxMCArMTA4NiwyMSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbiBcXHRcXHQgKiBIb3dldmVyIGl0IGlzIGJldHRlciB0aGUgdGhpbmsgYSBibG9jayBpcyBiYWQgd2hlbiBpdFxcbiBcXHRcXHQgKiBpc24ndCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNlPSBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcdFxcdFxcdC8qIENvcnJ1cHQvdW5zYW5pdGlzZWQgc2hpZnQgdmFsdWUgKi9cXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0XFx0dGFyZ2V0ID0gcyArIHNlY3RvcnM7XFxuLVxcdFxcdHJvdW5kdXAocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbi1cXHRcXHRyb3VuZGRvd24odGFyZ2V0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuLVxcdFxcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xcbitcXHRcXHRzID0gcm91bmRfdXAocywgKHNlY3Rvcl90KTEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0dGFyZ2V0ID0gcm91bmRfZG93bih0YXJnZXQsIChzZWN0b3JfdCkxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmIChzIFxcdTAwM2Mgb3JpZ19zIHx8IHRhcmdldCBcXHUwMDNjIHMpXFxuK1xcdFxcdFxcdC8qIFJvdW5kaW5nIHdyYXBwZWQsIG9yIHJhbmdlIGNvbGxhcHNlZCAqL1xcbitcXHRcXHRcXHRzZWN0b3JzID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcXG4rXFxuK1xcdFxcdGlmIChzZWN0b3JzID09IDApXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0d3JpdGVfc2VxbG9ja19pcnEoXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5AQCAtMTMwMywxMiArMTMzMCwyMyBAQCBpbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbiBcXG4gXFx0V0FSTl9PTihiYi1cXHUwMDNlc2hpZnQgXFx1MDAzYyAwIHx8IHNlY3RvcnMgPT0gMCk7XFxuIFxcbitcXHRpZiAocyBcXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxcbitcXHRcXHQvKiBSYW5nZSB3cmFwcyBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRpZiAoYmItXFx1MDAzZXNoaWZ0IFxcdTAwM2UgMCkge1xcbiBcXHRcXHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cXG4gXFx0XFx0c2VjdG9yX3QgdGFyZ2V0ID0gcyArIHNlY3RvcnM7XFxuIFxcbi1cXHRcXHRyb3VuZGRvd24ocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbi1cXHRcXHRyb3VuZHVwKHRhcmdldCwgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbitcXHRcXHRpZiAoYmItXFx1MDAzZXNoaWZ0IFxcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcXG4rXFx0XFx0XFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdHRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgKHNlY3Rvcl90KTEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0aWYgKHRhcmdldCBcXHUwMDNjPSBzKVxcbitcXHRcXHRcXHQvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAyOjQyLjIxODk3MTQxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMzMyMjE5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk1EX1JBSUQ0NTZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJiYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiLFxuICAgIFwiX2JhZGJsb2Nrc19zZXRcIixcbiAgICBcIl9iYWRibG9ja3NfY2xlYXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW52YWxpZCBzaGlmdCB2YWx1ZXMsIGFuZCBpbmNvcnJlY3Qgcm91bmRpbmcgbG9naWMgaW4gdGhlIGJhZGJsb2NrcyBtYW5hZ2VtZW50IGNvZGUuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgZWRnZSBjYXNlcyAobGlrZSBsYXJnZSBzZWN0b3IgbnVtYmVycyBvciBpbnZhbGlkIHNoaWZ0IHZhbHVlcykgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIG1lbW9yeSBjb3JydXB0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE2NGJiZTBlYjZlNGYyMmUwMDk2ZDJhZTI3Y2MyMDY2NDc2OWU3Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxMDowMjo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmZmLi4wMGE1OTcyOTYwMGFhOCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xuQEAgLTg1MywxMiArODUzLDIzIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuIFx0XHQvKiBJbnZhbGlkIHNlY3RvcnMgbnVtYmVyICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChzIFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcbitcdFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCkge1xuIFx0XHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cbiBcdFx0c2VjdG9yX3QgbmV4dCA9IHMgKyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKGJiLVx1MDAzZXNoaWZ0IFx1MDAzZT0gQklUU19QRVJfTE9OR19MT05HKVxuK1x0XHRcdC8qIENvcnJ1cHQvdW5zYW5pdGlzZWQgc2hpZnQgdmFsdWUgKi9cbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdG5leHQgPSByb3VuZF91cChuZXh0LCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHRpZiAobmV4dCBcdTAwM2M9IHMpXG4rXHRcdFx0LyogUm91bmRpbmcgd3JhcHBlZCBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdHNlY3RvcnMgPSBuZXh0IC0gcztcbiBcdH1cbiBcbkBAIC0xMDYxLDcgKzEwNzIsMTIgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbiBcdFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4rXHRcdC8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRpZiAoYmItXHUwMDNlc2hpZnQpIHtcbitcdFx0c2VjdG9yX3Qgb3JpZ19zID0gcztcbiBcdFx0c2VjdG9yX3QgdGFyZ2V0O1xuIFxuIFx0XHQvKiBXaGVuIGNsZWFyaW5nIHdlIHJvdW5kIHRoZSBzdGFydCB1cCBhbmQgdGhlIGVuZCBkb3duLlxuQEAgLTEwNzAsMTAgKzEwODYsMjEgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbiBcdFx0ICogSG93ZXZlciBpdCBpcyBiZXR0ZXIgdGhlIHRoaW5rIGEgYmxvY2sgaXMgYmFkIHdoZW4gaXRcbiBcdFx0ICogaXNuJ3QgdGhhbiB0byB0aGluayBhIGJsb2NrIGlzIG5vdCBiYWQgd2hlbiBpdCBpcy5cbiBcdFx0ICovXG4rXHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0XHQvKiBDb3JydXB0L3Vuc2FuaXRpc2VkIHNoaWZ0IHZhbHVlICovXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0XHR0YXJnZXQgPSBzICsgc2VjdG9ycztcbi1cdFx0cm91bmR1cChzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHJvdW5kZG93bih0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4rXHRcdHMgPSByb3VuZF91cChzLCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHR0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKHMgXHUwMDNjIG9yaWdfcyB8fCB0YXJnZXQgXHUwMDNjIHMpXG4rXHRcdFx0LyogUm91bmRpbmcgd3JhcHBlZCwgb3IgcmFuZ2UgY29sbGFwc2VkICovXG4rXHRcdFx0c2VjdG9ycyA9IDA7XG4rXHRcdGVsc2VcbitcdFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbitcbitcdFx0aWYgKHNlY3RvcnMgPT0gMClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHR3cml0ZV9zZXFsb2NrX2lycShcdTAwMjZiYi1cdTAwM2Vsb2NrKTtcbkBAIC0xMzAzLDEyICsxMzMwLDIzIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4gXG4gXHRXQVJOX09OKGJiLVx1MDAzZXNoaWZ0IFx1MDAzYyAwIHx8IHNlY3RvcnMgPT0gMCk7XG4gXG4rXHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4rXHRcdC8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2UgMCkge1xuIFx0XHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cbiBcdFx0c2VjdG9yX3QgdGFyZ2V0ID0gcyArIHNlY3RvcnM7XG4gXG4tXHRcdHJvdW5kZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHJvdW5kdXAodGFyZ2V0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0XHQvKiBDb3JydXB0L3Vuc2FuaXRpc2VkIHNoaWZ0IHZhbHVlICovXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdHRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKHRhcmdldCBcdTAwM2M9IHMpXG4rXHRcdFx0LyogUm91bmRpbmcgd3JhcHBlZCBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMjo0Mi4yMTg5NzMwNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODQ5MjI2MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmFkYmxvY2tzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBzcXVhcmVseSBhdCBgYmxvY2svYmFkYmxvY2tzLmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQncyBmb2N1c2VkIG9uIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIGJhZCBibG9jayBoYW5kbGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHNvbWUgY3JpdGljYWwgY2hlY2tzLiBGaXJzdCwgaXQgYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzZWN0b3IgcmFuZ2VzIHRoYXQgd3JhcCBhcm91bmQgdGhlIG1heGltdW0gdmFsdWUgb2YgYHNlY3Rvcl90YCAodGhhdCdzIGBVTExPTkdfTUFYYCBmb3IgYSA2NC1iaXQgdW5zaWduZWQgbG9uZyBsb25nLCBpbiBjYXNlIEkgbmVlZCBhIHJlbWluZGVyIGxhdGVyKS4gU21hcnQuIEl0J3MgYWxzbyBjb25jZXJuZWQgd2l0aCBndWFyZGluZyBhZ2FpbnN0IGNvcnJ1cHRlZCBvciB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBgYmItXHUwMDNlc2hpZnRgLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHJvdW5kaW5nIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb25zIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiBUaGV5IGFyZSByZXBsYWNpbmcgdGhlIHVzZSBvZiBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgIHdpdGggYHJvdW5kX2Rvd25gIGFuZCBgcm91bmRfdXBgLiBIbW0sIEkgd29uZGVyIHdoYXQgdGhlIGRlYWwgaXMgdGhlcmU/IFdhaXQgYSBzZWNvbmQuLi4gVGhvc2UgTGludXgga2VybmVsIG1hY3JvcywgYHJvdW5kZG93bmAgYW5kIGByb3VuZHVwYCwgKnJldHVybiogdGhlIHJvdW5kZWQgdmFsdWUsIHRoZXkgZG9uJ3QgbW9kaWZ5IHRoZWlyIGFyZ3VtZW50IGluIHBsYWNlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgdGhvc2UgbWFjcm9zIGJ1dCBub3QgYXNzaWduaW5nIHRoZSByZXR1cm5lZCB2YWx1ZSwgc28gaXQgd2FzIGJhc2ljYWxseSBqdXN0IHRocm93aW5nIGF3YXkgdGhlIHJvdW5kZWQgdmFsdWUhIEZvciBleGFtcGxlLCBgcm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtgIHdhcyBiYXNpY2FsbHkgYSBuby1vcCBhcyBmYXIgYXMgKnMqIHdhcyBjb25jZXJuZWQhIFRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBleHBsaWNpdGx5IGFzc2lnbmluZyB0aGUgcm91bmRlZCB2YWx1ZXMgYmFjayB0byB0aGUgdmFyaWFibGVzOyBgcyA9IHJvdW5kX2Rvd24oLi4uKWAgYW5kIGBuZXh0ID0gcm91bmRfdXAoLi4uKWAuIEJyaWxsaWFudCwgaXTigJlzIGZpeGluZyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGJ1Zy5cblxuVGhlc2UgYXJlIGNyaXRpY2FsIGJhZCBibG9jayBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhleSdyZSBhdCB0aGUgdmVyeSBoZWFydCBvZiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCB0aGUgZmFjdCB0aGF0IHRoZXkncmUgdXNlZCBieSB0aGluZ3MgbGlrZSBNRCAoUkFJRCkgYW5kIE5WRElNTSBtYWtlcyB0aGlzIHBhdGNoIGFsbCB0aGUgbW9yZSBzaWduaWZpY2FudC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBpbnRlZ3JpdHksIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5MZXQgbWUgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgYmFkYmxvY2tzLmNgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIGFuZCB3aGF0LCBpZiBhbnksIGNvbmZpZyBvcHRpb25zIGFyZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAyOjUxLjA2ODIwMTMzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2NTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT04PW9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbi0tXFxuYmxvY2svTWFrZWZpbGUtMTItXFx0XFx0XFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlOjEzOlxcdFxcdFxcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cXHRcXHRcXHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMjo1MS4xMzA0NzIxMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQzOTQ2ODIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgYmFkYmxvY2tzLm9gIGlzIGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoZXNlIHR5cGVzIG9mIGJ1aWxkcyAoYG9iai15YCkuIEJ1dCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG15IG1pbmQgaXM6IHdobyBhY3R1YWxseSAqdXNlcyogaXQ/IEl0J3MgYSBiaXQgb2YgYSBjb2RlIHNtZWxsIHRvIGluY2x1ZGUgc29tZXRoaW5nIGJsaW5kbHkgd2l0aG91dCB1bmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMuXG5cblNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zZXRgLCBhbmQgYGJhZGJsb2Nrc19jbGVhcmAgYXJlIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZnVuY3Rpb24gY2FsbHMgYW5kIGZpbmQgb3V0IHdoaWNoIGRyaXZlcnMsIGlmIGFueSwgYXJlIGxldmVyYWdpbmcgdGhlIGBiYWRibG9ja3NgIGZ1bmN0aW9uYWxpdHkuIFRoaXMgd2lsbCBjb25maXJtIHdoZXRoZXIgaXRzIHVuY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgdHJ1bHkgd2FycmFudGVkIG9yIGlmIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIG1hZGUgY29uZGl0aW9uYWwgdG8gc2F2ZSBzb21lIGtlcm5lbCBzaXplIGFuZC9vciByZWR1Y2UgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBjaGFpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzoxOS41Njk5NDI0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNzEzNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhZGJsb2Nrc19jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXFxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTA2MD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxMi0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMTM6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTQtXFx0XFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyOTEtLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTI5MjogKiBiYWRibG9ja3NfY2hlY2soKSAtIGNoZWNrIGEgZ2l2ZW4gcmFuZ2UgZm9yIGJhZCBzZWN0b3JzXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5My0gKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMDctICpcXG5ibG9jay9iYWRibG9ja3MuYzoxMzA4OiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcXG5ibG9jay9iYWRibG9ja3MuYy0xMzA5LSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzI1OmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNi1cXHRcXHRcXHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzU0LVxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzU1OlxcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM1Ni1cXHRpZiAocmVhZF9zZXFyZXRyeShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIHNlcSkpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzYwLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzYxOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNDY9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1NTpcXHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNmJhZF9zZWN0b3JzKSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU2LVxcdFxcdHJldHVybiBCTEtfU1RTX09LO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTI5OT1zdGF0aWMgaW5saW5lIGludCBpc19iYWRibG9jayhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaC0zMDItXFx0aWYgKHVubGlrZWx5KHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jb3VudCkpIHtcXG5kcml2ZXJzL21kL21kLmg6MzAzOlxcdFxcdGludCBydiA9IGJhZGJsb2Nrc19jaGVjayhcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCByZGV2LVxcdTAwM2VkYXRhX29mZnNldCArIHMsXFxuZHJpdmVycy9tZC9tZC5oLTMwNC1cXHRcXHRcXHRcXHRcXHRzZWN0b3JzLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vbmQuaD02NzY9c3RhdGljIGlubGluZSBib29sIGlzX2JhZF9wbWVtKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cXG5kcml2ZXJzL252ZGltbS9uZC5oOjY4MzpcXHRcXHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcXHUwMDI2Zmlyc3RfYmFkLFxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjg0LVxcdFxcdFxcdFxcdFxcdTAwMjZudW1fYmFkKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODMtXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XFx0XFx0YmJfcHJlc2VudCA9IGJhZGJsb2Nrc19jaGVjayhcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYiwgbWV0YV9zdGFydCxcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4NS1cXHRcXHRcXHRcXHRtZXRhX251bSwgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNm51bV9iYWQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTI0Mj1fX3dlYWsgbG9uZyBfX3BtZW1fZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBnb2ZmX3QgcGdvZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjU4LVxcdGlmIChiYi1cXHUwMDNlY291bnQgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU5OlxcdCAgICBiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbnVtLCBcXHUwMDI2Zmlyc3RfYmFkLCBcXHUwMDI2bnVtX2JhZCkpIHtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjYwLVxcdFxcdGxvbmcgYWN0dWFsX25yO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD00NT1zdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01MC1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjUxOmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Mi1cXHRcXHQgICAgc2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MjEuODIzNjYyOTk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzE4MjQyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCYWRibG9jayBTdXBwb3J0IGluIE51bGxfYmxrKipcblxuT2theSwgc28gYGJhZGJsb2Nrc19jaGVja2DigKYgSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMg4oCTIGBudWxsX2Jsa2AsIGBtZGAsIGFuZCBgbnZkaW1tYCBjb21lIHRvIG1pbmQuIE5vdywgYG51bGxfYmxrYCBpdHNlbGYsIHRoYXQncyByZWFsbHkgaW50ZXJlc3RpbmcuIEl0J3MgYW4gZXhjZWxsZW50IHRhcmdldCBmb3IgZnV6emluZyB0aGUgYmxvY2sgbGF5ZXIg4oCTIGl0J3Mgc2ltcGxlLCBwcmVkaWN0YWJsZSwgYW5kIGRvZXNu4oCZdCBoYXZlIHRoZSBjb21wbGV4aXRpZXMgb2YgcmVhbCBoYXJkd2FyZS4gR2l2ZW4gdGhhdCwgSeKAmW0gdGhpbmtpbmcgd2Ugc2hvdWxkIHNlZSBpZiBgbnVsbF9ibGtgIGFjdHVhbGx5IHN1cHBvcnRzIHRoZSBzZXR0aW5nIG9mIGJhZGJsb2Nrcy4gVGhhdCB3b3VsZCBvcGVuIHVwIGEgd2hvbGUgbmV3IGF2ZW51ZSBmb3IgdGVzdGluZyBhbmQgZGlzY292ZXJpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBpZiB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYWxyZWFkeSBwcmVzZW50IG9yIGlmIHdlIG5lZWQgdG8gYWRkIGl0IHRvIGZ1bGx5IHV0aWxpemUgYG51bGxfYmxrYCBmb3IgdGhpcyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MzIuMTk1NDg5NjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4MTQ2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ3NT1OVUxMQl9ERVZJQ0VfQVRUUihyb3RhdGlvbmFsLCBib29sLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NzY6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX29uY2UsIGJvb2wsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ3NzpOVUxMQl9ERVZJQ0VfQVRUUihiYWRibG9ja3NfcGFydGlhbF9pbywgYm9vbCwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDc4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTIzPUNPTkZJR0ZTX0FUVFIobnVsbGJfZGV2aWNlXywgcG93ZXIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUyNC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MjU6c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqcGFnZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTI4LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUyOTpcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnRfZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUzMC19XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTMxLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUzMjpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzMtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjEtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTYyOlxcdC8qIGVuYWJsZSBiYWRibG9ja3MgKi9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NjM6XFx0Y21weGNoZyhcXHUwMDI2dF9kZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaGlmdCwgLTEsIDApO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2NC1cXHRpZiAoYnVmWzBdID09ICcrJykge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU2NTpcXHRcXHRpZiAoYmFkYmxvY2tzX3NldChcXHUwMDI2dF9kZXYtXFx1MDAzZWJhZGJsb2Nrcywgc3RhcnQsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY2LVxcdFxcdFxcdFxcdCAgZW5kIC0gc3RhcnQgKyAxLCAxKSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjctXFx0XFx0XFx0cmV0ID0gY291bnQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4OlxcdH0gZWxzZSBpZiAoYmFkYmxvY2tzX2NsZWFyKFxcdTAwMjZ0X2Rldi1cXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjktXFx0XFx0XFx0XFx0ICAgZW5kIC0gc3RhcnQgKyAxKSkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc1LX1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzY6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBiYWRibG9ja3MpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3Ny1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTU5Nj1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbnVsbGJfZGV2aWNlX2F0dHJzW10gPSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk3OlxcdFxcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3MsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk4OlxcdFxcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3Nfb25jZSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1OTk6XFx0XFx1MDAyNm51bGxiX2RldmljZV9hdHRyX2JhZGJsb2Nrc19wYXJ0aWFsX2lvLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTYwMC1cXHRcXHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmxvY2tpbmcsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03Nzc9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03OTItXFx0SU5JVF9SQURJWF9UUkVFKFxcdTAwMjZkZXYtXFx1MDAzZWNhY2hlLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo3OTM6XFx0aWYgKGJhZGJsb2Nrc19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCkpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03OTQtXFx0XFx0a2ZyZWUoZGV2KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTgzND1zdGF0aWMgdm9pZCBudWxsX2ZyZWVfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgzOS1cXHRudWxsX2ZyZWVfem9uZWRfZGV2KGRldik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6ODQwOlxcdGJhZGJsb2Nrc19leGl0KFxcdTAwMjZkZXYtXFx1MDAzZWJhZGJsb2Nrcyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODQxLVxcdGtmcmVlKGRldik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzE1PXN0YXRpYyBpbmxpbmUgYmxrX3N0YXR1c190IG51bGxfaGFuZGxlX3Rocm90dGxlZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzM2LS8qXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTMzNzogKiBDaGVjayBpZiB0aGUgY29tbWFuZCBzaG91bGQgZmFpbCBmb3IgdGhlIGJhZGJsb2Nrcy4gSWYgc28sIHJldHVyblxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzMzgtICogQkxLX1NUU19JT0VSUiBhbmQgcmV0dXJuIG51bWJlciBvZiBwYXJ0aWFsIEkvTyBzZWN0b3JzIHRvIGJlIHdyaXR0ZW4gb3IgcmVhZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDUtICovXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM0NjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDgte1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNDk6XFx0c3RydWN0IGJhZGJsb2NrcyAqYmIgPSBcXHUwMDI2Y21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3M7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1MC1cXHRzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYgPSBjbWQtXFx1MDAzZW5xLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU0LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTU6XFx0aWYgKCFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgKm5yX3NlY3RvcnMsIFxcdTAwMjZmaXJzdF9iYWQsIFxcdTAwMjZiYWRfc2VjdG9ycykpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1Ni1cXHRcXHRyZXR1cm4gQkxLX1NUU19PSztcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTg6XFx0aWYgKGNtZC1cXHUwMDNlbnEtXFx1MDAzZWRldi1cXHUwMDNlYmFkYmxvY2tzX29uY2UpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1OTpcXHRcXHRiYWRibG9ja3NfY2xlYXIoYmIsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNjAtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM2MTpcXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3NfcGFydGlhbF9pbykge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNjItXFx0XFx0aWYgKCFJU19BTElHTkVEKGZpcnN0X2JhZCwgYmxvY2tfc2VjdG9ycykpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDIzPWJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDI2LVxcdHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiA9IGNtZC1cXHUwMDNlbnEtXFx1MDAzZWRldjtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDI3OlxcdGJsa19zdGF0dXNfdCBiYWRibG9ja3NfcmV0ID0gQkxLX1NUU19PSztcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDI4LVxcdGJsa19zdGF0dXNfdCByZXQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQyOS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDMwOlxcdGlmIChkZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaGlmdCAhPSAtMSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDMxOlxcdFxcdGJhZGJsb2Nrc19yZXQgPSBudWxsX2hhbmRsZV9iYWRibG9ja3MoY21kLCBzZWN0b3IsIFxcdTAwMjZucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDMyLVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQzOC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDM5OlxcdHJldHVybiBiYWRibG9ja3NfcmV0O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0NDAtfVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb25maWdmcy5oXFx1MDAzZVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02NC1cXHR1bnNpZ25lZCBpbnQgY3Vycl9jYWNoZTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6NjU6XFx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY2OlxcdGJvb2wgYmFkYmxvY2tzX29uY2U7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY3OlxcdGJvb2wgYmFkYmxvY2tzX3BhcnRpYWxfaW87XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTY4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTEzND1ibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzUtXFx0XFx0XFx0ICAgICAgc2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbnJfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjEzNjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz0zNTA9c3RhdGljIGJsa19zdGF0dXNfdCBudWxsX3pvbmVfd3JpdGUoc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU1LVxcdHN0cnVjdCBudWxsYl96b25lICp6b25lID0gXFx1MDAyNmRldi1cXHUwMDNlem9uZXNbem5vXTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MzU2OlxcdGJsa19zdGF0dXNfdCBiYWRibG9ja3NfcmV0ID0gQkxLX1NUU19PSztcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU3LVxcdGJsa19zdGF0dXNfdCByZXQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNDE1LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo0MTY6XFx0aWYgKGRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ICE9IC0xKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxNzpcXHRcXHRiYWRibG9ja3NfcmV0ID0gbnVsbF9oYW5kbGVfYmFkYmxvY2tzKGNtZCwgc2VjdG9yLCBcXHUwMDI2bnJfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxODpcXHRcXHRpZiAoYmFkYmxvY2tzX3JldCAhPSBCTEtfU1RTX09LIFxcdTAwMjZcXHUwMDI2ICFucl9zZWN0b3JzKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxOTpcXHRcXHRcXHRyZXQgPSBiYWRibG9ja3NfcmV0O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy00MjAtXFx0XFx0XFx0Z290byB1bmxvY2tfem9uZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy00NDMtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQ0NDpcXHRyZXQgPSBiYWRibG9ja3NfcmV0O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy00NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjMyLjI2ODMxMzMwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTYzNDYwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQmFkYmxvY2sgSW1wbGVtZW50YXRpb24gaW4gTGludXggQmxvY2sgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBob3cgYmFkIGJsb2NrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIHdoaWNoIHV0aWxpemVzIGBjb25maWdmc2AgYW5kIGBiYWRibG9ja3NgLiBJbnRlcmVzdGluZywgSSBkaWRuJ3QgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYGNvbmZpZ2ZzYCBmb3IgdGhpcywgYnV0IGl0IG1ha2VzIHNlbnNlIGFzIGEgd2F5IHRvIGV4cG9zZSB0aGVzZSBzZXR0aW5ncy4gVGhlIGtleSBpcyB0aGF0IGBudWxsX2Jsa2AgYWxsb3dzIHNldHRpbmcgYmFkIGJsb2NrcyB2aWEgdGhlIGBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlYCBmdW5jdGlvbi4gRXNzZW50aWFsbHksIGl0IGFsbG93cyBjb25maWd1cmluZyBiYWQgYmxvY2sgaW5mb3JtYXRpb24sIHJpZ2h0PyBUaGUgY29uZmlnIG9wdGlvbiByZWxhdGVkIHRvIGBudWxsX2Jsa2AgaXMgYEJMS19ERVZfTlVMTF9CTEtgLlxuXG5Ob3csIHRoZSBtZW50aW9uIG9mIHRoZSBgTURgIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlciBpcyBpbXBvcnRhbnQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgKml0KiBoYW5kbGVzIGJhZCBibG9ja3MgdG9vLCB0byBzZWUgaWYgdGhlcmUncyBhbnkgb3ZlcmxhcCBpbiBob3cgYmFkIGJsb2NrcyBhcmUgdXNlZCwgbWFuYWdlZCBhbmQgcG9zc2libHkgY29uZmlndXJlZCBhY3Jvc3MgZGlmZmVyZW50IGJsb2NrIGRldmljZSBkcml2ZXJzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIE1EIGNvbmZpZyBvcHRpb25zIHRvIGV4cGxvcmUgaXQgZnVydGhlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBjb21tb24gbWV0aG9kb2xvZ2llcyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHBhcmFsbGVscyBhbmQgSSB3YW50IHRvIHNlZSBpZiBhbnkgZ2VuZXJhbCBwcmluY2lwbGVzIGFyZSBlbWVyZ2luZyBvciBpZiB0aGUgc3RyYXRlZ2llcyBkaWZmZXIgc2lnbmlmaWNhbnRseSBiYXNlZCBvbiB0aGUgZHJpdmVyJ3MgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjM3LjQyNDY2MTEzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5NzA4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0tZHVzdC5jPTIyND1zdGF0aWMgaW50IGR1c3RfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yMzktXFxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjQwOnN0YXRpYyBib29sIF9fZHVzdF9jbGVhcl9iYWRibG9ja3Moc3RydWN0IHJiX3Jvb3QgKnRyZWUsXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjQxLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb3VudClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTI2My1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYzoyNjQ6c3RhdGljIGludCBkdXN0X2NsZWFyX2JhZGJsb2NrcyhzdHJ1Y3QgZHVzdF9kZXZpY2UgKmRkLCBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4sXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjY1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCAqc3pfcHRyKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjc4LVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjI3OTpcXHRpZiAoIV9fZHVzdF9jbGVhcl9iYWRibG9ja3MoXFx1MDAyNmJhZGJsb2NrbGlzdCwgYmFkYmxvY2tfY291bnQpKVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjI4MDpcXHRcXHRETUVNSVQoXFxcIiVzOiBubyBiYWRibG9ja3MgZm91bmRcXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjgxLVxcdGVsc2VcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzoyODI6XFx0XFx0RE1FTUlUKFxcXCIlczogYmFkYmxvY2tzIGNsZWFyZWRcXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjgzLVxcbi0tXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjg2LVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjI4NzpzdGF0aWMgaW50IGR1c3RfbGlzdF9iYWRibG9ja3Moc3RydWN0IGR1c3RfZGV2aWNlICpkZCwgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuLFxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTI4OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgKnN6X3B0cilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jPTQwNT1zdGF0aWMgdm9pZCBkdXN0X2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQwOC1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0MDk6XFx0X19kdXN0X2NsZWFyX2JhZGJsb2NrcyhcXHUwMDI2ZGQtXFx1MDAzZWJhZGJsb2NrbGlzdCwgZGQtXFx1MDAzZWJhZGJsb2NrX2NvdW50KTtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00MTAtXFx0ZG1fcHV0X2RldmljZSh0aSwgZGQtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYz00MTQ9c3RhdGljIGludCBkdXN0X21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0MC1cXHRcXHRcXHRyID0gMDtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NDE6XFx0XFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCBcXFwiY291bnRiYWRibG9ja3NcXFwiKSkge1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0Mi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGQtXFx1MDAzZWR1c3RfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ0MzpcXHRcXHRcXHRETUVNSVQoXFxcImNvdW50YmFkYmxvY2tzOiAlbGx1IGJhZGJsb2NrKHMpIGZvdW5kXFxcIixcXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDQtXFx0XFx0XFx0ICAgICAgIGRkLVxcdTAwM2ViYWRibG9ja19jb3VudCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDYtXFx0XFx0XFx0ciA9IDE7XFxuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDQ3OlxcdFxcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSwgXFxcImNsZWFyYmFkYmxvY2tzXFxcIikpIHtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NDg6XFx0XFx0XFx0ciA9IGR1c3RfY2xlYXJfYmFkYmxvY2tzKGRkLCByZXN1bHQsIG1heGxlbiwgXFx1MDAyNnN6KTtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDktXFx0XFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCBcXFwicXVpZXRcXFwiKSkge1xcbi0tXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDU0LVxcdFxcdFxcdHIgPSAwO1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ1NTpcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sIFxcXCJsaXN0YmFkYmxvY2tzXFxcIikpIHtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NTY6XFx0XFx0XFx0ciA9IGR1c3RfbGlzdF9iYWRibG9ja3MoZGQsIHJlc3VsdCwgbWF4bGVuLCBcXHUwMDI2c3opO1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ1Ny1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTQ0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGstaW50ZWdyaXR5LmhcXHUwMDNlXFxuZHJpdmVycy9tZC9tZC5jOjQ1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWRibG9ja3MuaFxcdTAwM2VcXG5kcml2ZXJzL21kL21kLmMtNDYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTEwODA9dm9pZCBtZF9yZGV2X2NsZWFyKHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwOTItXFx0fVxcbmRyaXZlcnMvbWQvbWQuYzoxMDkzOlxcdGJhZGJsb2Nrc19leGl0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MpO1xcbmRyaXZlcnMvbWQvbWQuYy0xMDk0LX1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMDk3PXN0YXRpYyB2b2lkIHN1cGVyX3dyaXR0ZW4oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTExMjMtICogbWRfd3JpdGVfbWV0YWRhdGEgLSB3cml0ZSBtZXRhZGF0YSB0byB1bmRlcmx5aW5nIGRpc2ssIGluY2x1ZGluZ1xcbmRyaXZlcnMvbWQvbWQuYzoxMTI0OiAqIGFycmF5IHN1cGVyYmxvY2ssIGJhZGJsb2NrcywgYml0bWFwIHN1cGVyYmxvY2sgYW5kIGJpdG1hcCBiaXRzLlxcbmRyaXZlcnMvbWQvbWQuYy0xMTI1LSAqIEBtZGRldjpcXHR0aGUgYXJyYXkgdG8gd3JpdGVcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMzY1PXN0YXRpYyBpbnQgc3VwZXJfOTBfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTQxMi1cXHRyZGV2LVxcdTAwM2VzYl9zaXplID0gTURfU0JfQllURVM7XFxuZHJpdmVycy9tZC9tZC5jOjE0MTM6XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gLTE7XFxuZHJpdmVycy9tZC9tZC5jLTE0MTQtXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTgwOD1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTkwMy1cXHRpZiAoKGxlMzJfdG9fY3B1KHNiLVxcdTAwM2VmZWF0dXJlX21hcCkgXFx1MDAyNiBNRF9GRUFUVVJFX0JBRF9CTE9DS1MpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jOjE5MDQ6XFx0ICAgIHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jb3VudCA9PSAwKSB7XFxuZHJpdmVycy9tZC9tZC5jLTE5MDUtXFx0XFx0LyogbmVlZCB0byBsb2FkIHRoZSBiYWQgYmxvY2sgbGlzdC5cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xOTIyLVxcdFxcdGJicCA9IChfX2xlNjQgKilwYWdlX2FkZHJlc3MocmRldi1cXHUwMDNlYmJfcGFnZSk7XFxuZHJpdmVycy9tZC9tZC5jOjE5MjM6XFx0XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gc2ItXFx1MDAzZWJibG9nX3NoaWZ0O1xcbmRyaXZlcnMvbWQvbWQuYy0xOTI0LVxcdFxcdGZvciAoaSA9IDAgOyBpIFxcdTAwM2MgKHNlY3RvcnMgXFx1MDAzY1xcdTAwM2MgKDktMykpIDsgaSsrLCBiYnArKykge1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTE5MzEtXFx0XFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9tZC9tZC5jOjE5MzI6XFx0XFx0XFx0aWYgKCFiYWRibG9ja3Nfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHNlY3RvciwgY291bnQsIDEpKVxcbmRyaXZlcnMvbWQvbWQuYy0xOTMzLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTE5MzUtXFx0fSBlbHNlIGlmIChzYi1cXHUwMDNlYmJsb2dfb2Zmc2V0ICE9IDApXFxuZHJpdmVycy9tZC9tZC5jOjE5MzY6XFx0XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gMDtcXG5kcml2ZXJzL21kL21kLmMtMTkzNy1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0yMTk3PXN0YXRpYyB2b2lkIHN1cGVyXzFfc3luYyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yMjgzLVxcbmRyaXZlcnMvbWQvbWQuYzoyMjg0OlxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQgPT0gMClcXG5kcml2ZXJzL21kL21kLmMtMjI4NS1cXHRcXHQvKiBOb3RoaW5nIHRvIGRvIGZvciBiYWQgYmxvY2tzKi8gO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTIyODktXFx0ZWxzZSB7XFxuZHJpdmVycy9tZC9tZC5jOjIyOTA6XFx0XFx0c3RydWN0IGJhZGJsb2NrcyAqYmIgPSBcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzO1xcbmRyaXZlcnMvbWQvbWQuYy0yMjkxLVxcdFxcdF9fbGU2NCAqYmJwID0gKF9fbGU2NCAqKXBhZ2VfYWRkcmVzcyhyZGV2LVxcdTAwM2ViYl9wYWdlKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0yNDM0PXN1cGVyXzFfYWxsb3dfbmV3X29mZnNldChzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNDUwLVxcdCAqIDM2SyBiZXlvbmQgc3RhcnQgb2Ygc3VwZXJibG9ja1xcbmRyaXZlcnMvbWQvbWQuYzoyNDUxOlxcdCAqIGJleW9uZCBlbmQgb2YgYmFkYmxvY2tzXFxuZHJpdmVycy9tZC9tZC5jLTI0NTItXFx0ICogYmV5b25kIHdyaXRlLWludGVudCBiaXRtYXBcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNDY2LVxcbmRyaXZlcnMvbWQvbWQuYzoyNDY3OlxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2VjdG9yICsgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNpemUgXFx1MDAzZSBuZXdfb2Zmc2V0KVxcbmRyaXZlcnMvbWQvbWQuYy0yNDY4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTI1NTg9c3RhdGljIGludCBiaW5kX3JkZXZfdG9fYXJyYXkoc3RydWN0IG1kX3JkZXYgKnJkZXYsIHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjYyNC1cXHRyZGV2LVxcdTAwM2VzeXNmc19zdGF0ZSA9IHN5c2ZzX2dldF9kaXJlbnRfc2FmZShyZGV2LVxcdTAwM2Vrb2JqLnNkLCBcXFwic3RhdGVcXFwiKTtcXG5kcml2ZXJzL21kL21kLmM6MjYyNTpcXHRyZGV2LVxcdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MgPVxcbmRyaXZlcnMvbWQvbWQuYy0yNjI2LVxcdFxcdHN5c2ZzX2dldF9kaXJlbnRfc2FmZShyZGV2LVxcdTAwM2Vrb2JqLnNkLCBcXFwidW5hY2tub3dsZWRnZWRfYmFkX2Jsb2Nrc1xcXCIpO1xcbmRyaXZlcnMvbWQvbWQuYzoyNjI3OlxcdHJkZXYtXFx1MDAzZXN5c2ZzX2JhZGJsb2NrcyA9XFxuZHJpdmVycy9tZC9tZC5jLTI2MjgtXFx0XFx0c3lzZnNfZ2V0X2RpcmVudF9zYWZlKHJkZXYtXFx1MDAzZWtvYmouc2QsIFxcXCJiYWRfYmxvY2tzXFxcIik7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MjY2MD1zdGF0aWMgdm9pZCBtZF9raWNrX3JkZXZfZnJvbV9hcnJheShzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNjcwLVxcdHN5c2ZzX3B1dChyZGV2LVxcdTAwM2VzeXNmc19zdGF0ZSk7XFxuZHJpdmVycy9tZC9tZC5jOjI2NzE6XFx0c3lzZnNfcHV0KHJkZXYtXFx1MDAzZXN5c2ZzX3VuYWNrX2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jOjI2NzI6XFx0c3lzZnNfcHV0KHJkZXYtXFx1MDAzZXN5c2ZzX2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jLTI2NzMtXFx0cmRldi1cXHUwMDNlc3lzZnNfc3RhdGUgPSBOVUxMO1xcbmRyaXZlcnMvbWQvbWQuYzoyNjc0OlxcdHJkZXYtXFx1MDAzZXN5c2ZzX3VuYWNrX2JhZGJsb2NrcyA9IE5VTEw7XFxuZHJpdmVycy9tZC9tZC5jOjI2NzU6XFx0cmRldi1cXHUwMDNlc3lzZnNfYmFkYmxvY2tzID0gTlVMTDtcXG5kcml2ZXJzL21kL21kLmM6MjY3NjpcXHRyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQgPSAwO1xcbmRyaXZlcnMvbWQvbWQuYy0yNjc3LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTI3OTI9dm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNzk2LVxcdGludCBub3NwYXJlcyA9IDA7XFxuZHJpdmVycy9tZC9tZC5jOjI3OTc6XFx0aW50IGFueV9iYWRibG9ja3NfY2hhbmdlZCA9IDA7XFxuZHJpdmVycy9tZC9tZC5jLTI3OTgtXFx0aW50IHJldCA9IC0xO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTI4NTAtXFx0XFx0XFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikge1xcbmRyaXZlcnMvbWQvbWQuYzoyODUxOlxcdFxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3MuY2hhbmdlZCkge1xcbmRyaXZlcnMvbWQvbWQuYzoyODUyOlxcdFxcdFxcdFxcdFxcdHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkID0gMDtcXG5kcml2ZXJzL21kL21kLmM6Mjg1MzpcXHRcXHRcXHRcXHRcXHRhY2tfYWxsX2JhZGJsb2NrcyhcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzKTtcXG5kcml2ZXJzL21kL21kLmMtMjg1NC1cXHRcXHRcXHRcXHRcXHRtZF9lcnJvcihtZGRldiwgcmRldik7XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjkxNC1cXHRyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KSB7XFxuZHJpdmVycy9tZC9tZC5jOjI5MTU6XFx0XFx0aWYgKHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkKVxcbmRyaXZlcnMvbWQvbWQuYzoyOTE2OlxcdFxcdFxcdGFueV9iYWRibG9ja3NfY2hhbmdlZCsrO1xcbmRyaXZlcnMvbWQvbWQuYy0yOTE3LVxcdFxcdGlmICh0ZXN0X2JpdChGYXVsdHksIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjk0MS1cXHRcXHRcXHRyZGV2LVxcdTAwM2VzYl9ldmVudHMgPSBtZGRldi1cXHUwMDNlZXZlbnRzO1xcbmRyaXZlcnMvbWQvbWQuYzoyOTQyOlxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2l6ZSkge1xcbmRyaXZlcnMvbWQvbWQuYy0yOTQzLVxcdFxcdFxcdFxcdG1kX3dyaXRlX21ldGFkYXRhKG1kZGV2LCByZGV2LFxcbmRyaXZlcnMvbWQvbWQuYzoyOTQ0OlxcdFxcdFxcdFxcdFxcdFxcdCAgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNlY3RvcixcXG5kcml2ZXJzL21kL21kLmM6Mjk0NTpcXHRcXHRcXHRcXHRcXHRcXHQgIHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaXplIFxcdTAwM2NcXHUwMDNjIDksXFxuZHJpdmVycy9tZC9tZC5jLTI5NDYtXFx0XFx0XFx0XFx0XFx0XFx0ICByZGV2LVxcdTAwM2ViYl9wYWdlLCAwKTtcXG5kcml2ZXJzL21kL21kLmM6Mjk0NzpcXHRcXHRcXHRcXHRyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2l6ZSA9IDA7XFxuZHJpdmVycy9tZC9tZC5jLTI5NDgtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTI5NzMtXFxuZHJpdmVycy9tZC9tZC5jOjI5NzQ6XFx0XFx0aWYgKGFueV9iYWRibG9ja3NfY2hhbmdlZClcXG5kcml2ZXJzL21kL21kLmM6Mjk3NTpcXHRcXHRcXHRhY2tfYWxsX2JhZGJsb2NrcyhcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzKTtcXG5kcml2ZXJzL21kL21kLmMtMjk3Ni1cXHRcXHRjbGVhcl9iaXQoQmxvY2tlZEJhZEJsb2NrcywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zMDM4PXN0YXRlX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzA0NS1cXHQgICAgKCF0ZXN0X2JpdChFeHRlcm5hbEJibCwgXFx1MDAyNmZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbWQvbWQuYzozMDQ2OlxcdCAgICByZGV2LVxcdTAwM2ViYWRibG9ja3MudW5hY2tlZF9leGlzdCkpXFxuZHJpdmVycy9tZC9tZC5jLTMwNDctXFx0XFx0bGVuICs9IHNwcmludGYocGFnZStsZW4sIFxcXCJmYXVsdHklc1xcXCIsIHNlcCk7XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzA1NC1cXHRpZiAodGVzdF9iaXQoQmxvY2tlZCwgXFx1MDAyNmZsYWdzKSB8fFxcbmRyaXZlcnMvbWQvbWQuYzozMDU1OlxcdCAgICAocmRldi1cXHUwMDNlYmFkYmxvY2tzLnVuYWNrZWRfZXhpc3RcXG5kcml2ZXJzL21kL21kLmMtMzA1Ni1cXHQgICAgIFxcdTAwMjZcXHUwMDI2ICF0ZXN0X2JpdChGYXVsdHksIFxcdTAwMjZmbGFncykpKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTMwODA9c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0zMTQyLVxcdFxcdCAgICAhdGVzdF9iaXQoRXh0ZXJuYWxCYmwsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL21kL21kLmM6MzE0MzpcXHRcXHQgICAgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnVuYWNrZWRfZXhpc3QpIHtcXG5kcml2ZXJzL21kL21kLmM6MzE0NDpcXHRcXHRcXHQvKiBtZXRhZGF0YSBoYW5kbGVyIGRvZXNuJ3QgdW5kZXJzdGFuZCBiYWRibG9ja3MsXFxuZHJpdmVycy9tZC9tZC5jLTMxNDUtXFx0XFx0XFx0ICogc28gd2UgbmVlZCB0byBmYWlsIHRoZSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0zMjM1LVxcdFxcdHNldF9iaXQoRXh0ZXJuYWxCYmwsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9tZC9tZC5jOjMyMzY6XFx0XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gMDtcXG5kcml2ZXJzL21kL21kLmMtMzIzNy1cXHRcXHRlcnIgPSAwO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTM2MDg9c3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG5kcml2ZXJzL21kL21kLmMtMzYwOS17XFxuZHJpdmVycy9tZC9tZC5jOjM2MTA6XFx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xcbmRyaXZlcnMvbWQvbWQuYy0zNjExLX1cXG5kcml2ZXJzL21kL21kLmM9MzYxMj1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYxMy17XFxuZHJpdmVycy9tZC9tZC5jOjM2MTQ6XFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MTUtXFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNjIzPXN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbmRyaXZlcnMvbWQvbWQuYy0zNjI0LXtcXG5kcml2ZXJzL21kL21kLmM6MzYyNTpcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MjYtfVxcbmRyaXZlcnMvbWQvbWQuYz0zNjI3PXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYyOC17XFxuZHJpdmVycy9tZC9tZC5jOjM2Mjk6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDEpO1xcbmRyaXZlcnMvbWQvbWQuYy0zNjMwLX1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNzkxPWludCBtZF9yZGV2X2luaXQoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzgxMy1cXHQgKi9cXG5kcml2ZXJzL21kL21kLmM6MzgxNDpcXHRyZXR1cm4gYmFkYmxvY2tzX2luaXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM4MTUtfVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTEwNTUxPUVYUE9SVF9TWU1CT0wobWRfZmluaXNoX3Jlc2hhcGUpO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNTU1LS8qIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlICovXFxuZHJpdmVycy9tZC9tZC5jOjEwNTU2OmJvb2wgcmRldl9zZXRfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmMtMTA1NTctXFx0XFx0XFx0aW50IGlzX25ldylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU2MS1cXHQvKlxcbmRyaXZlcnMvbWQvbWQuYzoxMDU2MjpcXHQgKiBSZWNvcmRpbmcgbmV3IGJhZGJsb2NrcyBmb3IgZmF1bHR5IHJkZXYgd2lsbCBmb3JjZSB1bm5lY2Vzc2FyeVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU2My1cXHQgKiBzdXBlciBibG9jayB1cGRhdGluZy4gVGhpcyBpcyBmcmFnaWxlIGZvciBleHRlcm5hbCBtYW5hZ2VtZW50IGJlY2F1c2VcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU3NS1cXG5kcml2ZXJzL21kL21kLmM6MTA1NzY6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMsIDApKSB7XFxuZHJpdmVycy9tZC9tZC5jLTEwNTc3LVxcdFxcdC8qXFxuZHJpdmVycy9tZC9tZC5jOjEwNTc4OlxcdFxcdCAqIE1hcmsgdGhlIGRpc2sgYXMgRmF1bHR5IHdoZW4gc2V0dGluZyBiYWRibG9ja3MgZmFpbHMsXFxuZHJpdmVycy9tZC9tZC5jLTEwNTc5LVxcdFxcdCAqIG90aGVyd2lzZSwgYmFkIHNlY3RvcnMgbWF5IGJlIHJlYWQuXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTA1ODYtXFx0aWYgKHRlc3RfYml0KEV4dGVybmFsQmJsLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYzoxMDU4NzpcXHRcXHRzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi1cXHUwMDNlc3lzZnNfdW5hY2tfYmFkYmxvY2tzKTtcXG5kcml2ZXJzL21kL21kLmMtMTA1ODgtXFx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXFx1MDAzZXN5c2ZzX3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU5My19XFxuZHJpdmVycy9tZC9tZC5jOjEwNTk0OkVYUE9SVF9TWU1CT0xfR1BMKHJkZXZfc2V0X2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jLTEwNTk1LVxcbmRyaXZlcnMvbWQvbWQuYzoxMDU5Njp2b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmMtMTA1OTctXFx0XFx0XFx0ICBpbnQgaXNfbmV3KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNjAzLVxcbmRyaXZlcnMvbWQvbWQuYzoxMDYwNDpcXHRpZiAoIWJhZGJsb2Nrc19jbGVhcihcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBzLCBzZWN0b3JzKSlcXG5kcml2ZXJzL21kL21kLmMtMTA2MDUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNjA3LVxcdGlmICh0ZXN0X2JpdChFeHRlcm5hbEJibCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL21kL21kLmM6MTA2MDg6XFx0XFx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXFx1MDAzZXN5c2ZzX2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jLTEwNjA5LX1cXG5kcml2ZXJzL21kL21kLmM6MTA2MTA6RVhQT1JUX1NZTUJPTF9HUEwocmRldl9jbGVhcl9iYWRibG9ja3MpO1xcbmRyaXZlcnMvbWQvbWQuYy0xMDYxMS1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuaC0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG5kcml2ZXJzL21kL21kLmg6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXFx1MDAzZVxcbmRyaXZlcnMvbWQvbWQuaC0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTEzND1zdHJ1Y3QgbWRfcmRldiB7XFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMjE0LVxcdC8qIGhhbmRsZSBmb3IgJ3VuYWNrbm93bGVkZ2VkX2JhZF9ibG9ja3MnIHN5c2ZzIGRlbnRyeSAqL1xcbmRyaXZlcnMvbWQvbWQuaDoyMTU6XFx0c3RydWN0IGtlcm5mc19ub2RlICpzeXNmc191bmFja19iYWRibG9ja3M7XFxuZHJpdmVycy9tZC9tZC5oLTIxNi1cXHQvKiBoYW5kbGUgZm9yICdiYWRfYmxvY2tzJyBzeXNmcyBkZW50cnkgKi9cXG5kcml2ZXJzL21kL21kLmg6MjE3OlxcdHN0cnVjdCBrZXJuZnNfbm9kZSAqc3lzZnNfYmFkYmxvY2tzO1xcbmRyaXZlcnMvbWQvbWQuaDoyMTg6XFx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XFxuZHJpdmVycy9tZC9tZC5oLTIxOS1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0yOTk9c3RhdGljIGlubGluZSBpbnQgaXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzAxLXtcXG5kcml2ZXJzL21kL21kLmg6MzAyOlxcdGlmICh1bmxpa2VseShyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQpKSB7XFxuZHJpdmVycy9tZC9tZC5oOjMwMzpcXHRcXHRpbnQgcnYgPSBiYWRibG9ja3NfY2hlY2soXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcmRldi1cXHUwMDNlZGF0YV9vZmZzZXQgKyBzLFxcbmRyaXZlcnMvbWQvbWQuaC0zMDQtXFx0XFx0XFx0XFx0XFx0c2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0zMTM9c3RhdGljIGlubGluZSBpbnQgcmRldl9oYXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzIxLVxcbmRyaXZlcnMvbWQvbWQuaDozMjI6ZXh0ZXJuIGJvb2wgcmRldl9zZXRfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmgtMzIzLVxcdFxcdFxcdCAgICAgICBpbnQgaXNfbmV3KTtcXG5kcml2ZXJzL21kL21kLmg6MzI0OmV4dGVybiB2b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmgtMzI1LVxcdFxcdFxcdFxcdCBpbnQgaXNfbmV3KTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0xMDczPXN0YXRpYyBpbmxpbmUgYm9vbCByZGV2X2Jsb2NrZWQoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMTA4OS1cXG5kcml2ZXJzL21kL21kLmg6MTA5MDpcXHQvKiByZGV2IGlzIGJsb2NrZWQgYnkgYmFkYmxvY2tzLiAqL1xcbmRyaXZlcnMvbWQvbWQuaC0xMDkxLVxcdGlmICh0ZXN0X2JpdChCbG9ja2VkQmFkQmxvY2tzLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS0xMC5jPTI3OD1zdGF0aWMgaW5saW5lIGJvb2wgcmFpZDFfc2hvdWxkX3JlYWRfZmlyc3Qoc3RydWN0IG1kZGV2ICptZGRldixcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEtMTAuYy0yOTMtICogYmlvIHdpdGggUkVRX1JBSEVBRCBvciBSRVFfTk9XQUlUIGNhbiBmYWlsIGF0IGFueXRpbWUsIGJlZm9yZSBzdWNoIElPIGlzXFxuZHJpdmVycy9tZC9yYWlkMS0xMC5jOjI5NDogKiBzdWJtaXR0ZWQgdG8gdGhlIHVuZGVybHlpbmcgZGlza3MsIGhlbmNlIGRvbid0IHJlY29yZCBiYWRibG9ja3Mgb3IgcmV0cnlcXG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjk1LSAqIGluIHRoaXMgY2FzZS5cXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yMTQwPXN0YXRpYyBpbnQgcjFfc3luY19wYWdlX2lvKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjE1My1cXHQvKiBuZWVkIHRvIHJlY29yZCBhbiBlcnJvciAtIGVpdGhlciBmb3IgdGhlIGJsb2NrIG9yIHRoZSBkZXZpY2UgKi9cXG5kcml2ZXJzL21kL3JhaWQxLmM6MjE1NDpcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdG9yLCBzZWN0b3JzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjE1NS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yMTU4PXN0YXRpYyBpbnQgZml4X3N5bmNfcmVhZF9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yMjMyLVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRyaXZlcnMvbWQvcmFpZDEuYzoyMjMzOlxcdFxcdFxcdFxcdGlmICghcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3QsIHMsIDApKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yMjM0LVxcdFxcdFxcdFxcdFxcdGFib3J0ID0gMTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yNDMyPXN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzItXFx0XFx0XFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVxcdTAwM2VtaXJyb3JzW3JlYWRfZGlza10ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQxLmM6MjQ3MzpcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdCwgcywgMCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MjUxNz1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI1MzgtXFxuZHJpdmVycy9tZC9yYWlkMS5jOjI1Mzk6XFx0aWYgKHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaGlmdCBcXHUwMDNjIDApXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI1NDAtXFx0XFx0YmxvY2tfc2VjdG9ycyA9IGxicztcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjU0MS1cXHRlbHNlXFxuZHJpdmVycy9tZC9yYWlkMS5jOjI1NDI6XFx0XFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcXHUwMDNjXFx1MDAzYyByZGV2LVxcdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI1NDMtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjU3MS1cXHRcXHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9yYWlkMS5jOjI1NzI6XFx0XFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdG9yLCBzZWN0b3JzLCAwKSkge1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTczLVxcdFxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MjU4OD1zdGF0aWMgdm9pZCBoYW5kbGVfc3luY193cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTk4LVxcdFxcdCAgICB0ZXN0X2JpdChSMUJJT19NYWRlR29vZCwgXFx1MDAyNnIxX2Jpby1cXHUwMDNlc3RhdGUpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTk5OlxcdFxcdFxcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cXHUwMDNlc2VjdG9yLCBzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjYwMC1cXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9zdGF0dXMgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjYwMS1cXHRcXHQgICAgdGVzdF9iaXQoUjFCSU9fV3JpdGVFcnJvciwgXFx1MDAyNnIxX2Jpby1cXHUwMDNlc3RhdGUpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNjAyOlxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCByMV9iaW8tXFx1MDAzZXNlY3RvciwgcywgMCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDMtXFx0fVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTI2MDg9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MTUtXFx0XFx0XFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVxcdTAwM2VtaXJyb3JzW21dLnJkZXY7XFxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MTY6XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MocmRldixcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjYxNy1cXHRcXHRcXHRcXHRcXHQgICAgIHIxX2Jpby1cXHUwMDNlc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTI4MDE9c3RhdGljIHNlY3Rvcl90IHJhaWQxX3N5bmNfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk3My1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXFx1MDAzZW1pcnJvcnNbaV0ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQxLmM6Mjk3NDpcXHRcXHRcXHRcXHRvayA9IHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzZWN0b3JfbnIsXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI5NzUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bWluX2JhZCwgMFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI5ODItXFx0XFx0aWYgKCFvaylcXG5kcml2ZXJzL21kL3JhaWQxLmM6Mjk4MzpcXHRcXHRcXHQvKiBDYW5ub3QgcmVjb3JkIHRoZSBiYWRibG9ja3MsIG1kX2Vycm9yIGhhcyBzZXQgSU5UUixcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk4NC1cXHRcXHRcXHQgKiBhYm9ydCB0aGUgcmVzeW5jLlxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNDg3PXN0YXRpYyB2b2lkIGZpeF9yZWNvdmVyeV9yZWFkX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDItXFx0XFx0XFx0ICovXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNTQzOlxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBhZGRyLCBzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDQtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDgtXFx0XFx0XFx0XFx0YWRkciA9IHIxMF9iaW8tXFx1MDAzZWRldnNbMV0uYWRkciArIHNlY3Q7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNTQ5OlxcdFxcdFxcdFxcdG9rID0gcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYyLCBhZGRyLCBzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NTAtXFx0XFx0XFx0XFx0aWYgKCFvaykge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNjA2PXN0YXRpYyBpbnQgcjEwX3N5bmNfcGFnZV9pbyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNjIxLVxcdC8qIG5lZWQgdG8gcmVjb3JkIGFuIGVycm9yIC0gZWl0aGVyIGZvciB0aGUgYmxvY2sgb3IgdGhlIGRldmljZSAqL1xcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjYyMjpcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdG9yLCBzZWN0b3JzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI2MjMtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jPTI2MzQ9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI2OTctXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNjk4OlxcdFxcdFxcdGlmICghcmRldl9zZXRfYmFkYmxvY2tzKFxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjY5OS1cXHRcXHRcXHRcXHQgICAgcmRldixcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9Mjc4OT1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTAtXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODExOlxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2hpZnQgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgxMi1cXHRcXHRibG9ja19zZWN0b3JzID0gbGJzO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgxMy1cXHRlbHNlXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODE0OlxcdFxcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXFx1MDAzY1xcdTAwM2MgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgxNS1cXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgzNS1cXHRcXHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODM2OlxcdFxcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yODM3LVxcdFxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jPTI4OTA9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkwOS1cXHRcXHRcXHRpZiAoIXIxMF9iaW8tXFx1MDAzZWRldnNbbV0uYmlvLVxcdTAwM2ViaV9zdGF0dXMpXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTEwOlxcdFxcdFxcdFxcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKFxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkxMS1cXHRcXHRcXHRcXHRcXHRyZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE0LVxcdFxcdFxcdGVsc2VcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5MTU6XFx0XFx0XFx0XFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHIxMF9iaW8tXFx1MDAzZWRldnNbbV0uYWRkcixcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkyMy1cXHRcXHRcXHRpZiAoIXIxMF9iaW8tXFx1MDAzZWRldnNbbV0ucmVwbF9iaW8tXFx1MDAzZWJpX3N0YXR1cylcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5MjQ6XFx0XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MoXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTI1LVxcdFxcdFxcdFxcdFxcdHJkZXYsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MjgtXFx0XFx0XFx0ZWxzZVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjkyOTpcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldixcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgcjEwX2Jpby1cXHUwMDNlZGV2c1ttXS5hZGRyLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTQwLVxcdFxcdFxcdGlmIChiaW8gPT0gSU9fTUFERV9HT09EKSB7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTQxOlxcdFxcdFxcdFxcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKFxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjk0Mi1cXHRcXHRcXHRcXHRcXHRyZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTUzLVxcdFxcdFxcdGlmIChyZGV2IFxcdTAwMjZcXHUwMDI2IGJpbyA9PSBJT19NQURFX0dPT0QpIHtcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5NTQ6XFx0XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MoXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTU1LVxcdFxcdFxcdFxcdFxcdHJkZXYsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jPTMxNjk9c3RhdGljIHNlY3Rvcl90IHJhaWQxMF9zeW5jX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zNDcxLVxcdFxcdFxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSW5fc3luYywgXFx1MDAyNm1yZGV2LVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9tZC9yYWlkMTAuYzozNDcyOlxcdFxcdFxcdFxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bXJkZXYsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzYtXFx0XFx0XFx0XFx0XFx0aWYgKG1yZXBsYWNlKVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzQ3NzpcXHRcXHRcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MoXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zNDc4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG1yZXBsYWNlLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTI3MjU9c3RhdGljIHZvaWQgcmFpZDVfZW5kX3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICogYmkpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtMjgzOS1cXHRcXHRcXHRpZiAoIShzZXRfYmFkIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KEluX3N5bmMsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpKVxcbmRyaXZlcnMvbWQvcmFpZDUuYzoyODQwOlxcdFxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzaC1cXHUwMDNlc2VjdG9yLFxcbmRyaXZlcnMvbWQvcmFpZDUuYy0yODQxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYz0zNjAxPWhhbmRsZV9mYWlsZWRfc3RyaXBlKHN0cnVjdCByNWNvbmYgKmNvbmYsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzYxNy1cXHRcXHRcXHRpZiAocmRldikge1xcbmRyaXZlcnMvbWQvcmFpZDUuYzozNjE4OlxcdFxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LFxcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNjE5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHNoLVxcdTAwM2VzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9MzcwMD1oYW5kbGVfZmFpbGVkX3N5bmMoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNzI4LVxcdFxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiAhdGVzdF9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKVxcbmRyaXZlcnMvbWQvcmFpZDUuYzozNzI5OlxcdFxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNoLVxcdTAwM2VzZWN0b3IsXFxuZHJpdmVycy9tZC9yYWlkNS5jLTM3MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTM3MzYtXFx0XFx0XFx0ICAgIFxcdTAwMjZcXHUwMDI2ICF0ZXN0X2JpdChJbl9zeW5jLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpXFxuZHJpdmVycy9tZC9yYWlkNS5jOjM3Mzc6XFx0XFx0XFx0ICAgIFxcdTAwMjZcXHUwMDI2ICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2gtXFx1MDAzZXNlY3RvcixcXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzczOC1cXHRcXHRcXHRcXHRcXHRcXHQgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCkpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9NDkyNj1zdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI4Mi1cXHRcXHRcXHRcXHRyZGV2ID0gY29uZi1cXHUwMDNlZGlza3NbaV0ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NTI4MzpcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2gtXFx1MDAzZXNlY3RvcixcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCk7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI4OC1cXHRcXHRcXHRcXHRyZGV2ID0gY29uZi1cXHUwMDNlZGlza3NbaV0ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NTI4OTpcXHRcXHRcXHRcXHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhyZGV2LCBzaC1cXHUwMDNlc2VjdG9yLFxcbmRyaXZlcnMvbWQvcmFpZDUuYy01MjkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTUyOTctXFx0XFx0XFx0XFx0XFx0cmRldiA9IGNvbmYtXFx1MDAzZWRpc2tzW2ldLnJkZXY7XFxuZHJpdmVycy9tZC9yYWlkNS5jOjUyOTg6XFx0XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MocmRldiwgc2gtXFx1MDAzZXNlY3RvcixcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI5OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MzcuNDg4NjM4MTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzY0OTQ1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBiYWRibG9ja3NgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBicm9hZGx5IHRoZSBgYmFkYmxvY2tzYCBjb2RlIGlzIHV0aWxpemVkLiBJdCdzIG5vdCBqdXN0IGEgc3RhbmRhbG9uZSB1dGlsaXR5OyBpdCdzIGludGVncmF0ZWQgaW50byBzZXZlcmFsIGJsb2NrIGRldmljZSBkcml2ZXJzLiBJIGtub3cgZm9yIHN1cmUgaXQncyB1c2VkIGJ5IHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBudWxsIGJsb2NrIGRldmljZSBmb3IgdGVzdGluZy4gVGhlbiwgaXQncyBhbHNvIGZ1bmRhbWVudGFsIHRvIHRoZSBSQUlEIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gYG1kYCwgc3BlY2lmaWNhbGx5IFJBSUQxLCBSQUlEMTAsIGFuZCBSQUlENS4gVGhhdCBtYWtlcyBzZW5zZSwgY2hlY2tpbmcgdGhlIHVuZGVybHlpbmcgZHJpdmVzIGlzIGNydWNpYWwgZm9yIFJBSUQgY29uc2lzdGVuY3kuIEkgYWxzbyByZWNhbGwgaXQgYmVpbmcgcmVsZXZhbnQgdG8gTlZESU1NIGRldmljZXM7IHRoZSBgbnZkaW1tYCBkcml2ZXIuXG5cbkdpdmVuIHRoaXMgYnJlYWR0aCBvZiB1c2FnZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGVzZSBmZWF0dXJlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBzcGVjaWZpYyBzeW1ib2xzLiBJIGJlbGlldmUgdGhleSdyZTogYEJMS19ERVZfTlVMTF9CTEtgIGZvciB0aGUgbnVsbCBibG9jayBkZXZpY2UsIGFuZCBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYW5kIGBNRF9SQUlENDU2YCBmb3IgdGhlIHJlc3BlY3RpdmUgUkFJRCBsZXZlbHMuIEZvciBOVkRJTU0sIHRoZXJlIGFyZSBgQlRUYCwgd2hpY2ggSSB0aGluayBpcyB0aGUgQmxvY2sgVHJhbnNsYXRpb24gVGFibGUsIGFuZCBgQkxLX0RFVl9QTUVNYCwgcmVwcmVzZW50aW5nIHBlcnNpc3RlbnQgbWVtb3J5LlxuXG5UbyBkZXRlcm1pbmUgaWYgdGhlc2Ugc3ltYm9scyBhcmUgY29ycmVjdGx5IGRlZmluZWQgYW5kIHBlcmhhcHMgZXhwbG9yZSB0aGUgZGVwZW5kZW5jaWVzIGZ1cnRoZXIsIEkgd2lsbCBpbW1lZGlhdGVseSBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgYmxvY2svS2NvbmZpZ2AgYW5kIHBvdGVudGlhbGx5IGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHNpbmNlIGBudWxsX2Jsa2Agc2VlbXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjQ4Ljg1MzU4NTkxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwMTM2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlVMTF9CTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjQ4LjkxNzYwNzAyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM5NjA1ODQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOlxuXG4qKkludmVzdGlnYXRpbmcgTUQgUkFJRCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlci4gV2hlcmUgd291bGQgSSBmaW5kIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IEtjb25maWcgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBnbyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQgd2hlcmUgd291bGQgdGhlIE1EIGRyaXZlcidzIEtjb25maWcgcmVzaWRlPyBMb2dpY2FsbHksIGluIGBkcml2ZXJzL21kL0tjb25maWdgLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQncyB0aGUgY29ycmVjdCBwYXRoLiBPa2F5LCBsZXQgbWUgZ28gaGF2ZSBhIGxvb2sgaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIGBDT05GSUdfTURfUkFJRDBgLCBgQ09ORklHX01EX1JBSUQxYCwgZXRjLiwgYW5kIHByb2JhYmx5IHNvbWUgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNodW5rIHNpemVzLCBmYXVsdCB0b2xlcmFuY2UsIGFuZCB0aGUgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MjQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowNDowNy4zMTM2Njc5NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTI4MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRF9SQUlEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZz05MT1jb25maWcgTURfTElORUFSXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTAzLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxMDQ6Y29uZmlnIE1EX1JBSUQwXFxuZHJpdmVycy9tZC9LY29uZmlnLTEwNS1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0wIChzdHJpcGluZykgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9tZC9LY29uZmlnOjEyNDpjb25maWcgTURfUkFJRDFcXG5kcml2ZXJzL21kL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJSQUlELTEgKG1pcnJvcmluZykgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDUtXFxuZHJpdmVycy9tZC9LY29uZmlnOjE0Njpjb25maWcgTURfUkFJRDEwXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTY0LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNjU6Y29uZmlnIE1EX1JBSUQ0NTZcXG5kcml2ZXJzL21kL0tjb25maWctMTY2LVxcdHRyaXN0YXRlIFxcXCJSQUlELTQvUkFJRC01L1JBSUQtNiBtb2RlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowNDowNy4zODY2MDA0OTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MDcyMzc5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlbHZpbmcgaW50byBCYWRibG9ja3MgYW5kIGl0cyBQbGFjZSBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsICpiYWRibG9ja3MqLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYmxvY2sgbGF5ZXIsIG5vIGRvdWJ0LiBCdXQgSSBuZWVkIHRvIHJlbWVtYmVyLCBpdCdzIG5vdCBzb21lIGlzb2xhdGVkIGNvbmZpZ3VyYXRpb24gc3dpdGNoIGxpa2UgYENPTkZJR19GT09CQVJgLiBJdCdzIG1vcmUgb2YgYSAqY2FwYWJpbGl0eSogdGhhdCBnZXRzIGludGVncmF0ZWQgYmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIFNvLCBpdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSBpc24ndCBhYm91dCBlbmFibGluZyBpdCBnbG9iYWxseSwgaXQncyBhYm91dCB0aGUgZHJpdmVyICp1c2luZyogaXQgd2hlbiBpdCBtYWtlcyBzZW5zZS5cblxuSnVzdCB0byBiZSBzdXJlLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJl4oCZcyBhIGNvbmZpZ3VyYXRpb24gc3ltYm9sIOKAkyBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0JBREJMT0NLU2Ag4oCTIGhhbmdpbmcgYXJvdW5kIHNvbWV3aGVyZSBpbiB0aGUga2VybmVsIGNvbmZpZyB0aGF0IHByb3ZpZGVzIGEgbW9yZSBkZWZpbml0aXZlIGFuc3dlci4gR290dGEgY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnMgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDQ6MTkuMjkzODQyMjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjUwMDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9OD1vYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4tLVxcbmJsb2NrL01ha2VmaWxlLTEyLVxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZToxMzpcXHRcXHRcXHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtMTQtXFx0XFx0XFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDQ6MTkuNjEwMzQ5MjM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjY3NjEwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJhZGJsb2NrcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBiYWRibG9ja3NgIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgYW5kIGhlcmUncyB3aGF0IEkndmUgZmlndXJlZCBvdXQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgYGJhZGJsb2Nrcy5vYCBtb2R1bGUgaXMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGluIGBibG9jay9NYWtlZmlsZWAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgbWVhbnMgd2UgZG9uJ3QgYWN0dWFsbHkgKm5lZWQqIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24ganVzdCB0byBnZXQgYGJhZGJsb2Nrcy5vYCBpdHNlbGYgYnVpbHQuIEl0J3MgbW9yZSBhYm91dCBlbnN1cmluZyB0aGF0IGRyaXZlcnMgd2hpY2ggKnVzZSogYmFkYmxvY2tzIGFyZSBlbmFibGVkLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24uXG5cblRoaW5raW5nIGFib3V0IHdoaWNoIGRyaXZlcnMgYXJlIGdvb2QgdGVzdCBjYXNlcywgYEJMS19ERVZfTlVMTF9CTEtgIHNlZW1zIHBlcmZlY3QuIFRoZSBmYWN0IHRoYXQgaXQgYWxsb3dzIHNldHRpbmcgYmFkYmxvY2tzIHZpYSBjb25maWdmcyBhbmQgdGhlbiBkb2luZyBJL08gdG8gdHJpZ2dlciBgYmFkYmxvY2tzX2NoZWNrYCBpcyByZWFsbHkgY29udmVuaWVudC4gYE1EX1JBSUQxYCwgYE1EX1JBSUQxMGAsIGFuZCBgTURfUkFJRDQ1NmAgYWxzbyBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzLCBnaXZlbiB0aGVpciBwb3RlbnRpYWwgdG8gaW50ZXJhY3Qgd2l0aCBiYWQgYmxvY2sgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIGp1c3Qgc2F3IHRoYXQgYF9iYWRibG9ja3Nfc2V0YCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgIGFyZSBzdGF0aWMhIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgZGlyZWN0bHkgZXhwb3NlZC4gVGhlIGFjdHVhbCBleHBvcnRlZCBvbmVzIGFyZSBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXMuIE9rYXksIGdvdCBpdC4gSSdsbCB2ZXJpZnkgdGhhdCBJIGhhdmUgdGhlIGNvcnJlY3QgbmFtZXMgb2YgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDQ6MjkuODc3OTYyMjY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDEyMTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipiYWRibG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmFkYmxvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmFkYmxvY2tzLmM9MTMyNT1pbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM2MTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2hlY2spO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjItXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMzc5PWJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzODQ6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3NldCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM4NS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MDA9Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDAzLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDA0OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jbGVhcik7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwNS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9dm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYilcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NDAtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoYWNrX2FsbF9iYWRibG9ja3MpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NDItXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNDUyPXNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0OTA6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNTAyPXNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNi19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTUyNzpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc3RvcmUpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjgtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNTYwPWludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NjMtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NjQ6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2luaXQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NjUtXFxuYmxvY2svYmFkYmxvY2tzLmM9MTU2Nj1pbnQgZGV2bV9pbml0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU3MS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTU3MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2luaXRfYmFkYmxvY2tzKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xNTczLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTU3OD12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU4Ny19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTU4ODpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjA0OjI5Ljk0ODA5Mjg3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUyMzU3NDQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIEJhZGJsb2NrcyBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldmlzZSBhIGZ1enppbmcgc3RyYXRlZ3kgZm9yIHRoZSByZWNlbnQgYGJhZGJsb2Nrc2AgY29kZSBtb2RpZmljYXRpb25zLiBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZpeGVzIGZvciBpbnRlZ2VyIG92ZXJmbG93cywgc2hpZnQgdmFsdWVzLCBhbmQgcm91bmRpbmcgaXNzdWVzIGFyZSByb2J1c3QsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgZ25hcmx5IGVkZ2UgY2FzZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgY2VudGVyIGFyb3VuZCB0aGUgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgZnVuY3Rpb25zLiBXaGlsZSBgX2JhZGJsb2Nrc19zZXRgIGFuZCBgX2JhZGJsb2Nrc19jbGVhcmAgYXJlIHN0YXRpYywgdGhleSBjb3VsZCBzdGlsbCBiZSB0YXJnZXRlZCBpZiB0aGVpciBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEknbGwgaW5jbHVkZSBib3RoIHN0YXRpYyBhbmQgZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXMgaW4gbXkgZm9jdXMgbGlzdC5cblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBob3cgYGJhZGJsb2Nrc19zdG9yZWAgaXMgdXNlZCwgYXMgaXQgcGFyc2VzIHVzZXIgaW5wdXQuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgYG51bGxfYmxrYCBkaXJlY3RseSBjYWxscyBgYmFkYmxvY2tzX3NldGAgYW5kIGBiYWRibG9ja3NfY2xlYXJgLCBieXBhc3NpbmcgYGJhZGJsb2Nrc19zdG9yZWAuIFRoYXQncyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgY292ZXJhZ2UuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgY29yZSBmdW5jdGlvbnMgSSBtZW50aW9uZWQ6IGBiYWRibG9ja3Nfc2V0YCwgYGJhZGJsb2Nrc19jbGVhcmAsIGBiYWRibG9ja3NfY2hlY2tgLCBgX2JhZGJsb2Nrc19zZXRgLCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgLlxuXG5JIGFsc28gY2hlY2tlZCB0aGUgcGF0Y2ggaXRzZWxmLCB3aGljaCBjbGVhcmx5IGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW50cm9kdWNlcyBiZXR0ZXIgc2hpZnQgdmFsdWUgaGFuZGxpbmcsIGFuZCBjb3JyZWN0cyB0aGUgcm91bmRpbmcgbG9naWMgYnkgdXRpbGl6aW5nIGByb3VuZF9kb3duYCBhbmQgYHJvdW5kX3VwYCBwcm9wZXJseS4gSSBzZWUgY2hlY2tzIHdlcmUgYWRkZWQgdG8gZW5zdXJlIHRoZSBjYWxjdWxhdGlvbnMgZG9uJ3Qgd3JhcCBhbmQgdGhhdCBzaGlmdCB2YWx1ZXMgYXJlIHZhbGlkLiBUaGlzIHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0J3MgYWxsIGFib3V0IGhhbmRsaW5nIHRob3NlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseSwgd2l0aG91dCBjYXVzaW5nIGNyYXNoZXMgb3IgY29ycnVwdGluZyBtZW1vcnkuXG5cblRvIGdldCB0aGUgbmVjZXNzYXJ5IGNvZGUgY292ZXJhZ2UsIHRoZSBgQkxLX0RFVl9OVUxMX0JMS2AgYW5kIGBNRF8qYCBjb25maWdzIGFyZSBjcnVjaWFsLiBUaGVzZSB3aWxsIGVuYWJsZSByZWxldmFudCBwYXRocy4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIGhhcyBzaG93biBgQ09ORklHX0JUVGAgYW5kIGBDT05GSUdfQkxLX0RFVl9QTUVNYCBhcmUgbm90IHJlcXVpcmVkLlxuXG5TbywgaGVyZSdzIG15IHBsYW46IEknbGwgdGFyZ2V0IHRob3NlIGtleSBmdW5jdGlvbnMgKGBiYWRibG9ja3Nfc2V0YCwgYGJhZGJsb2Nrc19jbGVhcmAsIGBiYWRibG9ja3NfY2hlY2tgLCBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmApIHdoaWxlIHJ1bm5pbmcgdGhlIGtlcm5lbCB3aXRoIHRoZSBgQkxLX0RFVl9OVUxMX0JMS2AsIGBNRF9SQUlEMWAsIGBNRF9SQUlEMTBgLCBhbmQgYE1EX1JBSUQ0NTZgIGNvbmZpZ3MgZW5hYmxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY292ZXJhZ2UgSSBuZWVkIHRvIGZpbmQgYW55IGxpbmdlcmluZyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzgzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowNDo0My40NzE2NjkxNDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUxNzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTURfUkFJRDQ1NlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhZGJsb2Nrc19zZXRcIixcbiAgICBcImJhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCIsXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGludGVnZXIgb3ZlcmZsb3dzLCBpbnZhbGlkIHNoaWZ0IHZhbHVlcywgYW5kIGluY29ycmVjdCByb3VuZGluZyBsb2dpYyBpbiB0aGUgYmFkYmxvY2tzIG1hbmFnZW1lbnQgY29kZS4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCBlZGdlIGNhc2VzIChsaWtlIGxhcmdlIHNlY3RvciBudW1iZXJzIG9yIGludmFsaWQgc2hpZnQgdmFsdWVzKSBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTURfUkFJRDQ1NlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhZGJsb2Nrc19zZXRcIixcbiAgICBcImJhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCIsXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGludGVnZXIgb3ZlcmZsb3dzLCBpbnZhbGlkIHNoaWZ0IHZhbHVlcywgYW5kIGluY29ycmVjdCByb3VuZGluZyBsb2dpYyBpbiB0aGUgYmFkYmxvY2tzIG1hbmFnZW1lbnQgY29kZS4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCBlZGdlIGNhc2VzIChsaWtlIGxhcmdlIHNlY3RvciBudW1iZXJzIG9yIGludmFsaWQgc2hpZnQgdmFsdWVzKSBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 08:50:57 +0000 UTC FinishedAt: 2026-07-10 10:04:44 +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": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "MD_RAID1", "MD_RAID10", "MD_RAID456" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "MD_RAID1", "MD_RAID10", "MD_RAID456" ], "series_id": "eb54f8e1-3b8e-4595-a7d7-556842de17ba" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "badblocks_set", "badblocks_clear", "badblocks_check", "_badblocks_set", "_badblocks_clear" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O01EX1JBSUQ0NTYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jbGVhciYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW52YWxpZCBzaGlmdCB2YWx1ZXMsIGFuZCBpbmNvcnJlY3Qgcm91bmRpbmcgbG9naWMgaW4gdGhlIGJhZGJsb2NrcyBtYW5hZ2VtZW50IGNvZGUuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgZWRnZSBjYXNlcyAobGlrZSBsYXJnZSBzZWN0b3IgbnVtYmVycyBvciBpbnZhbGlkIHNoaWZ0IHZhbHVlcykgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTY0YmJlMGViNmU0ZjIyZTAwOTZkMmFlMjdjYzIwNjY0NzY5ZTdjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAyOjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmZmLi4wMGE1OTcyOTYwMGFhOCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iYWRibG9ja3MuY1xuQEAgLTg1MywxMiAmIzQzOzg1MywyMyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbiBcdFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKHMgXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxuJiM0MztcdFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGJiLVx1MDAzZXNoaWZ0KSB7XG4gXHRcdC8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqL1xuIFx0XHRzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0cyA9IHJvdW5kX2Rvd24ocywgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdG5leHQgPSByb3VuZF91cChuZXh0LCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0aWYgKG5leHQgXHUwMDNjPSBzKVxuJiM0MztcdFx0XHQvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdHNlY3RvcnMgPSBuZXh0IC0gcztcbiBcdH1cbiBcbkBAIC0xMDYxLDcgJiM0MzsxMDcyLDEyIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4gXHRcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdGlmIChzIFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcbiYjNDM7XHRcdC8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCkge1xuJiM0MztcdFx0c2VjdG9yX3Qgb3JpZ19zID0gcztcbiBcdFx0c2VjdG9yX3QgdGFyZ2V0O1xuIFxuIFx0XHQvKiBXaGVuIGNsZWFyaW5nIHdlIHJvdW5kIHRoZSBzdGFydCB1cCBhbmQgdGhlIGVuZCBkb3duLlxuQEAgLTEwNzAsMTAgJiM0MzsxMDg2LDIxIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4gXHRcdCAqIEhvd2V2ZXIgaXQgaXMgYmV0dGVyIHRoZSB0aGluayBhIGJsb2NrIGlzIGJhZCB3aGVuIGl0XG4gXHRcdCAqIGlzbiYjMzk7dCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLlxuIFx0XHQgKi9cbiYjNDM7XHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0XHR0YXJnZXQgPSBzICYjNDM7IHNlY3RvcnM7XG4tXHRcdHJvdW5kdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZGRvd24odGFyZ2V0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuJiM0MztcdFx0cyA9IHJvdW5kX3VwKHMsIChzZWN0b3JfdCkxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4mIzQzO1x0XHR0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmIChzIFx1MDAzYyBvcmlnX3MgfHwgdGFyZ2V0IFx1MDAzYyBzKVxuJiM0MztcdFx0XHQvKiBSb3VuZGluZyB3cmFwcGVkLCBvciByYW5nZSBjb2xsYXBzZWQgKi9cbiYjNDM7XHRcdFx0c2VjdG9ycyA9IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZWN0b3JzID09IDApXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdHdyaXRlX3NlcWxvY2tfaXJxKFx1MDAyNmJiLVx1MDAzZWxvY2spO1xuQEAgLTEzMDMsMTIgJiM0MzsxMzMwLDIzIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4gXG4gXHRXQVJOX09OKGJiLVx1MDAzZXNoaWZ0IFx1MDAzYyAwIHx8IHNlY3RvcnMgPT0gMCk7XG4gXG4mIzQzO1x0aWYgKHMgXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxuJiM0MztcdFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNlIDApIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9ycztcbiBcbi1cdFx0cm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0cm91bmR1cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRzID0gcm91bmRfZG93bihzLCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0dGFyZ2V0ID0gcm91bmRfdXAodGFyZ2V0LCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0aWYgKHRhcmdldCBcdTAwM2M9IHMpXG4mIzQzO1x0XHRcdC8qIFJvdW5kaW5nIHdyYXBwZWQgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDssCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgaW50ZWdlciBvdmVyZmxvd3MsIGludmFsaWQgc2hpZnQgdmFsdWVzLCBhbmQgaW5jb3JyZWN0IHJvdW5kaW5nIGxvZ2ljIGluIHRoZSBiYWRibG9ja3MgbWFuYWdlbWVudCBjb2RlLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGVkZ2UgY2FzZXMgKGxpa2UgbGFyZ2Ugc2VjdG9yIG51bWJlcnMgb3IgaW52YWxpZCBzaGlmdCB2YWx1ZXMpIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTY0YmJlMGViNmU0ZjIyZTAwOTZkMmFlMjdjYzIwNjY0NzY5ZTdjZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAyOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuYwppbmRleCBlY2U2NGU3NmZlOGZmZi4uMDBhNTk3Mjk2MDBhYTggMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JhZGJsb2Nrcy5jCkBAIC04NTMsMTIgJiM0Mzs4NTMsMjMgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsCiAJCS8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi8KIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChzICZndDsgVUxMT05HX01BWCAtIHNlY3RvcnMpCiYjNDM7CQkvKiBSYW5nZSB3cmFwcyBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi8KJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlpZiAoYmItJmd0O3NoaWZ0KSB7CiAJCS8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqLwogCQlzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzOwogCi0JCXJvdW5kZG93bihzLCAxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7Ci0JCXJvdW5kdXAobmV4dCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7PSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQkJLyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqLwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCXMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7CiYjNDM7CQluZXh0ID0gcm91bmRfdXAobmV4dCwgKHNlY3Rvcl90KTEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCWlmIChuZXh0ICZsdDs9IHMpCiYjNDM7CQkJLyogUm91bmRpbmcgd3JhcHBlZCBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi8KJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAJCXNlY3RvcnMgPSBuZXh0IC0gczsKIAl9CiAKQEAgLTEwNjEsNyAmIzQzOzEwNzIsMTIgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycykKIAkJLyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqLwogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHMgJmd0OyBVTExPTkdfTUFYIC0gc2VjdG9ycykKJiM0MzsJCS8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmIChiYi0mZ3Q7c2hpZnQpIHsKJiM0MzsJCXNlY3Rvcl90IG9yaWdfcyA9IHM7CiAJCXNlY3Rvcl90IHRhcmdldDsKIAogCQkvKiBXaGVuIGNsZWFyaW5nIHdlIHJvdW5kIHRoZSBzdGFydCB1cCBhbmQgdGhlIGVuZCBkb3duLgpAQCAtMTA3MCwxMCAmIzQzOzEwODYsMjEgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycykKIAkJICogSG93ZXZlciBpdCBpcyBiZXR0ZXIgdGhlIHRoaW5rIGEgYmxvY2sgaXMgYmFkIHdoZW4gaXQKIAkJICogaXNuJiMzOTt0IHRoYW4gdG8gdGhpbmsgYSBibG9jayBpcyBub3QgYmFkIHdoZW4gaXQgaXMuCiAJCSAqLwomIzQzOwkJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7PSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQkJLyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqLwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkJdGFyZ2V0ID0gcyAmIzQzOyBzZWN0b3JzOwotCQlyb3VuZHVwKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKLQkJcm91bmRkb3duKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKJiM0MzsJCXMgPSByb3VuZF91cChzLCAoc2VjdG9yX3QpMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJdGFyZ2V0ID0gcm91bmRfZG93bih0YXJnZXQsIChzZWN0b3JfdCkxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7CiYjNDM7CQlpZiAocyAmbHQ7IG9yaWdfcyB8fCB0YXJnZXQgJmx0OyBzKQomIzQzOwkJCS8qIFJvdW5kaW5nIHdyYXBwZWQsIG9yIHJhbmdlIGNvbGxhcHNlZCAqLwomIzQzOwkJCXNlY3RvcnMgPSAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXNlY3RvcnMgPSB0YXJnZXQgLSBzOwomIzQzOwomIzQzOwkJaWYgKHNlY3RvcnMgPT0gMCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJd3JpdGVfc2VxbG9ja19pcnEoJmFtcDtiYi0mZ3Q7bG9jayk7CkBAIC0xMzAzLDEyICYjNDM7MTMzMCwyMyBAQCBpbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLAogCiAJV0FSTl9PTihiYi0mZ3Q7c2hpZnQgJmx0OyAwIHx8IHNlY3RvcnMgPT0gMCk7CiAKJiM0MzsJaWYgKHMgJmd0OyBVTExPTkdfTUFYIC0gc2VjdG9ycykKJiM0MzsJCS8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqLwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7IDApIHsKIAkJLyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovCiAJCXNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9yczsKIAotCQlyb3VuZGRvd24ocywgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlyb3VuZHVwKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7PSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQkJLyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqLwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcyA9IHJvdW5kX2Rvd24ocywgKHNlY3Rvcl90KTEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCXRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgKHNlY3Rvcl90KTEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCWlmICh0YXJnZXQgJmx0Oz0gcykKJiM0MzsJCQkvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqLwomIzQzOwkJCXJldHVybiAwOwogCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJhZGJsb2NrcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIHNxdWFyZWx5IGF0IGBibG9jay9iYWRibG9ja3MuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBmb2N1c2VkIG9uIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIGJhZCBibG9jayBoYW5kbGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBzb21lIGNyaXRpY2FsIGNoZWNrcy4gRmlyc3QsIGl0IGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggc2VjdG9yIHJhbmdlcyB0aGF0IHdyYXAgYXJvdW5kIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBzZWN0b3JfdGAgKHRoYXQmIzM5O3MgYFVMTE9OR19NQVhgIGZvciBhIDY0LWJpdCB1bnNpZ25lZCBsb25nIGxvbmcsIGluIGNhc2UgSSBuZWVkIGEgcmVtaW5kZXIgbGF0ZXIpLiBTbWFydC4gSXQmIzM5O3MgYWxzbyBjb25jZXJuZWQgd2l0aCBndWFyZGluZyBhZ2FpbnN0IGNvcnJ1cHRlZCBvciB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBgYmItJmd0O3NoaWZ0YC4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgcm91bmRpbmcgbG9naWMgd2l0aGluIHRoZSBmdW5jdGlvbnMgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIFRoZXkgYXJlIHJlcGxhY2luZyB0aGUgdXNlIG9mIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAgd2l0aCBgcm91bmRfZG93bmAgYW5kIGByb3VuZF91cGAuIEhtbSwgSSB3b25kZXIgd2hhdCB0aGUgZGVhbCBpcyB0aGVyZT8gV2FpdCBhIHNlY29uZC4uLiBUaG9zZSBMaW51eCBrZXJuZWwgbWFjcm9zLCBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgLCAqcmV0dXJuKiB0aGUgcm91bmRlZCB2YWx1ZSwgdGhleSBkb24mIzM5O3QgbW9kaWZ5IHRoZWlyIGFyZ3VtZW50IGluIHBsYWNlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgdGhvc2UgbWFjcm9zIGJ1dCBub3QgYXNzaWduaW5nIHRoZSByZXR1cm5lZCB2YWx1ZSwgc28gaXQgd2FzIGJhc2ljYWxseSBqdXN0IHRocm93aW5nIGF3YXkgdGhlIHJvdW5kZWQgdmFsdWUhIEZvciBleGFtcGxlLCBgcm91bmRkb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTtgIHdhcyBiYXNpY2FsbHkgYSBuby1vcCBhcyBmYXIgYXMgKnMqIHdhcyBjb25jZXJuZWQhIFRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBleHBsaWNpdGx5IGFzc2lnbmluZyB0aGUgcm91bmRlZCB2YWx1ZXMgYmFjayB0byB0aGUgdmFyaWFibGVzOyBgcyA9IHJvdW5kX2Rvd24oLi4uKWAgYW5kIGBuZXh0ID0gcm91bmRfdXAoLi4uKWAuIEJyaWxsaWFudCwgaXTigJlzIGZpeGluZyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGJ1Zy4KClRoZXNlIGFyZSBjcml0aWNhbCBiYWQgYmxvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGF0IHRoZSB2ZXJ5IGhlYXJ0IG9mIHRoZSBibG9jayBsYXllciwgYW5kIHRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgdXNlZCBieSB0aGluZ3MgbGlrZSBNRCAoUkFJRCkgYW5kIE5WRElNTSBtYWtlcyB0aGlzIHBhdGNoIGFsbCB0aGUgbW9yZSBzaWduaWZpY2FudC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBpbnRlZ3JpdHksIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTGV0IG1lIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC4gVGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgYmFkYmxvY2tzLmNgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgIHRvIHNlZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBhbmQgd2hhdCwgaWYgYW55LCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT04PW9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4tLVxuYmxvY2svTWFrZWZpbGUtMTItXHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbmJsb2NrL01ha2VmaWxlOjEzOlx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cdFx0XHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYGJhZGJsb2Nrcy5vYCBpcyBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgdW5jb25kaXRpb25hbGx5LCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBidWlsZHMgKGBvYmoteWApLiBCdXQgdGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBteSBtaW5kIGlzOiB3aG8gYWN0dWFsbHkgKnVzZXMqIGl0PyBJdCYjMzk7cyBhIGJpdCBvZiBhIGNvZGUgc21lbGwgdG8gaW5jbHVkZSBzb21ldGhpbmcgYmxpbmRseSB3aXRob3V0IHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcy4KClNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zZXRgLCBhbmQgYGJhZGJsb2Nrc19jbGVhcmAgYXJlIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRob3NlIGZ1bmN0aW9uIGNhbGxzIGFuZCBmaW5kIG91dCB3aGljaCBkcml2ZXJzLCBpZiBhbnksIGFyZSBsZXZlcmFnaW5nIHRoZSBgYmFkYmxvY2tzYCBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgY29uZmlybSB3aGV0aGVyIGl0cyB1bmNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIHRydWx5IHdhcnJhbnRlZCBvciBpZiBpdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBtYWRlIGNvbmRpdGlvbmFsIHRvIHNhdmUgc29tZSBrZXJuZWwgc2l6ZSBhbmQvb3IgcmVkdWNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgY2hhaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYy0yODItICogICAgIGJsb2NrcyB0YWJsZSBhcmUgYWxsIGFja2VkLCBtZXJnaW5nIHRoZW0gaW50byBhIGxhcmdlciBvbmUgcmFuZ2UgbWF5XG5ibG9jay9iYWRibG9ja3MuYzoyODM6ICogICAgIG9jY3VweSBsZXNzIGJhZCBibG9ja3MgdGFibGUgc3BhY2UgYW5kIG1ha2UgYmFkYmxvY2tzX2NoZWNrKCkgZmFzdGVyLlxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEwNjA9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjEyLS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNoZWNrIGJhZCBibG9ja3MgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMjEzOnN0YXRpYyBpbnQgX2JhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTQtXHRcdFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjkxLS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTI5MjogKiBiYWRibG9ja3NfY2hlY2soKSAtIGNoZWNrIGEgZ2l2ZW4gcmFuZ2UgZm9yIGJhZCBzZWN0b3JzXG5ibG9jay9iYWRibG9ja3MuYy0xMjkzLSAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzA3LSAqXG5ibG9jay9iYWRibG9ja3MuYzoxMzA4OiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMDktICogbWlnaHQgbmVlZCB0byByZXRyeSBpZiBpdCBpcyB2ZXJ5IHVubHVja3kuXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMjU6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjYtXHRcdFx0c2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTQtXHRzZXEgPSByZWFkX3NlcWJlZ2luKFx1MDAyNmJiLVx1MDAzZWxvY2spO1xuYmxvY2svYmFkYmxvY2tzLmM6MTM1NTpcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzU2LVx0aWYgKHJlYWRfc2VxcmV0cnkoXHUwMDI2YmItXHUwMDNlbG9jaywgc2VxKSlcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzYwLX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjE6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NoZWNrKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjItXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU1Olx0aWYgKCFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgKm5yX3NlY3RvcnMsIFx1MDAyNmZpcnN0X2JhZCwgXHUwMDI2YmFkX3NlY3RvcnMpKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1Ni1cdFx0cmV0dXJuIEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9tZC9tZC5oPTI5OT1zdGF0aWMgaW5saW5lIGludCBpc19iYWRibG9jayhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmgtMzAyLVx0aWYgKHVubGlrZWx5KHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50KSkge1xuZHJpdmVycy9tZC9tZC5oOjMwMzpcdFx0aW50IHJ2ID0gYmFkYmxvY2tzX2NoZWNrKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCByZGV2LVx1MDAzZWRhdGFfb2Zmc2V0ICYjNDM7IHMsXG5kcml2ZXJzL21kL21kLmgtMzA0LVx0XHRcdFx0XHRzZWN0b3JzLFxuLS1cbmRyaXZlcnMvbnZkaW1tL25kLmg9Njc2PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19iYWRfcG1lbShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvbnZkaW1tL25kLmgtNjgyLVxuZHJpdmVycy9udmRpbW0vbmQuaDo2ODM6XHRcdHJldHVybiAhIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBsZW4gLyA1MTIsIFx1MDAyNmZpcnN0X2JhZCxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjg0LVx0XHRcdFx0XHUwMDI2bnVtX2JhZCk7XG4tLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYz0zNTM9c3RhdGljIGludCBuZF9wZm5fY2xlYXJfbWVtbWFwX2Vycm9ycyhzdHJ1Y3QgbmRfcGZuICpuZF9wZm4pXG4tLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODMtXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjM4NDpcdFx0YmJfcHJlc2VudCA9IGJhZGJsb2Nrc19jaGVjayhcdTAwMjZuZF9yZWdpb24tXHUwMDNlYmIsIG1ldGFfc3RhcnQsXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4NS1cdFx0XHRcdG1ldGFfbnVtLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNm51bV9iYWQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0yNDI9X193ZWFrIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTgtXHRpZiAoYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU5Olx0ICAgIGJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBudW0sIFx1MDAyNmZpcnN0X2JhZCwgXHUwMDI2bnVtX2JhZCkpIHtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNjAtXHRcdGxvbmcgYWN0dWFsX25yO1xuLS1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NDU9c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTUwLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1MTppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Mi1cdFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQmFkYmxvY2sgU3VwcG9ydCBpbiBOdWxsX2JsayoqCgpPa2F5LCBzbyBgYmFkYmxvY2tzX2NoZWNrYOKApiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGluIGEgZmV3IHBsYWNlcyDigJMgYG51bGxfYmxrYCwgYG1kYCwgYW5kIGBudmRpbW1gIGNvbWUgdG8gbWluZC4gTm93LCBgbnVsbF9ibGtgIGl0c2VsZiwgdGhhdCYjMzk7cyByZWFsbHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcgdGhlIGJsb2NrIGxheWVyIOKAkyBpdCYjMzk7cyBzaW1wbGUsIHByZWRpY3RhYmxlLCBhbmQgZG9lc27igJl0IGhhdmUgdGhlIGNvbXBsZXhpdGllcyBvZiByZWFsIGhhcmR3YXJlLiBHaXZlbiB0aGF0LCBJ4oCZbSB0aGlua2luZyB3ZSBzaG91bGQgc2VlIGlmIGBudWxsX2Jsa2AgYWN0dWFsbHkgc3VwcG9ydHMgdGhlIHNldHRpbmcgb2YgYmFkYmxvY2tzLiBUaGF0IHdvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciB0ZXN0aW5nIGFuZCBkaXNjb3ZlcmluZyBwb3RlbnRpYWwgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYWxyZWFkeSBwcmVzZW50IG9yIGlmIHdlIG5lZWQgdG8gYWRkIGl0IHRvIGZ1bGx5IHV0aWxpemUgYG51bGxfYmxrYCBmb3IgdGhpcyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2NrcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ3NT1OVUxMQl9ERVZJQ0VfQVRUUihyb3RhdGlvbmFsLCBib29sLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ3NjpOVUxMQl9ERVZJQ0VfQVRUUihiYWRibG9ja3Nfb25jZSwgYm9vbCwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0Nzc6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX3BhcnRpYWxfaW8sIGJvb2wsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDc4LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTUyMz1DT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIHBvd2VyKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUyNC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUyNTpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTI2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjgtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1Mjk6XHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCAwKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUzMC19XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzEtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MzI6c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzMtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjEtXHRcdGdvdG8gb3V0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTYyOlx0LyogZW5hYmxlIGJhZGJsb2NrcyAqL1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTYzOlx0Y21weGNoZyhcdTAwMjZ0X2Rldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIC0xLCAwKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2NC1cdGlmIChidWZbMF0gPT0gJiMzOTsmIzQzOyYjMzk7KSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NjU6XHRcdGlmIChiYWRibG9ja3Nfc2V0KFx1MDAyNnRfZGV2LVx1MDAzZWJhZGJsb2Nrcywgc3RhcnQsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjYtXHRcdFx0XHQgIGVuZCAtIHN0YXJ0ICYjNDM7IDEsIDEpKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY3LVx0XHRcdHJldCA9IGNvdW50O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4Olx0fSBlbHNlIGlmIChiYWRibG9ja3NfY2xlYXIoXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2OS1cdFx0XHRcdCAgIGVuZCAtIHN0YXJ0ICYjNDM7IDEpKSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc1LX1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3NjpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIGJhZGJsb2Nrcyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzctXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTk2PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpudWxsYl9kZXZpY2VfYXR0cnNbXSA9IHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5NzpcdFx1MDAyNm51bGxiX2RldmljZV9hdHRyX2JhZGJsb2NrcyxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5ODpcdFx1MDAyNm51bGxiX2RldmljZV9hdHRyX2JhZGJsb2Nrc19vbmNlLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk5Olx0XHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzX3BhcnRpYWxfaW8sXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02MDAtXHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9ibG9ja2luZyxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03Nzc9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzkyLVx0SU5JVF9SQURJWF9UUkVFKFx1MDAyNmRldi1cdTAwM2VjYWNoZSwgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo3OTM6XHRpZiAoYmFkYmxvY2tzX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWJhZGJsb2NrcywgMCkpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTc5NC1cdFx0a2ZyZWUoZGV2KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz04MzQ9c3RhdGljIHZvaWQgbnVsbF9mcmVlX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODM5LVx0bnVsbF9mcmVlX3pvbmVkX2RldihkZXYpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6ODQwOlx0YmFkYmxvY2tzX2V4aXQoXHUwMDI2ZGV2LVx1MDAzZWJhZGJsb2Nrcyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04NDEtXHRrZnJlZShkZXYpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzMTU9c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfdGhyb3R0bGVkKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzM2LS8qXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzM3OiAqIENoZWNrIGlmIHRoZSBjb21tYW5kIHNob3VsZCBmYWlsIGZvciB0aGUgYmFkYmxvY2tzLiBJZiBzbywgcmV0dXJuXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzM4LSAqIEJMS19TVFNfSU9FUlIgYW5kIHJldHVybiBudW1iZXIgb2YgcGFydGlhbCBJL08gc2VjdG9ycyB0byBiZSB3cml0dGVuIG9yIHJlYWQsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM0NS0gKi9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNDY6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDctXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgKm5yX3NlY3RvcnMpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzQ4LXtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNDk6XHRzdHJ1Y3QgYmFkYmxvY2tzICpiYiA9IFx1MDAyNmNtZC1cdTAwM2VucS1cdTAwM2VkZXYtXHUwMDNlYmFkYmxvY2tzO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1MC1cdHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiA9IGNtZC1cdTAwM2VucS1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTU6XHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZiYWRfc2VjdG9ycykpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU2LVx0XHRyZXR1cm4gQkxLX1NUU19PSztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTctXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU4Olx0aWYgKGNtZC1cdTAwM2VucS1cdTAwM2VkZXYtXHUwMDNlYmFkYmxvY2tzX29uY2UpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU5Olx0XHRiYWRibG9ja3NfY2xlYXIoYmIsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2MC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNjE6XHRpZiAoY21kLVx1MDAzZW5xLVx1MDAzZWRldi1cdTAwM2ViYWRibG9ja3NfcGFydGlhbF9pbykge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2Mi1cdFx0aWYgKCFJU19BTElHTkVEKGZpcnN0X2JhZCwgYmxvY2tfc2VjdG9ycykpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTQyMz1ibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjYtXHRzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYgPSBjbWQtXHUwMDNlbnEtXHUwMDNlZGV2O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQyNzpcdGJsa19zdGF0dXNfdCBiYWRibG9ja3NfcmV0ID0gQkxLX1NUU19PSztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjgtXHRibGtfc3RhdHVzX3QgcmV0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQyOS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MzA6XHRpZiAoZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaGlmdCAhPSAtMSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MzE6XHRcdGJhZGJsb2Nrc19yZXQgPSBudWxsX2hhbmRsZV9iYWRibG9ja3MoY21kLCBzZWN0b3IsIFx1MDAyNm5yX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQzMi1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDM4LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQzOTpcdHJldHVybiBiYWRibG9ja3NfcmV0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ0MC19XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbmZpZ2ZzLmhcdTAwM2VcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzojaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTUzPXN0cnVjdCBudWxsYl9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02NC1cdHVuc2lnbmVkIGludCBjdXJyX2NhY2hlO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY1Olx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6NjY6XHRib29sIGJhZGJsb2Nrc19vbmNlO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY3Olx0Ym9vbCBiYWRibG9ja3NfcGFydGlhbF9pbztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02OC1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9MTM0PWJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTM1LVx0XHRcdCAgICAgIHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IG5yX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjEzNjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzNy1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCAqbnJfc2VjdG9ycyk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTM1MD1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfem9uZV93cml0ZShzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU1LVx0c3RydWN0IG51bGxiX3pvbmUgKnpvbmUgPSBcdTAwMjZkZXYtXHUwMDNlem9uZXNbem5vXTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzozNTY6XHRibGtfc3RhdHVzX3QgYmFkYmxvY2tzX3JldCA9IEJMS19TVFNfT0s7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU3LVx0YmxrX3N0YXR1c190IHJldDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNDE1LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxNjpcdGlmIChkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ICE9IC0xKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NDE3Olx0XHRiYWRibG9ja3NfcmV0ID0gbnVsbF9oYW5kbGVfYmFkYmxvY2tzKGNtZCwgc2VjdG9yLCBcdTAwMjZucl9zZWN0b3JzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo0MTg6XHRcdGlmIChiYWRibG9ja3NfcmV0ICE9IEJMS19TVFNfT0sgXHUwMDI2XHUwMDI2ICFucl9zZWN0b3JzKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NDE5Olx0XHRcdHJldCA9IGJhZGJsb2Nrc19yZXQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNDIwLVx0XHRcdGdvdG8gdW5sb2NrX3pvbmU7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTQ0My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo0NDQ6XHRyZXQgPSBiYWRibG9ja3NfcmV0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTQ0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQmFkYmxvY2sgSW1wbGVtZW50YXRpb24gaW4gTGludXggQmxvY2sgRHJpdmVycyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBob3cgYmFkIGJsb2NrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIHdoaWNoIHV0aWxpemVzIGBjb25maWdmc2AgYW5kIGBiYWRibG9ja3NgLiBJbnRlcmVzdGluZywgSSBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBjb25maWdmc2AgZm9yIHRoaXMsIGJ1dCBpdCBtYWtlcyBzZW5zZSBhcyBhIHdheSB0byBleHBvc2UgdGhlc2Ugc2V0dGluZ3MuIFRoZSBrZXkgaXMgdGhhdCBgbnVsbF9ibGtgIGFsbG93cyBzZXR0aW5nIGJhZCBibG9ja3MgdmlhIHRoZSBgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZWAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCBhbGxvd3MgY29uZmlndXJpbmcgYmFkIGJsb2NrIGluZm9ybWF0aW9uLCByaWdodD8gVGhlIGNvbmZpZyBvcHRpb24gcmVsYXRlZCB0byBgbnVsbF9ibGtgIGlzIGBCTEtfREVWX05VTExfQkxLYC4KCk5vdywgdGhlIG1lbnRpb24gb2YgdGhlIGBNRGAgKE11bHRpcGxlIERldmljZSkgZHJpdmVyIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyAqaXQqIGhhbmRsZXMgYmFkIGJsb2NrcyB0b28sIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgb3ZlcmxhcCBpbiBob3cgYmFkIGJsb2NrcyBhcmUgdXNlZCwgbWFuYWdlZCBhbmQgcG9zc2libHkgY29uZmlndXJlZCBhY3Jvc3MgZGlmZmVyZW50IGJsb2NrIGRldmljZSBkcml2ZXJzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIE1EIGNvbmZpZyBvcHRpb25zIHRvIGV4cGxvcmUgaXQgZnVydGhlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBjb21tb24gbWV0aG9kb2xvZ2llcyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHBhcmFsbGVscyBhbmQgSSB3YW50IHRvIHNlZSBpZiBhbnkgZ2VuZXJhbCBwcmluY2lwbGVzIGFyZSBlbWVyZ2luZyBvciBpZiB0aGUgc3RyYXRlZ2llcyBkaWZmZXIgc2lnbmlmaWNhbnRseSBiYXNlZCBvbiB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2NrcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0tZHVzdC5jPTIyND1zdGF0aWMgaW50IGR1c3RfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjM5LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjQwOnN0YXRpYyBib29sIF9fZHVzdF9jbGVhcl9iYWRibG9ja3Moc3RydWN0IHJiX3Jvb3QgKnRyZWUsXG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yNDEtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjYzLVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjY0OnN0YXRpYyBpbnQgZHVzdF9jbGVhcl9iYWRibG9ja3Moc3RydWN0IGR1c3RfZGV2aWNlICpkZCwgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuLFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjY1LVx0XHRcdFx0dW5zaWduZWQgaW50ICpzel9wdHIpXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjc4LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6Mjc5Olx0aWYgKCFfX2R1c3RfY2xlYXJfYmFkYmxvY2tzKFx1MDAyNmJhZGJsb2NrbGlzdCwgYmFkYmxvY2tfY291bnQpKVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjgwOlx0XHRETUVNSVQoXCYjMzQ7JXM6IG5vIGJhZGJsb2NrcyBmb3VuZFwmIzM0OywgX19mdW5jX18pO1xuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjgxLVx0ZWxzZVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjgyOlx0XHRETUVNSVQoXCYjMzQ7JXM6IGJhZGJsb2NrcyBjbGVhcmVkXCYjMzQ7LCBfX2Z1bmNfXyk7XG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yODMtXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjg2LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6Mjg3OnN0YXRpYyBpbnQgZHVzdF9saXN0X2JhZGJsb2NrcyhzdHJ1Y3QgZHVzdF9kZXZpY2UgKmRkLCBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4sXG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yODgtXHRcdFx0XHR1bnNpZ25lZCBpbnQgKnN6X3B0cilcbi0tXG5kcml2ZXJzL21kL2RtLWR1c3QuYz00MDU9c3RhdGljIHZvaWQgZHVzdF9kdHIoc3RydWN0IGRtX3RhcmdldCAqdGkpXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDA4LVxuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDA5Olx0X19kdXN0X2NsZWFyX2JhZGJsb2NrcyhcdTAwMjZkZC1cdTAwM2ViYWRibG9ja2xpc3QsIGRkLVx1MDAzZWJhZGJsb2NrX2NvdW50KTtcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQxMC1cdGRtX3B1dF9kZXZpY2UodGksIGRkLVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmM9NDE0PXN0YXRpYyBpbnQgZHVzdF9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDQwLVx0XHRcdHIgPSAwO1xuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDQxOlx0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sIFwmIzM0O2NvdW50YmFkYmxvY2tzXCYjMzQ7KSkge1xuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDQyLVx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRkLVx1MDAzZWR1c3RfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDQzOlx0XHRcdERNRU1JVChcJiMzNDtjb3VudGJhZGJsb2NrczogJWxsdSBiYWRibG9jayhzKSBmb3VuZFwmIzM0OyxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0NC1cdFx0XHQgICAgICAgZGQtXHUwMDNlYmFkYmxvY2tfY291bnQpO1xuLS1cbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0Ni1cdFx0XHRyID0gMTtcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ0NzpcdFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCBcJiMzNDtjbGVhcmJhZGJsb2Nrc1wmIzM0OykpIHtcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ0ODpcdFx0XHRyID0gZHVzdF9jbGVhcl9iYWRibG9ja3MoZGQsIHJlc3VsdCwgbWF4bGVuLCBcdTAwMjZzeik7XG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDktXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSwgXCYjMzQ7cXVpZXRcJiMzNDspKSB7XG4tLVxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDU0LVx0XHRcdHIgPSAwO1xuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDU1Olx0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sIFwmIzM0O2xpc3RiYWRibG9ja3NcJiMzNDspKSB7XG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NTY6XHRcdFx0ciA9IGR1c3RfbGlzdF9iYWRibG9ja3MoZGQsIHJlc3VsdCwgbWF4bGVuLCBcdTAwMjZzeik7XG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NTctXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9tZC9tZC5jLTQ0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsay1pbnRlZ3JpdHkuaFx1MDAzZVxuZHJpdmVycy9tZC9tZC5jOjQ1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG5kcml2ZXJzL21kL21kLmMtNDYtI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21kL21kLmM9MTA4MD12b2lkIG1kX3JkZXZfY2xlYXIoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwOTItXHR9XG5kcml2ZXJzL21kL21kLmM6MTA5MzpcdGJhZGJsb2Nrc19leGl0KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzKTtcbmRyaXZlcnMvbWQvbWQuYy0xMDk0LX1cbi0tXG5kcml2ZXJzL21kL21kLmM9MTA5Nz1zdGF0aWMgdm9pZCBzdXBlcl93cml0dGVuKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL21kLmMtMTEyMy0gKiBtZF93cml0ZV9tZXRhZGF0YSAtIHdyaXRlIG1ldGFkYXRhIHRvIHVuZGVybHlpbmcgZGlzaywgaW5jbHVkaW5nXG5kcml2ZXJzL21kL21kLmM6MTEyNDogKiBhcnJheSBzdXBlcmJsb2NrLCBiYWRibG9ja3MsIGJpdG1hcCBzdXBlcmJsb2NrIGFuZCBiaXRtYXAgYml0cy5cbmRyaXZlcnMvbWQvbWQuYy0xMTI1LSAqIEBtZGRldjpcdHRoZSBhcnJheSB0byB3cml0ZVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMzY1PXN0YXRpYyBpbnQgc3VwZXJfOTBfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE0MTItXHRyZGV2LVx1MDAzZXNiX3NpemUgPSBNRF9TQl9CWVRFUztcbmRyaXZlcnMvbWQvbWQuYzoxNDEzOlx0cmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQgPSAtMTtcbmRyaXZlcnMvbWQvbWQuYy0xNDE0LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xODA4PXN0YXRpYyBpbnQgc3VwZXJfMV9sb2FkKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmVmZGV2LCBpbnQgbWlub3JfdmVyc2lvbilcbi0tXG5kcml2ZXJzL21kL21kLmMtMTkwMy1cdGlmICgobGUzMl90b19jcHUoc2ItXHUwMDNlZmVhdHVyZV9tYXApIFx1MDAyNiBNRF9GRUFUVVJFX0JBRF9CTE9DS1MpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5jOjE5MDQ6XHQgICAgcmRldi1cdTAwM2ViYWRibG9ja3MuY291bnQgPT0gMCkge1xuZHJpdmVycy9tZC9tZC5jLTE5MDUtXHRcdC8qIG5lZWQgdG8gbG9hZCB0aGUgYmFkIGJsb2NrIGxpc3QuXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MjItXHRcdGJicCA9IChfX2xlNjQgKilwYWdlX2FkZHJlc3MocmRldi1cdTAwM2ViYl9wYWdlKTtcbmRyaXZlcnMvbWQvbWQuYzoxOTIzOlx0XHRyZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaGlmdCA9IHNiLVx1MDAzZWJibG9nX3NoaWZ0O1xuZHJpdmVycy9tZC9tZC5jLTE5MjQtXHRcdGZvciAoaSA9IDAgOyBpIFx1MDAzYyAoc2VjdG9ycyBcdTAwM2NcdTAwM2MgKDktMykpIDsgaSYjNDM7JiM0MzssIGJicCYjNDM7JiM0MzspIHtcbi0tXG5kcml2ZXJzL21kL21kLmMtMTkzMS1cdFx0XHRcdGJyZWFrO1xuZHJpdmVycy9tZC9tZC5jOjE5MzI6XHRcdFx0aWYgKCFiYWRibG9ja3Nfc2V0KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBzZWN0b3IsIGNvdW50LCAxKSlcbmRyaXZlcnMvbWQvbWQuYy0xOTMzLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MzUtXHR9IGVsc2UgaWYgKHNiLVx1MDAzZWJibG9nX29mZnNldCAhPSAwKVxuZHJpdmVycy9tZC9tZC5jOjE5MzY6XHRcdHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gMDtcbmRyaXZlcnMvbWQvbWQuYy0xOTM3LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yMTk3PXN0YXRpYyB2b2lkIHN1cGVyXzFfc3luYyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMjI4My1cbmRyaXZlcnMvbWQvbWQuYzoyMjg0Olx0aWYgKHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50ID09IDApXG5kcml2ZXJzL21kL21kLmMtMjI4NS1cdFx0LyogTm90aGluZyB0byBkbyBmb3IgYmFkIGJsb2NrcyovIDtcbi0tXG5kcml2ZXJzL21kL21kLmMtMjI4OS1cdGVsc2Uge1xuZHJpdmVycy9tZC9tZC5jOjIyOTA6XHRcdHN0cnVjdCBiYWRibG9ja3MgKmJiID0gXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3M7XG5kcml2ZXJzL21kL21kLmMtMjI5MS1cdFx0X19sZTY0ICpiYnAgPSAoX19sZTY0ICopcGFnZV9hZGRyZXNzKHJkZXYtXHUwMDNlYmJfcGFnZSk7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTI0MzQ9c3VwZXJfMV9hbGxvd19uZXdfb2Zmc2V0KHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuLS1cbmRyaXZlcnMvbWQvbWQuYy0yNDUwLVx0ICogMzZLIGJleW9uZCBzdGFydCBvZiBzdXBlcmJsb2NrXG5kcml2ZXJzL21kL21kLmM6MjQ1MTpcdCAqIGJleW9uZCBlbmQgb2YgYmFkYmxvY2tzXG5kcml2ZXJzL21kL21kLmMtMjQ1Mi1cdCAqIGJleW9uZCB3cml0ZS1pbnRlbnQgYml0bWFwXG4tLVxuZHJpdmVycy9tZC9tZC5jLTI0NjYtXG5kcml2ZXJzL21kL21kLmM6MjQ2NzpcdGlmIChyZGV2LVx1MDAzZWJhZGJsb2Nrcy5zZWN0b3IgJiM0MzsgcmRldi1cdTAwM2ViYWRibG9ja3Muc2l6ZSBcdTAwM2UgbmV3X29mZnNldClcbmRyaXZlcnMvbWQvbWQuYy0yNDY4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL21kLmM9MjU1OD1zdGF0aWMgaW50IGJpbmRfcmRldl90b19hcnJheShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMjYyNC1cdHJkZXYtXHUwMDNlc3lzZnNfc3RhdGUgPSBzeXNmc19nZXRfZGlyZW50X3NhZmUocmRldi1cdTAwM2Vrb2JqLnNkLCBcJiMzNDtzdGF0ZVwmIzM0Oyk7XG5kcml2ZXJzL21kL21kLmM6MjYyNTpcdHJkZXYtXHUwMDNlc3lzZnNfdW5hY2tfYmFkYmxvY2tzID1cbmRyaXZlcnMvbWQvbWQuYy0yNjI2LVx0XHRzeXNmc19nZXRfZGlyZW50X3NhZmUocmRldi1cdTAwM2Vrb2JqLnNkLCBcJiMzNDt1bmFja25vd2xlZGdlZF9iYWRfYmxvY2tzXCYjMzQ7KTtcbmRyaXZlcnMvbWQvbWQuYzoyNjI3Olx0cmRldi1cdTAwM2VzeXNmc19iYWRibG9ja3MgPVxuZHJpdmVycy9tZC9tZC5jLTI2MjgtXHRcdHN5c2ZzX2dldF9kaXJlbnRfc2FmZShyZGV2LVx1MDAzZWtvYmouc2QsIFwmIzM0O2JhZF9ibG9ja3NcJiMzNDspO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0yNjYwPXN0YXRpYyB2b2lkIG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0yNjcwLVx0c3lzZnNfcHV0KHJkZXYtXHUwMDNlc3lzZnNfc3RhdGUpO1xuZHJpdmVycy9tZC9tZC5jOjI2NzE6XHRzeXNmc19wdXQocmRldi1cdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jOjI2NzI6XHRzeXNmc19wdXQocmRldi1cdTAwM2VzeXNmc19iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jLTI2NzMtXHRyZGV2LVx1MDAzZXN5c2ZzX3N0YXRlID0gTlVMTDtcbmRyaXZlcnMvbWQvbWQuYzoyNjc0Olx0cmRldi1cdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MgPSBOVUxMO1xuZHJpdmVycy9tZC9tZC5jOjI2NzU6XHRyZGV2LVx1MDAzZXN5c2ZzX2JhZGJsb2NrcyA9IE5VTEw7XG5kcml2ZXJzL21kL21kLmM6MjY3NjpcdHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50ID0gMDtcbmRyaXZlcnMvbWQvbWQuYy0yNjc3LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yNzkyPXZvaWQgbWRfdXBkYXRlX3NiKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmb3JjZV9jaGFuZ2UpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTI3OTYtXHRpbnQgbm9zcGFyZXMgPSAwO1xuZHJpdmVycy9tZC9tZC5jOjI3OTc6XHRpbnQgYW55X2JhZGJsb2Nrc19jaGFuZ2VkID0gMDtcbmRyaXZlcnMvbWQvbWQuYy0yNzk4LVx0aW50IHJldCA9IC0xO1xuLS1cbmRyaXZlcnMvbWQvbWQuYy0yODUwLVx0XHRcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpIHtcbmRyaXZlcnMvbWQvbWQuYzoyODUxOlx0XHRcdFx0aWYgKHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNoYW5nZWQpIHtcbmRyaXZlcnMvbWQvbWQuYzoyODUyOlx0XHRcdFx0XHRyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkID0gMDtcbmRyaXZlcnMvbWQvbWQuYzoyODUzOlx0XHRcdFx0XHRhY2tfYWxsX2JhZGJsb2NrcyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcyk7XG5kcml2ZXJzL21kL21kLmMtMjg1NC1cdFx0XHRcdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYy0yOTE0LVx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikge1xuZHJpdmVycy9tZC9tZC5jOjI5MTU6XHRcdGlmIChyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkKVxuZHJpdmVycy9tZC9tZC5jOjI5MTY6XHRcdFx0YW55X2JhZGJsb2Nrc19jaGFuZ2VkJiM0MzsmIzQzOztcbmRyaXZlcnMvbWQvbWQuYy0yOTE3LVx0XHRpZiAodGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbi0tXG5kcml2ZXJzL21kL21kLmMtMjk0MS1cdFx0XHRyZGV2LVx1MDAzZXNiX2V2ZW50cyA9IG1kZGV2LVx1MDAzZWV2ZW50cztcbmRyaXZlcnMvbWQvbWQuYzoyOTQyOlx0XHRcdGlmIChyZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaXplKSB7XG5kcml2ZXJzL21kL21kLmMtMjk0My1cdFx0XHRcdG1kX3dyaXRlX21ldGFkYXRhKG1kZGV2LCByZGV2LFxuZHJpdmVycy9tZC9tZC5jOjI5NDQ6XHRcdFx0XHRcdFx0ICByZGV2LVx1MDAzZWJhZGJsb2Nrcy5zZWN0b3IsXG5kcml2ZXJzL21kL21kLmM6Mjk0NTpcdFx0XHRcdFx0XHQgIHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNpemUgXHUwMDNjXHUwMDNjIDksXG5kcml2ZXJzL21kL21kLmMtMjk0Ni1cdFx0XHRcdFx0XHQgIHJkZXYtXHUwMDNlYmJfcGFnZSwgMCk7XG5kcml2ZXJzL21kL21kLmM6Mjk0NzpcdFx0XHRcdHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNpemUgPSAwO1xuZHJpdmVycy9tZC9tZC5jLTI5NDgtXHRcdFx0fVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0yOTczLVxuZHJpdmVycy9tZC9tZC5jOjI5NzQ6XHRcdGlmIChhbnlfYmFkYmxvY2tzX2NoYW5nZWQpXG5kcml2ZXJzL21kL21kLmM6Mjk3NTpcdFx0XHRhY2tfYWxsX2JhZGJsb2NrcyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcyk7XG5kcml2ZXJzL21kL21kLmMtMjk3Ni1cdFx0Y2xlYXJfYml0KEJsb2NrZWRCYWRCbG9ja3MsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0zMDM4PXN0YXRlX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTMwNDUtXHQgICAgKCF0ZXN0X2JpdChFeHRlcm5hbEJibCwgXHUwMDI2ZmxhZ3MpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5jOjMwNDY6XHQgICAgcmRldi1cdTAwM2ViYWRibG9ja3MudW5hY2tlZF9leGlzdCkpXG5kcml2ZXJzL21kL21kLmMtMzA0Ny1cdFx0bGVuICYjNDM7PSBzcHJpbnRmKHBhZ2UmIzQzO2xlbiwgXCYjMzQ7ZmF1bHR5JXNcJiMzNDssIHNlcCk7XG4tLVxuZHJpdmVycy9tZC9tZC5jLTMwNTQtXHRpZiAodGVzdF9iaXQoQmxvY2tlZCwgXHUwMDI2ZmxhZ3MpIHx8XG5kcml2ZXJzL21kL21kLmM6MzA1NTpcdCAgICAocmRldi1cdTAwM2ViYWRibG9ja3MudW5hY2tlZF9leGlzdFxuZHJpdmVycy9tZC9tZC5jLTMwNTYtXHQgICAgIFx1MDAyNlx1MDAyNiAhdGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZmbGFncykpKVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0zMDgwPXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTMxNDItXHRcdCAgICAhdGVzdF9iaXQoRXh0ZXJuYWxCYmwsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5jOjMxNDM6XHRcdCAgICByZGV2LVx1MDAzZWJhZGJsb2Nrcy51bmFja2VkX2V4aXN0KSB7XG5kcml2ZXJzL21kL21kLmM6MzE0NDpcdFx0XHQvKiBtZXRhZGF0YSBoYW5kbGVyIGRvZXNuJiMzOTt0IHVuZGVyc3RhbmQgYmFkYmxvY2tzLFxuZHJpdmVycy9tZC9tZC5jLTMxNDUtXHRcdFx0ICogc28gd2UgbmVlZCB0byBmYWlsIHRoZSBkZXZpY2Vcbi0tXG5kcml2ZXJzL21kL21kLmMtMzIzNS1cdFx0c2V0X2JpdChFeHRlcm5hbEJibCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL21kL21kLmM6MzIzNjpcdFx0cmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQgPSAwO1xuZHJpdmVycy9tZC9tZC5jLTMyMzctXHRcdGVyciA9IDA7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTM2MDg9c3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbmRyaXZlcnMvbWQvbWQuYy0zNjA5LXtcbmRyaXZlcnMvbWQvbWQuYzozNjEwOlx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCAwKTtcbmRyaXZlcnMvbWQvbWQuYy0zNjExLX1cbmRyaXZlcnMvbWQvbWQuYz0zNjEyPXN0YXRpYyBzc2l6ZV90IGJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxuZHJpdmVycy9tZC9tZC5jLTM2MTMte1xuZHJpdmVycy9tZC9tZC5jOjM2MTQ6XHRpbnQgcnYgPSBiYWRibG9ja3Nfc3RvcmUoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMCk7XG5kcml2ZXJzL21kL21kLmMtMzYxNS1cdC8qIE1heWJlIHRoYXQgYWNrIHdhcyBhbGwgd2UgbmVlZGVkICovXG4tLVxuZHJpdmVycy9tZC9tZC5jPTM2MjM9c3RhdGljIHNzaXplX3QgdWJiX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG5kcml2ZXJzL21kL21kLmMtMzYyNC17XG5kcml2ZXJzL21kL21kLmM6MzYyNTpcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XG5kcml2ZXJzL21kL21kLmMtMzYyNi19XG5kcml2ZXJzL21kL21kLmM9MzYyNz1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG5kcml2ZXJzL21kL21kLmMtMzYyOC17XG5kcml2ZXJzL21kL21kLmM6MzYyOTpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMSk7XG5kcml2ZXJzL21kL21kLmMtMzYzMC19XG4tLVxuZHJpdmVycy9tZC9tZC5jPTM3OTE9aW50IG1kX3JkZXZfaW5pdChzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMzgxMy1cdCAqL1xuZHJpdmVycy9tZC9tZC5jOjM4MTQ6XHRyZXR1cm4gYmFkYmxvY2tzX2luaXQoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIDApO1xuZHJpdmVycy9tZC9tZC5jLTM4MTUtfVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDU1MT1FWFBPUlRfU1lNQk9MKG1kX2ZpbmlzaF9yZXNoYXBlKTtcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA1NTUtLyogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUgKi9cbmRyaXZlcnMvbWQvbWQuYzoxMDU1Njpib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3QgcywgaW50IHNlY3RvcnMsXG5kcml2ZXJzL21kL21kLmMtMTA1NTctXHRcdFx0aW50IGlzX25ldylcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA1NjEtXHQvKlxuZHJpdmVycy9tZC9tZC5jOjEwNTYyOlx0ICogUmVjb3JkaW5nIG5ldyBiYWRibG9ja3MgZm9yIGZhdWx0eSByZGV2IHdpbGwgZm9yY2UgdW5uZWNlc3NhcnlcbmRyaXZlcnMvbWQvbWQuYy0xMDU2My1cdCAqIHN1cGVyIGJsb2NrIHVwZGF0aW5nLiBUaGlzIGlzIGZyYWdpbGUgZm9yIGV4dGVybmFsIG1hbmFnZW1lbnQgYmVjYXVzZVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0xMDU3NS1cbmRyaXZlcnMvbWQvbWQuYzoxMDU3NjpcdGlmICghYmFkYmxvY2tzX3NldChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycywgMCkpIHtcbmRyaXZlcnMvbWQvbWQuYy0xMDU3Ny1cdFx0LypcbmRyaXZlcnMvbWQvbWQuYzoxMDU3ODpcdFx0ICogTWFyayB0aGUgZGlzayBhcyBGYXVsdHkgd2hlbiBzZXR0aW5nIGJhZGJsb2NrcyBmYWlscyxcbmRyaXZlcnMvbWQvbWQuYy0xMDU3OS1cdFx0ICogb3RoZXJ3aXNlLCBiYWQgc2VjdG9ycyBtYXkgYmUgcmVhZC5cbi0tXG5kcml2ZXJzL21kL21kLmMtMTA1ODYtXHRpZiAodGVzdF9iaXQoRXh0ZXJuYWxCYmwsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9tZC9tZC5jOjEwNTg3Olx0XHRzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi1cdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jLTEwNTg4LVx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXHUwMDNlc3lzZnNfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYy0xMDU5My19XG5kcml2ZXJzL21kL21kLmM6MTA1OTQ6RVhQT1JUX1NZTUJPTF9HUEwocmRldl9zZXRfYmFkYmxvY2tzKTtcbmRyaXZlcnMvbWQvbWQuYy0xMDU5NS1cbmRyaXZlcnMvbWQvbWQuYzoxMDU5Njp2b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcbmRyaXZlcnMvbWQvbWQuYy0xMDU5Ny1cdFx0XHQgIGludCBpc19uZXcpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNjAzLVxuZHJpdmVycy9tZC9tZC5jOjEwNjA0Olx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMpKVxuZHJpdmVycy9tZC9tZC5jLTEwNjA1LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNjA3LVx0aWYgKHRlc3RfYml0KEV4dGVybmFsQmJsLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvbWQuYzoxMDYwODpcdFx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXHUwMDNlc3lzZnNfYmFkYmxvY2tzKTtcbmRyaXZlcnMvbWQvbWQuYy0xMDYwOS19XG5kcml2ZXJzL21kL21kLmM6MTA2MTA6RVhQT1JUX1NZTUJPTF9HUEwocmRldl9jbGVhcl9iYWRibG9ja3MpO1xuZHJpdmVycy9tZC9tZC5jLTEwNjExLVxuLS1cbmRyaXZlcnMvbWQvbWQuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG5kcml2ZXJzL21kL21kLmg6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcdTAwM2VcbmRyaXZlcnMvbWQvbWQuaC0xNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21kL21kLmg9MTM0PXN0cnVjdCBtZF9yZGV2IHtcbi0tXG5kcml2ZXJzL21kL21kLmgtMjE0LVx0LyogaGFuZGxlIGZvciAmIzM5O3VuYWNrbm93bGVkZ2VkX2JhZF9ibG9ja3MmIzM5OyBzeXNmcyBkZW50cnkgKi9cbmRyaXZlcnMvbWQvbWQuaDoyMTU6XHRzdHJ1Y3Qga2VybmZzX25vZGUgKnN5c2ZzX3VuYWNrX2JhZGJsb2NrcztcbmRyaXZlcnMvbWQvbWQuaC0yMTYtXHQvKiBoYW5kbGUgZm9yICYjMzk7YmFkX2Jsb2NrcyYjMzk7IHN5c2ZzIGRlbnRyeSAqL1xuZHJpdmVycy9tZC9tZC5oOjIxNzpcdHN0cnVjdCBrZXJuZnNfbm9kZSAqc3lzZnNfYmFkYmxvY2tzO1xuZHJpdmVycy9tZC9tZC5oOjIxODpcdHN0cnVjdCBiYWRibG9ja3MgYmFkYmxvY2tzO1xuZHJpdmVycy9tZC9tZC5oLTIxOS1cbi0tXG5kcml2ZXJzL21kL21kLmg9Mjk5PXN0YXRpYyBpbmxpbmUgaW50IGlzX2JhZGJsb2NrKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmRyaXZlcnMvbWQvbWQuaC0zMDEte1xuZHJpdmVycy9tZC9tZC5oOjMwMjpcdGlmICh1bmxpa2VseShyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jb3VudCkpIHtcbmRyaXZlcnMvbWQvbWQuaDozMDM6XHRcdGludCBydiA9IGJhZGJsb2Nrc19jaGVjayhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcmRldi1cdTAwM2VkYXRhX29mZnNldCAmIzQzOyBzLFxuZHJpdmVycy9tZC9tZC5oLTMwNC1cdFx0XHRcdFx0c2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmg9MzEzPXN0YXRpYyBpbmxpbmUgaW50IHJkZXZfaGFzX2JhZGJsb2NrKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLFxuLS1cbmRyaXZlcnMvbWQvbWQuaC0zMjEtXG5kcml2ZXJzL21kL21kLmg6MzIyOmV4dGVybiBib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3QgcywgaW50IHNlY3RvcnMsXG5kcml2ZXJzL21kL21kLmgtMzIzLVx0XHRcdCAgICAgICBpbnQgaXNfbmV3KTtcbmRyaXZlcnMvbWQvbWQuaDozMjQ6ZXh0ZXJuIHZvaWQgcmRldl9jbGVhcl9iYWRibG9ja3Moc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIGludCBzZWN0b3JzLFxuZHJpdmVycy9tZC9tZC5oLTMyNS1cdFx0XHRcdCBpbnQgaXNfbmV3KTtcbi0tXG5kcml2ZXJzL21kL21kLmg9MTA3Mz1zdGF0aWMgaW5saW5lIGJvb2wgcmRldl9ibG9ja2VkKHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuaC0xMDg5LVxuZHJpdmVycy9tZC9tZC5oOjEwOTA6XHQvKiByZGV2IGlzIGJsb2NrZWQgYnkgYmFkYmxvY2tzLiAqL1xuZHJpdmVycy9tZC9tZC5oLTEwOTEtXHRpZiAodGVzdF9iaXQoQmxvY2tlZEJhZEJsb2NrcywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tLVxuZHJpdmVycy9tZC9yYWlkMS0xMC5jPTI3OD1zdGF0aWMgaW5saW5lIGJvb2wgcmFpZDFfc2hvdWxkX3JlYWRfZmlyc3Qoc3RydWN0IG1kZGV2ICptZGRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjkzLSAqIGJpbyB3aXRoIFJFUV9SQUhFQUQgb3IgUkVRX05PV0FJVCBjYW4gZmFpbCBhdCBhbnl0aW1lLCBiZWZvcmUgc3VjaCBJTyBpc1xuZHJpdmVycy9tZC9yYWlkMS0xMC5jOjI5NDogKiBzdWJtaXR0ZWQgdG8gdGhlIHVuZGVybHlpbmcgZGlza3MsIGhlbmNlIGRvbiYjMzk7dCByZWNvcmQgYmFkYmxvY2tzIG9yIHJldHJ5XG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjk1LSAqIGluIHRoaXMgY2FzZS5cbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MjE0MD1zdGF0aWMgaW50IHIxX3N5bmNfcGFnZV9pbyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yMTUzLVx0LyogbmVlZCB0byByZWNvcmQgYW4gZXJyb3IgLSBlaXRoZXIgZm9yIHRoZSBibG9jayBvciB0aGUgZGV2aWNlICovXG5kcml2ZXJzL21kL3JhaWQxLmM6MjE1NDpcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzZWN0b3IsIHNlY3RvcnMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTIxNTUtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MjE1OD1zdGF0aWMgaW50IGZpeF9zeW5jX3JlYWRfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTIyMzItXHRcdFx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9tZC9yYWlkMS5jOjIyMzM6XHRcdFx0XHRpZiAoIXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzZWN0LCBzLCAwKSlcbmRyaXZlcnMvbWQvcmFpZDEuYy0yMjM0LVx0XHRcdFx0XHRhYm9ydCA9IDE7XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI0MzI9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzItXHRcdFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVx1MDAzZW1pcnJvcnNbcmVhZF9kaXNrXS5yZGV2O1xuZHJpdmVycy9tZC9yYWlkMS5jOjI0NzM6XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3QsIHMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzQtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI1MTc9c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMjUzOC1cbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTM5Olx0aWYgKHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0IFx1MDAzYyAwKVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1NDAtXHRcdGJsb2NrX3NlY3RvcnMgPSBsYnM7XG5kcml2ZXJzL21kL3JhaWQxLmMtMjU0MS1cdGVsc2VcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTQyOlx0XHRibG9ja19zZWN0b3JzID0gcm91bmR1cCgxIFx1MDAzY1x1MDAzYyByZGV2LVx1MDAzZWJhZGJsb2Nrcy5zaGlmdCwgbGJzKTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTQzLVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTcxLVx0XHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9yYWlkMS5jOjI1NzI6XHRcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3Rvciwgc2VjdG9ycywgMCkpIHtcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTczLVx0XHRcdC8qXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI1ODg9c3RhdGljIHZvaWQgaGFuZGxlX3N5bmNfd3JpdGVfZmluaXNoZWQoc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1OTgtXHRcdCAgICB0ZXN0X2JpdChSMUJJT19NYWRlR29vZCwgXHUwMDI2cjFfYmlvLVx1MDAzZXN0YXRlKSlcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTk5Olx0XHRcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cdTAwM2VzZWN0b3IsIHMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDAtXHRcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDEtXHRcdCAgICB0ZXN0X2JpdChSMUJJT19Xcml0ZUVycm9yLCBcdTAwMjZyMV9iaW8tXHUwMDNlc3RhdGUpKVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MDI6XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cdTAwM2VzZWN0b3IsIHMsIDApO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDMtXHR9XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI2MDg9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjE1LVx0XHRcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cdTAwM2VtaXJyb3JzW21dLnJkZXY7XG5kcml2ZXJzL21kL3JhaWQxLmM6MjYxNjpcdFx0XHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhyZGV2LFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MTctXHRcdFx0XHRcdCAgICAgcjFfYmlvLVx1MDAzZXNlY3Rvcixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MjgwMT1zdGF0aWMgc2VjdG9yX3QgcmFpZDFfc3luY19yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9ucixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk3My1cdFx0XHRcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cdTAwM2VtaXJyb3JzW2ldLnJkZXY7XG5kcml2ZXJzL21kL3JhaWQxLmM6Mjk3NDpcdFx0XHRcdG9rID0gcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3Rvcl9ucixcbmRyaXZlcnMvbWQvcmFpZDEuYy0yOTc1LVx0XHRcdFx0XHRcdFx0bWluX2JhZCwgMFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yOTgyLVx0XHRpZiAoIW9rKVxuZHJpdmVycy9tZC9yYWlkMS5jOjI5ODM6XHRcdFx0LyogQ2Fubm90IHJlY29yZCB0aGUgYmFkYmxvY2tzLCBtZF9lcnJvciBoYXMgc2V0IElOVFIsXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk4NC1cdFx0XHQgKiBhYm9ydCB0aGUgcmVzeW5jLlxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MjQ4Nz1zdGF0aWMgdm9pZCBmaXhfcmVjb3ZlcnlfcmVhZF9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjU0Mi1cdFx0XHQgKi9cbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjU0MzpcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgYWRkciwgcywgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDQtXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNTQ4LVx0XHRcdFx0YWRkciA9IHIxMF9iaW8tXHUwMDNlZGV2c1sxXS5hZGRyICYjNDM7IHNlY3Q7XG5kcml2ZXJzL21kL3JhaWQxMC5jOjI1NDk6XHRcdFx0XHRvayA9IHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2MiwgYWRkciwgcywgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NTAtXHRcdFx0XHRpZiAoIW9rKSB7XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNjA2PXN0YXRpYyBpbnQgcjEwX3N5bmNfcGFnZV9pbyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjYyMS1cdC8qIG5lZWQgdG8gcmVjb3JkIGFuIGVycm9yIC0gZWl0aGVyIGZvciB0aGUgYmxvY2sgb3IgdGhlIGRldmljZSAqL1xuZHJpdmVycy9tZC9yYWlkMTAuYzoyNjIyOlx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3Rvciwgc2VjdG9ycywgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI2MjMtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTI2MzQ9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNjk3LVxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNjk4Olx0XHRcdGlmICghcmRldl9zZXRfYmFkYmxvY2tzKFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNjk5LVx0XHRcdFx0ICAgIHJkZXYsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNzg5PXN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTAtXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4MTE6XHRpZiAocmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQgXHUwMDNjIDApXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTItXHRcdGJsb2NrX3NlY3RvcnMgPSBsYnM7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTMtXHRlbHNlXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4MTQ6XHRcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXHUwMDNjXHUwMDNjIHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xuZHJpdmVycy9tZC9yYWlkMTAuYy0yODE1LVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgzNS1cdFx0aWYgKHN1Ym1pdF9iaW9fd2FpdCh3YmlvKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjgzNjpcdFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgzNy1cdFx0XHQvKlxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9Mjg5MD1zdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfY29tcGxldGVkKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkwOS1cdFx0XHRpZiAoIXIxMF9iaW8tXHUwMDNlZGV2c1ttXS5iaW8tXHUwMDNlYmlfc3RhdHVzKVxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTEwOlx0XHRcdFx0cmRldl9jbGVhcl9iYWRibG9ja3MoXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MTEtXHRcdFx0XHRcdHJkZXYsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE0LVx0XHRcdGVsc2VcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjkxNTpcdFx0XHRcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE2LVx0XHRcdFx0XHRcdCAgIHIxMF9iaW8tXHUwMDNlZGV2c1ttXS5hZGRyLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkyMy1cdFx0XHRpZiAoIXIxMF9iaW8tXHUwMDNlZGV2c1ttXS5yZXBsX2Jpby1cdTAwM2ViaV9zdGF0dXMpXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5MjQ6XHRcdFx0XHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkyNS1cdFx0XHRcdFx0cmRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MjgtXHRcdFx0ZWxzZVxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTI5Olx0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MzAtXHRcdFx0XHRcdFx0ICAgcjEwX2Jpby1cdTAwM2VkZXZzW21dLmFkZHIsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTQwLVx0XHRcdGlmIChiaW8gPT0gSU9fTUFERV9HT09EKSB7XG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5NDE6XHRcdFx0XHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjk0Mi1cdFx0XHRcdFx0cmRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5NTMtXHRcdFx0aWYgKHJkZXYgXHUwMDI2XHUwMDI2IGJpbyA9PSBJT19NQURFX0dPT0QpIHtcbmRyaXZlcnMvbWQvcmFpZDEwLmM6Mjk1NDpcdFx0XHRcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTU1LVx0XHRcdFx0XHRyZGV2LFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzE2OT1zdGF0aWMgc2VjdG9yX3QgcmFpZDEwX3N5bmNfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0zNDcxLVx0XHRcdFx0XHQgICAgIXRlc3RfYml0KEluX3N5bmMsIFx1MDAyNm1yZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzQ3MjpcdFx0XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MoXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzMtXHRcdFx0XHRcdFx0XHRtcmRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzYtXHRcdFx0XHRcdGlmIChtcmVwbGFjZSlcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzQ3NzpcdFx0XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MoXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzgtXHRcdFx0XHRcdFx0XHRtcmVwbGFjZSxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9MjcyNT1zdGF0aWMgdm9pZCByYWlkNV9lbmRfcmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKiBiaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMjgzOS1cdFx0XHRpZiAoIShzZXRfYmFkIFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkpXG5kcml2ZXJzL21kL3JhaWQ1LmM6Mjg0MDpcdFx0XHRcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzaC1cdTAwM2VzZWN0b3IsXG5kcml2ZXJzL21kL3JhaWQ1LmMtMjg0MS1cdFx0XHRcdFx0XHQgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCk7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jPTM2MDE9aGFuZGxlX2ZhaWxlZF9zdHJpcGUoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzYxNy1cdFx0XHRpZiAocmRldikge1xuZHJpdmVycy9tZC9yYWlkNS5jOjM2MTg6XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldixcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNjE5LVx0XHRcdFx0XHRcdCAgIHNoLVx1MDAzZXNlY3Rvcixcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9MzcwMD1oYW5kbGVfZmFpbGVkX3N5bmMoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzcyOC1cdFx0XHQgICAgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKVxuZHJpdmVycy9tZC9yYWlkNS5jOjM3Mjk6XHRcdFx0ICAgIFx1MDAyNlx1MDAyNiAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNoLVx1MDAzZXNlY3RvcixcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNzMwLVx0XHRcdFx0XHRcdCAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzczNi1cdFx0XHQgICAgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKVxuZHJpdmVycy9tZC9yYWlkNS5jOjM3Mzc6XHRcdFx0ICAgIFx1MDAyNlx1MDAyNiAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNoLVx1MDAzZXNlY3RvcixcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNzM4LVx0XHRcdFx0XHRcdCAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NDkyNj1zdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpXG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jLTUyODItXHRcdFx0XHRyZGV2ID0gY29uZi1cdTAwM2VkaXNrc1tpXS5yZGV2O1xuZHJpdmVycy9tZC9yYWlkNS5jOjUyODM6XHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2gtXHUwMDNlc2VjdG9yLFxuZHJpdmVycy9tZC9yYWlkNS5jLTUyODQtXHRcdFx0XHRcdFx0ICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy01Mjg4LVx0XHRcdFx0cmRldiA9IGNvbmYtXHUwMDNlZGlza3NbaV0ucmRldjtcbmRyaXZlcnMvbWQvcmFpZDUuYzo1Mjg5Olx0XHRcdFx0cmRldl9jbGVhcl9iYWRibG9ja3MocmRldiwgc2gtXHUwMDNlc2VjdG9yLFxuZHJpdmVycy9tZC9yYWlkNS5jLTUyOTAtXHRcdFx0XHRcdFx0ICAgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCk7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jLTUyOTctXHRcdFx0XHRcdHJkZXYgPSBjb25mLVx1MDAzZWRpc2tzW2ldLnJkZXY7XG5kcml2ZXJzL21kL3JhaWQ1LmM6NTI5ODpcdFx0XHRcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKHJkZXYsIHNoLVx1MDAzZXNlY3RvcixcbmRyaXZlcnMvbWQvcmFpZDUuYy01Mjk5LVx0XHRcdFx0XHRcdCAgICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgYmFkYmxvY2tzYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBicm9hZGx5IHRoZSBgYmFkYmxvY2tzYCBjb2RlIGlzIHV0aWxpemVkLiBJdCYjMzk7cyBub3QganVzdCBhIHN0YW5kYWxvbmUgdXRpbGl0eTsgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHNldmVyYWwgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIEkga25vdyBmb3Igc3VyZSBpdCYjMzk7cyB1c2VkIGJ5IHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBudWxsIGJsb2NrIGRldmljZSBmb3IgdGVzdGluZy4gVGhlbiwgaXQmIzM5O3MgYWxzbyBmdW5kYW1lbnRhbCB0byB0aGUgUkFJRCBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIGBtZGAsIHNwZWNpZmljYWxseSBSQUlEMSwgUkFJRDEwLCBhbmQgUkFJRDUuIFRoYXQgbWFrZXMgc2Vuc2UsIGNoZWNraW5nIHRoZSB1bmRlcmx5aW5nIGRyaXZlcyBpcyBjcnVjaWFsIGZvciBSQUlEIGNvbnNpc3RlbmN5LiBJIGFsc28gcmVjYWxsIGl0IGJlaW5nIHJlbGV2YW50IHRvIE5WRElNTSBkZXZpY2VzOyB0aGUgYG52ZGltbWAgZHJpdmVyLgoKR2l2ZW4gdGhpcyBicmVhZHRoIG9mIHVzYWdlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoZXNlIGZlYXR1cmVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHNwZWNpZmljIHN5bWJvbHMuIEkgYmVsaWV2ZSB0aGV5JiMzOTtyZTogYEJMS19ERVZfTlVMTF9CTEtgIGZvciB0aGUgbnVsbCBibG9jayBkZXZpY2UsIGFuZCBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYW5kIGBNRF9SQUlENDU2YCBmb3IgdGhlIHJlc3BlY3RpdmUgUkFJRCBsZXZlbHMuIEZvciBOVkRJTU0sIHRoZXJlIGFyZSBgQlRUYCwgd2hpY2ggSSB0aGluayBpcyB0aGUgQmxvY2sgVHJhbnNsYXRpb24gVGFibGUsIGFuZCBgQkxLX0RFVl9QTUVNYCwgcmVwcmVzZW50aW5nIHBlcnNpc3RlbnQgbWVtb3J5LgoKVG8gZGV0ZXJtaW5lIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGNvcnJlY3RseSBkZWZpbmVkIGFuZCBwZXJoYXBzIGV4cGxvcmUgdGhlIGRlcGVuZGVuY2llcyBmdXJ0aGVyLCBJIHdpbGwgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGJsb2NrL0tjb25maWdgIGFuZCBwb3RlbnRpYWxseSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBzaW5jZSBgbnVsbF9ibGtgIHNlZW1zIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgY29uZmlndXJlZCBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy01LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTExLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUyNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgdGFzazoKCioqSW52ZXN0aWdhdGluZyBNRCBSQUlEIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlci4gV2hlcmUgd291bGQgSSBmaW5kIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IEtjb25maWcgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBnbyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQgd2hlcmUgd291bGQgdGhlIE1EIGRyaXZlciYjMzk7cyBLY29uZmlnIHJlc2lkZT8gTG9naWNhbGx5LCBpbiBgZHJpdmVycy9tZC9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBwYXRoLiBPa2F5LCBsZXQgbWUgZ28gaGF2ZSBhIGxvb2sgaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIGBDT05GSUdfTURfUkFJRDBgLCBgQ09ORklHX01EX1JBSUQxYCwgZXRjLiwgYW5kIHByb2JhYmx5IHNvbWUgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNodW5rIHNpemVzLCBmYXVsdCB0b2xlcmFuY2UsIGFuZCB0aGUgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1EX1JBSUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9OTE9Y29uZmlnIE1EX0xJTkVBUlxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL21kL0tjb25maWc6MTA0OmNvbmZpZyBNRF9SQUlEMFxuZHJpdmVycy9tZC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMCAoc3RyaXBpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTIzLVxuZHJpdmVycy9tZC9LY29uZmlnOjEyNDpjb25maWcgTURfUkFJRDFcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTEgKG1pcnJvcmluZykgbW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDUtXG5kcml2ZXJzL21kL0tjb25maWc6MTQ2OmNvbmZpZyBNRF9SQUlEMTBcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjQtXG5kcml2ZXJzL21kL0tjb25maWc6MTY1OmNvbmZpZyBNRF9SQUlENDU2XG5kcml2ZXJzL21kL0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC00L1JBSUQtNS9SQUlELTYgbW9kZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAxMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRlbHZpbmcgaW50byBCYWRibG9ja3MgYW5kIGl0cyBQbGFjZSBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCAqYmFkYmxvY2tzKi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBibG9jayBsYXllciwgbm8gZG91YnQuIEJ1dCBJIG5lZWQgdG8gcmVtZW1iZXIsIGl0JiMzOTtzIG5vdCBzb21lIGlzb2xhdGVkIGNvbmZpZ3VyYXRpb24gc3dpdGNoIGxpa2UgYENPTkZJR19GT09CQVJgLiBJdCYjMzk7cyBtb3JlIG9mIGEgKmNhcGFiaWxpdHkqIHRoYXQgZ2V0cyBpbnRlZ3JhdGVkIGJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGJsb2NrIGRldmljZSBkcml2ZXJzLiBTbywgaXRzIHByZXNlbmNlIG9yIGFic2VuY2UgaXNuJiMzOTt0IGFib3V0IGVuYWJsaW5nIGl0IGdsb2JhbGx5LCBpdCYjMzk7cyBhYm91dCB0aGUgZHJpdmVyICp1c2luZyogaXQgd2hlbiBpdCBtYWtlcyBzZW5zZS4KCkp1c3QgdG8gYmUgc3VyZSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZeKAmXMgYSBjb25maWd1cmF0aW9uIHN5bWJvbCDigJMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19CQURCTE9DS1NgIOKAkyBoYW5naW5nIGFyb3VuZCBzb21ld2hlcmUgaW4gdGhlIGtlcm5lbCBjb25maWcgdGhhdCBwcm92aWRlcyBhIG1vcmUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEdvdHRhIGNoZWNrIHRob3NlIGNvbmZpZyBvcHRpb25zIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT04PW9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4tLVxuYmxvY2svTWFrZWZpbGUtMTItXHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbmJsb2NrL01ha2VmaWxlOjEzOlx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cdFx0XHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCYWRibG9ja3MgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBiYWRibG9ja3NgIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBmaWd1cmVkIG91dC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBgYmFkYmxvY2tzLm9gIG1vZHVsZSBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaW4gYGJsb2NrL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgbWVhbnMgd2UgZG9uJiMzOTt0IGFjdHVhbGx5ICpuZWVkKiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGp1c3QgdG8gZ2V0IGBiYWRibG9ja3Mub2AgaXRzZWxmIGJ1aWx0LiBJdCYjMzk7cyBtb3JlIGFib3V0IGVuc3VyaW5nIHRoYXQgZHJpdmVycyB3aGljaCAqdXNlKiBiYWRibG9ja3MgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uCgpUaGlua2luZyBhYm91dCB3aGljaCBkcml2ZXJzIGFyZSBnb29kIHRlc3QgY2FzZXMsIGBCTEtfREVWX05VTExfQkxLYCBzZWVtcyBwZXJmZWN0LiBUaGUgZmFjdCB0aGF0IGl0IGFsbG93cyBzZXR0aW5nIGJhZGJsb2NrcyB2aWEgY29uZmlnZnMgYW5kIHRoZW4gZG9pbmcgSS9PIHRvIHRyaWdnZXIgYGJhZGJsb2Nrc19jaGVja2AgaXMgcmVhbGx5IGNvbnZlbmllbnQuIGBNRF9SQUlEMWAsIGBNRF9SQUlEMTBgLCBhbmQgYE1EX1JBSUQ0NTZgIGFsc28gbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcywgZ2l2ZW4gdGhlaXIgcG90ZW50aWFsIHRvIGludGVyYWN0IHdpdGggYmFkIGJsb2NrIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIGp1c3Qgc2F3IHRoYXQgYF9iYWRibG9ja3Nfc2V0YCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgIGFyZSBzdGF0aWMhIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuIFRoZSBhY3R1YWwgZXhwb3J0ZWQgb25lcyBhcmUgYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWVzLiBPa2F5LCBnb3QgaXQuIEkmIzM5O2xsIHZlcmlmeSB0aGF0IEkgaGF2ZSB0aGUgY29ycmVjdCBuYW1lcyBvZiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipiYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xMzI1PWludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC19XG5ibG9jay9iYWRibG9ja3MuYzoxMzYxOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzYyLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNzk9Ym9vbCBiYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM4NDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODUtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTQwMD1ib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDAzLX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MDQ6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NsZWFyKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MDUtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTQxMz12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NDAtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ0MTpFWFBPUlRfU1lNQk9MX0dQTChhY2tfYWxsX2JhZGJsb2Nrcyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDQyLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE0NTI9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktfVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ5MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2hvdyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDkxLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE1MDI9c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNi19XG5ibG9jay9iYWRibG9ja3MuYzoxNTI3OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE1NjA9aW50IGJhZGJsb2Nrc19pbml0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZW5hYmxlKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NjMtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTU2NDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfaW5pdCk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTY1LVxuYmxvY2svYmFkYmxvY2tzLmM9MTU2Nj1pbnQgZGV2bV9pbml0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NzEtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTU3MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2luaXRfYmFkYmxvY2tzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NzMtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTU3OD12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1ODctfVxuYmxvY2svYmFkYmxvY2tzLmM6MTU4ODpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzgzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDg2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEJhZGJsb2NrcyBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV2aXNlIGEgZnV6emluZyBzdHJhdGVneSBmb3IgdGhlIHJlY2VudCBgYmFkYmxvY2tzYCBjb2RlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZpeGVzIGZvciBpbnRlZ2VyIG92ZXJmbG93cywgc2hpZnQgdmFsdWVzLCBhbmQgcm91bmRpbmcgaXNzdWVzIGFyZSByb2J1c3QsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgZ25hcmx5IGVkZ2UgY2FzZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGNlbnRlciBhcm91bmQgdGhlIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgIGZ1bmN0aW9ucy4gV2hpbGUgYF9iYWRibG9ja3Nfc2V0YCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgIGFyZSBzdGF0aWMsIHRoZXkgY291bGQgc3RpbGwgYmUgdGFyZ2V0ZWQgaWYgdGhlaXIgZGVidWcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiBJJiMzOTtsbCBpbmNsdWRlIGJvdGggc3RhdGljIGFuZCBleHBvcnRlZCBmdW5jdGlvbiBuYW1lcyBpbiBteSBmb2N1cyBsaXN0LgoKSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBob3cgYGJhZGJsb2Nrc19zdG9yZWAgaXMgdXNlZCwgYXMgaXQgcGFyc2VzIHVzZXIgaW5wdXQuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgYG51bGxfYmxrYCBkaXJlY3RseSBjYWxscyBgYmFkYmxvY2tzX3NldGAgYW5kIGBiYWRibG9ja3NfY2xlYXJgLCBieXBhc3NpbmcgYGJhZGJsb2Nrc19zdG9yZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdGUgZm9yIGNvdmVyYWdlLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGNvcmUgZnVuY3Rpb25zIEkgbWVudGlvbmVkOiBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYF9iYWRibG9ja3Nfc2V0YCwgYW5kIGBfYmFkYmxvY2tzX2NsZWFyYC4KCkkgYWxzbyBjaGVja2VkIHRoZSBwYXRjaCBpdHNlbGYsIHdoaWNoIGNsZWFybHkgYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3dzLCBpbnRyb2R1Y2VzIGJldHRlciBzaGlmdCB2YWx1ZSBoYW5kbGluZywgYW5kIGNvcnJlY3RzIHRoZSByb3VuZGluZyBsb2dpYyBieSB1dGlsaXppbmcgYHJvdW5kX2Rvd25gIGFuZCBgcm91bmRfdXBgIHByb3Blcmx5LiBJIHNlZSBjaGVja3Mgd2VyZSBhZGRlZCB0byBlbnN1cmUgdGhlIGNhbGN1bGF0aW9ucyBkb24mIzM5O3Qgd3JhcCBhbmQgdGhhdCBzaGlmdCB2YWx1ZXMgYXJlIHZhbGlkLiBUaGlzIHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGFsbCBhYm91dCBoYW5kbGluZyB0aG9zZSBlZGdlIGNhc2VzIGdyYWNlZnVsbHksIHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIGNvcnJ1cHRpbmcgbWVtb3J5LgoKVG8gZ2V0IHRoZSBuZWNlc3NhcnkgY29kZSBjb3ZlcmFnZSwgdGhlIGBCTEtfREVWX05VTExfQkxLYCBhbmQgYE1EXypgIGNvbmZpZ3MgYXJlIGNydWNpYWwuIFRoZXNlIHdpbGwgZW5hYmxlIHJlbGV2YW50IHBhdGhzLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gaGFzIHNob3duIGBDT05GSUdfQlRUYCBhbmQgYENPTkZJR19CTEtfREVWX1BNRU1gIGFyZSBub3QgcmVxdWlyZWQuCgpTbywgaGVyZSYjMzk7cyBteSBwbGFuOiBJJiMzOTtsbCB0YXJnZXQgdGhvc2Uga2V5IGZ1bmN0aW9ucyAoYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYGJhZGJsb2Nrc19jaGVja2AsIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCkgd2hpbGUgcnVubmluZyB0aGUga2VybmVsIHdpdGggdGhlIGBCTEtfREVWX05VTExfQkxLYCwgYE1EX1JBSUQxYCwgYE1EX1JBSUQxMGAsIGFuZCBgTURfUkFJRDQ1NmAgY29uZmlncyBlbmFibGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3ZlcmFnZSBJIG5lZWQgdG8gZmluZCBhbnkgbGluZ2VyaW5nIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O01EX1JBSUQ0NTYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jbGVhciYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7X2JhZGJsb2Nrc19jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW52YWxpZCBzaGlmdCB2YWx1ZXMsIGFuZCBpbmNvcnJlY3Qgcm91bmRpbmcgbG9naWMgaW4gdGhlIGJhZGJsb2NrcyBtYW5hZ2VtZW50IGNvZGUuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgZWRnZSBjYXNlcyAobGlrZSBsYXJnZSBzZWN0b3IgbnVtYmVycyBvciBpbnZhbGlkIHNoaWZ0IHZhbHVlcykgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDssCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgaW50ZWdlciBvdmVyZmxvd3MsIGludmFsaWQgc2hpZnQgdmFsdWVzLCBhbmQgaW5jb3JyZWN0IHJvdW5kaW5nIGxvZ2ljIGluIHRoZSBiYWRibG9ja3MgbWFuYWdlbWVudCBjb2RlLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGVkZ2UgY2FzZXMgKGxpa2UgbGFyZ2Ugc2VjdG9yIG51bWJlcnMgb3IgaW52YWxpZCBzaGlmdCB2YWx1ZXMpIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAyOjQxLjg0MjUxMTExNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTcwODY4ODUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJNRF9SQUlENDU2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIixcbiAgICBcIl9iYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJfYmFkYmxvY2tzX2NsZWFyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgaW50ZWdlciBvdmVyZmxvd3MsIGludmFsaWQgc2hpZnQgdmFsdWVzLCBhbmQgaW5jb3JyZWN0IHJvdW5kaW5nIGxvZ2ljIGluIHRoZSBiYWRibG9ja3MgbWFuYWdlbWVudCBjb2RlLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGVkZ2UgY2FzZXMgKGxpa2UgbGFyZ2Ugc2VjdG9yIG51bWJlcnMgb3IgaW52YWxpZCBzaGlmdCB2YWx1ZXMpIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDI6NDEuODQyNTE4MDg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU1NTQ0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNjRiYmUwZWI2ZTRmMjJlMDA5NmQyYWUyN2NjMjA2NjQ3NjllN2NmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAyOjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcXG5pbmRleCBlY2U2NGU3NmZlOGZmZi4uMDBhNTk3Mjk2MDBhYTggMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xcbkBAIC04NTMsMTIgKzg1MywyMyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4gXFx0XFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAocyBcXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxcbitcXHRcXHQvKiBSYW5nZSB3cmFwcyBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCkge1xcbiBcXHRcXHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cXG4gXFx0XFx0c2VjdG9yX3QgbmV4dCA9IHMgKyBzZWN0b3JzO1xcbiBcXG4tXFx0XFx0cm91bmRkb3duKHMsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0cm91bmR1cChuZXh0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmIChiYi1cXHUwMDNlc2hpZnQgXFx1MDAzZT0gQklUU19QRVJfTE9OR19MT05HKVxcbitcXHRcXHRcXHQvKiBDb3JydXB0L3Vuc2FuaXRpc2VkIHNoaWZ0IHZhbHVlICovXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdG5leHQgPSByb3VuZF91cChuZXh0LCAoc2VjdG9yX3QpMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbitcXHRcXHRpZiAobmV4dCBcXHUwMDNjPSBzKVxcbitcXHRcXHRcXHQvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdHNlY3RvcnMgPSBuZXh0IC0gcztcXG4gXFx0fVxcbiBcXG5AQCAtMTA2MSw3ICsxMDcyLDEyIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuIFxcdFxcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0aWYgKHMgXFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcXG4rXFx0XFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdGlmIChiYi1cXHUwMDNlc2hpZnQpIHtcXG4rXFx0XFx0c2VjdG9yX3Qgb3JpZ19zID0gcztcXG4gXFx0XFx0c2VjdG9yX3QgdGFyZ2V0O1xcbiBcXG4gXFx0XFx0LyogV2hlbiBjbGVhcmluZyB3ZSByb3VuZCB0aGUgc3RhcnQgdXAgYW5kIHRoZSBlbmQgZG93bi5cXG5AQCAtMTA3MCwxMCArMTA4NiwyMSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbiBcXHRcXHQgKiBIb3dldmVyIGl0IGlzIGJldHRlciB0aGUgdGhpbmsgYSBibG9jayBpcyBiYWQgd2hlbiBpdFxcbiBcXHRcXHQgKiBpc24ndCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNlPSBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcdFxcdFxcdC8qIENvcnJ1cHQvdW5zYW5pdGlzZWQgc2hpZnQgdmFsdWUgKi9cXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0XFx0dGFyZ2V0ID0gcyArIHNlY3RvcnM7XFxuLVxcdFxcdHJvdW5kdXAocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbi1cXHRcXHRyb3VuZGRvd24odGFyZ2V0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuLVxcdFxcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xcbitcXHRcXHRzID0gcm91bmRfdXAocywgKHNlY3Rvcl90KTEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0dGFyZ2V0ID0gcm91bmRfZG93bih0YXJnZXQsIChzZWN0b3JfdCkxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmIChzIFxcdTAwM2Mgb3JpZ19zIHx8IHRhcmdldCBcXHUwMDNjIHMpXFxuK1xcdFxcdFxcdC8qIFJvdW5kaW5nIHdyYXBwZWQsIG9yIHJhbmdlIGNvbGxhcHNlZCAqL1xcbitcXHRcXHRcXHRzZWN0b3JzID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcXG4rXFxuK1xcdFxcdGlmIChzZWN0b3JzID09IDApXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0d3JpdGVfc2VxbG9ja19pcnEoXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5AQCAtMTMwMywxMiArMTMzMCwyMyBAQCBpbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbiBcXG4gXFx0V0FSTl9PTihiYi1cXHUwMDNlc2hpZnQgXFx1MDAzYyAwIHx8IHNlY3RvcnMgPT0gMCk7XFxuIFxcbitcXHRpZiAocyBcXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxcbitcXHRcXHQvKiBSYW5nZSB3cmFwcyBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRpZiAoYmItXFx1MDAzZXNoaWZ0IFxcdTAwM2UgMCkge1xcbiBcXHRcXHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cXG4gXFx0XFx0c2VjdG9yX3QgdGFyZ2V0ID0gcyArIHNlY3RvcnM7XFxuIFxcbi1cXHRcXHRyb3VuZGRvd24ocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbi1cXHRcXHRyb3VuZHVwKHRhcmdldCwgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbitcXHRcXHRpZiAoYmItXFx1MDAzZXNoaWZ0IFxcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcXG4rXFx0XFx0XFx0LyogQ29ycnVwdC91bnNhbml0aXNlZCBzaGlmdCB2YWx1ZSAqL1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdHRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgKHNlY3Rvcl90KTEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0aWYgKHRhcmdldCBcXHUwMDNjPSBzKVxcbitcXHRcXHRcXHQvKiBSb3VuZGluZyB3cmFwcGVkIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAyOjQyLjIxODk3MTQxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMzMyMjE5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk1EX1JBSUQ0NTZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJiYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiLFxuICAgIFwiX2JhZGJsb2Nrc19zZXRcIixcbiAgICBcIl9iYWRibG9ja3NfY2xlYXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW52YWxpZCBzaGlmdCB2YWx1ZXMsIGFuZCBpbmNvcnJlY3Qgcm91bmRpbmcgbG9naWMgaW4gdGhlIGJhZGJsb2NrcyBtYW5hZ2VtZW50IGNvZGUuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgZWRnZSBjYXNlcyAobGlrZSBsYXJnZSBzZWN0b3IgbnVtYmVycyBvciBpbnZhbGlkIHNoaWZ0IHZhbHVlcykgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyBjcmFzaGVzIG9yIG1lbW9yeSBjb3JydXB0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE2NGJiZTBlYjZlNGYyMmUwMDk2ZDJhZTI3Y2MyMDY2NDc2OWU3Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxMDowMjo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmZmLi4wMGE1OTcyOTYwMGFhOCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xuQEAgLTg1MywxMiArODUzLDIzIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuIFx0XHQvKiBJbnZhbGlkIHNlY3RvcnMgbnVtYmVyICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChzIFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcbitcdFx0LyogUmFuZ2Ugd3JhcHMgcGFzdCB0aGUgZW5kIG9mIHNlY3Rvcl90ICovXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCkge1xuIFx0XHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cbiBcdFx0c2VjdG9yX3QgbmV4dCA9IHMgKyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKGJiLVx1MDAzZXNoaWZ0IFx1MDAzZT0gQklUU19QRVJfTE9OR19MT05HKVxuK1x0XHRcdC8qIENvcnJ1cHQvdW5zYW5pdGlzZWQgc2hpZnQgdmFsdWUgKi9cbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdG5leHQgPSByb3VuZF91cChuZXh0LCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHRpZiAobmV4dCBcdTAwM2M9IHMpXG4rXHRcdFx0LyogUm91bmRpbmcgd3JhcHBlZCBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdHNlY3RvcnMgPSBuZXh0IC0gcztcbiBcdH1cbiBcbkBAIC0xMDYxLDcgKzEwNzIsMTIgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbiBcdFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4rXHRcdC8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRpZiAoYmItXHUwMDNlc2hpZnQpIHtcbitcdFx0c2VjdG9yX3Qgb3JpZ19zID0gcztcbiBcdFx0c2VjdG9yX3QgdGFyZ2V0O1xuIFxuIFx0XHQvKiBXaGVuIGNsZWFyaW5nIHdlIHJvdW5kIHRoZSBzdGFydCB1cCBhbmQgdGhlIGVuZCBkb3duLlxuQEAgLTEwNzAsMTAgKzEwODYsMjEgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbiBcdFx0ICogSG93ZXZlciBpdCBpcyBiZXR0ZXIgdGhlIHRoaW5rIGEgYmxvY2sgaXMgYmFkIHdoZW4gaXRcbiBcdFx0ICogaXNuJ3QgdGhhbiB0byB0aGluayBhIGJsb2NrIGlzIG5vdCBiYWQgd2hlbiBpdCBpcy5cbiBcdFx0ICovXG4rXHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0XHQvKiBDb3JydXB0L3Vuc2FuaXRpc2VkIHNoaWZ0IHZhbHVlICovXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0XHR0YXJnZXQgPSBzICsgc2VjdG9ycztcbi1cdFx0cm91bmR1cChzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHJvdW5kZG93bih0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4rXHRcdHMgPSByb3VuZF91cChzLCAoc2VjdG9yX3QpMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHR0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKHMgXHUwMDNjIG9yaWdfcyB8fCB0YXJnZXQgXHUwMDNjIHMpXG4rXHRcdFx0LyogUm91bmRpbmcgd3JhcHBlZCwgb3IgcmFuZ2UgY29sbGFwc2VkICovXG4rXHRcdFx0c2VjdG9ycyA9IDA7XG4rXHRcdGVsc2VcbitcdFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbitcbitcdFx0aWYgKHNlY3RvcnMgPT0gMClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHR3cml0ZV9zZXFsb2NrX2lycShcdTAwMjZiYi1cdTAwM2Vsb2NrKTtcbkBAIC0xMzAzLDEyICsxMzMwLDIzIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4gXG4gXHRXQVJOX09OKGJiLVx1MDAzZXNoaWZ0IFx1MDAzYyAwIHx8IHNlY3RvcnMgPT0gMCk7XG4gXG4rXHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4rXHRcdC8qIFJhbmdlIHdyYXBzIHBhc3QgdGhlIGVuZCBvZiBzZWN0b3JfdCAqL1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2UgMCkge1xuIFx0XHQvKiByb3VuZCB0aGUgc3RhcnQgZG93biwgYW5kIHRoZSBlbmQgdXAgKi9cbiBcdFx0c2VjdG9yX3QgdGFyZ2V0ID0gcyArIHNlY3RvcnM7XG4gXG4tXHRcdHJvdW5kZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHJvdW5kdXAodGFyZ2V0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdGlmIChiYi1cdTAwM2VzaGlmdCBcdTAwM2U9IEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0XHQvKiBDb3JydXB0L3Vuc2FuaXRpc2VkIHNoaWZ0IHZhbHVlICovXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHMgPSByb3VuZF9kb3duKHMsIChzZWN0b3JfdCkxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdHRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgKHNlY3Rvcl90KTEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKHRhcmdldCBcdTAwM2M9IHMpXG4rXHRcdFx0LyogUm91bmRpbmcgd3JhcHBlZCBwYXN0IHRoZSBlbmQgb2Ygc2VjdG9yX3QgKi9cbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMjo0Mi4yMTg5NzMwNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODQ5MjI2MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmFkYmxvY2tzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBzcXVhcmVseSBhdCBgYmxvY2svYmFkYmxvY2tzLmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQncyBmb2N1c2VkIG9uIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIGJhZCBibG9jayBoYW5kbGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHNvbWUgY3JpdGljYWwgY2hlY2tzLiBGaXJzdCwgaXQgYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzZWN0b3IgcmFuZ2VzIHRoYXQgd3JhcCBhcm91bmQgdGhlIG1heGltdW0gdmFsdWUgb2YgYHNlY3Rvcl90YCAodGhhdCdzIGBVTExPTkdfTUFYYCBmb3IgYSA2NC1iaXQgdW5zaWduZWQgbG9uZyBsb25nLCBpbiBjYXNlIEkgbmVlZCBhIHJlbWluZGVyIGxhdGVyKS4gU21hcnQuIEl0J3MgYWxzbyBjb25jZXJuZWQgd2l0aCBndWFyZGluZyBhZ2FpbnN0IGNvcnJ1cHRlZCBvciB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBgYmItXHUwMDNlc2hpZnRgLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHJvdW5kaW5nIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb25zIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiBUaGV5IGFyZSByZXBsYWNpbmcgdGhlIHVzZSBvZiBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgIHdpdGggYHJvdW5kX2Rvd25gIGFuZCBgcm91bmRfdXBgLiBIbW0sIEkgd29uZGVyIHdoYXQgdGhlIGRlYWwgaXMgdGhlcmU/IFdhaXQgYSBzZWNvbmQuLi4gVGhvc2UgTGludXgga2VybmVsIG1hY3JvcywgYHJvdW5kZG93bmAgYW5kIGByb3VuZHVwYCwgKnJldHVybiogdGhlIHJvdW5kZWQgdmFsdWUsIHRoZXkgZG9uJ3QgbW9kaWZ5IHRoZWlyIGFyZ3VtZW50IGluIHBsYWNlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgdGhvc2UgbWFjcm9zIGJ1dCBub3QgYXNzaWduaW5nIHRoZSByZXR1cm5lZCB2YWx1ZSwgc28gaXQgd2FzIGJhc2ljYWxseSBqdXN0IHRocm93aW5nIGF3YXkgdGhlIHJvdW5kZWQgdmFsdWUhIEZvciBleGFtcGxlLCBgcm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtgIHdhcyBiYXNpY2FsbHkgYSBuby1vcCBhcyBmYXIgYXMgKnMqIHdhcyBjb25jZXJuZWQhIFRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBleHBsaWNpdGx5IGFzc2lnbmluZyB0aGUgcm91bmRlZCB2YWx1ZXMgYmFjayB0byB0aGUgdmFyaWFibGVzOyBgcyA9IHJvdW5kX2Rvd24oLi4uKWAgYW5kIGBuZXh0ID0gcm91bmRfdXAoLi4uKWAuIEJyaWxsaWFudCwgaXTigJlzIGZpeGluZyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGJ1Zy5cblxuVGhlc2UgYXJlIGNyaXRpY2FsIGJhZCBibG9jayBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhleSdyZSBhdCB0aGUgdmVyeSBoZWFydCBvZiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCB0aGUgZmFjdCB0aGF0IHRoZXkncmUgdXNlZCBieSB0aGluZ3MgbGlrZSBNRCAoUkFJRCkgYW5kIE5WRElNTSBtYWtlcyB0aGlzIHBhdGNoIGFsbCB0aGUgbW9yZSBzaWduaWZpY2FudC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBpbnRlZ3JpdHksIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5MZXQgbWUgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgYmFkYmxvY2tzLmNgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIGFuZCB3aGF0LCBpZiBhbnksIGNvbmZpZyBvcHRpb25zIGFyZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAyOjUxLjA2ODIwMTMzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2NTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT04PW9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbi0tXFxuYmxvY2svTWFrZWZpbGUtMTItXFx0XFx0XFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlOjEzOlxcdFxcdFxcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cXHRcXHRcXHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMjo1MS4xMzA0NzIxMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQzOTQ2ODIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgYmFkYmxvY2tzLm9gIGlzIGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoZXNlIHR5cGVzIG9mIGJ1aWxkcyAoYG9iai15YCkuIEJ1dCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG15IG1pbmQgaXM6IHdobyBhY3R1YWxseSAqdXNlcyogaXQ/IEl0J3MgYSBiaXQgb2YgYSBjb2RlIHNtZWxsIHRvIGluY2x1ZGUgc29tZXRoaW5nIGJsaW5kbHkgd2l0aG91dCB1bmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMuXG5cblNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zZXRgLCBhbmQgYGJhZGJsb2Nrc19jbGVhcmAgYXJlIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZnVuY3Rpb24gY2FsbHMgYW5kIGZpbmQgb3V0IHdoaWNoIGRyaXZlcnMsIGlmIGFueSwgYXJlIGxldmVyYWdpbmcgdGhlIGBiYWRibG9ja3NgIGZ1bmN0aW9uYWxpdHkuIFRoaXMgd2lsbCBjb25maXJtIHdoZXRoZXIgaXRzIHVuY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgdHJ1bHkgd2FycmFudGVkIG9yIGlmIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIG1hZGUgY29uZGl0aW9uYWwgdG8gc2F2ZSBzb21lIGtlcm5lbCBzaXplIGFuZC9vciByZWR1Y2UgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBjaGFpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzoxOS41Njk5NDI0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNzEzNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhZGJsb2Nrc19jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXFxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTA2MD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxMi0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMTM6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTQtXFx0XFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyOTEtLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTI5MjogKiBiYWRibG9ja3NfY2hlY2soKSAtIGNoZWNrIGEgZ2l2ZW4gcmFuZ2UgZm9yIGJhZCBzZWN0b3JzXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5My0gKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMDctICpcXG5ibG9jay9iYWRibG9ja3MuYzoxMzA4OiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcXG5ibG9jay9iYWRibG9ja3MuYy0xMzA5LSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzI1OmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNi1cXHRcXHRcXHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzU0LVxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzU1OlxcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM1Ni1cXHRpZiAocmVhZF9zZXFyZXRyeShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIHNlcSkpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzYwLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzYxOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNDY9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1NTpcXHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNmJhZF9zZWN0b3JzKSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU2LVxcdFxcdHJldHVybiBCTEtfU1RTX09LO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTI5OT1zdGF0aWMgaW5saW5lIGludCBpc19iYWRibG9jayhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaC0zMDItXFx0aWYgKHVubGlrZWx5KHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jb3VudCkpIHtcXG5kcml2ZXJzL21kL21kLmg6MzAzOlxcdFxcdGludCBydiA9IGJhZGJsb2Nrc19jaGVjayhcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCByZGV2LVxcdTAwM2VkYXRhX29mZnNldCArIHMsXFxuZHJpdmVycy9tZC9tZC5oLTMwNC1cXHRcXHRcXHRcXHRcXHRzZWN0b3JzLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vbmQuaD02NzY9c3RhdGljIGlubGluZSBib29sIGlzX2JhZF9wbWVtKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cXG5kcml2ZXJzL252ZGltbS9uZC5oOjY4MzpcXHRcXHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcXHUwMDI2Zmlyc3RfYmFkLFxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjg0LVxcdFxcdFxcdFxcdFxcdTAwMjZudW1fYmFkKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODMtXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XFx0XFx0YmJfcHJlc2VudCA9IGJhZGJsb2Nrc19jaGVjayhcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYiwgbWV0YV9zdGFydCxcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4NS1cXHRcXHRcXHRcXHRtZXRhX251bSwgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNm51bV9iYWQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTI0Mj1fX3dlYWsgbG9uZyBfX3BtZW1fZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBnb2ZmX3QgcGdvZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjU4LVxcdGlmIChiYi1cXHUwMDNlY291bnQgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU5OlxcdCAgICBiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbnVtLCBcXHUwMDI2Zmlyc3RfYmFkLCBcXHUwMDI2bnVtX2JhZCkpIHtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjYwLVxcdFxcdGxvbmcgYWN0dWFsX25yO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD00NT1zdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01MC1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjUxOmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Mi1cXHRcXHQgICAgc2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MjEuODIzNjYyOTk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzE4MjQyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCYWRibG9jayBTdXBwb3J0IGluIE51bGxfYmxrKipcblxuT2theSwgc28gYGJhZGJsb2Nrc19jaGVja2DigKYgSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMg4oCTIGBudWxsX2Jsa2AsIGBtZGAsIGFuZCBgbnZkaW1tYCBjb21lIHRvIG1pbmQuIE5vdywgYG51bGxfYmxrYCBpdHNlbGYsIHRoYXQncyByZWFsbHkgaW50ZXJlc3RpbmcuIEl0J3MgYW4gZXhjZWxsZW50IHRhcmdldCBmb3IgZnV6emluZyB0aGUgYmxvY2sgbGF5ZXIg4oCTIGl0J3Mgc2ltcGxlLCBwcmVkaWN0YWJsZSwgYW5kIGRvZXNu4oCZdCBoYXZlIHRoZSBjb21wbGV4aXRpZXMgb2YgcmVhbCBoYXJkd2FyZS4gR2l2ZW4gdGhhdCwgSeKAmW0gdGhpbmtpbmcgd2Ugc2hvdWxkIHNlZSBpZiBgbnVsbF9ibGtgIGFjdHVhbGx5IHN1cHBvcnRzIHRoZSBzZXR0aW5nIG9mIGJhZGJsb2Nrcy4gVGhhdCB3b3VsZCBvcGVuIHVwIGEgd2hvbGUgbmV3IGF2ZW51ZSBmb3IgdGVzdGluZyBhbmQgZGlzY292ZXJpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBpZiB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYWxyZWFkeSBwcmVzZW50IG9yIGlmIHdlIG5lZWQgdG8gYWRkIGl0IHRvIGZ1bGx5IHV0aWxpemUgYG51bGxfYmxrYCBmb3IgdGhpcyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MzIuMTk1NDg5NjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4MTQ2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ3NT1OVUxMQl9ERVZJQ0VfQVRUUihyb3RhdGlvbmFsLCBib29sLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NzY6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX29uY2UsIGJvb2wsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ3NzpOVUxMQl9ERVZJQ0VfQVRUUihiYWRibG9ja3NfcGFydGlhbF9pbywgYm9vbCwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDc4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTIzPUNPTkZJR0ZTX0FUVFIobnVsbGJfZGV2aWNlXywgcG93ZXIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUyNC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MjU6c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqcGFnZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTI4LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUyOTpcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnRfZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUzMC19XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTMxLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUzMjpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzMtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjEtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTYyOlxcdC8qIGVuYWJsZSBiYWRibG9ja3MgKi9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NjM6XFx0Y21weGNoZyhcXHUwMDI2dF9kZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaGlmdCwgLTEsIDApO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2NC1cXHRpZiAoYnVmWzBdID09ICcrJykge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU2NTpcXHRcXHRpZiAoYmFkYmxvY2tzX3NldChcXHUwMDI2dF9kZXYtXFx1MDAzZWJhZGJsb2Nrcywgc3RhcnQsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY2LVxcdFxcdFxcdFxcdCAgZW5kIC0gc3RhcnQgKyAxLCAxKSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjctXFx0XFx0XFx0cmV0ID0gY291bnQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4OlxcdH0gZWxzZSBpZiAoYmFkYmxvY2tzX2NsZWFyKFxcdTAwMjZ0X2Rldi1cXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjktXFx0XFx0XFx0XFx0ICAgZW5kIC0gc3RhcnQgKyAxKSkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc1LX1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzY6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBiYWRibG9ja3MpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3Ny1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTU5Nj1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbnVsbGJfZGV2aWNlX2F0dHJzW10gPSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk3OlxcdFxcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3MsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk4OlxcdFxcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3Nfb25jZSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1OTk6XFx0XFx1MDAyNm51bGxiX2RldmljZV9hdHRyX2JhZGJsb2Nrc19wYXJ0aWFsX2lvLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTYwMC1cXHRcXHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmxvY2tpbmcsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03Nzc9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03OTItXFx0SU5JVF9SQURJWF9UUkVFKFxcdTAwMjZkZXYtXFx1MDAzZWNhY2hlLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo3OTM6XFx0aWYgKGJhZGJsb2Nrc19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCkpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03OTQtXFx0XFx0a2ZyZWUoZGV2KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTgzND1zdGF0aWMgdm9pZCBudWxsX2ZyZWVfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgzOS1cXHRudWxsX2ZyZWVfem9uZWRfZGV2KGRldik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6ODQwOlxcdGJhZGJsb2Nrc19leGl0KFxcdTAwMjZkZXYtXFx1MDAzZWJhZGJsb2Nrcyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODQxLVxcdGtmcmVlKGRldik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzE1PXN0YXRpYyBpbmxpbmUgYmxrX3N0YXR1c190IG51bGxfaGFuZGxlX3Rocm90dGxlZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzM2LS8qXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTMzNzogKiBDaGVjayBpZiB0aGUgY29tbWFuZCBzaG91bGQgZmFpbCBmb3IgdGhlIGJhZGJsb2Nrcy4gSWYgc28sIHJldHVyblxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzMzgtICogQkxLX1NUU19JT0VSUiBhbmQgcmV0dXJuIG51bWJlciBvZiBwYXJ0aWFsIEkvTyBzZWN0b3JzIHRvIGJlIHdyaXR0ZW4gb3IgcmVhZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDUtICovXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM0NjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDgte1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNDk6XFx0c3RydWN0IGJhZGJsb2NrcyAqYmIgPSBcXHUwMDI2Y21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3M7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1MC1cXHRzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYgPSBjbWQtXFx1MDAzZW5xLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU0LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTU6XFx0aWYgKCFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgKm5yX3NlY3RvcnMsIFxcdTAwMjZmaXJzdF9iYWQsIFxcdTAwMjZiYWRfc2VjdG9ycykpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1Ni1cXHRcXHRyZXR1cm4gQkxLX1NUU19PSztcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTg6XFx0aWYgKGNtZC1cXHUwMDNlbnEtXFx1MDAzZWRldi1cXHUwMDNlYmFkYmxvY2tzX29uY2UpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1OTpcXHRcXHRiYWRibG9ja3NfY2xlYXIoYmIsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNjAtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM2MTpcXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3NfcGFydGlhbF9pbykge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNjItXFx0XFx0aWYgKCFJU19BTElHTkVEKGZpcnN0X2JhZCwgYmxvY2tfc2VjdG9ycykpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDIzPWJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDI2LVxcdHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiA9IGNtZC1cXHUwMDNlbnEtXFx1MDAzZWRldjtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDI3OlxcdGJsa19zdGF0dXNfdCBiYWRibG9ja3NfcmV0ID0gQkxLX1NUU19PSztcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDI4LVxcdGJsa19zdGF0dXNfdCByZXQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQyOS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDMwOlxcdGlmIChkZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaGlmdCAhPSAtMSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDMxOlxcdFxcdGJhZGJsb2Nrc19yZXQgPSBudWxsX2hhbmRsZV9iYWRibG9ja3MoY21kLCBzZWN0b3IsIFxcdTAwMjZucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDMyLVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQzOC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDM5OlxcdHJldHVybiBiYWRibG9ja3NfcmV0O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0NDAtfVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb25maWdmcy5oXFx1MDAzZVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02NC1cXHR1bnNpZ25lZCBpbnQgY3Vycl9jYWNoZTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6NjU6XFx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY2OlxcdGJvb2wgYmFkYmxvY2tzX29uY2U7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY3OlxcdGJvb2wgYmFkYmxvY2tzX3BhcnRpYWxfaW87XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTY4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTEzND1ibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzUtXFx0XFx0XFx0ICAgICAgc2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbnJfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjEzNjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz0zNTA9c3RhdGljIGJsa19zdGF0dXNfdCBudWxsX3pvbmVfd3JpdGUoc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU1LVxcdHN0cnVjdCBudWxsYl96b25lICp6b25lID0gXFx1MDAyNmRldi1cXHUwMDNlem9uZXNbem5vXTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MzU2OlxcdGJsa19zdGF0dXNfdCBiYWRibG9ja3NfcmV0ID0gQkxLX1NUU19PSztcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMzU3LVxcdGJsa19zdGF0dXNfdCByZXQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNDE1LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo0MTY6XFx0aWYgKGRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ICE9IC0xKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxNzpcXHRcXHRiYWRibG9ja3NfcmV0ID0gbnVsbF9oYW5kbGVfYmFkYmxvY2tzKGNtZCwgc2VjdG9yLCBcXHUwMDI2bnJfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxODpcXHRcXHRpZiAoYmFkYmxvY2tzX3JldCAhPSBCTEtfU1RTX09LIFxcdTAwMjZcXHUwMDI2ICFucl9zZWN0b3JzKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQxOTpcXHRcXHRcXHRyZXQgPSBiYWRibG9ja3NfcmV0O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy00MjAtXFx0XFx0XFx0Z290byB1bmxvY2tfem9uZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy00NDMtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQ0NDpcXHRyZXQgPSBiYWRibG9ja3NfcmV0O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy00NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjMyLjI2ODMxMzMwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTYzNDYwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQmFkYmxvY2sgSW1wbGVtZW50YXRpb24gaW4gTGludXggQmxvY2sgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBob3cgYmFkIGJsb2NrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIHdoaWNoIHV0aWxpemVzIGBjb25maWdmc2AgYW5kIGBiYWRibG9ja3NgLiBJbnRlcmVzdGluZywgSSBkaWRuJ3QgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYGNvbmZpZ2ZzYCBmb3IgdGhpcywgYnV0IGl0IG1ha2VzIHNlbnNlIGFzIGEgd2F5IHRvIGV4cG9zZSB0aGVzZSBzZXR0aW5ncy4gVGhlIGtleSBpcyB0aGF0IGBudWxsX2Jsa2AgYWxsb3dzIHNldHRpbmcgYmFkIGJsb2NrcyB2aWEgdGhlIGBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlYCBmdW5jdGlvbi4gRXNzZW50aWFsbHksIGl0IGFsbG93cyBjb25maWd1cmluZyBiYWQgYmxvY2sgaW5mb3JtYXRpb24sIHJpZ2h0PyBUaGUgY29uZmlnIG9wdGlvbiByZWxhdGVkIHRvIGBudWxsX2Jsa2AgaXMgYEJMS19ERVZfTlVMTF9CTEtgLlxuXG5Ob3csIHRoZSBtZW50aW9uIG9mIHRoZSBgTURgIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlciBpcyBpbXBvcnRhbnQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgKml0KiBoYW5kbGVzIGJhZCBibG9ja3MgdG9vLCB0byBzZWUgaWYgdGhlcmUncyBhbnkgb3ZlcmxhcCBpbiBob3cgYmFkIGJsb2NrcyBhcmUgdXNlZCwgbWFuYWdlZCBhbmQgcG9zc2libHkgY29uZmlndXJlZCBhY3Jvc3MgZGlmZmVyZW50IGJsb2NrIGRldmljZSBkcml2ZXJzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIE1EIGNvbmZpZyBvcHRpb25zIHRvIGV4cGxvcmUgaXQgZnVydGhlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBjb21tb24gbWV0aG9kb2xvZ2llcyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHBhcmFsbGVscyBhbmQgSSB3YW50IHRvIHNlZSBpZiBhbnkgZ2VuZXJhbCBwcmluY2lwbGVzIGFyZSBlbWVyZ2luZyBvciBpZiB0aGUgc3RyYXRlZ2llcyBkaWZmZXIgc2lnbmlmaWNhbnRseSBiYXNlZCBvbiB0aGUgZHJpdmVyJ3MgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjM3LjQyNDY2MTEzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5NzA4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0tZHVzdC5jPTIyND1zdGF0aWMgaW50IGR1c3RfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYy0yMzktXFxuZHJpdmVycy9tZC9kbS1kdXN0LmM6MjQwOnN0YXRpYyBib29sIF9fZHVzdF9jbGVhcl9iYWRibG9ja3Moc3RydWN0IHJiX3Jvb3QgKnRyZWUsXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjQxLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb3VudClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTI2My1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYzoyNjQ6c3RhdGljIGludCBkdXN0X2NsZWFyX2JhZGJsb2NrcyhzdHJ1Y3QgZHVzdF9kZXZpY2UgKmRkLCBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4sXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjY1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCAqc3pfcHRyKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjc4LVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjI3OTpcXHRpZiAoIV9fZHVzdF9jbGVhcl9iYWRibG9ja3MoXFx1MDAyNmJhZGJsb2NrbGlzdCwgYmFkYmxvY2tfY291bnQpKVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjI4MDpcXHRcXHRETUVNSVQoXFxcIiVzOiBubyBiYWRibG9ja3MgZm91bmRcXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjgxLVxcdGVsc2VcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzoyODI6XFx0XFx0RE1FTUlUKFxcXCIlczogYmFkYmxvY2tzIGNsZWFyZWRcXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjgzLVxcbi0tXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtMjg2LVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjI4NzpzdGF0aWMgaW50IGR1c3RfbGlzdF9iYWRibG9ja3Moc3RydWN0IGR1c3RfZGV2aWNlICpkZCwgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuLFxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTI4OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgKnN6X3B0cilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jPTQwNT1zdGF0aWMgdm9pZCBkdXN0X2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQwOC1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0MDk6XFx0X19kdXN0X2NsZWFyX2JhZGJsb2NrcyhcXHUwMDI2ZGQtXFx1MDAzZWJhZGJsb2NrbGlzdCwgZGQtXFx1MDAzZWJhZGJsb2NrX2NvdW50KTtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00MTAtXFx0ZG1fcHV0X2RldmljZSh0aSwgZGQtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYz00MTQ9c3RhdGljIGludCBkdXN0X21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcXG4tLVxcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0MC1cXHRcXHRcXHRyID0gMDtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NDE6XFx0XFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCBcXFwiY291bnRiYWRibG9ja3NcXFwiKSkge1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ0Mi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGQtXFx1MDAzZWR1c3RfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ0MzpcXHRcXHRcXHRETUVNSVQoXFxcImNvdW50YmFkYmxvY2tzOiAlbGx1IGJhZGJsb2NrKHMpIGZvdW5kXFxcIixcXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDQtXFx0XFx0XFx0ICAgICAgIGRkLVxcdTAwM2ViYWRibG9ja19jb3VudCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDYtXFx0XFx0XFx0ciA9IDE7XFxuZHJpdmVycy9tZC9kbS1kdXN0LmM6NDQ3OlxcdFxcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSwgXFxcImNsZWFyYmFkYmxvY2tzXFxcIikpIHtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NDg6XFx0XFx0XFx0ciA9IGR1c3RfY2xlYXJfYmFkYmxvY2tzKGRkLCByZXN1bHQsIG1heGxlbiwgXFx1MDAyNnN6KTtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYy00NDktXFx0XFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCBcXFwicXVpZXRcXFwiKSkge1xcbi0tXFxuZHJpdmVycy9tZC9kbS1kdXN0LmMtNDU0LVxcdFxcdFxcdHIgPSAwO1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jOjQ1NTpcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sIFxcXCJsaXN0YmFkYmxvY2tzXFxcIikpIHtcXG5kcml2ZXJzL21kL2RtLWR1c3QuYzo0NTY6XFx0XFx0XFx0ciA9IGR1c3RfbGlzdF9iYWRibG9ja3MoZGQsIHJlc3VsdCwgbWF4bGVuLCBcXHUwMDI2c3opO1xcbmRyaXZlcnMvbWQvZG0tZHVzdC5jLTQ1Ny1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTQ0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGstaW50ZWdyaXR5LmhcXHUwMDNlXFxuZHJpdmVycy9tZC9tZC5jOjQ1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWRibG9ja3MuaFxcdTAwM2VcXG5kcml2ZXJzL21kL21kLmMtNDYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTEwODA9dm9pZCBtZF9yZGV2X2NsZWFyKHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwOTItXFx0fVxcbmRyaXZlcnMvbWQvbWQuYzoxMDkzOlxcdGJhZGJsb2Nrc19leGl0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MpO1xcbmRyaXZlcnMvbWQvbWQuYy0xMDk0LX1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMDk3PXN0YXRpYyB2b2lkIHN1cGVyX3dyaXR0ZW4oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTExMjMtICogbWRfd3JpdGVfbWV0YWRhdGEgLSB3cml0ZSBtZXRhZGF0YSB0byB1bmRlcmx5aW5nIGRpc2ssIGluY2x1ZGluZ1xcbmRyaXZlcnMvbWQvbWQuYzoxMTI0OiAqIGFycmF5IHN1cGVyYmxvY2ssIGJhZGJsb2NrcywgYml0bWFwIHN1cGVyYmxvY2sgYW5kIGJpdG1hcCBiaXRzLlxcbmRyaXZlcnMvbWQvbWQuYy0xMTI1LSAqIEBtZGRldjpcXHR0aGUgYXJyYXkgdG8gd3JpdGVcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMzY1PXN0YXRpYyBpbnQgc3VwZXJfOTBfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTQxMi1cXHRyZGV2LVxcdTAwM2VzYl9zaXplID0gTURfU0JfQllURVM7XFxuZHJpdmVycy9tZC9tZC5jOjE0MTM6XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gLTE7XFxuZHJpdmVycy9tZC9tZC5jLTE0MTQtXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTgwOD1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTkwMy1cXHRpZiAoKGxlMzJfdG9fY3B1KHNiLVxcdTAwM2VmZWF0dXJlX21hcCkgXFx1MDAyNiBNRF9GRUFUVVJFX0JBRF9CTE9DS1MpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jOjE5MDQ6XFx0ICAgIHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jb3VudCA9PSAwKSB7XFxuZHJpdmVycy9tZC9tZC5jLTE5MDUtXFx0XFx0LyogbmVlZCB0byBsb2FkIHRoZSBiYWQgYmxvY2sgbGlzdC5cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xOTIyLVxcdFxcdGJicCA9IChfX2xlNjQgKilwYWdlX2FkZHJlc3MocmRldi1cXHUwMDNlYmJfcGFnZSk7XFxuZHJpdmVycy9tZC9tZC5jOjE5MjM6XFx0XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gc2ItXFx1MDAzZWJibG9nX3NoaWZ0O1xcbmRyaXZlcnMvbWQvbWQuYy0xOTI0LVxcdFxcdGZvciAoaSA9IDAgOyBpIFxcdTAwM2MgKHNlY3RvcnMgXFx1MDAzY1xcdTAwM2MgKDktMykpIDsgaSsrLCBiYnArKykge1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTE5MzEtXFx0XFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9tZC9tZC5jOjE5MzI6XFx0XFx0XFx0aWYgKCFiYWRibG9ja3Nfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHNlY3RvciwgY291bnQsIDEpKVxcbmRyaXZlcnMvbWQvbWQuYy0xOTMzLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTE5MzUtXFx0fSBlbHNlIGlmIChzYi1cXHUwMDNlYmJsb2dfb2Zmc2V0ICE9IDApXFxuZHJpdmVycy9tZC9tZC5jOjE5MzY6XFx0XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gMDtcXG5kcml2ZXJzL21kL21kLmMtMTkzNy1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0yMTk3PXN0YXRpYyB2b2lkIHN1cGVyXzFfc3luYyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yMjgzLVxcbmRyaXZlcnMvbWQvbWQuYzoyMjg0OlxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQgPT0gMClcXG5kcml2ZXJzL21kL21kLmMtMjI4NS1cXHRcXHQvKiBOb3RoaW5nIHRvIGRvIGZvciBiYWQgYmxvY2tzKi8gO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTIyODktXFx0ZWxzZSB7XFxuZHJpdmVycy9tZC9tZC5jOjIyOTA6XFx0XFx0c3RydWN0IGJhZGJsb2NrcyAqYmIgPSBcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzO1xcbmRyaXZlcnMvbWQvbWQuYy0yMjkxLVxcdFxcdF9fbGU2NCAqYmJwID0gKF9fbGU2NCAqKXBhZ2VfYWRkcmVzcyhyZGV2LVxcdTAwM2ViYl9wYWdlKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0yNDM0PXN1cGVyXzFfYWxsb3dfbmV3X29mZnNldChzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNDUwLVxcdCAqIDM2SyBiZXlvbmQgc3RhcnQgb2Ygc3VwZXJibG9ja1xcbmRyaXZlcnMvbWQvbWQuYzoyNDUxOlxcdCAqIGJleW9uZCBlbmQgb2YgYmFkYmxvY2tzXFxuZHJpdmVycy9tZC9tZC5jLTI0NTItXFx0ICogYmV5b25kIHdyaXRlLWludGVudCBiaXRtYXBcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNDY2LVxcbmRyaXZlcnMvbWQvbWQuYzoyNDY3OlxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2VjdG9yICsgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNpemUgXFx1MDAzZSBuZXdfb2Zmc2V0KVxcbmRyaXZlcnMvbWQvbWQuYy0yNDY4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTI1NTg9c3RhdGljIGludCBiaW5kX3JkZXZfdG9fYXJyYXkoc3RydWN0IG1kX3JkZXYgKnJkZXYsIHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjYyNC1cXHRyZGV2LVxcdTAwM2VzeXNmc19zdGF0ZSA9IHN5c2ZzX2dldF9kaXJlbnRfc2FmZShyZGV2LVxcdTAwM2Vrb2JqLnNkLCBcXFwic3RhdGVcXFwiKTtcXG5kcml2ZXJzL21kL21kLmM6MjYyNTpcXHRyZGV2LVxcdTAwM2VzeXNmc191bmFja19iYWRibG9ja3MgPVxcbmRyaXZlcnMvbWQvbWQuYy0yNjI2LVxcdFxcdHN5c2ZzX2dldF9kaXJlbnRfc2FmZShyZGV2LVxcdTAwM2Vrb2JqLnNkLCBcXFwidW5hY2tub3dsZWRnZWRfYmFkX2Jsb2Nrc1xcXCIpO1xcbmRyaXZlcnMvbWQvbWQuYzoyNjI3OlxcdHJkZXYtXFx1MDAzZXN5c2ZzX2JhZGJsb2NrcyA9XFxuZHJpdmVycy9tZC9tZC5jLTI2MjgtXFx0XFx0c3lzZnNfZ2V0X2RpcmVudF9zYWZlKHJkZXYtXFx1MDAzZWtvYmouc2QsIFxcXCJiYWRfYmxvY2tzXFxcIik7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MjY2MD1zdGF0aWMgdm9pZCBtZF9raWNrX3JkZXZfZnJvbV9hcnJheShzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNjcwLVxcdHN5c2ZzX3B1dChyZGV2LVxcdTAwM2VzeXNmc19zdGF0ZSk7XFxuZHJpdmVycy9tZC9tZC5jOjI2NzE6XFx0c3lzZnNfcHV0KHJkZXYtXFx1MDAzZXN5c2ZzX3VuYWNrX2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jOjI2NzI6XFx0c3lzZnNfcHV0KHJkZXYtXFx1MDAzZXN5c2ZzX2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jLTI2NzMtXFx0cmRldi1cXHUwMDNlc3lzZnNfc3RhdGUgPSBOVUxMO1xcbmRyaXZlcnMvbWQvbWQuYzoyNjc0OlxcdHJkZXYtXFx1MDAzZXN5c2ZzX3VuYWNrX2JhZGJsb2NrcyA9IE5VTEw7XFxuZHJpdmVycy9tZC9tZC5jOjI2NzU6XFx0cmRldi1cXHUwMDNlc3lzZnNfYmFkYmxvY2tzID0gTlVMTDtcXG5kcml2ZXJzL21kL21kLmM6MjY3NjpcXHRyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQgPSAwO1xcbmRyaXZlcnMvbWQvbWQuYy0yNjc3LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTI3OTI9dm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0yNzk2LVxcdGludCBub3NwYXJlcyA9IDA7XFxuZHJpdmVycy9tZC9tZC5jOjI3OTc6XFx0aW50IGFueV9iYWRibG9ja3NfY2hhbmdlZCA9IDA7XFxuZHJpdmVycy9tZC9tZC5jLTI3OTgtXFx0aW50IHJldCA9IC0xO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTI4NTAtXFx0XFx0XFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikge1xcbmRyaXZlcnMvbWQvbWQuYzoyODUxOlxcdFxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3MuY2hhbmdlZCkge1xcbmRyaXZlcnMvbWQvbWQuYzoyODUyOlxcdFxcdFxcdFxcdFxcdHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkID0gMDtcXG5kcml2ZXJzL21kL21kLmM6Mjg1MzpcXHRcXHRcXHRcXHRcXHRhY2tfYWxsX2JhZGJsb2NrcyhcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzKTtcXG5kcml2ZXJzL21kL21kLmMtMjg1NC1cXHRcXHRcXHRcXHRcXHRtZF9lcnJvcihtZGRldiwgcmRldik7XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjkxNC1cXHRyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KSB7XFxuZHJpdmVycy9tZC9tZC5jOjI5MTU6XFx0XFx0aWYgKHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5jaGFuZ2VkKVxcbmRyaXZlcnMvbWQvbWQuYzoyOTE2OlxcdFxcdFxcdGFueV9iYWRibG9ja3NfY2hhbmdlZCsrO1xcbmRyaXZlcnMvbWQvbWQuYy0yOTE3LVxcdFxcdGlmICh0ZXN0X2JpdChGYXVsdHksIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjk0MS1cXHRcXHRcXHRyZGV2LVxcdTAwM2VzYl9ldmVudHMgPSBtZGRldi1cXHUwMDNlZXZlbnRzO1xcbmRyaXZlcnMvbWQvbWQuYzoyOTQyOlxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2l6ZSkge1xcbmRyaXZlcnMvbWQvbWQuYy0yOTQzLVxcdFxcdFxcdFxcdG1kX3dyaXRlX21ldGFkYXRhKG1kZGV2LCByZGV2LFxcbmRyaXZlcnMvbWQvbWQuYzoyOTQ0OlxcdFxcdFxcdFxcdFxcdFxcdCAgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNlY3RvcixcXG5kcml2ZXJzL21kL21kLmM6Mjk0NTpcXHRcXHRcXHRcXHRcXHRcXHQgIHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaXplIFxcdTAwM2NcXHUwMDNjIDksXFxuZHJpdmVycy9tZC9tZC5jLTI5NDYtXFx0XFx0XFx0XFx0XFx0XFx0ICByZGV2LVxcdTAwM2ViYl9wYWdlLCAwKTtcXG5kcml2ZXJzL21kL21kLmM6Mjk0NzpcXHRcXHRcXHRcXHRyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2l6ZSA9IDA7XFxuZHJpdmVycy9tZC9tZC5jLTI5NDgtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTI5NzMtXFxuZHJpdmVycy9tZC9tZC5jOjI5NzQ6XFx0XFx0aWYgKGFueV9iYWRibG9ja3NfY2hhbmdlZClcXG5kcml2ZXJzL21kL21kLmM6Mjk3NTpcXHRcXHRcXHRhY2tfYWxsX2JhZGJsb2NrcyhcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzKTtcXG5kcml2ZXJzL21kL21kLmMtMjk3Ni1cXHRcXHRjbGVhcl9iaXQoQmxvY2tlZEJhZEJsb2NrcywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zMDM4PXN0YXRlX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzA0NS1cXHQgICAgKCF0ZXN0X2JpdChFeHRlcm5hbEJibCwgXFx1MDAyNmZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbWQvbWQuYzozMDQ2OlxcdCAgICByZGV2LVxcdTAwM2ViYWRibG9ja3MudW5hY2tlZF9leGlzdCkpXFxuZHJpdmVycy9tZC9tZC5jLTMwNDctXFx0XFx0bGVuICs9IHNwcmludGYocGFnZStsZW4sIFxcXCJmYXVsdHklc1xcXCIsIHNlcCk7XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzA1NC1cXHRpZiAodGVzdF9iaXQoQmxvY2tlZCwgXFx1MDAyNmZsYWdzKSB8fFxcbmRyaXZlcnMvbWQvbWQuYzozMDU1OlxcdCAgICAocmRldi1cXHUwMDNlYmFkYmxvY2tzLnVuYWNrZWRfZXhpc3RcXG5kcml2ZXJzL21kL21kLmMtMzA1Ni1cXHQgICAgIFxcdTAwMjZcXHUwMDI2ICF0ZXN0X2JpdChGYXVsdHksIFxcdTAwMjZmbGFncykpKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTMwODA9c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0zMTQyLVxcdFxcdCAgICAhdGVzdF9iaXQoRXh0ZXJuYWxCYmwsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL21kL21kLmM6MzE0MzpcXHRcXHQgICAgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnVuYWNrZWRfZXhpc3QpIHtcXG5kcml2ZXJzL21kL21kLmM6MzE0NDpcXHRcXHRcXHQvKiBtZXRhZGF0YSBoYW5kbGVyIGRvZXNuJ3QgdW5kZXJzdGFuZCBiYWRibG9ja3MsXFxuZHJpdmVycy9tZC9tZC5jLTMxNDUtXFx0XFx0XFx0ICogc28gd2UgbmVlZCB0byBmYWlsIHRoZSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0zMjM1LVxcdFxcdHNldF9iaXQoRXh0ZXJuYWxCYmwsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9tZC9tZC5jOjMyMzY6XFx0XFx0cmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0ID0gMDtcXG5kcml2ZXJzL21kL21kLmMtMzIzNy1cXHRcXHRlcnIgPSAwO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTM2MDg9c3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG5kcml2ZXJzL21kL21kLmMtMzYwOS17XFxuZHJpdmVycy9tZC9tZC5jOjM2MTA6XFx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xcbmRyaXZlcnMvbWQvbWQuYy0zNjExLX1cXG5kcml2ZXJzL21kL21kLmM9MzYxMj1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYxMy17XFxuZHJpdmVycy9tZC9tZC5jOjM2MTQ6XFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MTUtXFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNjIzPXN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbmRyaXZlcnMvbWQvbWQuYy0zNjI0LXtcXG5kcml2ZXJzL21kL21kLmM6MzYyNTpcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MjYtfVxcbmRyaXZlcnMvbWQvbWQuYz0zNjI3PXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYyOC17XFxuZHJpdmVycy9tZC9tZC5jOjM2Mjk6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDEpO1xcbmRyaXZlcnMvbWQvbWQuYy0zNjMwLX1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNzkxPWludCBtZF9yZGV2X2luaXQoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzgxMy1cXHQgKi9cXG5kcml2ZXJzL21kL21kLmM6MzgxNDpcXHRyZXR1cm4gYmFkYmxvY2tzX2luaXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM4MTUtfVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTEwNTUxPUVYUE9SVF9TWU1CT0wobWRfZmluaXNoX3Jlc2hhcGUpO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNTU1LS8qIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlICovXFxuZHJpdmVycy9tZC9tZC5jOjEwNTU2OmJvb2wgcmRldl9zZXRfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmMtMTA1NTctXFx0XFx0XFx0aW50IGlzX25ldylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU2MS1cXHQvKlxcbmRyaXZlcnMvbWQvbWQuYzoxMDU2MjpcXHQgKiBSZWNvcmRpbmcgbmV3IGJhZGJsb2NrcyBmb3IgZmF1bHR5IHJkZXYgd2lsbCBmb3JjZSB1bm5lY2Vzc2FyeVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU2My1cXHQgKiBzdXBlciBibG9jayB1cGRhdGluZy4gVGhpcyBpcyBmcmFnaWxlIGZvciBleHRlcm5hbCBtYW5hZ2VtZW50IGJlY2F1c2VcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU3NS1cXG5kcml2ZXJzL21kL21kLmM6MTA1NzY6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMsIDApKSB7XFxuZHJpdmVycy9tZC9tZC5jLTEwNTc3LVxcdFxcdC8qXFxuZHJpdmVycy9tZC9tZC5jOjEwNTc4OlxcdFxcdCAqIE1hcmsgdGhlIGRpc2sgYXMgRmF1bHR5IHdoZW4gc2V0dGluZyBiYWRibG9ja3MgZmFpbHMsXFxuZHJpdmVycy9tZC9tZC5jLTEwNTc5LVxcdFxcdCAqIG90aGVyd2lzZSwgYmFkIHNlY3RvcnMgbWF5IGJlIHJlYWQuXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTA1ODYtXFx0aWYgKHRlc3RfYml0KEV4dGVybmFsQmJsLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYzoxMDU4NzpcXHRcXHRzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi1cXHUwMDNlc3lzZnNfdW5hY2tfYmFkYmxvY2tzKTtcXG5kcml2ZXJzL21kL21kLmMtMTA1ODgtXFx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXFx1MDAzZXN5c2ZzX3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDU5My19XFxuZHJpdmVycy9tZC9tZC5jOjEwNTk0OkVYUE9SVF9TWU1CT0xfR1BMKHJkZXZfc2V0X2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jLTEwNTk1LVxcbmRyaXZlcnMvbWQvbWQuYzoxMDU5Njp2b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmMtMTA1OTctXFx0XFx0XFx0ICBpbnQgaXNfbmV3KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNjAzLVxcbmRyaXZlcnMvbWQvbWQuYzoxMDYwNDpcXHRpZiAoIWJhZGJsb2Nrc19jbGVhcihcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBzLCBzZWN0b3JzKSlcXG5kcml2ZXJzL21kL21kLmMtMTA2MDUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNjA3LVxcdGlmICh0ZXN0X2JpdChFeHRlcm5hbEJibCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL21kL21kLmM6MTA2MDg6XFx0XFx0c3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtXFx1MDAzZXN5c2ZzX2JhZGJsb2Nrcyk7XFxuZHJpdmVycy9tZC9tZC5jLTEwNjA5LX1cXG5kcml2ZXJzL21kL21kLmM6MTA2MTA6RVhQT1JUX1NZTUJPTF9HUEwocmRldl9jbGVhcl9iYWRibG9ja3MpO1xcbmRyaXZlcnMvbWQvbWQuYy0xMDYxMS1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuaC0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG5kcml2ZXJzL21kL21kLmg6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXFx1MDAzZVxcbmRyaXZlcnMvbWQvbWQuaC0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTEzND1zdHJ1Y3QgbWRfcmRldiB7XFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMjE0LVxcdC8qIGhhbmRsZSBmb3IgJ3VuYWNrbm93bGVkZ2VkX2JhZF9ibG9ja3MnIHN5c2ZzIGRlbnRyeSAqL1xcbmRyaXZlcnMvbWQvbWQuaDoyMTU6XFx0c3RydWN0IGtlcm5mc19ub2RlICpzeXNmc191bmFja19iYWRibG9ja3M7XFxuZHJpdmVycy9tZC9tZC5oLTIxNi1cXHQvKiBoYW5kbGUgZm9yICdiYWRfYmxvY2tzJyBzeXNmcyBkZW50cnkgKi9cXG5kcml2ZXJzL21kL21kLmg6MjE3OlxcdHN0cnVjdCBrZXJuZnNfbm9kZSAqc3lzZnNfYmFkYmxvY2tzO1xcbmRyaXZlcnMvbWQvbWQuaDoyMTg6XFx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XFxuZHJpdmVycy9tZC9tZC5oLTIxOS1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0yOTk9c3RhdGljIGlubGluZSBpbnQgaXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzAxLXtcXG5kcml2ZXJzL21kL21kLmg6MzAyOlxcdGlmICh1bmxpa2VseShyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQpKSB7XFxuZHJpdmVycy9tZC9tZC5oOjMwMzpcXHRcXHRpbnQgcnYgPSBiYWRibG9ja3NfY2hlY2soXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcmRldi1cXHUwMDNlZGF0YV9vZmZzZXQgKyBzLFxcbmRyaXZlcnMvbWQvbWQuaC0zMDQtXFx0XFx0XFx0XFx0XFx0c2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0zMTM9c3RhdGljIGlubGluZSBpbnQgcmRldl9oYXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzIxLVxcbmRyaXZlcnMvbWQvbWQuaDozMjI6ZXh0ZXJuIGJvb2wgcmRldl9zZXRfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmgtMzIzLVxcdFxcdFxcdCAgICAgICBpbnQgaXNfbmV3KTtcXG5kcml2ZXJzL21kL21kLmg6MzI0OmV4dGVybiB2b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG5kcml2ZXJzL21kL21kLmgtMzI1LVxcdFxcdFxcdFxcdCBpbnQgaXNfbmV3KTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0xMDczPXN0YXRpYyBpbmxpbmUgYm9vbCByZGV2X2Jsb2NrZWQoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMTA4OS1cXG5kcml2ZXJzL21kL21kLmg6MTA5MDpcXHQvKiByZGV2IGlzIGJsb2NrZWQgYnkgYmFkYmxvY2tzLiAqL1xcbmRyaXZlcnMvbWQvbWQuaC0xMDkxLVxcdGlmICh0ZXN0X2JpdChCbG9ja2VkQmFkQmxvY2tzLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS0xMC5jPTI3OD1zdGF0aWMgaW5saW5lIGJvb2wgcmFpZDFfc2hvdWxkX3JlYWRfZmlyc3Qoc3RydWN0IG1kZGV2ICptZGRldixcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEtMTAuYy0yOTMtICogYmlvIHdpdGggUkVRX1JBSEVBRCBvciBSRVFfTk9XQUlUIGNhbiBmYWlsIGF0IGFueXRpbWUsIGJlZm9yZSBzdWNoIElPIGlzXFxuZHJpdmVycy9tZC9yYWlkMS0xMC5jOjI5NDogKiBzdWJtaXR0ZWQgdG8gdGhlIHVuZGVybHlpbmcgZGlza3MsIGhlbmNlIGRvbid0IHJlY29yZCBiYWRibG9ja3Mgb3IgcmV0cnlcXG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjk1LSAqIGluIHRoaXMgY2FzZS5cXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yMTQwPXN0YXRpYyBpbnQgcjFfc3luY19wYWdlX2lvKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjE1My1cXHQvKiBuZWVkIHRvIHJlY29yZCBhbiBlcnJvciAtIGVpdGhlciBmb3IgdGhlIGJsb2NrIG9yIHRoZSBkZXZpY2UgKi9cXG5kcml2ZXJzL21kL3JhaWQxLmM6MjE1NDpcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdG9yLCBzZWN0b3JzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjE1NS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yMTU4PXN0YXRpYyBpbnQgZml4X3N5bmNfcmVhZF9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yMjMyLVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRyaXZlcnMvbWQvcmFpZDEuYzoyMjMzOlxcdFxcdFxcdFxcdGlmICghcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNlY3QsIHMsIDApKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yMjM0LVxcdFxcdFxcdFxcdFxcdGFib3J0ID0gMTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yNDMyPXN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzItXFx0XFx0XFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVxcdTAwM2VtaXJyb3JzW3JlYWRfZGlza10ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQxLmM6MjQ3MzpcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdCwgcywgMCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI0NzQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MjUxNz1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI1MzgtXFxuZHJpdmVycy9tZC9yYWlkMS5jOjI1Mzk6XFx0aWYgKHJkZXYtXFx1MDAzZWJhZGJsb2Nrcy5zaGlmdCBcXHUwMDNjIDApXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI1NDAtXFx0XFx0YmxvY2tfc2VjdG9ycyA9IGxicztcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjU0MS1cXHRlbHNlXFxuZHJpdmVycy9tZC9yYWlkMS5jOjI1NDI6XFx0XFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcXHUwMDNjXFx1MDAzYyByZGV2LVxcdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI1NDMtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjU3MS1cXHRcXHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9yYWlkMS5jOjI1NzI6XFx0XFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdG9yLCBzZWN0b3JzLCAwKSkge1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTczLVxcdFxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MjU4OD1zdGF0aWMgdm9pZCBoYW5kbGVfc3luY193cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTk4LVxcdFxcdCAgICB0ZXN0X2JpdChSMUJJT19NYWRlR29vZCwgXFx1MDAyNnIxX2Jpby1cXHUwMDNlc3RhdGUpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTk5OlxcdFxcdFxcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cXHUwMDNlc2VjdG9yLCBzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjYwMC1cXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9zdGF0dXMgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjYwMS1cXHRcXHQgICAgdGVzdF9iaXQoUjFCSU9fV3JpdGVFcnJvciwgXFx1MDAyNnIxX2Jpby1cXHUwMDNlc3RhdGUpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNjAyOlxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCByMV9iaW8tXFx1MDAzZXNlY3RvciwgcywgMCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDMtXFx0fVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTI2MDg9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MTUtXFx0XFx0XFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVxcdTAwM2VtaXJyb3JzW21dLnJkZXY7XFxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MTY6XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MocmRldixcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjYxNy1cXHRcXHRcXHRcXHRcXHQgICAgIHIxX2Jpby1cXHUwMDNlc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTI4MDE9c3RhdGljIHNlY3Rvcl90IHJhaWQxX3N5bmNfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk3My1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXFx1MDAzZW1pcnJvcnNbaV0ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQxLmM6Mjk3NDpcXHRcXHRcXHRcXHRvayA9IHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzZWN0b3JfbnIsXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI5NzUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bWluX2JhZCwgMFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI5ODItXFx0XFx0aWYgKCFvaylcXG5kcml2ZXJzL21kL3JhaWQxLmM6Mjk4MzpcXHRcXHRcXHQvKiBDYW5ub3QgcmVjb3JkIHRoZSBiYWRibG9ja3MsIG1kX2Vycm9yIGhhcyBzZXQgSU5UUixcXG5kcml2ZXJzL21kL3JhaWQxLmMtMjk4NC1cXHRcXHRcXHQgKiBhYm9ydCB0aGUgcmVzeW5jLlxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNDg3PXN0YXRpYyB2b2lkIGZpeF9yZWNvdmVyeV9yZWFkX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDItXFx0XFx0XFx0ICovXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNTQzOlxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBhZGRyLCBzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDQtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NDgtXFx0XFx0XFx0XFx0YWRkciA9IHIxMF9iaW8tXFx1MDAzZWRldnNbMV0uYWRkciArIHNlY3Q7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNTQ5OlxcdFxcdFxcdFxcdG9rID0gcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYyLCBhZGRyLCBzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI1NTAtXFx0XFx0XFx0XFx0aWYgKCFvaykge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNjA2PXN0YXRpYyBpbnQgcjEwX3N5bmNfcGFnZV9pbyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yNjIxLVxcdC8qIG5lZWQgdG8gcmVjb3JkIGFuIGVycm9yIC0gZWl0aGVyIGZvciB0aGUgYmxvY2sgb3IgdGhlIGRldmljZSAqL1xcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjYyMjpcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2VjdG9yLCBzZWN0b3JzLCAwKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI2MjMtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jPTI2MzQ9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI2OTctXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyNjk4OlxcdFxcdFxcdGlmICghcmRldl9zZXRfYmFkYmxvY2tzKFxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjY5OS1cXHRcXHRcXHRcXHQgICAgcmRldixcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9Mjc4OT1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4MTAtXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODExOlxcdGlmIChyZGV2LVxcdTAwM2ViYWRibG9ja3Muc2hpZnQgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgxMi1cXHRcXHRibG9ja19zZWN0b3JzID0gbGJzO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgxMy1cXHRlbHNlXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODE0OlxcdFxcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXFx1MDAzY1xcdTAwM2MgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgxNS1cXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjgzNS1cXHRcXHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODM2OlxcdFxcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yODM3LVxcdFxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jPTI4OTA9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkwOS1cXHRcXHRcXHRpZiAoIXIxMF9iaW8tXFx1MDAzZWRldnNbbV0uYmlvLVxcdTAwM2ViaV9zdGF0dXMpXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTEwOlxcdFxcdFxcdFxcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKFxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkxMS1cXHRcXHRcXHRcXHRcXHRyZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE0LVxcdFxcdFxcdGVsc2VcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5MTU6XFx0XFx0XFx0XFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHIxMF9iaW8tXFx1MDAzZWRldnNbbV0uYWRkcixcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjkyMy1cXHRcXHRcXHRpZiAoIXIxMF9iaW8tXFx1MDAzZWRldnNbbV0ucmVwbF9iaW8tXFx1MDAzZWJpX3N0YXR1cylcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5MjQ6XFx0XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MoXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTI1LVxcdFxcdFxcdFxcdFxcdHJkZXYsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MjgtXFx0XFx0XFx0ZWxzZVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MjkyOTpcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldixcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI5MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgcjEwX2Jpby1cXHUwMDNlZGV2c1ttXS5hZGRyLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTQwLVxcdFxcdFxcdGlmIChiaW8gPT0gSU9fTUFERV9HT09EKSB7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyOTQxOlxcdFxcdFxcdFxcdHJkZXZfY2xlYXJfYmFkYmxvY2tzKFxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjk0Mi1cXHRcXHRcXHRcXHRcXHRyZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTUzLVxcdFxcdFxcdGlmIChyZGV2IFxcdTAwMjZcXHUwMDI2IGJpbyA9PSBJT19NQURFX0dPT0QpIHtcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI5NTQ6XFx0XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MoXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yOTU1LVxcdFxcdFxcdFxcdFxcdHJkZXYsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jPTMxNjk9c3RhdGljIHNlY3Rvcl90IHJhaWQxMF9zeW5jX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zNDcxLVxcdFxcdFxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSW5fc3luYywgXFx1MDAyNm1yZGV2LVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9tZC9yYWlkMTAuYzozNDcyOlxcdFxcdFxcdFxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bXJkZXYsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM0NzYtXFx0XFx0XFx0XFx0XFx0aWYgKG1yZXBsYWNlKVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzQ3NzpcXHRcXHRcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MoXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zNDc4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG1yZXBsYWNlLFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTI3MjU9c3RhdGljIHZvaWQgcmFpZDVfZW5kX3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICogYmkpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtMjgzOS1cXHRcXHRcXHRpZiAoIShzZXRfYmFkIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KEluX3N5bmMsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpKVxcbmRyaXZlcnMvbWQvcmFpZDUuYzoyODQwOlxcdFxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCBzaC1cXHUwMDNlc2VjdG9yLFxcbmRyaXZlcnMvbWQvcmFpZDUuYy0yODQxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYz0zNjAxPWhhbmRsZV9mYWlsZWRfc3RyaXBlKHN0cnVjdCByNWNvbmYgKmNvbmYsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzYxNy1cXHRcXHRcXHRpZiAocmRldikge1xcbmRyaXZlcnMvbWQvcmFpZDUuYzozNjE4OlxcdFxcdFxcdFxcdHJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LFxcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNjE5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHNoLVxcdTAwM2VzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9MzcwMD1oYW5kbGVfZmFpbGVkX3N5bmMoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy0zNzI4LVxcdFxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiAhdGVzdF9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKVxcbmRyaXZlcnMvbWQvcmFpZDUuYzozNzI5OlxcdFxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHNoLVxcdTAwM2VzZWN0b3IsXFxuZHJpdmVycy9tZC9yYWlkNS5jLTM3MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTM3MzYtXFx0XFx0XFx0ICAgIFxcdTAwMjZcXHUwMDI2ICF0ZXN0X2JpdChJbl9zeW5jLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpXFxuZHJpdmVycy9tZC9yYWlkNS5jOjM3Mzc6XFx0XFx0XFx0ICAgIFxcdTAwMjZcXHUwMDI2ICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2gtXFx1MDAzZXNlY3RvcixcXG5kcml2ZXJzL21kL3JhaWQ1LmMtMzczOC1cXHRcXHRcXHRcXHRcXHRcXHQgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCkpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9NDkyNj1zdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI4Mi1cXHRcXHRcXHRcXHRyZGV2ID0gY29uZi1cXHUwMDNlZGlza3NbaV0ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NTI4MzpcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgc2gtXFx1MDAzZXNlY3RvcixcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBSQUlENV9TVFJJUEVfU0VDVE9SUyhjb25mKSwgMCk7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI4OC1cXHRcXHRcXHRcXHRyZGV2ID0gY29uZi1cXHUwMDNlZGlza3NbaV0ucmRldjtcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NTI4OTpcXHRcXHRcXHRcXHRyZGV2X2NsZWFyX2JhZGJsb2NrcyhyZGV2LCBzaC1cXHUwMDNlc2VjdG9yLFxcbmRyaXZlcnMvbWQvcmFpZDUuYy01MjkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgUkFJRDVfU1RSSVBFX1NFQ1RPUlMoY29uZiksIDApO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTUyOTctXFx0XFx0XFx0XFx0XFx0cmRldiA9IGNvbmYtXFx1MDAzZWRpc2tzW2ldLnJkZXY7XFxuZHJpdmVycy9tZC9yYWlkNS5jOjUyOTg6XFx0XFx0XFx0XFx0cmRldl9jbGVhcl9iYWRibG9ja3MocmRldiwgc2gtXFx1MDAzZXNlY3RvcixcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTI5OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFJBSUQ1X1NUUklQRV9TRUNUT1JTKGNvbmYpLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MzcuNDg4NjM4MTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzY0OTQ1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBiYWRibG9ja3NgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBicm9hZGx5IHRoZSBgYmFkYmxvY2tzYCBjb2RlIGlzIHV0aWxpemVkLiBJdCdzIG5vdCBqdXN0IGEgc3RhbmRhbG9uZSB1dGlsaXR5OyBpdCdzIGludGVncmF0ZWQgaW50byBzZXZlcmFsIGJsb2NrIGRldmljZSBkcml2ZXJzLiBJIGtub3cgZm9yIHN1cmUgaXQncyB1c2VkIGJ5IHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBudWxsIGJsb2NrIGRldmljZSBmb3IgdGVzdGluZy4gVGhlbiwgaXQncyBhbHNvIGZ1bmRhbWVudGFsIHRvIHRoZSBSQUlEIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gYG1kYCwgc3BlY2lmaWNhbGx5IFJBSUQxLCBSQUlEMTAsIGFuZCBSQUlENS4gVGhhdCBtYWtlcyBzZW5zZSwgY2hlY2tpbmcgdGhlIHVuZGVybHlpbmcgZHJpdmVzIGlzIGNydWNpYWwgZm9yIFJBSUQgY29uc2lzdGVuY3kuIEkgYWxzbyByZWNhbGwgaXQgYmVpbmcgcmVsZXZhbnQgdG8gTlZESU1NIGRldmljZXM7IHRoZSBgbnZkaW1tYCBkcml2ZXIuXG5cbkdpdmVuIHRoaXMgYnJlYWR0aCBvZiB1c2FnZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGVzZSBmZWF0dXJlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBzcGVjaWZpYyBzeW1ib2xzLiBJIGJlbGlldmUgdGhleSdyZTogYEJMS19ERVZfTlVMTF9CTEtgIGZvciB0aGUgbnVsbCBibG9jayBkZXZpY2UsIGFuZCBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYW5kIGBNRF9SQUlENDU2YCBmb3IgdGhlIHJlc3BlY3RpdmUgUkFJRCBsZXZlbHMuIEZvciBOVkRJTU0sIHRoZXJlIGFyZSBgQlRUYCwgd2hpY2ggSSB0aGluayBpcyB0aGUgQmxvY2sgVHJhbnNsYXRpb24gVGFibGUsIGFuZCBgQkxLX0RFVl9QTUVNYCwgcmVwcmVzZW50aW5nIHBlcnNpc3RlbnQgbWVtb3J5LlxuXG5UbyBkZXRlcm1pbmUgaWYgdGhlc2Ugc3ltYm9scyBhcmUgY29ycmVjdGx5IGRlZmluZWQgYW5kIHBlcmhhcHMgZXhwbG9yZSB0aGUgZGVwZW5kZW5jaWVzIGZ1cnRoZXIsIEkgd2lsbCBpbW1lZGlhdGVseSBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgYmxvY2svS2NvbmZpZ2AgYW5kIHBvdGVudGlhbGx5IGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHNpbmNlIGBudWxsX2Jsa2Agc2VlbXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjQ4Ljg1MzU4NTkxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwMTM2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlVMTF9CTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjQ4LjkxNzYwNzAyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM5NjA1ODQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOlxuXG4qKkludmVzdGlnYXRpbmcgTUQgUkFJRCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlci4gV2hlcmUgd291bGQgSSBmaW5kIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IEtjb25maWcgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBnbyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQgd2hlcmUgd291bGQgdGhlIE1EIGRyaXZlcidzIEtjb25maWcgcmVzaWRlPyBMb2dpY2FsbHksIGluIGBkcml2ZXJzL21kL0tjb25maWdgLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQncyB0aGUgY29ycmVjdCBwYXRoLiBPa2F5LCBsZXQgbWUgZ28gaGF2ZSBhIGxvb2sgaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIGBDT05GSUdfTURfUkFJRDBgLCBgQ09ORklHX01EX1JBSUQxYCwgZXRjLiwgYW5kIHByb2JhYmx5IHNvbWUgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNodW5rIHNpemVzLCBmYXVsdCB0b2xlcmFuY2UsIGFuZCB0aGUgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MjQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowNDowNy4zMTM2Njc5NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTI4MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRF9SQUlEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZz05MT1jb25maWcgTURfTElORUFSXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTAzLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxMDQ6Y29uZmlnIE1EX1JBSUQwXFxuZHJpdmVycy9tZC9LY29uZmlnLTEwNS1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0wIChzdHJpcGluZykgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9tZC9LY29uZmlnOjEyNDpjb25maWcgTURfUkFJRDFcXG5kcml2ZXJzL21kL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJSQUlELTEgKG1pcnJvcmluZykgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDUtXFxuZHJpdmVycy9tZC9LY29uZmlnOjE0Njpjb25maWcgTURfUkFJRDEwXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTY0LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNjU6Y29uZmlnIE1EX1JBSUQ0NTZcXG5kcml2ZXJzL21kL0tjb25maWctMTY2LVxcdHRyaXN0YXRlIFxcXCJSQUlELTQvUkFJRC01L1JBSUQtNiBtb2RlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowNDowNy4zODY2MDA0OTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MDcyMzc5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlbHZpbmcgaW50byBCYWRibG9ja3MgYW5kIGl0cyBQbGFjZSBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsICpiYWRibG9ja3MqLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYmxvY2sgbGF5ZXIsIG5vIGRvdWJ0LiBCdXQgSSBuZWVkIHRvIHJlbWVtYmVyLCBpdCdzIG5vdCBzb21lIGlzb2xhdGVkIGNvbmZpZ3VyYXRpb24gc3dpdGNoIGxpa2UgYENPTkZJR19GT09CQVJgLiBJdCdzIG1vcmUgb2YgYSAqY2FwYWJpbGl0eSogdGhhdCBnZXRzIGludGVncmF0ZWQgYmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIFNvLCBpdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSBpc24ndCBhYm91dCBlbmFibGluZyBpdCBnbG9iYWxseSwgaXQncyBhYm91dCB0aGUgZHJpdmVyICp1c2luZyogaXQgd2hlbiBpdCBtYWtlcyBzZW5zZS5cblxuSnVzdCB0byBiZSBzdXJlLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJl4oCZcyBhIGNvbmZpZ3VyYXRpb24gc3ltYm9sIOKAkyBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0JBREJMT0NLU2Ag4oCTIGhhbmdpbmcgYXJvdW5kIHNvbWV3aGVyZSBpbiB0aGUga2VybmVsIGNvbmZpZyB0aGF0IHByb3ZpZGVzIGEgbW9yZSBkZWZpbml0aXZlIGFuc3dlci4gR290dGEgY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnMgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDQ6MTkuMjkzODQyMjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjUwMDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9OD1vYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4tLVxcbmJsb2NrL01ha2VmaWxlLTEyLVxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZToxMzpcXHRcXHRcXHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtMTQtXFx0XFx0XFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDQ6MTkuNjEwMzQ5MjM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjY3NjEwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJhZGJsb2NrcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBiYWRibG9ja3NgIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgYW5kIGhlcmUncyB3aGF0IEkndmUgZmlndXJlZCBvdXQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgYGJhZGJsb2Nrcy5vYCBtb2R1bGUgaXMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGluIGBibG9jay9NYWtlZmlsZWAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgbWVhbnMgd2UgZG9uJ3QgYWN0dWFsbHkgKm5lZWQqIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24ganVzdCB0byBnZXQgYGJhZGJsb2Nrcy5vYCBpdHNlbGYgYnVpbHQuIEl0J3MgbW9yZSBhYm91dCBlbnN1cmluZyB0aGF0IGRyaXZlcnMgd2hpY2ggKnVzZSogYmFkYmxvY2tzIGFyZSBlbmFibGVkLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24uXG5cblRoaW5raW5nIGFib3V0IHdoaWNoIGRyaXZlcnMgYXJlIGdvb2QgdGVzdCBjYXNlcywgYEJMS19ERVZfTlVMTF9CTEtgIHNlZW1zIHBlcmZlY3QuIFRoZSBmYWN0IHRoYXQgaXQgYWxsb3dzIHNldHRpbmcgYmFkYmxvY2tzIHZpYSBjb25maWdmcyBhbmQgdGhlbiBkb2luZyBJL08gdG8gdHJpZ2dlciBgYmFkYmxvY2tzX2NoZWNrYCBpcyByZWFsbHkgY29udmVuaWVudC4gYE1EX1JBSUQxYCwgYE1EX1JBSUQxMGAsIGFuZCBgTURfUkFJRDQ1NmAgYWxzbyBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzLCBnaXZlbiB0aGVpciBwb3RlbnRpYWwgdG8gaW50ZXJhY3Qgd2l0aCBiYWQgYmxvY2sgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIGp1c3Qgc2F3IHRoYXQgYF9iYWRibG9ja3Nfc2V0YCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgIGFyZSBzdGF0aWMhIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgZGlyZWN0bHkgZXhwb3NlZC4gVGhlIGFjdHVhbCBleHBvcnRlZCBvbmVzIGFyZSBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXMuIE9rYXksIGdvdCBpdC4gSSdsbCB2ZXJpZnkgdGhhdCBJIGhhdmUgdGhlIGNvcnJlY3QgbmFtZXMgb2YgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDQ6MjkuODc3OTYyMjY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDEyMTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipiYWRibG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmFkYmxvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmFkYmxvY2tzLmM9MTMyNT1pbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM2MTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2hlY2spO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjItXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMzc5PWJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzODQ6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3NldCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM4NS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MDA9Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDAzLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDA0OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jbGVhcik7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwNS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9dm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYilcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NDAtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoYWNrX2FsbF9iYWRibG9ja3MpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NDItXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNDUyPXNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0OTA6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNTAyPXNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNi19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTUyNzpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc3RvcmUpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjgtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNTYwPWludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NjMtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NjQ6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2luaXQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NjUtXFxuYmxvY2svYmFkYmxvY2tzLmM9MTU2Nj1pbnQgZGV2bV9pbml0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU3MS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTU3MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2luaXRfYmFkYmxvY2tzKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xNTczLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTU3OD12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU4Ny19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTU4ODpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjA0OjI5Ljk0ODA5Mjg3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUyMzU3NDQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIEJhZGJsb2NrcyBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldmlzZSBhIGZ1enppbmcgc3RyYXRlZ3kgZm9yIHRoZSByZWNlbnQgYGJhZGJsb2Nrc2AgY29kZSBtb2RpZmljYXRpb25zLiBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZpeGVzIGZvciBpbnRlZ2VyIG92ZXJmbG93cywgc2hpZnQgdmFsdWVzLCBhbmQgcm91bmRpbmcgaXNzdWVzIGFyZSByb2J1c3QsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgZ25hcmx5IGVkZ2UgY2FzZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgY2VudGVyIGFyb3VuZCB0aGUgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgZnVuY3Rpb25zLiBXaGlsZSBgX2JhZGJsb2Nrc19zZXRgIGFuZCBgX2JhZGJsb2Nrc19jbGVhcmAgYXJlIHN0YXRpYywgdGhleSBjb3VsZCBzdGlsbCBiZSB0YXJnZXRlZCBpZiB0aGVpciBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEknbGwgaW5jbHVkZSBib3RoIHN0YXRpYyBhbmQgZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXMgaW4gbXkgZm9jdXMgbGlzdC5cblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBob3cgYGJhZGJsb2Nrc19zdG9yZWAgaXMgdXNlZCwgYXMgaXQgcGFyc2VzIHVzZXIgaW5wdXQuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgYG51bGxfYmxrYCBkaXJlY3RseSBjYWxscyBgYmFkYmxvY2tzX3NldGAgYW5kIGBiYWRibG9ja3NfY2xlYXJgLCBieXBhc3NpbmcgYGJhZGJsb2Nrc19zdG9yZWAuIFRoYXQncyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgY292ZXJhZ2UuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgY29yZSBmdW5jdGlvbnMgSSBtZW50aW9uZWQ6IGBiYWRibG9ja3Nfc2V0YCwgYGJhZGJsb2Nrc19jbGVhcmAsIGBiYWRibG9ja3NfY2hlY2tgLCBgX2JhZGJsb2Nrc19zZXRgLCBhbmQgYF9iYWRibG9ja3NfY2xlYXJgLlxuXG5JIGFsc28gY2hlY2tlZCB0aGUgcGF0Y2ggaXRzZWxmLCB3aGljaCBjbGVhcmx5IGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93cywgaW50cm9kdWNlcyBiZXR0ZXIgc2hpZnQgdmFsdWUgaGFuZGxpbmcsIGFuZCBjb3JyZWN0cyB0aGUgcm91bmRpbmcgbG9naWMgYnkgdXRpbGl6aW5nIGByb3VuZF9kb3duYCBhbmQgYHJvdW5kX3VwYCBwcm9wZXJseS4gSSBzZWUgY2hlY2tzIHdlcmUgYWRkZWQgdG8gZW5zdXJlIHRoZSBjYWxjdWxhdGlvbnMgZG9uJ3Qgd3JhcCBhbmQgdGhhdCBzaGlmdCB2YWx1ZXMgYXJlIHZhbGlkLiBUaGlzIHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0J3MgYWxsIGFib3V0IGhhbmRsaW5nIHRob3NlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseSwgd2l0aG91dCBjYXVzaW5nIGNyYXNoZXMgb3IgY29ycnVwdGluZyBtZW1vcnkuXG5cblRvIGdldCB0aGUgbmVjZXNzYXJ5IGNvZGUgY292ZXJhZ2UsIHRoZSBgQkxLX0RFVl9OVUxMX0JMS2AgYW5kIGBNRF8qYCBjb25maWdzIGFyZSBjcnVjaWFsLiBUaGVzZSB3aWxsIGVuYWJsZSByZWxldmFudCBwYXRocy4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIGhhcyBzaG93biBgQ09ORklHX0JUVGAgYW5kIGBDT05GSUdfQkxLX0RFVl9QTUVNYCBhcmUgbm90IHJlcXVpcmVkLlxuXG5TbywgaGVyZSdzIG15IHBsYW46IEknbGwgdGFyZ2V0IHRob3NlIGtleSBmdW5jdGlvbnMgKGBiYWRibG9ja3Nfc2V0YCwgYGJhZGJsb2Nrc19jbGVhcmAsIGBiYWRibG9ja3NfY2hlY2tgLCBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmApIHdoaWxlIHJ1bm5pbmcgdGhlIGtlcm5lbCB3aXRoIHRoZSBgQkxLX0RFVl9OVUxMX0JMS2AsIGBNRF9SQUlEMWAsIGBNRF9SQUlEMTBgLCBhbmQgYE1EX1JBSUQ0NTZgIGNvbmZpZ3MgZW5hYmxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY292ZXJhZ2UgSSBuZWVkIHRvIGZpbmQgYW55IGxpbmdlcmluZyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzgzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowNDo0My40NzE2NjkxNDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUxNzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTURfUkFJRDQ1NlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhZGJsb2Nrc19zZXRcIixcbiAgICBcImJhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCIsXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGludGVnZXIgb3ZlcmZsb3dzLCBpbnZhbGlkIHNoaWZ0IHZhbHVlcywgYW5kIGluY29ycmVjdCByb3VuZGluZyBsb2dpYyBpbiB0aGUgYmFkYmxvY2tzIG1hbmFnZW1lbnQgY29kZS4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCBlZGdlIGNhc2VzIChsaWtlIGxhcmdlIHNlY3RvciBudW1iZXJzIG9yIGludmFsaWQgc2hpZnQgdmFsdWVzKSBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTURfUkFJRDQ1NlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhZGJsb2Nrc19zZXRcIixcbiAgICBcImJhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCIsXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGludGVnZXIgb3ZlcmZsb3dzLCBpbnZhbGlkIHNoaWZ0IHZhbHVlcywgYW5kIGluY29ycmVjdCByb3VuZGluZyBsb2dpYyBpbiB0aGUgYmFkYmxvY2tzIG1hbmFnZW1lbnQgY29kZS4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCBlZGdlIGNhc2VzIChsaWtlIGxhcmdlIHNlY3RvciBudW1iZXJzIG9yIGludmFsaWQgc2hpZnQgdmFsdWVzKSBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[1] Phase: Succeeded StartedAt: 2026-07-10 10:04:58 +0000 UTC FinishedAt: 2026-07-10 10:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 10:04:58 +0000 UTC FinishedAt: 2026-07-10 10:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2] Phase: Succeeded StartedAt: 2026-07-10 10:04:58 +0000 UTC FinishedAt: 2026-07-10 12:13:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 10:04:59 +0000 UTC FinishedAt: 2026-07-10 12:13:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 10:04:59 +0000 UTC FinishedAt: 2026-07-10 10:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 10:04:59 +0000 UTC FinishedAt: 2026-07-10 10:05:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-3483001391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 10:05:10 +0000 UTC FinishedAt: 2026-07-10 10:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 10:05:10 +0000 UTC FinishedAt: 2026-07-10 10:42:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*178e84e0-2b96-4e07-93da-1c043fe2b37d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-3483001391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "14f4389b-6e49-4c97-8127-5ded68e301db", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1908926453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 10:05:10 +0000 UTC FinishedAt: 2026-07-10 10:42:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*178e84e0-2b96-4e07-93da-1c043fe2b37d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-3483001391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "14f4389b-6e49-4c97-8127-5ded68e301db", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1908926453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 10:42:41 +0000 UTC FinishedAt: 2026-07-10 10:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 10:42:41 +0000 UTC FinishedAt: 2026-07-10 10:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 10:42:41 +0000 UTC FinishedAt: 2026-07-10 10:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 10:42:41 +0000 UTC FinishedAt: 2026-07-10 10:42:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-2644971390/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 10:43:17 +0000 UTC FinishedAt: 2026-07-10 10:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 10:43:17 +0000 UTC FinishedAt: 2026-07-10 10:45:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14f4389b-6e49-4c97-8127-5ded68e301db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1908926453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 10:45:32 +0000 UTC FinishedAt: 2026-07-10 10:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 10:45:32 +0000 UTC FinishedAt: 2026-07-10 10:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 10:45:32 +0000 UTC FinishedAt: 2026-07-10 11:19:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 10:45:32 +0000 UTC FinishedAt: 2026-07-10 11:19:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*178e84e0-2b96-4e07-93da-1c043fe2b37d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-2644971390/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "860f46ec-74ea-4111-99a9-a92ce2bd4a60", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1444797394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 10:45:32 +0000 UTC FinishedAt: 2026-07-10 11:19:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*178e84e0-2b96-4e07-93da-1c043fe2b37d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-2644971390/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "860f46ec-74ea-4111-99a9-a92ce2bd4a60", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1444797394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 11:19:27 +0000 UTC FinishedAt: 2026-07-10 11:19:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 11:19:27 +0000 UTC FinishedAt: 2026-07-10 11:19:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 11:19:27 +0000 UTC FinishedAt: 2026-07-10 11:21:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 11:19:27 +0000 UTC FinishedAt: 2026-07-10 11:21:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*860f46ec-74ea-4111-99a9-a92ce2bd4a60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1444797394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 11:21:41 +0000 UTC FinishedAt: 2026-07-10 12:13:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 11:21:41 +0000 UTC FinishedAt: 2026-07-10 12:13:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*14f4389b-6e49-4c97-8127-5ded68e301db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*860f46ec-74ea-4111-99a9-a92ce2bd4a60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1908926453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1444797394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 11:21:41 +0000 UTC FinishedAt: 2026-07-10 11:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 11:21:41 +0000 UTC FinishedAt: 2026-07-10 11:21:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-4195834755/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 11:21:41 +0000 UTC FinishedAt: 2026-07-10 11:21:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 11:21:41 +0000 UTC FinishedAt: 2026-07-10 11:21:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 11:21:41 +0000 UTC FinishedAt: 2026-07-10 11:21:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 11:21:51 +0000 UTC FinishedAt: 2026-07-10 12:13:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownh8sh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["badblocks_set","badblocks_clear","badblocks_check","_badblocks_set","_badblocks_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","MD_RAID1","MD_RAID10","MD_RAID456"],"series_id":"eb54f8e1-3b8e-4595-a7d7-556842de17ba","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 11:21:51 +0000 UTC FinishedAt: 2026-07-10 12:13:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14f4389b-6e49-4c97-8127-5ded68e301db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*860f46ec-74ea-4111-99a9-a92ce2bd4a60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1908926453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-build-action-1444797394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownh8sh/series-workflownh8sh-convert-artifact-4195834755/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}