Name: series-workflowzttt7 Phase: Succeeded StartedAt: 2026-09-04 04:12:26 +0000 UTC FinishedAt: 2026-09-04 09:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[0] Phase: Succeeded StartedAt: 2026-09-04 04:12:26 +0000 UTC FinishedAt: 2026-09-04 05:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 04:12:26 +0000 UTC FinishedAt: 2026-09-04 05:22:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX98_PTYS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX98_PTYS" ], "series_id": "7147fe7f-66db-48cc-a8d0-fdc863fe27f2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "devpts_parse_param", "devpts_reconfigure", "devpts_new_index" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVg5OF9QVFlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2cHRzX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2RldnB0c19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfbmV3X2luZGV4JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgLi4uKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJiMzOTttYXgmIzM5OyBtb3VudCBwYXJhbWV0ZXIgaXMgbm9uLXplcm8uIFRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyByZWFjaGFibGUgdmlhIG1vdW50IGFuZCBmc29wZW4vZnNjb25maWcgc3lzY2FsbHMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTFhNmQ0ZGMxMzRjYzQ2YzRkOGZmNDI2NjdkYmY5MWViN2Y2NjMwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MTk6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuY1xuaW5kZXggOTg0NGRjZjM1NGVlOS4uYmQxZThlYjI2ZWRiNyAxMDA2NDRcbi0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9kZXZwdHMvaW5vZGUuY1xuQEAgLTI0OSw2ICYjNDM7MjQ5LDggQEAgc3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiBcdGNhc2UgT3B0X21heDpcbiBcdFx0aWYgKHJlc3VsdC51aW50XzMyIFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcbiBcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwmIzM0Oyk7XG4gXHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG4gXHRcdGJyZWFrO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVg5OF9QVFlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2cHRzX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2RldnB0c19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfbmV3X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcmFtZXRlciBwYXJzaW5nIGxvZ2ljIGluIGRldnB0c19wYXJzZV9wYXJhbSAoZnMvZGV2cHRzL2lub2RlLmMpIHRvIHZhbGlkYXRlIHRoYXQgdGhlICYjMzk7bWF4JiMzOTsgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExYTZkNGRjMTM0Y2M0NmM0ZDhmZjQyNjY3ZGJmOTFlYjdmNjYzMDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA1OjE5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuYwppbmRleCA5ODQ0ZGNmMzU0ZWU5Li5iZDFlOGViMjZlZGI3IDEwMDY0NAotLS0gYS9mcy9kZXZwdHMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kZXZwdHMvaW5vZGUuYwpAQCAtMjQ5LDYgJiM0MzsyNDksOCBAQCBzdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKQogCWNhc2UgT3B0X21heDoKIAkJaWYgKHJlc3VsdC51aW50XzMyICZndDsgTlJfVU5JWDk4X1BUWV9NQVgpCiAJCQlyZXR1cm4gaW52YWxmKGZjLCAmIzM0O21heCBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiYjNDM7CQlpZiAocmVzdWx0LnVpbnRfMzIgPT0gMCkKJiM0MzsJCQlyZXR1cm4gaW52YWxmKGZjLCAmIzM0O21heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJiMzNDspOwogCQlvcHRzLSZndDttYXggPSByZXN1bHQudWludF8zMjsKIAkJYnJlYWs7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgZGV2cHRzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHNlZSBhIGBkZXZwdHMvaW5vZGUuY2AgY2hhbmdlLCB3aGljaCBzdWdnZXN0cyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgcHNldWRvLXRlcm1pbmFsIGZpbGVzeXN0ZW0uIFRoZSBkaWZmIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IGFkZHMgYSBjaGVjayB3aXRoaW4gYGRldnB0c19wYXJzZV9wYXJhbWAgd2hlbiBoYW5kbGluZyB0aGUgYE9wdF9tYXhgIHBhcmFtZXRlci4gU3BlY2lmaWNhbGx5LCBpdCBub3cgdmFsaWRhdGVzIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBzZXVkby10ZXJtaW5hbHMgYWxsb3dlZCAoYG9wdHMtJmd0O21heGApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBIHplcm8gdmFsdWUgaXMgbm93IGNvbnNpZGVyZWQgaW52YWxpZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGNvbmZpZyBvcHRpb25zIGVuYWJsZSBgZnMvZGV2cHRzL2lub2RlLmNgIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGBPcHRfbWF4YCBwYXJhbWV0ZXIgYmVpbmcgcGFyc2VkLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIGNvZGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBhIHJlYXNvbmFibGUgZml4IGZvciBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGV2cHRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RldnB0cy9NYWtlZmlsZS01LVxuZnMvZGV2cHRzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1VOSVg5OF9QVFlTKVx0XHQmIzQzOz0gZGV2cHRzLm9cbmZzL2RldnB0cy9NYWtlZmlsZS03LVxuZnMvZGV2cHRzL01ha2VmaWxlOjg6ZGV2cHRzLSQoQ09ORklHX1VOSVg5OF9QVFlTKVx0XHQ6PSBpbm9kZS5vXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMy0gKlxuZnMvZGV2cHRzL2lub2RlLmM6NDogKiBsaW51eC9mcy9kZXZwdHMvaW5vZGUuY1xuZnMvZGV2cHRzL2lub2RlLmMtNS0gKlxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTI0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZwdHNfZnMuaFx1MDAzZVxuZnMvZGV2cHRzL2lub2RlLmMtMjYtI2luY2x1ZGUgXHUwMDNjbGludXgvZnNub3RpZnkuaFx1MDAzZVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTg2PWVudW0ge1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTkwLVxuZnMvZGV2cHRzL2lub2RlLmM6OTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBkZXZwdHNfcGFyYW1fc3BlY3NbXSA9IHtcbmZzL2RldnB0cy9pbm9kZS5jLTkyLVx0ZnNwYXJhbV9naWRcdChcJiMzNDtnaWRcJiMzNDssXHRcdE9wdF9naWQpLFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTEwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBwdHNfZnNfaW5mbyAqREVWUFRTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTEyLVxuZnMvZGV2cHRzL2lub2RlLmM6MTEzOnN0YXRpYyBpbnQgZGV2cHRzX3B0bXhfcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aClcbmZzL2RldnB0cy9pbm9kZS5jLTExNC17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTE3LVxuZnMvZGV2cHRzL2lub2RlLmM6MTE4Olx0LyogSXMgYSBkZXZwdHMgZmlsZXN5c3RlbSBhdCBcJiMzNDtwdHNcJiMzNDsgaW4gdGhlIHNhbWUgZGlyZWN0b3J5PyAqL1xuZnMvZGV2cHRzL2lub2RlLmMtMTE5LVx0ZXJyID0gcGF0aF9wdHMocGF0aCk7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTIyLVxuZnMvZGV2cHRzL2lub2RlLmM6MTIzOlx0LyogSXMgdGhlIHBhdGggdGhlIHJvb3Qgb2YgYSBkZXZwdHMgZmlsZXN5c3RlbT8gKi9cbmZzL2RldnB0cy9pbm9kZS5jLTEyNC1cdHNiID0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3NiO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTEzMi0vKlxuZnMvZGV2cHRzL2lub2RlLmM6MTMzOiAqIFRyeSB0byBmaW5kIGEgc3VpdGFibGUgZGV2cHRzIGZpbGVzeXN0ZW0uIFdlIHN1cHBvcnQgdGhlIGZvbGxvd2luZ1xuZnMvZGV2cHRzL2lub2RlLmMtMTM0LSAqIHNjZW5hcmlvczpcbmZzL2RldnB0cy9pbm9kZS5jOjEzNTogKiAtIFRoZSBwdG14IGRldmljZSBub2RlIGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBkZXZwdHNcbmZzL2RldnB0cy9pbm9kZS5jLTEzNi0gKiAgIG1vdW50IHdoZXJlIHRoZSBwdHMgZGV2aWNlIG5vZGVzIGFyZSBsb2NhdGVkLlxuZnMvZGV2cHRzL2lub2RlLmMtMTM3LSAqICAgVGhpcyBpcyBlLmcuIHRoZSBjYXNlIHdoZW4gY2FsbGluZyBvcGVuIG9uIHRoZSAvZGV2L3B0cy9wdG14IGRldmljZVxuZnMvZGV2cHRzL2lub2RlLmM6MTM4OiAqICAgbm9kZSB3aGVuIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGF0IC9kZXYvcHRzLlxuZnMvZGV2cHRzL2lub2RlLmM6MTM5OiAqIC0gVGhlIHB0bXggZGV2aWNlIG5vZGUgaXMgbG9jYXRlZCBvdXRzaWRlIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSBtb3VudFxuZnMvZGV2cHRzL2lub2RlLmMtMTQwLSAqICAgd2hlcmUgdGhlIHB0cyBkZXZpY2Ugbm9kZXMgYXJlIGxvY2F0ZWQuIEZvciBleGFtcGxlLCB0aGUgcHRteCBkZXZpY2Vcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xNDQtICogICBzdWJkaXJlY3RvcnkgY2FuIGJlIGZvdW5kIGluIHRoZSBjb21tb24gcGFyZW50IGRpcmVjdG9yeSAvZGV2IG9mIHRoZVxuZnMvZGV2cHRzL2lub2RlLmM6MTQ1OiAqICAgZGV2cHRzIG1vdW50IGFuZCB0aGUgcHRteCBiaW5kLW1vdW50LCBhZnRlciByZXNvbHZpbmcgdGhlIC9kZXYvcHRteFxuZnMvZGV2cHRzL2lub2RlLmMtMTQ2LSAqICAgYmluZC1tb3VudC5cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xNDktICovXG5mcy9kZXZwdHMvaW5vZGUuYzoxNTA6c3RydWN0IHZmc21vdW50ICpkZXZwdHNfbW50Z2V0KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbmZzL2RldnB0cy9pbm9kZS5jLTE1MS17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTY0LVxuZnMvZGV2cHRzL2lub2RlLmM6MTY1Olx0LyogZGV2cHRzX3B0bXhfcGF0aCgpIGZpbmRzIGEgZGV2cHRzIGZzIG9yIHJldHVybnMgYW4gZXJyb3IuICovXG5mcy9kZXZwdHMvaW5vZGUuYy0xNjYtXHRpZiAoKHBhdGgubW50LVx1MDAzZW1udF9zYi1cdTAwM2VzX21hZ2ljICE9IERFVlBUU19TVVBFUl9NQUdJQykgfHxcbmZzL2RldnB0cy9pbm9kZS5jLTE2Ny1cdCAgICAoREVWUFRTX1NCKHBhdGgubW50LVx1MDAzZW1udF9zYikgIT0gZnNpKSlcbmZzL2RldnB0cy9pbm9kZS5jOjE2ODpcdFx0ZXJyID0gZGV2cHRzX3B0bXhfcGF0aChcdTAwMjZwYXRoKTtcbmZzL2RldnB0cy9pbm9kZS5jLTE2OS1cdGRwdXQocGF0aC5kZW50cnkpO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTE4MC1cbmZzL2RldnB0cy9pbm9kZS5jOjE4MTpzdHJ1Y3QgcHRzX2ZzX2luZm8gKmRldnB0c19hY3F1aXJlKHN0cnVjdCBmaWxlICpmaWxwKVxuZnMvZGV2cHRzL2lub2RlLmMtMTgyLXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xODktXG5mcy9kZXZwdHMvaW5vZGUuYzoxOTA6XHQvKiBIYXMgdGhlIGRldnB0cyBmaWxlc3lzdGVtIGFscmVhZHkgYmVlbiBmb3VuZD8gKi9cbmZzL2RldnB0cy9pbm9kZS5jLTE5MS1cdGlmIChwYXRoLm1udC1cdTAwM2VtbnRfc2ItXHUwMDNlc19tYWdpYyAhPSBERVZQVFNfU1VQRVJfTUFHSUMpIHtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xOTMtXG5mcy9kZXZwdHMvaW5vZGUuYzoxOTQ6XHRcdGVyciA9IGRldnB0c19wdG14X3BhdGgoXHUwMDI2cGF0aCk7XG5mcy9kZXZwdHMvaW5vZGUuYy0xOTUtXHRcdGlmIChlcnIpIHtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0yMTItXG5mcy9kZXZwdHMvaW5vZGUuYzoyMTM6dm9pZCBkZXZwdHNfcmVsZWFzZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbmZzL2RldnB0cy9pbm9kZS5jLTIxNC17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMjE4LS8qXG5mcy9kZXZwdHMvaW5vZGUuYzoyMTk6ICogZGV2cHRzX3BhcnNlX3BhcmFtIC0gUGFyc2UgbW91bnQgcGFyYW1ldGVyc1xuZnMvZGV2cHRzL2lub2RlLmMtMjIwLSAqL1xuZnMvZGV2cHRzL2lub2RlLmM6MjIxOnN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG5mcy9kZXZwdHMvaW5vZGUuYy0yMjIte1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTIyNy1cbmZzL2RldnB0cy9pbm9kZS5jOjIyODpcdG9wdCA9IGZzX3BhcnNlKGZjLCBkZXZwdHNfcGFyYW1fc3BlY3MsIHBhcmFtLCBcdTAwMjZyZXN1bHQpO1xuZnMvZGV2cHRzL2lub2RlLmMtMjI5LVx0aWYgKG9wdCBcdTAwM2MgMClcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz0yNjE9c3RhdGljIGludCBta25vZF9wdG14KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0yNzgtXHQvKlxuZnMvZGV2cHRzL2lub2RlLmM6Mjc5Olx0ICogQ3JlYXRlIGEgbmV3ICYjMzk7cHRteCYjMzk7IG5vZGUgaW4gdGhpcyBtb3VudCBvZiBkZXZwdHMuXG5mcy9kZXZwdHMvaW5vZGUuYy0yODAtXHQgKi9cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz0zMDQ9c3RhdGljIHZvaWQgdXBkYXRlX3B0bXhfbW9kZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zMDgtXG5mcy9kZXZwdHMvaW5vZGUuYzozMDk6c3RhdGljIGludCBkZXZwdHNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZGV2cHRzL2lub2RlLmMtMzEwLXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zMzctXG5mcy9kZXZwdHMvaW5vZGUuYzozMzg6c3RhdGljIGludCBkZXZwdHNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuZnMvZGV2cHRzL2lub2RlLmMtMzM5LXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zNTYtXG5mcy9kZXZwdHMvaW5vZGUuYzozNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRldnB0c19zb3BzID0ge1xuZnMvZGV2cHRzL2lub2RlLmMtMzU4LVx0LnN0YXRmc1x0XHQ9IHNpbXBsZV9zdGF0ZnMsXG5mcy9kZXZwdHMvaW5vZGUuYzozNTk6XHQuc2hvd19vcHRpb25zXHQ9IGRldnB0c19zaG93X29wdGlvbnMsXG5mcy9kZXZwdHMvaW5vZGUuYy0zNjAtfTtcbmZzL2RldnB0cy9pbm9kZS5jLTM2MS1cbmZzL2RldnB0cy9pbm9kZS5jOjM2MjpzdGF0aWMgaW50IGRldnB0c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZGV2cHRzL2lub2RlLmMtMzYzLXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zNzAtXHRzLVx1MDAzZXNfbWFnaWMgPSBERVZQVFNfU1VQRVJfTUFHSUM7XG5mcy9kZXZwdHMvaW5vZGUuYzozNzE6XHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZkZXZwdHNfc29wcztcbmZzL2RldnB0cy9pbm9kZS5jLTM3Mi1cdHMtXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zOTUtLypcbmZzL2RldnB0cy9pbm9kZS5jOjM5NjogKiBkZXZwdHNfZ2V0X3RyZWUoKVxuZnMvZGV2cHRzL2lub2RlLmMtMzk3LSAqXG5mcy9kZXZwdHMvaW5vZGUuYzozOTg6ICogICAgIE1vdW50IGEgbmV3IChwcml2YXRlKSBpbnN0YW5jZSBvZiBkZXZwdHMuICBQVFlzIGNyZWF0ZWQgaW4gdGhpc1xuZnMvZGV2cHRzL2lub2RlLmM6Mzk5OiAqICAgICBpbnN0YW5jZSBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIFBUWXMgaW4gb3RoZXIgZGV2cHRzIGluc3RhbmNlcy5cbmZzL2RldnB0cy9pbm9kZS5jLTQwMC0gKi9cbmZzL2RldnB0cy9pbm9kZS5jOjQwMTpzdGF0aWMgaW50IGRldnB0c19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9kZXZwdHMvaW5vZGUuYy00MDIte1xuZnMvZGV2cHRzL2lub2RlLmM6NDAzOlx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBkZXZwdHNfZmlsbF9zdXBlcik7XG5mcy9kZXZwdHMvaW5vZGUuYy00MDQtfVxuZnMvZGV2cHRzL2lub2RlLmMtNDA1LVxuZnMvZGV2cHRzL2lub2RlLmM6NDA2OnN0YXRpYyB2b2lkIGRldnB0c19mcmVlX2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2RldnB0cy9pbm9kZS5jLTQwNy17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDEwLVxuZnMvZGV2cHRzL2lub2RlLmM6NDExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGRldnB0c19jb250ZXh0X29wcyA9IHtcbmZzL2RldnB0cy9pbm9kZS5jOjQxMjpcdC5mcmVlXHRcdD0gZGV2cHRzX2ZyZWVfZmMsXG5mcy9kZXZwdHMvaW5vZGUuYzo0MTM6XHQucGFyc2VfcGFyYW1cdD0gZGV2cHRzX3BhcnNlX3BhcmFtLFxuZnMvZGV2cHRzL2lub2RlLmM6NDE0Olx0LmdldF90cmVlXHQ9IGRldnB0c19nZXRfdHJlZSxcbmZzL2RldnB0cy9pbm9kZS5jOjQxNTpcdC5yZWNvbmZpZ3VyZVx0PSBkZXZwdHNfcmVjb25maWd1cmUsXG5mcy9kZXZwdHMvaW5vZGUuYy00MTYtfTtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy00MjAtICovXG5mcy9kZXZwdHMvaW5vZGUuYzo0MjE6c3RhdGljIGludCBkZXZwdHNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2RldnB0cy9pbm9kZS5jLTQyMi17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDQwLVx0ZmMtXHUwMDNlc19mc19pbmZvID0gZnNpO1xuZnMvZGV2cHRzL2lub2RlLmM6NDQxOlx0ZmMtXHUwMDNlb3BzID0gXHUwMDI2ZGV2cHRzX2NvbnRleHRfb3BzO1xuZnMvZGV2cHRzL2lub2RlLmMtNDQyLVx0cmV0dXJuIDA7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDQ0LVxuZnMvZGV2cHRzL2lub2RlLmM6NDQ1OnN0YXRpYyB2b2lkIGRldnB0c19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9kZXZwdHMvaW5vZGUuYy00NDYte1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQ1NC1cbmZzL2RldnB0cy9pbm9kZS5jOjQ1NTpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZGV2cHRzX2ZzX3R5cGUgPSB7XG5mcy9kZXZwdHMvaW5vZGUuYzo0NTY6XHQubmFtZVx0XHQ9IFwmIzM0O2RldnB0c1wmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjQ1NzpcdC5pbml0X2ZzX2NvbnRleHQgPSBkZXZwdHNfaW5pdF9mc19jb250ZXh0LFxuZnMvZGV2cHRzL2lub2RlLmM6NDU4Olx0LnBhcmFtZXRlcnNcdD0gZGV2cHRzX3BhcmFtX3NwZWNzLFxuZnMvZGV2cHRzL2lub2RlLmM6NDU5Olx0LmtpbGxfc2JcdD0gZGV2cHRzX2tpbGxfc2IsXG5mcy9kZXZwdHMvaW5vZGUuYy00NjAtXHQuZnNfZmxhZ3NcdD0gRlNfVVNFUk5TX01PVU5ULFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQ2Ny1cbmZzL2RldnB0cy9pbm9kZS5jOjQ2ODppbnQgZGV2cHRzX25ld19pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbmZzL2RldnB0cy9pbm9kZS5jLTQ2OS17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDg0LVxuZnMvZGV2cHRzL2lub2RlLmM6NDg1OnZvaWQgZGV2cHRzX2tpbGxfaW5kZXgoc3RydWN0IHB0c19mc19pbmZvICpmc2ksIGludCBpZHgpXG5mcy9kZXZwdHMvaW5vZGUuYy00ODYte1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQ5MS0vKipcbmZzL2RldnB0cy9pbm9kZS5jOjQ5MjogKiBkZXZwdHNfcHR5X25ldyAtLSBjcmVhdGUgYSBuZXcgaW5vZGUgaW4gL2Rldi9wdHMvXG5mcy9kZXZwdHMvaW5vZGUuYy00OTMtICogQGZzaTogRmlsZXN5c3RlbSBpbmZvIGZvciB0aGlzIGluc3RhbmNlLlxuZnMvZGV2cHRzL2lub2RlLmMtNDk0LSAqIEBpbmRleDogdXNlZCBhcyBhIG5hbWUgb2YgdGhlIG5vZGVcbmZzL2RldnB0cy9pbm9kZS5jOjQ5NTogKiBAcHJpdjogd2hhdCYjMzk7cyBnaXZlbiBiYWNrIGJ5IGRldnB0c19nZXRfcHJpdlxuZnMvZGV2cHRzL2lub2RlLmMtNDk2LSAqXG5mcy9kZXZwdHMvaW5vZGUuYy00OTctICogVGhlIGRlbnRyeSBmb3IgdGhlIGNyZWF0ZWQgaW5vZGUgaXMgcmV0dXJuZWQuXG5mcy9kZXZwdHMvaW5vZGUuYzo0OTg6ICogUmVtb3ZlIGl0IGZyb20gL2Rldi9wdHMvIHdpdGggZGV2cHRzX3B0eV9raWxsKCkuXG5mcy9kZXZwdHMvaW5vZGUuYy00OTktICovXG5mcy9kZXZwdHMvaW5vZGUuYzo1MDA6c3RydWN0IGRlbnRyeSAqZGV2cHRzX3B0eV9uZXcoc3RydWN0IHB0c19mc19pbmZvICpmc2ksIGludCBpbmRleCwgdm9pZCAqcHJpdilcbmZzL2RldnB0cy9pbm9kZS5jLTUwMS17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNTM2LS8qKlxuZnMvZGV2cHRzL2lub2RlLmM6NTM3OiAqIGRldnB0c19nZXRfcHJpdiAtLSBnZXQgcHJpdmF0ZSBkYXRhIGZvciBhIHNsYXZlXG5mcy9kZXZwdHMvaW5vZGUuYy01MzgtICogQGRlbnRyeTogZGVudHJ5IG9mIHRoZSBzbGF2ZVxuZnMvZGV2cHRzL2lub2RlLmMtNTM5LSAqXG5mcy9kZXZwdHMvaW5vZGUuYzo1NDA6ICogUmV0dXJucyB3aGF0ZXZlciB3YXMgcGFzc2VkIGFzIHByaXYgaW4gZGV2cHRzX3B0eV9uZXcgZm9yIGEgZ2l2ZW4gaW5vZGUuXG5mcy9kZXZwdHMvaW5vZGUuYy01NDEtICovXG5mcy9kZXZwdHMvaW5vZGUuYzo1NDI6dm9pZCAqZGV2cHRzX2dldF9wcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2RldnB0cy9pbm9kZS5jLTU0My17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNTQ5LS8qKlxuZnMvZGV2cHRzL2lub2RlLmM6NTUwOiAqIGRldnB0c19wdHlfa2lsbCAtLSByZW1vdmUgaW5vZGUgZm9ybSAvZGV2L3B0cy9cbmZzL2RldnB0cy9pbm9kZS5jLTU1MS0gKiBAZGVudHJ5OiBkZW50cnkgb2YgdGhlIHNsYXZlIHRvIGJlIHJlbW92ZWRcbmZzL2RldnB0cy9pbm9kZS5jLTU1Mi0gKlxuZnMvZGV2cHRzL2lub2RlLmM6NTUzOiAqIFRoaXMgaXMgYW4gaW52ZXJzZSBvcGVyYXRpb24gb2YgZGV2cHRzX3B0eV9uZXcuXG5mcy9kZXZwdHMvaW5vZGUuYy01NTQtICovXG5mcy9kZXZwdHMvaW5vZGUuYzo1NTU6dm9pZCBkZXZwdHNfcHR5X2tpbGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvZGV2cHRzL2lub2RlLmMtNTU2LXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy01NjUtXG5mcy9kZXZwdHMvaW5vZGUuYzo1NjY6c3RhdGljIGludCBfX2luaXQgaW5pdF9kZXZwdHNfZnModm9pZClcbmZzL2RldnB0cy9pbm9kZS5jLTU2Ny17XG5mcy9kZXZwdHMvaW5vZGUuYzo1Njg6XHRpbnQgZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZkZXZwdHNfZnNfdHlwZSk7XG5mcy9kZXZwdHMvaW5vZGUuYy01NjktXHRpZiAoIWVycikge1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTU3My19XG5mcy9kZXZwdHMvaW5vZGUuYzo1NzQ6bW9kdWxlX2luaXQoaW5pdF9kZXZwdHNfZnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIERldnB0cyBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXJzZWQgaW4gdGhlIGBkZXZwdHNgIGZpbGVzeXN0ZW0uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBmcy9kZXZwdHMvaW5vZGUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBgZGV2cHRzX3BhcnNlX3BhcmFtYCBmdW5jdGlvbiBhbmQgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBieSBjaGVja2luZyBpdCBvdXQgYXJvdW5kIGxpbmUgMjQ5IG9mIHRoYXQgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZGV2cHRzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdCAqL1xuIDIyMTpcdHN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4gMjIyOlx0e1xuIDIyMzpcdFx0c3RydWN0IHB0c19mc19pbmZvICpmc2kgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4gMjI0Olx0XHRzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHMgPSBcdTAwMjZmc2ktXHUwMDNlbW91bnRfb3B0cztcbiAyMjU6XHRcdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xuIDIyNjpcdFx0aW50IG9wdDtcbiAyMjc6XHRcbiAyMjg6XHRcdG9wdCA9IGZzX3BhcnNlKGZjLCBkZXZwdHNfcGFyYW1fc3BlY3MsIHBhcmFtLCBcdTAwMjZyZXN1bHQpO1xuIDIyOTpcdFx0aWYgKG9wdCBcdTAwM2MgMClcbiAyMzA6XHRcdFx0cmV0dXJuIG9wdDtcbiAyMzE6XHRcbiAyMzI6XHRcdHN3aXRjaCAob3B0KSB7XG4gMjMzOlx0XHRjYXNlIE9wdF91aWQ6XG4gMjM0Olx0XHRcdG9wdHMtXHUwMDNldWlkID0gcmVzdWx0LnVpZDtcbiAyMzU6XHRcdFx0b3B0cy1cdTAwM2VzZXR1aWQgPSAxO1xuIDIzNjpcdFx0XHRicmVhaztcbiAyMzc6XHRcdGNhc2UgT3B0X2dpZDpcbiAyMzg6XHRcdFx0b3B0cy1cdTAwM2VnaWQgPSByZXN1bHQuZ2lkO1xuIDIzOTpcdFx0XHRvcHRzLVx1MDAzZXNldGdpZCA9IDE7XG4gMjQwOlx0XHRcdGJyZWFrO1xuIDI0MTpcdFx0Y2FzZSBPcHRfbW9kZTpcbiAyNDI6XHRcdFx0b3B0cy1cdTAwM2Vtb2RlID0gcmVzdWx0LnVpbnRfMzIgXHUwMDI2IFNfSUFMTFVHTztcbiAyNDM6XHRcdFx0YnJlYWs7XG4gMjQ0Olx0XHRjYXNlIE9wdF9wdG14bW9kZTpcbiAyNDU6XHRcdFx0b3B0cy1cdTAwM2VwdG14bW9kZSA9IHJlc3VsdC51aW50XzMyIFx1MDAyNiBTX0lBTExVR087XG4gMjQ2Olx0XHRcdGJyZWFrO1xuIDI0NzpcdFx0Y2FzZSBPcHRfbmV3aW5zdGFuY2U6XG4gMjQ4Olx0XHRcdGJyZWFrO1xuIDI0OTpcdFx0Y2FzZSBPcHRfbWF4OlxuIDI1MDpcdFx0XHRpZiAocmVzdWx0LnVpbnRfMzIgXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxuIDI1MTpcdFx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIDI1MjpcdFx0XHRpZiAocmVzdWx0LnVpbnRfMzIgPT0gMClcbiAyNTM6XHRcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwmIzM0Oyk7XG4gMjU0Olx0XHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG4gMjU1Olx0XHRcdGJyZWFrO1xuIDI1NjpcdFx0fVxuIDI1NzpcdFxuIDI1ODpcdFx0cmV0dXJuIDA7XG4gMjU5Olx0fVxuIDI2MDpcdFxuIDI2MTpcdHN0YXRpYyBpbnQgbWtub2RfcHRteChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gMjYyOlx0e1xuIDI2MzpcdFx0aW50IG1vZGU7XG4gMjY0Olx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3NwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYG9wdHMtJmd0O21heGAgdmFyaWFibGUgaW4gdGhlIGBkZXZwdHNgIGNvbnRleHQ6CgoqKkFuYWx5emluZyB0aGUgUm9sZSBvZiBgb3B0cy0mZ3Q7bWF4YCBpbiBkZXZwdHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBvcHRzLSZndDttYXhgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgZGV2cHRzYCBtb2R1bGUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHBpbnBvaW50IGl0cyBpbml0aWFsaXphdGlvbiBhbmQgYW55IHN1YnNlcXVlbnQgdXNhZ2UuIEkmIzM5O20gdGhpbmtpbmcsIGlzIGl0IGEgc2l6ZSBsaW1pdCwgYSBjb3VudGVyLCBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiBhbmQgc2VlIHdoZXJlIGl0IHNob3dzIHVwLiBJcyBpdCBkZXJpdmVkIGZyb20gYSBzeXN0ZW0gc2V0dGluZywgYSB1c2VyIGlucHV0LCBvciBhIGhhcmRjb2RlZCBkZWZhdWx0PyBBbmQgaW1wb3J0YW50bHksIGhvdyBpcyB0aGlzIHZhbHVlIGludGVycHJldGVkIGFuZCBlbXBsb3llZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgYGRldnB0c2AgZmlsZXN5c3RlbT8gS25vd2luZyB3aGVyZSBhbmQgaG93IGBvcHRzLSZndDttYXhgIGlzIHVzZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGRldmljZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBgZGV2cHRzYCBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBjb2RlIGZvciBpdHMgdXNhZ2UsIGFuZCB0aGVuIEkmIzM5O2xsIHRyYWNlIGJhY2sgaXRzIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3B0cy1cdTAwM2VtYXh8ZnNpLVx1MDAzZW1vdW50X29wdHNcXC5tYXh8TlJfVU5JWDk4X1BUWV9NQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kZXZwdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGV2cHRzL2lub2RlLmM9MjIxPXN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMjQ5LVx0Y2FzZSBPcHRfbWF4OlxuZnMvZGV2cHRzL2lub2RlLmM6MjUwOlx0XHRpZiAocmVzdWx0LnVpbnRfMzIgXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxuZnMvZGV2cHRzL2lub2RlLmMtMjUxLVx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTI1My1cdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwmIzM0Oyk7XG5mcy9kZXZwdHMvaW5vZGUuYzoyNTQ6XHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG5mcy9kZXZwdHMvaW5vZGUuYy0yNTUtXHRcdGJyZWFrO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTMwOT1zdGF0aWMgaW50IGRldnB0c19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMzI0LVx0ZnNpLVx1MDAzZW1vdW50X29wdHMucHRteG1vZGVcdD0gbmV3LVx1MDAzZW1vdW50X29wdHMucHRteG1vZGU7XG5mcy9kZXZwdHMvaW5vZGUuYzozMjU6XHRmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXhcdFx0PSBuZXctXHUwMDNlbW91bnRfb3B0cy5tYXg7XG5mcy9kZXZwdHMvaW5vZGUuYy0zMjYtXG4tLVxuZnMvZGV2cHRzL2lub2RlLmM9MzM4PXN0YXRpYyBpbnQgZGV2cHRzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zNTAtXHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7LHB0bXhtb2RlPSUwM29cJiMzNDssIG9wdHMtXHUwMDNlcHRteG1vZGUpO1xuZnMvZGV2cHRzL2lub2RlLmM6MzUxOlx0aWYgKG9wdHMtXHUwMDNlbWF4IFx1MDAzYyBOUl9VTklYOThfUFRZX01BWClcbmZzL2RldnB0cy9pbm9kZS5jOjM1MjpcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyxtYXg9JWRcJiMzNDssIG9wdHMtXHUwMDNlbWF4KTtcbmZzL2RldnB0cy9pbm9kZS5jLTM1My1cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz00MjE9c3RhdGljIGludCBkZXZwdHNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy00MzMtXHRmc2ktXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZSA9IERFVlBUU19ERUZBVUxUX1BUTVhfTU9ERTtcbmZzL2RldnB0cy9pbm9kZS5jOjQzNDpcdGZzaS1cdTAwM2Vtb3VudF9vcHRzLm1heCAgICAgPSBOUl9VTklYOThfUFRZX01BWDtcbmZzL2RldnB0cy9pbm9kZS5jLTQzNS1cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz00Njg9aW50IGRldnB0c19uZXdfaW5kZXgoc3RydWN0IHB0c19mc19pbmZvICpmc2kpXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDc1LVxuZnMvZGV2cHRzL2lub2RlLmM6NDc2Olx0aW5kZXggPSBpZGFfYWxsb2NfbWF4KFx1MDAyNmZzaS1cdTAwM2VhbGxvY2F0ZWRfcHR5cywgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSxcbmZzL2RldnB0cy9pbm9kZS5jLTQ3Ny1cdFx0XHRHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIHRoZSBkZXZwdHMgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGV2cHRzX25ld19pbmRleGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgYWxsb2NhdGVzIGluZGV4ZXMgdXNpbmcgYGlkYV9hbGxvY19tYXhgLiBJIHNlZSB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgbGluZTogYGluZGV4ID0gaWRhX2FsbG9jX21heCgmYW1wO2ZzaS0mZ3Q7YWxsb2NhdGVkX3B0eXMsIGZzaS0mZ3Q7bW91bnRfb3B0cy5tYXggLSAxLCBHRlBfS0VSTkVMKTtgIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB3aGF0IGhhcHBlbnMgaWYgYGZzaS0mZ3Q7bW91bnRfb3B0cy5tYXhgIGlzIHplcm8uIFRoYXQgYC0gMWAgaXMgc2V0dGluZyBvZmYgYWxhcm0gYmVsbHMgYmVjYXVzZSBhIHplcm8gdmFsdWUsIHdoZW4gc3VidHJhY3RlZCBieSBvbmUsIHJlc3VsdHMgaW4gYC0xYCwgd2hpY2ggaXMgZWl0aGVyIGFuIGludmFsaWQgbWF4aW11bSB2YWx1ZSwgb3Igd29yc2UsIGNhbiBsZWFkIHRvIGludGVnZXIgdW5kZXJmbG93IGluIHRoZSBgaWRhX2FsbG9jX21heGAgZnVuY3Rpb24uIFRoaXMgd291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LgoKVGhlIHBhdGNoIEkmIzM5O20gcmV2aWV3aW5nIGFkZHJlc3NlcyB0aGlzIHByZWNpc2VseS4gSXQgYWRkcyBhIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRoYXQgc3BlY2lmaWNhbGx5IHZhbGlkYXRlcyB0aGUgYG1heGAgdmFsdWUuIElmIGl0JiMzOTtzIHplcm8sIHRoZSBjb2RlIG5vdyByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UsICYjMzQ7bWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuJiMzNDsgVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIHByZXZlbnQgdGhhdCBwb3RlbnRpYWwgaW50ZWdlciB1bmRlcmZsb3cuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYFVOSVg5OF9QVFlTYCB0byBlbnN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHdlJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVU5JWDk4X1BUWVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9LY29uZmlnPTc4PWNvbmZpZyBWVF9IV19DT05TT0xFX0JJTkRJTkdcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnLTkzLVxuZHJpdmVycy90dHkvS2NvbmZpZzo5NDpjb25maWcgVU5JWDk4X1BUWVNcbmRyaXZlcnMvdHR5L0tjb25maWctOTUtXHRib29sIFwmIzM0O1VuaXg5OCBQVFkgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHR0eS9LY29uZmlnIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdHR5L0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSA5MyBhbmQgdGhlIHN1cnJvdW5kaW5nIGFyZWEuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFRUWSBkcml2ZXJzLCBhbmQgSSBuZWVkIHRvIHJldmlldyB0aGVtIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHNldHRpbmdzLiBUaGlzIGZpbGUgc2hvdWxkIGJlIGEga2V5IHNvdXJjZSBmb3IgZmlndXJpbmcgb3V0IHdoaWNoIFRUWSBkcml2ZXIgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQsIGFuZCBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSB2YXJpYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jb25zb2xlLnJzdFx1MDAzZSBmb3IgbW9yZVxuICA5MTpcdFx0ICBpbmZvcm1hdGlvbi4gRm9yIGZyYW1lYnVmZmVyIGNvbnNvbGUgdXNlcnMsIHBsZWFzZSByZWZlciB0b1xuICA5MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmIvZmJjb24ucnN0XHUwMDNlLlxuICA5MzpcdFxuICA5NDpcdGNvbmZpZyBVTklYOThfUFRZU1xuICA5NTpcdFx0Ym9vbCBcJiMzNDtVbml4OTggUFRZIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4gIDk2Olx0XHRkZWZhdWx0IHlcbiAgOTc6XHRcdGhlbHBcbiAgOTg6XHRcdCAgQSBwc2V1ZG8gdGVybWluYWwgKFBUWSkgaXMgYSBzb2Z0d2FyZSBkZXZpY2UgY29uc2lzdGluZyBvZiB0d29cbiAgOTk6XHRcdCAgaGFsdmVzOiBhIG1hc3RlciBhbmQgYSBzbGF2ZS4gVGhlIHNsYXZlIGRldmljZSBiZWhhdmVzIGlkZW50aWNhbCB0b1xuIDEwMDpcdFx0ICBhIHBoeXNpY2FsIHRlcm1pbmFsOyB0aGUgbWFzdGVyIGRldmljZSBpcyB1c2VkIGJ5IGEgcHJvY2VzcyB0b1xuIDEwMTpcdFx0ICByZWFkIGRhdGEgZnJvbSBhbmQgd3JpdGUgZGF0YSB0byB0aGUgc2xhdmUsIHRoZXJlYnkgZW11bGF0aW5nIGFcbiAxMDI6XHRcdCAgdGVybWluYWwuIFR5cGljYWwgcHJvZ3JhbXMgZm9yIHRoZSBtYXN0ZXIgc2lkZSBhcmUgdGVsbmV0IHNlcnZlcnNcbiAxMDM6XHRcdCAgYW5kIHh0ZXJtcy5cbiAxMDQ6XHRcbiAxMDU6XHRcdCAgTGludXggaGFzIHRyYWRpdGlvbmFsbHkgdXNlZCB0aGUgQlNELWxpa2UgbmFtZXMgL2Rldi9wdHl4eCBmb3JcbiAxMDY6XHRcdCAgbWFzdGVycyBhbmQgL2Rldi90dHl4eCBmb3Igc2xhdmVzIG9mIHBzZXVkbyB0ZXJtaW5hbHMuIFRoaXMgc2NoZW1lXG4gMTA3Olx0XHQgIGhhcyBhIG51bWJlciBvZiBwcm9ibGVtcy4gVGhlIEdOVSBDIGxpYnJhcnkgZ2xpYmMgMi4xIGFuZCBsYXRlcixcbiAxMDg6XHRcdCAgaG93ZXZlciwgc3VwcG9ydHMgdGhlIFVuaXg5OCBuYW1pbmcgc3RhbmRhcmQ6IGluIG9yZGVyIHRvIGFjcXVpcmUgYVxuIDEwOTpcdFx0ICBwc2V1ZG8gdGVybWluYWwsIGEgcHJvY2VzcyBvcGVucyAvZGV2L3B0bXg7IHRoZSBudW1iZXIgb2YgdGhlIHBzZXVkb1xuIDExMDpcdFx0ICB0ZXJtaW5hbCBpcyB0aGVuIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9jZXNzIGFuZCB0aGUgcHNldWRvXG4gMTExOlx0XHQgIHRlcm1pbmFsIHNsYXZlIGNhbiBiZSBhY2Nlc3NlZCBhcyAvZGV2L3B0cy9cdTAwM2NudW1iZXJcdTAwM2UuIFdoYXQgd2FzXG4gMTEyOlx0XHQgIHRyYWRpdGlvbmFsbHkgL2Rldi90dHlwMiB3aWxsIHRoZW4gYmUgL2Rldi9wdHMvMiwgZm9yIGV4YW1wbGUuXG4gMTEzOlx0XG4gMTE0Olx0XHQgIEFsbCBtb2Rlcm4gTGludXggc3lzdGVtcyB1c2UgdGhlIFVuaXg5OCBwdHlzLiAgU2F5IFkgdW5sZXNzXG4gMTE1Olx0XHQgIHlvdSYjMzk7cmUgb24gYW4gZW1iZWRkZWQgc3lzdGVtIGFuZCB3YW50IHRvIGNvbnNlcnZlIG1lbW9yeS5cbiAxMTY6XHRcbiAxMTc6XHRjb25maWcgTEVHQUNZX1BUWVNcbiAxMTg6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IChCU0QpIFBUWSBzdXBwb3J0XCYjMzQ7XG4gMTE5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgZGV2cHRzYCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgY2FuIHdlIGV2ZW4gKnJlYWNoKiBgZGV2cHRzYCBpbiBhIHR5cGljYWwgUUVNVS9zeXprYWxsZXIgZW52aXJvbm1lbnQ/IFllcywgbm8gcHJvYmxlbS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGAvZGV2L3B0c2AgZmlsZXN5c3RlbSwgbW91bnRlZCB1c2luZyBzdGFuZGFyZCBtZXRob2RzIGxpa2UgYG1vdW50YCB3aXRoIG9wdGlvbnMsIG9yIHRocm91Z2ggYGZzY29uZmlnYCBvciBgZnNvcGVuYCBzeXNjYWxscy4gVW5wcml2aWxlZ2VkIHVzZXJzIGNhbiBhY2Nlc3MgaXQgdGhhbmtzIHRvIGBGU19VU0VSTlNfTU9VTlRgLCBzbyBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIENoZWNrLgoKTm93IGZvciB0aGUgY3JpdGVyaWE6CgoqICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRob3NlIFZGUyBzeXNjYWxscy4gVGljay4KKiAgICoqQ29kZSBNb2RpZmljYXRpb24/KiogWWVzLCB0aGUga2V5IGlzIGBkZXZwdHNfcGFyc2VfcGFyYW1gIGluIGBmcy9kZXZwdHMvaW5vZGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgd2Ugd2FudCB0byBmb2N1cy4KKiAgICoqV29ydGhGdXp6aW5nPyoqIEFic29sdXRlbHksIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZS4KCk5leHQsIHRoZSBzcGVjaWZpY3M6IEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4KCldlJiMzOTtsbCBkZWZpbml0ZWx5IG5lZWQgdGhlIGBVTklYOThfUFRZU2AgY29uZmlnIGVuYWJsZWQuIExvb2tpbmcgYXQgdGhlIGBmcy9kZXZwdHMvTWFrZWZpbGVgLCB0aGF0JiMzOTtzIHRoZSBrZXkuCgpGb3IgRm9jdXNTeW1ib2xzLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSB6ZXJvaW5nIGluIG9uIGBkZXZwdHNfcGFyc2VfcGFyYW1gLiBJJiMzOTtsbCBjb25zaWRlciBgZGV2cHRzX3JlY29uZmlndXJlYCwgYGRldnB0c19maWxsX3N1cGVyYCwgYW5kIGBkZXZwdHNfbmV3X2luZGV4YCwgYW5kIGBkZXZwdHNfaW5pdF9mc19jb250ZXh0YCBhcyBwb3NzaWJsZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBleGFtaW5lLgoKYGRldnB0c19wYXJzZV9wYXJhbWAgbG9va3MgbGlrZSB0aGUgcHJpbWUgdGFyZ2V0IGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgYWN0dWFsbHkgbW9kaWZpZWQuIE5vdywgaXMgYGRldnB0c19wYXJzZV9wYXJhbWAgc3RhdGljPyBZZXMsIGFuZCBpdCYjMzk7cyByZWZlcmVuY2VkIGJ5IHBvaW50ZXIgaW4gYGRldnB0c19jb250ZXh0X29wcy5wYXJzZV9wYXJhbSA9IGRldnB0c19wYXJzZV9wYXJhbWAgd2hpY2ggbWVhbnMgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQmIzM5O3MgZ29vZC4KCkxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIG90aGVyIHN5bWJvbHMgaW4gYGZzL2RldnB0cy9pbm9kZS5jYDogWWVwLCBgZGV2cHRzX3BhcnNlX3BhcmFtYCwgYGRldnB0c19uZXdfaW5kZXhgLCBgZGV2cHRzX3JlY29uZmlndXJlYCwgYW5kIGBkZXZwdHNfZmlsbF9zdXBlcmAuCgpGaW5hbGx5LCBjb25maXJtIGBVTklYOThfUFRZU2AgaXMgdGhlIG9ubHkgY29uZmlnOiB0aGUgYE1ha2VmaWxlYCBjb25maXJtcyBpdC4gTm90aGluZyBlbHNlIGlzIGluIGBmcy9kZXZwdHNgIHRoYXQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4KClNvLCBpbiBzdW1tYXJ5OiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB3aXRoIGBVTklYOThfUFRZU2AgZW5hYmxlZCBpcyBvdXIgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuIFdlJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBidXQgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgdGhlIGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2ZzL2RldnB0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2lub2RlLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5OQoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIGRldnB0cyBNb3VudCBQYXJhbWV0ZXIgUGFyc2VyKioKCk9rYXksIHNvIHRoZSBzY29wZSBpcyByZWFsbHkganVzdCBgaW5vZGUuY2Ag4oCTIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGFyZ2V0LiBCZWZvcmUgZGl2aW5nIGluLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGtub3cgYFVOSVg5OF9QVFlTYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3R0eS9LY29uZmlnYCwgYnV0IHRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgdGhpbmcuIEFuZCwgb2YgY291cnNlLCBgVFRZYCBpcyBlc3NlbnRpYWxseSBpbXBsaWVkIGJ5IGEgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvcmUgcmVhc29uaW5nLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBtb2RpZnlpbmcgdGhlIGBkZXZwdHNfcGFyc2VfcGFyYW1gIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgcmVqZWN0aW5nIGEgYG1heD0wYCBwYXJhbWV0ZXIuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBkZXZwdHMgaXMgYSBjb3JlIHBzZXVkby1maWxlc3lzdGVtLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIG1vdW50LCBmc29wZW4sIGFuZCBmc2NvbmZpZyBzeXNjYWxscywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCeSBjcmFmdGluZyB0ZXN0cyB0aGF0IGludGVyYWN0IHdpdGggcHRzIGFsbG9jYXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbW91bnQvcmVtb3VudCBwYXJhbWV0ZXJzLCB3ZSBjYW4gcHJvYmUgZm9yIHZ1bG5lcmFiaWxpdGllcy4KCkFscmlnaHQsIHRoYXQgY292ZXJzIHRoZSBlc3NlbnRpYWxzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYOThfUFRZUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldnB0c19wYXJzZV9wYXJhbSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZGV2cHRzX25ld19pbmRleCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYXJhbWV0ZXIgcGFyc2luZyBsb2dpYyBpbiBkZXZwdHNfcGFyc2VfcGFyYW0gKGZzL2RldnB0cy9pbm9kZS5jKSB0byB2YWxpZGF0ZSB0aGF0IHRoZSAmIzM5O21heCYjMzk7IG1vdW50IHBhcmFtZXRlciBpcyBub24temVyby4gVGhlIGRldnB0cyBmaWxlc3lzdGVtIGlzIHJlYWNoYWJsZSB2aWEgbW91bnQgYW5kIGZzb3Blbi9mc2NvbmZpZyBzeXNjYWxscyBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVg5OF9QVFlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2cHRzX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2RldnB0c19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfbmV3X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcmFtZXRlciBwYXJzaW5nIGxvZ2ljIGluIGRldnB0c19wYXJzZV9wYXJhbSAoZnMvZGV2cHRzL2lub2RlLmMpIHRvIHZhbGlkYXRlIHRoYXQgdGhlICYjMzk7bWF4JiMzOTsgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayBpbiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB0byByZWplY3QgYSBtb3VudCBvcHRpb24gdmFsdWUgb2YgYG1heD0wYCAoYG1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHVuZGVyZmxvdyBpbiBgaWRhX2FsbG9jX21heCguLi4sIGZzaS1cdTAwM2Vtb3VudF9vcHRzLm1heCAtIDEsIC4uLilgLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gbG9naWMgb24gcGFyc2VkIGludGVnZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWE2ZDRkYzEzNGNjNDZjNGQ4ZmY0MjY2N2RiZjkxZWI3ZjY2MzAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNToxOTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggOTg0NGRjZjM1NGVlOS4uYmQxZThlYjI2ZWRiNyAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTI0OSw2ICYjNDM7MjQ5LDggQEAgc3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSkKIAljYXNlIE9wdF9tYXg6CiAJCWlmIChyZXN1bHQudWludF8zMiAmZ3Q7IE5SX1VOSVg5OF9QVFlfTUFYKQogCQkJcmV0dXJuIGludmFsZihmYywgJiMzNDttYXggb3V0IG9mIHJhbmdlJiMzNDspOwomIzQzOwkJaWYgKHJlc3VsdC51aW50XzMyID09IDApCiYjNDM7CQkJcmV0dXJuIGludmFsZihmYywgJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCYjMzQ7KTsKIAkJb3B0cy0mZ3Q7bWF4ID0gcmVzdWx0LnVpbnRfMzI7CiAJCWJyZWFrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZwdHMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBkaWZmIHNob3dzIGEgbW9kaWZpY2F0aW9uIHRvIGBmcy9kZXZwdHMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkZXZwdHNfcGFyc2VfcGFyYW1gIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjazogaWYgYG9wdHMtJmd0O21heGAgKHdoaWNoIEkgYXNzdW1lIGlzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSkgaXMgc2V0IHRvIHplcm8sIHRoZW4gdGhlIG1vdW50IG9wZXJhdGlvbiBzaG91bGQgZmFpbC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBlbmZvcmNpbmcgdGhhdCBgbWF4YCBiZSBncmVhdGVyIHRoYW4gemVybz8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYSB6ZXJvIHZhbHVlIHdvdWxkIHByb2JhYmx5IGxlYWQgdG8gaXNzdWVzLCBsaWtlIHByZXZlbnRpbmcgdGhlIGNyZWF0aW9uIG9mIG5ldyBwc2V1ZG8tdGVybWluYWxzLCBvciBjYXVzaW5nIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIHNvbWV3aGVyZSBkb3duc3RyZWFtIHdoZW4gY2FsY3VsYXRpbmcgbGltaXRzLiBJdCYjMzk7cyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBwcmV2ZW50aW5nIGEgbGlrZWx5IGVkZ2UgY2FzZS4KClRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayBgZnMvZGV2cHRzL2lub2RlLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgY2FsbGVkLCBob3cgYG9wdHMtJmd0O21heGAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBtb2R1bGUsIGFuZCB3aGF0IG90aGVyIHBhcmFtZXRlcnMgdGhlIGZpbGVzeXN0ZW0gYWNjZXB0cy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGRldGVybWluZSBpZiB0aGlzIGFkZGl0aW9uIGlzIGNvbXBsZXRlbHkgaXNvbGF0ZWQgb3IgaWYgaXQgaGFzIHNvbWUgcmlwcGxlIGVmZmVjdCBvbiBvdGhlciBwb3J0aW9ucyBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBpbXBsaWNpdGx5IGRlcGVuZCBvbiB0aGVyZSBiZWluZyAqc29tZSogYWxsb3dhYmxlIHZhbHVlIGZvciBgbWF4YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kZXZwdHMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0ICovXG4gMjIxOlx0c3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbiAyMjQ6XHRcdHN0cnVjdCBwdHNfbW91bnRfb3B0cyAqb3B0cyA9IFx1MDAyNmZzaS1cdTAwM2Vtb3VudF9vcHRzO1xuIDIyNTpcdFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XG4gMjI2Olx0XHRpbnQgb3B0O1xuIDIyNzpcdFxuIDIyODpcdFx0b3B0ID0gZnNfcGFyc2UoZmMsIGRldnB0c19wYXJhbV9zcGVjcywgcGFyYW0sIFx1MDAyNnJlc3VsdCk7XG4gMjI5Olx0XHRpZiAob3B0IFx1MDAzYyAwKVxuIDIzMDpcdFx0XHRyZXR1cm4gb3B0O1xuIDIzMTpcdFxuIDIzMjpcdFx0c3dpdGNoIChvcHQpIHtcbiAyMzM6XHRcdGNhc2UgT3B0X3VpZDpcbiAyMzQ6XHRcdFx0b3B0cy1cdTAwM2V1aWQgPSByZXN1bHQudWlkO1xuIDIzNTpcdFx0XHRvcHRzLVx1MDAzZXNldHVpZCA9IDE7XG4gMjM2Olx0XHRcdGJyZWFrO1xuIDIzNzpcdFx0Y2FzZSBPcHRfZ2lkOlxuIDIzODpcdFx0XHRvcHRzLVx1MDAzZWdpZCA9IHJlc3VsdC5naWQ7XG4gMjM5Olx0XHRcdG9wdHMtXHUwMDNlc2V0Z2lkID0gMTtcbiAyNDA6XHRcdFx0YnJlYWs7XG4gMjQxOlx0XHRjYXNlIE9wdF9tb2RlOlxuIDI0MjpcdFx0XHRvcHRzLVx1MDAzZW1vZGUgPSByZXN1bHQudWludF8zMiBcdTAwMjYgU19JQUxMVUdPO1xuIDI0MzpcdFx0XHRicmVhaztcbiAyNDQ6XHRcdGNhc2UgT3B0X3B0bXhtb2RlOlxuIDI0NTpcdFx0XHRvcHRzLVx1MDAzZXB0bXhtb2RlID0gcmVzdWx0LnVpbnRfMzIgXHUwMDI2IFNfSUFMTFVHTztcbiAyNDY6XHRcdFx0YnJlYWs7XG4gMjQ3Olx0XHRjYXNlIE9wdF9uZXdpbnN0YW5jZTpcbiAyNDg6XHRcdFx0YnJlYWs7XG4gMjQ5Olx0XHRjYXNlIE9wdF9tYXg6XG4gMjUwOlx0XHRcdGlmIChyZXN1bHQudWludF8zMiBcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXG4gMjUxOlx0XHRcdFx0cmV0dXJuIGludmFsZihmYywgXCYjMzQ7bWF4IG91dCBvZiByYW5nZVwmIzM0Oyk7XG4gMjUyOlx0XHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuIDI1MzpcdFx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCYjMzQ7KTtcbiAyNTQ6XHRcdFx0b3B0cy1cdTAwM2VtYXggPSByZXN1bHQudWludF8zMjtcbiAyNTU6XHRcdFx0YnJlYWs7XG4gMjU2Olx0XHR9XG4gMjU3Olx0XG4gMjU4Olx0XHRyZXR1cm4gMDtcbiAyNTk6XHR9XG4gMjYwOlx0XG4gMjYxOlx0c3RhdGljIGludCBta25vZF9wdG14KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiAyNjI6XHR7XG4gMjYzOlx0XHRpbnQgbW9kZTtcbiAyNjQ6XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiAyNjU6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gMjY2Olx0XHRzdHJ1Y3QgZGVudHJ5ICpyb290ID0gc2ItXHUwMDNlc19yb290O1xuIDI2NzpcdFx0c3RydWN0IHB0c19mc19pbmZvICpmc2kgPSBERVZQVFNfU0Ioc2IpO1xuIDI2ODpcdFx0c3RydWN0IHB0c19tb3VudF9vcHRzICpvcHRzID0gXHUwMDI2ZnNpLVx1MDAzZW1vdW50X29wdHM7XG4gMjY5Olx0XHRrdWlkX3QgcHRteF91aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4gMjcwOlx0XHRrZ2lkX3QgcHRteF9naWQgPSBjdXJyZW50X2ZzZ2lkKCk7XG4gMjcxOlx0XG4gMjcyOlx0XHRkZW50cnkgPSBzaW1wbGVfc3RhcnRfY3JlYXRpbmcocm9vdCwgXCYjMzQ7cHRteFwmIzM0Oyk7XG4gMjczOlx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpIHtcbiAyNzQ6XHRcdFx0cHJfZXJyKFwmIzM0O1VuYWJsZSB0byBhbGxvYyBkZW50cnkgZm9yIHB0bXggbm9kZVxcblwmIzM0Oyk7XG4gMjc1Olx0XHRcdHJldHVybiBQVFJfRVJSKGRlbnRyeSk7XG4gMjc2Olx0XHR9XG4gMjc3Olx0XG4gMjc4Olx0XHQvKlxuIDI3OTpcdFx0ICogQ3JlYXRlIGEgbmV3ICYjMzk7cHRteCYjMzk7IG5vZGUgaW4gdGhpcyBtb3VudCBvZiBkZXZwdHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYG9wdHMtJmd0O21heGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBvcHRzLSZndDttYXhgIHZhcmlhYmxlLiBXaGVyZSYjMzk7cyBpdCBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGBkZXZwdHNgIGNvZGU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW5mbHVlbmNlLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYGdyZXBgIGFuZCBzZWFyY2ggdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbnN0YW5jZSBvZiBgLSZndDttYXhgIG9yLCB0byBiZSBzdXBlciBzcGVjaWZpYywgYG9wdHMtJmd0O21heGAsIHNpbmNlIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBleGFjdCBtZW1iZXIgaXMgYWNjZXNzZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoaXMgdmFsdWUgaXMgYmVpbmcgdXRpbGl6ZWQgdGhyb3VnaG91dCB0aGUgcHJvamVjdC4gVGhlIGdvYWwgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBpbXBhY3Qgb2YgYG9wdHMtJmd0O21heGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RldnB0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kZXZwdHMvaW5vZGUuYz00NT1zdGF0aWMgaW50IHB0eV9saW1pdF9taW47XG5mcy9kZXZwdHMvaW5vZGUuYzo0NjpzdGF0aWMgaW50IHB0eV9saW1pdF9tYXggPSBJTlRfTUFYO1xuZnMvZGV2cHRzL2lub2RlLmMtNDctc3RhdGljIGF0b21pY190IHB0eV9jb3VudCA9IEFUT01JQ19JTklUKDApO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHB0eV90YWJsZVtdID0ge1xuZnMvZGV2cHRzL2lub2RlLmMtNTAtXHR7XG5mcy9kZXZwdHMvaW5vZGUuYzo1MTpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21heFwmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjUyOlx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG5mcy9kZXZwdHMvaW5vZGUuYy01My1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuZnMvZGV2cHRzL2lub2RlLmMtNTQtXHRcdC5kYXRhXHRcdD0gXHUwMDI2cHR5X2xpbWl0LFxuZnMvZGV2cHRzL2lub2RlLmM6NTU6XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG5mcy9kZXZwdHMvaW5vZGUuYy01Ni1cdFx0LmV4dHJhMVx0XHQ9IFx1MDAyNnB0eV9saW1pdF9taW4sXG5mcy9kZXZwdHMvaW5vZGUuYzo1NzpcdFx0LmV4dHJhMlx0XHQ9IFx1MDAyNnB0eV9saW1pdF9tYXgsXG5mcy9kZXZwdHMvaW5vZGUuYy01OC1cdH0sIHtcbmZzL2RldnB0cy9pbm9kZS5jLTU5LVx0XHQucHJvY25hbWVcdD0gXCYjMzQ7cmVzZXJ2ZVwmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjYwOlx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG5mcy9kZXZwdHMvaW5vZGUuYy02MS1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuZnMvZGV2cHRzL2lub2RlLmMtNjItXHRcdC5kYXRhXHRcdD0gXHUwMDI2cHR5X3Jlc2VydmUsXG5mcy9kZXZwdHMvaW5vZGUuYzo2MzpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbmZzL2RldnB0cy9pbm9kZS5jLTY0LVx0XHQuZXh0cmExXHRcdD0gXHUwMDI2cHR5X2xpbWl0X21pbixcbmZzL2RldnB0cy9pbm9kZS5jOjY1Olx0XHQuZXh0cmEyXHRcdD0gXHUwMDI2cHR5X2xpbWl0X21heCxcbmZzL2RldnB0cy9pbm9kZS5jLTY2LVx0fSwge1xuZnMvZGV2cHRzL2lub2RlLmMtNjctXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtuclwmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjY4Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG5mcy9kZXZwdHMvaW5vZGUuYy02OS1cdFx0Lm1vZGVcdFx0PSAwNDQ0LFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTc1PXN0cnVjdCBwdHNfbW91bnRfb3B0cyB7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtODItXHRpbnQgcmVzZXJ2ZTtcbmZzL2RldnB0cy9pbm9kZS5jOjgzOlx0aW50IG1heDtcbmZzL2RldnB0cy9pbm9kZS5jLTg0LX07XG4tLVxuZnMvZGV2cHRzL2lub2RlLmM9ODY9ZW51bSB7XG5mcy9kZXZwdHMvaW5vZGUuYzo4NzpcdE9wdF91aWQsIE9wdF9naWQsIE9wdF9tb2RlLCBPcHRfcHRteG1vZGUsIE9wdF9uZXdpbnN0YW5jZSwgIE9wdF9tYXgsXG5mcy9kZXZwdHMvaW5vZGUuYy04OC1cdE9wdF9lcnJcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz05MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGRldnB0c19wYXJhbV9zcGVjc1tdID0ge1xuZnMvZGV2cHRzL2lub2RlLmMtOTItXHRmc3BhcmFtX2dpZFx0KFwmIzM0O2dpZFwmIzM0OyxcdFx0T3B0X2dpZCksXG5mcy9kZXZwdHMvaW5vZGUuYzo5MzpcdGZzcGFyYW1fczMyXHQoXCYjMzQ7bWF4XCYjMzQ7LFx0XHRPcHRfbWF4KSxcbmZzL2RldnB0cy9pbm9kZS5jLTk0LVx0ZnNwYXJhbV91MzJvY3RcdChcJiMzNDttb2RlXCYjMzQ7LFx0T3B0X21vZGUpLFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTIyMT1zdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTI0OC1cdFx0YnJlYWs7XG5mcy9kZXZwdHMvaW5vZGUuYzoyNDk6XHRjYXNlIE9wdF9tYXg6XG5mcy9kZXZwdHMvaW5vZGUuYy0yNTAtXHRcdGlmIChyZXN1bHQudWludF8zMiBcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTE6XHRcdFx0cmV0dXJuIGludmFsZihmYywgXCYjMzQ7bWF4IG91dCBvZiByYW5nZVwmIzM0Oyk7XG5mcy9kZXZwdHMvaW5vZGUuYy0yNTItXHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuZnMvZGV2cHRzL2lub2RlLmM6MjUzOlx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCYjMzQ7KTtcbmZzL2RldnB0cy9pbm9kZS5jOjI1NDpcdFx0b3B0cy1cdTAwM2VtYXggPSByZXN1bHQudWludF8zMjtcbmZzL2RldnB0cy9pbm9kZS5jLTI1NS1cdFx0YnJlYWs7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmM9MzA5PXN0YXRpYyBpbnQgZGV2cHRzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zMjQtXHRmc2ktXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZVx0PSBuZXctXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZTtcbmZzL2RldnB0cy9pbm9kZS5jOjMyNTpcdGZzaS1cdTAwM2Vtb3VudF9vcHRzLm1heFx0XHQ9IG5ldy1cdTAwM2Vtb3VudF9vcHRzLm1heDtcbmZzL2RldnB0cy9pbm9kZS5jLTMyNi1cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz0zMzg9c3RhdGljIGludCBkZXZwdHNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTM1MC1cdHNlcV9wcmludGYoc2VxLCBcJiMzNDsscHRteG1vZGU9JTAzb1wmIzM0Oywgb3B0cy1cdTAwM2VwdG14bW9kZSk7XG5mcy9kZXZwdHMvaW5vZGUuYzozNTE6XHRpZiAob3B0cy1cdTAwM2VtYXggXHUwMDNjIE5SX1VOSVg5OF9QVFlfTUFYKVxuZnMvZGV2cHRzL2lub2RlLmM6MzUyOlx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7LG1heD0lZFwmIzM0Oywgb3B0cy1cdTAwM2VtYXgpO1xuZnMvZGV2cHRzL2lub2RlLmMtMzUzLVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTQyMT1zdGF0aWMgaW50IGRldnB0c19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQzMy1cdGZzaS1cdTAwM2Vtb3VudF9vcHRzLnB0bXhtb2RlID0gREVWUFRTX0RFRkFVTFRfUFRNWF9NT0RFO1xuZnMvZGV2cHRzL2lub2RlLmM6NDM0Olx0ZnNpLVx1MDAzZW1vdW50X29wdHMubWF4ICAgICA9IE5SX1VOSVg5OF9QVFlfTUFYO1xuZnMvZGV2cHRzL2lub2RlLmMtNDM1LVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTQ2OD1pbnQgZGV2cHRzX25ld19pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy00NzUtXG5mcy9kZXZwdHMvaW5vZGUuYzo0NzY6XHRpbmRleCA9IGlkYV9hbGxvY19tYXgoXHUwMDI2ZnNpLVx1MDAzZWFsbG9jYXRlZF9wdHlzLCBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLFxuZnMvZGV2cHRzL2lub2RlLmMtNDc3LVx0XHRcdEdGUF9LRVJORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDI3CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBgZGV2cHRzX25ld19pbmRleGAgVnVsbmVyYWJpbGl0eSBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBkZXZwdHNfbmV3X2luZGV4YCBhbmQgdGhlIHBvdGVudGlhbCBpc3N1ZSBzdXJyb3VuZGluZyB0aGUgYG1heGAgbW91bnQgb3B0aW9uLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaG93IGBpZGFfYWxsb2NfbWF4YCBoYW5kbGVzIGl0cyBpbnB1dC4gU3BlY2lmaWNhbGx5LCBpZiBgZnNpLSZndDttb3VudF9vcHRzLm1heGAgaXMgemVybywgd2UmIzM5O2QgaGF2ZSBhbiB1bmRlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIGAwIC0gMWAsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWxseSBpbnZhbGlkIGBpZGFfYWxsb2NfbWF4YCBjYWxsLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWF4YCBpcyB2YWxpZGF0ZWQgZHVyaW5nIHRoZSBtb3VudCBvcHRpb24gcGFyc2luZy4KClRoZSBwYXRjaCYjMzk7cyBhZGRpdGlvbiBjaGVja3MgZm9yIGEgYG1heGAgdmFsdWUgb2YgemVyby4gSWYgaXQgaXMsIHRoZSBtb3VudCBmYWlscywgcmV0dXJuaW5nIGFuICYjMzQ7aW52YWxpZCBtYXgmIzM0OyBlcnJvci4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPyBTcGVjaWZpY2FsbHksIGFtIEkgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIGluZm9ybWF0aW9uLCBsZWF2aW5nIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgbWVzc2luZyB3aXRoIHBhZGRpbmcsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkOiBOb3BlLCB0aGlzIG9ubHkgdmFsaWRhdGVzIGFuIGludGVnZXIgbW91bnQgcGFyYW1ldGVyLgoKMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBObywgdGhlIGByZXN1bHRgIHZhcmlhYmxlIGlzIHBvcHVsYXRlZCB2aWEgYGZzX3BhcnNlYCwgc28gaXQmIzM5O3MgaW5pdGlhbGl6ZWQuCgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgY291bGQgYmUgcmVhZCBsYXRlcjogTm8sIGFnYWluLCB0aGlzIGlzIHNpbXBseSBpbnB1dCB2YWxpZGF0aW9uIG9mIGEgc2luZ2xlIGludGVnZXIuCgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBsZXRzIHN1cnJvdW5kaW5nIGNvZGUgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6IEFic29sdXRlbHkgbm90LiBUaGlzIGlzIHN0cmFpZ2h0IGlucHV0IHZhbGlkYXRpb24sIGFuZCBgcmVzdWx0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGlucHV0IHZhbGlkYXRpb24gZml4LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBoZXJlLCBhbmQgaXQmIzM5O3MgYSB2ZXJ5IGNsZWFyLWN1dCBjYXNlIG9mIHNpbXBsZSBpbnB1dCB2YWxpZGF0aW9uLiBUaW1lIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGlucHV0IHZhbGlkYXRpb24gY2hlY2sgaW4gYGRldnB0c19wYXJzZV9wYXJhbWAgdG8gcmVqZWN0IGEgbW91bnQgb3B0aW9uIHZhbHVlIG9mIGBtYXg9MGAgKGBtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMGApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCB1bmRlcmZsb3cgaW4gYGlkYV9hbGxvY19tYXgoLi4uLCBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLCAuLi4pYC5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGxvZ2ljIG9uIHBhcnNlZCBpbnRlZ2Vycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgLi4uKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTk6MDIuOTc1NDcxNTg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mzg0NjYzODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVg5OF9QVFlTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2cHRzX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJkZXZwdHNfcmVjb25maWd1cmVcIixcbiAgICBcImRldnB0c19uZXdfaW5kZXhcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayBpbiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB0byByZWplY3QgYSBtb3VudCBvcHRpb24gdmFsdWUgb2YgYG1heD0wYCAoYG1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHVuZGVyZmxvdyBpbiBgaWRhX2FsbG9jX21heCguLi4sIGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLCAuLi4pYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gbG9naWMgb24gcGFyc2VkIGludGVnZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJ21heCcgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTk6MDIuOTc1NDc1ODY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1ODA0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTFhNmQ0ZGMxMzRjYzQ2YzRkOGZmNDI2NjdkYmY5MWViN2Y2NjMwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjE5OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmNcXG5pbmRleCA5ODQ0ZGNmMzU0ZWU5Li5iZDFlOGViMjZlZGI3IDEwMDY0NFxcbi0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jXFxuKysrIGIvZnMvZGV2cHRzL2lub2RlLmNcXG5AQCAtMjQ5LDYgKzI0OSw4IEBAIHN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuIFxcdGNhc2UgT3B0X21heDpcXG4gXFx0XFx0aWYgKHJlc3VsdC51aW50XzMyIFxcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXFxuIFxcdFxcdFxcdHJldHVybiBpbnZhbGYoZmMsIFxcXCJtYXggb3V0IG9mIHJhbmdlXFxcIik7XFxuK1xcdFxcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcXFwiKTtcXG4gXFx0XFx0b3B0cy1cXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjE5OjA0LjQ1MTg2NTkzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ4OTQzOTc3MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVg5OF9QVFlTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2cHRzX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJkZXZwdHNfcmVjb25maWd1cmVcIixcbiAgICBcImRldnB0c19uZXdfaW5kZXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJhbWV0ZXIgcGFyc2luZyBsb2dpYyBpbiBkZXZwdHNfcGFyc2VfcGFyYW0gKGZzL2RldnB0cy9pbm9kZS5jKSB0byB2YWxpZGF0ZSB0aGF0IHRoZSAnbWF4JyBtb3VudCBwYXJhbWV0ZXIgaXMgbm9uLXplcm8uIFRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyByZWFjaGFibGUgdmlhIG1vdW50IGFuZCBmc29wZW4vZnNjb25maWcgc3lzY2FsbHMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExYTZkNGRjMTM0Y2M0NmM0ZDhmZjQyNjY3ZGJmOTFlYjdmNjYzMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjE5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuY1xuaW5kZXggOTg0NGRjZjM1NGVlOS4uYmQxZThlYjI2ZWRiNyAxMDA2NDRcbi0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jXG4rKysgYi9mcy9kZXZwdHMvaW5vZGUuY1xuQEAgLTI0OSw2ICsyNDksOCBAQCBzdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuIFx0Y2FzZSBPcHRfbWF4OlxuIFx0XHRpZiAocmVzdWx0LnVpbnRfMzIgXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxuIFx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwibWF4IG91dCBvZiByYW5nZVwiKTtcbitcdFx0aWYgKHJlc3VsdC51aW50XzMyID09IDApXG4rXHRcdFx0cmV0dXJuIGludmFsZihmYywgXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiBcdFx0b3B0cy1cdTAwM2VtYXggPSByZXN1bHQudWludF8zMjtcbiBcdFx0YnJlYWs7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxOTowNC40NTE4NzIzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDgyMDMyMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZGV2cHRzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBzZWUgYSBgZGV2cHRzL2lub2RlLmNgIGNoYW5nZSwgd2hpY2ggc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHBzZXVkby10ZXJtaW5hbCBmaWxlc3lzdGVtLiBUaGUgZGlmZiBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgY2hlY2sgd2l0aGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHdoZW4gaGFuZGxpbmcgdGhlIGBPcHRfbWF4YCBwYXJhbWV0ZXIuIFNwZWNpZmljYWxseSwgaXQgbm93IHZhbGlkYXRlcyB0aGF0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwc2V1ZG8tdGVybWluYWxzIGFsbG93ZWQgKGBvcHRzLVx1MDAzZW1heGApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBIHplcm8gdmFsdWUgaXMgbm93IGNvbnNpZGVyZWQgaW52YWxpZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgYGZzL2RldnB0cy9pbm9kZS5jYCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBgT3B0X21heGAgcGFyYW1ldGVyIGJlaW5nIHBhcnNlZC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIGNvZGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBhIHJlYXNvbmFibGUgZml4IGZvciBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxOTowOC45MzM5MDY2MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RldnB0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kZXZwdHMvTWFrZWZpbGUtNS1cXG5mcy9kZXZwdHMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVU5JWDk4X1BUWVMpXFx0XFx0Kz0gZGV2cHRzLm9cXG5mcy9kZXZwdHMvTWFrZWZpbGUtNy1cXG5mcy9kZXZwdHMvTWFrZWZpbGU6ODpkZXZwdHMtJChDT05GSUdfVU5JWDk4X1BUWVMpXFx0XFx0Oj0gaW5vZGUub1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMy0gKlxcbmZzL2RldnB0cy9pbm9kZS5jOjQ6ICogbGludXgvZnMvZGV2cHRzL2lub2RlLmNcXG5mcy9kZXZwdHMvaW5vZGUuYy01LSAqXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxuZnMvZGV2cHRzL2lub2RlLmM6MjU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldnB0c19mcy5oXFx1MDAzZVxcbmZzL2RldnB0cy9pbm9kZS5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc25vdGlmeS5oXFx1MDAzZVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9ODY9ZW51bSB7XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy05MC1cXG5mcy9kZXZwdHMvaW5vZGUuYzo5MTpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGRldnB0c19wYXJhbV9zcGVjc1tdID0ge1xcbmZzL2RldnB0cy9pbm9kZS5jLTkyLVxcdGZzcGFyYW1fZ2lkXFx0KFxcXCJnaWRcXFwiLFxcdFxcdE9wdF9naWQpLFxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9MTA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHB0c19mc19pbmZvICpERVZQVFNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTExMi1cXG5mcy9kZXZwdHMvaW5vZGUuYzoxMTM6c3RhdGljIGludCBkZXZwdHNfcHRteF9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKVxcbmZzL2RldnB0cy9pbm9kZS5jLTExNC17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0xMTctXFxuZnMvZGV2cHRzL2lub2RlLmM6MTE4OlxcdC8qIElzIGEgZGV2cHRzIGZpbGVzeXN0ZW0gYXQgXFxcInB0c1xcXCIgaW4gdGhlIHNhbWUgZGlyZWN0b3J5PyAqL1xcbmZzL2RldnB0cy9pbm9kZS5jLTExOS1cXHRlcnIgPSBwYXRoX3B0cyhwYXRoKTtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTEyMi1cXG5mcy9kZXZwdHMvaW5vZGUuYzoxMjM6XFx0LyogSXMgdGhlIHBhdGggdGhlIHJvb3Qgb2YgYSBkZXZwdHMgZmlsZXN5c3RlbT8gKi9cXG5mcy9kZXZwdHMvaW5vZGUuYy0xMjQtXFx0c2IgPSBwYXRoLVxcdTAwM2VtbnQtXFx1MDAzZW1udF9zYjtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTEzMi0vKlxcbmZzL2RldnB0cy9pbm9kZS5jOjEzMzogKiBUcnkgdG8gZmluZCBhIHN1aXRhYmxlIGRldnB0cyBmaWxlc3lzdGVtLiBXZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmdcXG5mcy9kZXZwdHMvaW5vZGUuYy0xMzQtICogc2NlbmFyaW9zOlxcbmZzL2RldnB0cy9pbm9kZS5jOjEzNTogKiAtIFRoZSBwdG14IGRldmljZSBub2RlIGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBkZXZwdHNcXG5mcy9kZXZwdHMvaW5vZGUuYy0xMzYtICogICBtb3VudCB3aGVyZSB0aGUgcHRzIGRldmljZSBub2RlcyBhcmUgbG9jYXRlZC5cXG5mcy9kZXZwdHMvaW5vZGUuYy0xMzctICogICBUaGlzIGlzIGUuZy4gdGhlIGNhc2Ugd2hlbiBjYWxsaW5nIG9wZW4gb24gdGhlIC9kZXYvcHRzL3B0bXggZGV2aWNlXFxuZnMvZGV2cHRzL2lub2RlLmM6MTM4OiAqICAgbm9kZSB3aGVuIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGF0IC9kZXYvcHRzLlxcbmZzL2RldnB0cy9pbm9kZS5jOjEzOTogKiAtIFRoZSBwdG14IGRldmljZSBub2RlIGlzIGxvY2F0ZWQgb3V0c2lkZSB0aGUgZGV2cHRzIGZpbGVzeXN0ZW0gbW91bnRcXG5mcy9kZXZwdHMvaW5vZGUuYy0xNDAtICogICB3aGVyZSB0aGUgcHRzIGRldmljZSBub2RlcyBhcmUgbG9jYXRlZC4gRm9yIGV4YW1wbGUsIHRoZSBwdG14IGRldmljZVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMTQ0LSAqICAgc3ViZGlyZWN0b3J5IGNhbiBiZSBmb3VuZCBpbiB0aGUgY29tbW9uIHBhcmVudCBkaXJlY3RvcnkgL2RldiBvZiB0aGVcXG5mcy9kZXZwdHMvaW5vZGUuYzoxNDU6ICogICBkZXZwdHMgbW91bnQgYW5kIHRoZSBwdG14IGJpbmQtbW91bnQsIGFmdGVyIHJlc29sdmluZyB0aGUgL2Rldi9wdG14XFxuZnMvZGV2cHRzL2lub2RlLmMtMTQ2LSAqICAgYmluZC1tb3VudC5cXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTE0OS0gKi9cXG5mcy9kZXZwdHMvaW5vZGUuYzoxNTA6c3RydWN0IHZmc21vdW50ICpkZXZwdHNfbW50Z2V0KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG5mcy9kZXZwdHMvaW5vZGUuYy0xNTEte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMTY0LVxcbmZzL2RldnB0cy9pbm9kZS5jOjE2NTpcXHQvKiBkZXZwdHNfcHRteF9wYXRoKCkgZmluZHMgYSBkZXZwdHMgZnMgb3IgcmV0dXJucyBhbiBlcnJvci4gKi9cXG5mcy9kZXZwdHMvaW5vZGUuYy0xNjYtXFx0aWYgKChwYXRoLm1udC1cXHUwMDNlbW50X3NiLVxcdTAwM2VzX21hZ2ljICE9IERFVlBUU19TVVBFUl9NQUdJQykgfHxcXG5mcy9kZXZwdHMvaW5vZGUuYy0xNjctXFx0ICAgIChERVZQVFNfU0IocGF0aC5tbnQtXFx1MDAzZW1udF9zYikgIT0gZnNpKSlcXG5mcy9kZXZwdHMvaW5vZGUuYzoxNjg6XFx0XFx0ZXJyID0gZGV2cHRzX3B0bXhfcGF0aChcXHUwMDI2cGF0aCk7XFxuZnMvZGV2cHRzL2lub2RlLmMtMTY5LVxcdGRwdXQocGF0aC5kZW50cnkpO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMTgwLVxcbmZzL2RldnB0cy9pbm9kZS5jOjE4MTpzdHJ1Y3QgcHRzX2ZzX2luZm8gKmRldnB0c19hY3F1aXJlKHN0cnVjdCBmaWxlICpmaWxwKVxcbmZzL2RldnB0cy9pbm9kZS5jLTE4Mi17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0xODktXFxuZnMvZGV2cHRzL2lub2RlLmM6MTkwOlxcdC8qIEhhcyB0aGUgZGV2cHRzIGZpbGVzeXN0ZW0gYWxyZWFkeSBiZWVuIGZvdW5kPyAqL1xcbmZzL2RldnB0cy9pbm9kZS5jLTE5MS1cXHRpZiAocGF0aC5tbnQtXFx1MDAzZW1udF9zYi1cXHUwMDNlc19tYWdpYyAhPSBERVZQVFNfU1VQRVJfTUFHSUMpIHtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTE5My1cXG5mcy9kZXZwdHMvaW5vZGUuYzoxOTQ6XFx0XFx0ZXJyID0gZGV2cHRzX3B0bXhfcGF0aChcXHUwMDI2cGF0aCk7XFxuZnMvZGV2cHRzL2lub2RlLmMtMTk1LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTIxMi1cXG5mcy9kZXZwdHMvaW5vZGUuYzoyMTM6dm9pZCBkZXZwdHNfcmVsZWFzZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG5mcy9kZXZwdHMvaW5vZGUuYy0yMTQte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMjE4LS8qXFxuZnMvZGV2cHRzL2lub2RlLmM6MjE5OiAqIGRldnB0c19wYXJzZV9wYXJhbSAtIFBhcnNlIG1vdW50IHBhcmFtZXRlcnNcXG5mcy9kZXZwdHMvaW5vZGUuYy0yMjAtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6MjIxOnN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvZGV2cHRzL2lub2RlLmMtMjIyLXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTIyNy1cXG5mcy9kZXZwdHMvaW5vZGUuYzoyMjg6XFx0b3B0ID0gZnNfcGFyc2UoZmMsIGRldnB0c19wYXJhbV9zcGVjcywgcGFyYW0sIFxcdTAwMjZyZXN1bHQpO1xcbmZzL2RldnB0cy9pbm9kZS5jLTIyOS1cXHRpZiAob3B0IFxcdTAwM2MgMClcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTI2MT1zdGF0aWMgaW50IG1rbm9kX3B0bXgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMjc4LVxcdC8qXFxuZnMvZGV2cHRzL2lub2RlLmM6Mjc5OlxcdCAqIENyZWF0ZSBhIG5ldyAncHRteCcgbm9kZSBpbiB0aGlzIG1vdW50IG9mIGRldnB0cy5cXG5mcy9kZXZwdHMvaW5vZGUuYy0yODAtXFx0ICovXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz0zMDQ9c3RhdGljIHZvaWQgdXBkYXRlX3B0bXhfbW9kZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTMwOC1cXG5mcy9kZXZwdHMvaW5vZGUuYzozMDk6c3RhdGljIGludCBkZXZwdHNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTMxMC17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0zMzctXFxuZnMvZGV2cHRzL2lub2RlLmM6MzM4OnN0YXRpYyBpbnQgZGV2cHRzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG5mcy9kZXZwdHMvaW5vZGUuYy0zMzkte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMzU2LVxcbmZzL2RldnB0cy9pbm9kZS5jOjM1NzpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGV2cHRzX3NvcHMgPSB7XFxuZnMvZGV2cHRzL2lub2RlLmMtMzU4LVxcdC5zdGF0ZnNcXHRcXHQ9IHNpbXBsZV9zdGF0ZnMsXFxuZnMvZGV2cHRzL2lub2RlLmM6MzU5OlxcdC5zaG93X29wdGlvbnNcXHQ9IGRldnB0c19zaG93X29wdGlvbnMsXFxuZnMvZGV2cHRzL2lub2RlLmMtMzYwLX07XFxuZnMvZGV2cHRzL2lub2RlLmMtMzYxLVxcbmZzL2RldnB0cy9pbm9kZS5jOjM2MjpzdGF0aWMgaW50IGRldnB0c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTM2My17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0zNzAtXFx0cy1cXHUwMDNlc19tYWdpYyA9IERFVlBUU19TVVBFUl9NQUdJQztcXG5mcy9kZXZwdHMvaW5vZGUuYzozNzE6XFx0cy1cXHUwMDNlc19vcCA9IFxcdTAwMjZkZXZwdHNfc29wcztcXG5mcy9kZXZwdHMvaW5vZGUuYy0zNzItXFx0cy1cXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTM5NS0vKlxcbmZzL2RldnB0cy9pbm9kZS5jOjM5NjogKiBkZXZwdHNfZ2V0X3RyZWUoKVxcbmZzL2RldnB0cy9pbm9kZS5jLTM5Ny0gKlxcbmZzL2RldnB0cy9pbm9kZS5jOjM5ODogKiAgICAgTW91bnQgYSBuZXcgKHByaXZhdGUpIGluc3RhbmNlIG9mIGRldnB0cy4gIFBUWXMgY3JlYXRlZCBpbiB0aGlzXFxuZnMvZGV2cHRzL2lub2RlLmM6Mzk5OiAqICAgICBpbnN0YW5jZSBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIFBUWXMgaW4gb3RoZXIgZGV2cHRzIGluc3RhbmNlcy5cXG5mcy9kZXZwdHMvaW5vZGUuYy00MDAtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NDAxOnN0YXRpYyBpbnQgZGV2cHRzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9kZXZwdHMvaW5vZGUuYy00MDIte1xcbmZzL2RldnB0cy9pbm9kZS5jOjQwMzpcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGRldnB0c19maWxsX3N1cGVyKTtcXG5mcy9kZXZwdHMvaW5vZGUuYy00MDQtfVxcbmZzL2RldnB0cy9pbm9kZS5jLTQwNS1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0MDY6c3RhdGljIHZvaWQgZGV2cHRzX2ZyZWVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTQwNy17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00MTAtXFxuZnMvZGV2cHRzL2lub2RlLmM6NDExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGRldnB0c19jb250ZXh0X29wcyA9IHtcXG5mcy9kZXZwdHMvaW5vZGUuYzo0MTI6XFx0LmZyZWVcXHRcXHQ9IGRldnB0c19mcmVlX2ZjLFxcbmZzL2RldnB0cy9pbm9kZS5jOjQxMzpcXHQucGFyc2VfcGFyYW1cXHQ9IGRldnB0c19wYXJzZV9wYXJhbSxcXG5mcy9kZXZwdHMvaW5vZGUuYzo0MTQ6XFx0LmdldF90cmVlXFx0PSBkZXZwdHNfZ2V0X3RyZWUsXFxuZnMvZGV2cHRzL2lub2RlLmM6NDE1OlxcdC5yZWNvbmZpZ3VyZVxcdD0gZGV2cHRzX3JlY29uZmlndXJlLFxcbmZzL2RldnB0cy9pbm9kZS5jLTQxNi19O1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDIwLSAqL1xcbmZzL2RldnB0cy9pbm9kZS5jOjQyMTpzdGF0aWMgaW50IGRldnB0c19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTQyMi17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00NDAtXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGZzaTtcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NDE6XFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkZXZwdHNfY29udGV4dF9vcHM7XFxuZnMvZGV2cHRzL2lub2RlLmMtNDQyLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDQ0LVxcbmZzL2RldnB0cy9pbm9kZS5jOjQ0NTpzdGF0aWMgdm9pZCBkZXZwdHNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ0Ni17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00NTQtXFxuZnMvZGV2cHRzL2lub2RlLmM6NDU1OnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXZwdHNfZnNfdHlwZSA9IHtcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NTY6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJkZXZwdHNcXFwiLFxcbmZzL2RldnB0cy9pbm9kZS5jOjQ1NzpcXHQuaW5pdF9mc19jb250ZXh0ID0gZGV2cHRzX2luaXRfZnNfY29udGV4dCxcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NTg6XFx0LnBhcmFtZXRlcnNcXHQ9IGRldnB0c19wYXJhbV9zcGVjcyxcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NTk6XFx0LmtpbGxfc2JcXHQ9IGRldnB0c19raWxsX3NiLFxcbmZzL2RldnB0cy9pbm9kZS5jLTQ2MC1cXHQuZnNfZmxhZ3NcXHQ9IEZTX1VTRVJOU19NT1VOVCxcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ2Ny1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0Njg6aW50IGRldnB0c19uZXdfaW5kZXgoc3RydWN0IHB0c19mc19pbmZvICpmc2kpXFxuZnMvZGV2cHRzL2lub2RlLmMtNDY5LXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ4NC1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0ODU6dm9pZCBkZXZwdHNfa2lsbF9pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSwgaW50IGlkeClcXG5mcy9kZXZwdHMvaW5vZGUuYy00ODYte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDkxLS8qKlxcbmZzL2RldnB0cy9pbm9kZS5jOjQ5MjogKiBkZXZwdHNfcHR5X25ldyAtLSBjcmVhdGUgYSBuZXcgaW5vZGUgaW4gL2Rldi9wdHMvXFxuZnMvZGV2cHRzL2lub2RlLmMtNDkzLSAqIEBmc2k6IEZpbGVzeXN0ZW0gaW5mbyBmb3IgdGhpcyBpbnN0YW5jZS5cXG5mcy9kZXZwdHMvaW5vZGUuYy00OTQtICogQGluZGV4OiB1c2VkIGFzIGEgbmFtZSBvZiB0aGUgbm9kZVxcbmZzL2RldnB0cy9pbm9kZS5jOjQ5NTogKiBAcHJpdjogd2hhdCdzIGdpdmVuIGJhY2sgYnkgZGV2cHRzX2dldF9wcml2XFxuZnMvZGV2cHRzL2lub2RlLmMtNDk2LSAqXFxuZnMvZGV2cHRzL2lub2RlLmMtNDk3LSAqIFRoZSBkZW50cnkgZm9yIHRoZSBjcmVhdGVkIGlub2RlIGlzIHJldHVybmVkLlxcbmZzL2RldnB0cy9pbm9kZS5jOjQ5ODogKiBSZW1vdmUgaXQgZnJvbSAvZGV2L3B0cy8gd2l0aCBkZXZwdHNfcHR5X2tpbGwoKS5cXG5mcy9kZXZwdHMvaW5vZGUuYy00OTktICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NTAwOnN0cnVjdCBkZW50cnkgKmRldnB0c19wdHlfbmV3KHN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpLCBpbnQgaW5kZXgsIHZvaWQgKnByaXYpXFxuZnMvZGV2cHRzL2lub2RlLmMtNTAxLXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTUzNi0vKipcXG5mcy9kZXZwdHMvaW5vZGUuYzo1Mzc6ICogZGV2cHRzX2dldF9wcml2IC0tIGdldCBwcml2YXRlIGRhdGEgZm9yIGEgc2xhdmVcXG5mcy9kZXZwdHMvaW5vZGUuYy01MzgtICogQGRlbnRyeTogZGVudHJ5IG9mIHRoZSBzbGF2ZVxcbmZzL2RldnB0cy9pbm9kZS5jLTUzOS0gKlxcbmZzL2RldnB0cy9pbm9kZS5jOjU0MDogKiBSZXR1cm5zIHdoYXRldmVyIHdhcyBwYXNzZWQgYXMgcHJpdiBpbiBkZXZwdHNfcHR5X25ldyBmb3IgYSBnaXZlbiBpbm9kZS5cXG5mcy9kZXZwdHMvaW5vZGUuYy01NDEtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NTQyOnZvaWQgKmRldnB0c19nZXRfcHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvZGV2cHRzL2lub2RlLmMtNTQzLXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTU0OS0vKipcXG5mcy9kZXZwdHMvaW5vZGUuYzo1NTA6ICogZGV2cHRzX3B0eV9raWxsIC0tIHJlbW92ZSBpbm9kZSBmb3JtIC9kZXYvcHRzL1xcbmZzL2RldnB0cy9pbm9kZS5jLTU1MS0gKiBAZGVudHJ5OiBkZW50cnkgb2YgdGhlIHNsYXZlIHRvIGJlIHJlbW92ZWRcXG5mcy9kZXZwdHMvaW5vZGUuYy01NTItICpcXG5mcy9kZXZwdHMvaW5vZGUuYzo1NTM6ICogVGhpcyBpcyBhbiBpbnZlcnNlIG9wZXJhdGlvbiBvZiBkZXZwdHNfcHR5X25ldy5cXG5mcy9kZXZwdHMvaW5vZGUuYy01NTQtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NTU1OnZvaWQgZGV2cHRzX3B0eV9raWxsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9kZXZwdHMvaW5vZGUuYy01NTYte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNTY1LVxcbmZzL2RldnB0cy9pbm9kZS5jOjU2NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2RldnB0c19mcyh2b2lkKVxcbmZzL2RldnB0cy9pbm9kZS5jLTU2Ny17XFxuZnMvZGV2cHRzL2lub2RlLmM6NTY4OlxcdGludCBlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZkZXZwdHNfZnNfdHlwZSk7XFxuZnMvZGV2cHRzL2lub2RlLmMtNTY5LVxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy01NzMtfVxcbmZzL2RldnB0cy9pbm9kZS5jOjU3NDptb2R1bGVfaW5pdChpbml0X2RldnB0c19mcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTk6MDguOTgwOTcwOTY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxNDcyODc1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIERldnB0cyBGaWxlc3lzdGVtKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhcnNlZCBpbiB0aGUgYGRldnB0c2AgZmlsZXN5c3RlbS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZnMvZGV2cHRzL2lub2RlLmNgLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBgZGV2cHRzX3BhcnNlX3BhcmFtYCBmdW5jdGlvbiBhbmQgaG93IGl0J3MgYWN0dWFsbHkgdXNlZC4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGJ5IGNoZWNraW5nIGl0IG91dCBhcm91bmQgbGluZSAyNDkgb2YgdGhhdCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMDoxMS4xMjgyNjEwMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kZXZwdHMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0ICovXFxuIDIyMTpcXHRzdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbiAyMjI6XFx0e1xcbiAyMjM6XFx0XFx0c3RydWN0IHB0c19mc19pbmZvICpmc2kgPSBmYy1cXHUwMDNlc19mc19pbmZvO1xcbiAyMjQ6XFx0XFx0c3RydWN0IHB0c19tb3VudF9vcHRzICpvcHRzID0gXFx1MDAyNmZzaS1cXHUwMDNlbW91bnRfb3B0cztcXG4gMjI1OlxcdFxcdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xcbiAyMjY6XFx0XFx0aW50IG9wdDtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0b3B0ID0gZnNfcGFyc2UoZmMsIGRldnB0c19wYXJhbV9zcGVjcywgcGFyYW0sIFxcdTAwMjZyZXN1bHQpO1xcbiAyMjk6XFx0XFx0aWYgKG9wdCBcXHUwMDNjIDApXFxuIDIzMDpcXHRcXHRcXHRyZXR1cm4gb3B0O1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiAyMzM6XFx0XFx0Y2FzZSBPcHRfdWlkOlxcbiAyMzQ6XFx0XFx0XFx0b3B0cy1cXHUwMDNldWlkID0gcmVzdWx0LnVpZDtcXG4gMjM1OlxcdFxcdFxcdG9wdHMtXFx1MDAzZXNldHVpZCA9IDE7XFxuIDIzNjpcXHRcXHRcXHRicmVhaztcXG4gMjM3OlxcdFxcdGNhc2UgT3B0X2dpZDpcXG4gMjM4OlxcdFxcdFxcdG9wdHMtXFx1MDAzZWdpZCA9IHJlc3VsdC5naWQ7XFxuIDIzOTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VzZXRnaWQgPSAxO1xcbiAyNDA6XFx0XFx0XFx0YnJlYWs7XFxuIDI0MTpcXHRcXHRjYXNlIE9wdF9tb2RlOlxcbiAyNDI6XFx0XFx0XFx0b3B0cy1cXHUwMDNlbW9kZSA9IHJlc3VsdC51aW50XzMyIFxcdTAwMjYgU19JQUxMVUdPO1xcbiAyNDM6XFx0XFx0XFx0YnJlYWs7XFxuIDI0NDpcXHRcXHRjYXNlIE9wdF9wdG14bW9kZTpcXG4gMjQ1OlxcdFxcdFxcdG9wdHMtXFx1MDAzZXB0bXhtb2RlID0gcmVzdWx0LnVpbnRfMzIgXFx1MDAyNiBTX0lBTExVR087XFxuIDI0NjpcXHRcXHRcXHRicmVhaztcXG4gMjQ3OlxcdFxcdGNhc2UgT3B0X25ld2luc3RhbmNlOlxcbiAyNDg6XFx0XFx0XFx0YnJlYWs7XFxuIDI0OTpcXHRcXHRjYXNlIE9wdF9tYXg6XFxuIDI1MDpcXHRcXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgXFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcXG4gMjUxOlxcdFxcdFxcdFxcdHJldHVybiBpbnZhbGYoZmMsIFxcXCJtYXggb3V0IG9mIHJhbmdlXFxcIik7XFxuIDI1MjpcXHRcXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgPT0gMClcXG4gMjUzOlxcdFxcdFxcdFxcdHJldHVybiBpbnZhbGYoZmMsIFxcXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFxcXCIpO1xcbiAyNTQ6XFx0XFx0XFx0b3B0cy1cXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XFxuIDI1NTpcXHRcXHRcXHRicmVhaztcXG4gMjU2OlxcdFxcdH1cXG4gMjU3OlxcdFxcbiAyNTg6XFx0XFx0cmV0dXJuIDA7XFxuIDI1OTpcXHR9XFxuIDI2MDpcXHRcXG4gMjYxOlxcdHN0YXRpYyBpbnQgbWtub2RfcHRteChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIDI2MjpcXHR7XFxuIDI2MzpcXHRcXHRpbnQgbW9kZTtcXG4gMjY0OlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjA6MTEuMTI4MzQxMDU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA2MDY1MDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYG9wdHMtXHUwMDNlbWF4YCB2YXJpYWJsZSBpbiB0aGUgYGRldnB0c2AgY29udGV4dDpcblxuKipBbmFseXppbmcgdGhlIFJvbGUgb2YgYG9wdHMtXHUwMDNlbWF4YCBpbiBkZXZwdHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG9wdHMtXHUwMDNlbWF4YCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYGRldnB0c2AgbW9kdWxlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBwaW5wb2ludCBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIGFueSBzdWJzZXF1ZW50IHVzYWdlLiBJJ20gdGhpbmtpbmcsIGlzIGl0IGEgc2l6ZSBsaW1pdCwgYSBjb3VudGVyLCBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiBhbmQgc2VlIHdoZXJlIGl0IHNob3dzIHVwLiBJcyBpdCBkZXJpdmVkIGZyb20gYSBzeXN0ZW0gc2V0dGluZywgYSB1c2VyIGlucHV0LCBvciBhIGhhcmRjb2RlZCBkZWZhdWx0PyBBbmQgaW1wb3J0YW50bHksIGhvdyBpcyB0aGlzIHZhbHVlIGludGVycHJldGVkIGFuZCBlbXBsb3llZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgYGRldnB0c2AgZmlsZXN5c3RlbT8gS25vd2luZyB3aGVyZSBhbmQgaG93IGBvcHRzLVx1MDAzZW1heGAgaXMgdXNlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGBkZXZwdHNgIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZSBmb3IgaXRzIHVzYWdlLCBhbmQgdGhlbiBJJ2xsIHRyYWNlIGJhY2sgaXRzIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIwOjE2LjE4ODk5NDIwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxODI2NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wdHMtXFx1MDAzZW1heHxmc2ktXFx1MDAzZW1vdW50X29wdHNcXFxcLm1heHxOUl9VTklYOThfUFRZX01BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kZXZwdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGV2cHRzL2lub2RlLmM9MjIxPXN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0yNDktXFx0Y2FzZSBPcHRfbWF4OlxcbmZzL2RldnB0cy9pbm9kZS5jOjI1MDpcXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgXFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcXG5mcy9kZXZwdHMvaW5vZGUuYy0yNTEtXFx0XFx0XFx0cmV0dXJuIGludmFsZihmYywgXFxcIm1heCBvdXQgb2YgcmFuZ2VcXFwiKTtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTI1My1cXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcXFwiKTtcXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTQ6XFx0XFx0b3B0cy1cXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XFxuZnMvZGV2cHRzL2lub2RlLmMtMjU1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9MzA5PXN0YXRpYyBpbnQgZGV2cHRzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTMyNC1cXHRmc2ktXFx1MDAzZW1vdW50X29wdHMucHRteG1vZGVcXHQ9IG5ldy1cXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZTtcXG5mcy9kZXZwdHMvaW5vZGUuYzozMjU6XFx0ZnNpLVxcdTAwM2Vtb3VudF9vcHRzLm1heFxcdFxcdD0gbmV3LVxcdTAwM2Vtb3VudF9vcHRzLm1heDtcXG5mcy9kZXZwdHMvaW5vZGUuYy0zMjYtXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz0zMzg9c3RhdGljIGludCBkZXZwdHNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMzUwLVxcdHNlcV9wcmludGYoc2VxLCBcXFwiLHB0bXhtb2RlPSUwM29cXFwiLCBvcHRzLVxcdTAwM2VwdG14bW9kZSk7XFxuZnMvZGV2cHRzL2lub2RlLmM6MzUxOlxcdGlmIChvcHRzLVxcdTAwM2VtYXggXFx1MDAzYyBOUl9VTklYOThfUFRZX01BWClcXG5mcy9kZXZwdHMvaW5vZGUuYzozNTI6XFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsbWF4PSVkXFxcIiwgb3B0cy1cXHUwMDNlbWF4KTtcXG5mcy9kZXZwdHMvaW5vZGUuYy0zNTMtXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz00MjE9c3RhdGljIGludCBkZXZwdHNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQzMy1cXHRmc2ktXFx1MDAzZW1vdW50X29wdHMucHRteG1vZGUgPSBERVZQVFNfREVGQVVMVF9QVE1YX01PREU7XFxuZnMvZGV2cHRzL2lub2RlLmM6NDM0OlxcdGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXggICAgID0gTlJfVU5JWDk4X1BUWV9NQVg7XFxuZnMvZGV2cHRzL2lub2RlLmMtNDM1LVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9NDY4PWludCBkZXZwdHNfbmV3X2luZGV4KHN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpKVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDc1LVxcbmZzL2RldnB0cy9pbm9kZS5jOjQ3NjpcXHRpbmRleCA9IGlkYV9hbGxvY19tYXgoXFx1MDAyNmZzaS1cXHUwMDNlYWxsb2NhdGVkX3B0eXMsIGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLFxcbmZzL2RldnB0cy9pbm9kZS5jLTQ3Ny1cXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjA6MTcuNjQwODI1MTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzEyMjg0MjY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiB0aGUgZGV2cHRzIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkZXZwdHNfbmV3X2luZGV4YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBhbGxvY2F0ZXMgaW5kZXhlcyB1c2luZyBgaWRhX2FsbG9jX21heGAuIEkgc2VlIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBsaW5lOiBgaW5kZXggPSBpZGFfYWxsb2NfbWF4KFx1MDAyNmZzaS1cdTAwM2VhbGxvY2F0ZWRfcHR5cywgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgR0ZQX0tFUk5FTCk7YCBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgd2hhdCBoYXBwZW5zIGlmIGBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXhgIGlzIHplcm8uIFRoYXQgYC0gMWAgaXMgc2V0dGluZyBvZmYgYWxhcm0gYmVsbHMgYmVjYXVzZSBhIHplcm8gdmFsdWUsIHdoZW4gc3VidHJhY3RlZCBieSBvbmUsIHJlc3VsdHMgaW4gYC0xYCwgd2hpY2ggaXMgZWl0aGVyIGFuIGludmFsaWQgbWF4aW11bSB2YWx1ZSwgb3Igd29yc2UsIGNhbiBsZWFkIHRvIGludGVnZXIgdW5kZXJmbG93IGluIHRoZSBgaWRhX2FsbG9jX21heGAgZnVuY3Rpb24uIFRoaXMgd291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG5UaGUgcGF0Y2ggSSdtIHJldmlld2luZyBhZGRyZXNzZXMgdGhpcyBwcmVjaXNlbHkuIEl0IGFkZHMgYSBjaGVjayBpbiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB0aGF0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIGBtYXhgIHZhbHVlLiBJZiBpdCdzIHplcm8sIHRoZSBjb2RlIG5vdyByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UsIFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXCIgVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIHByZXZlbnQgdGhhdCBwb3RlbnRpYWwgaW50ZWdlciB1bmRlcmZsb3cuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGBVTklYOThfUFRZU2AgdG8gZW5zdXJlIHRoaXMgaXMgcHJvcGVybHkgZW5hYmxlZC4gTGV0J3Mgc2VlIGlmIHdlJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MjAuNzYzNjcwNzc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwNzM2NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVTklYOThfUFRZU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS9LY29uZmlnPTc4PWNvbmZpZyBWVF9IV19DT05TT0xFX0JJTkRJTkdcXG4tLVxcbmRyaXZlcnMvdHR5L0tjb25maWctOTMtXFxuZHJpdmVycy90dHkvS2NvbmZpZzo5NDpjb25maWcgVU5JWDk4X1BUWVNcXG5kcml2ZXJzL3R0eS9LY29uZmlnLTk1LVxcdGJvb2wgXFxcIlVuaXg5OCBQVFkgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIxOjIyLjk2NDQxMzA2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTUyNzk4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0dHkvS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy90dHkvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmUgOTMgYW5kIHRoZSBzdXJyb3VuZGluZyBhcmVhLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gd2lsbCBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBUVFkgZHJpdmVycywgYW5kIEkgbmVlZCB0byByZXZpZXcgdGhlbSB0byB1bmRlcnN0YW5kIHdoYXQncyBhdmFpbGFibGUgYW5kIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmbGFncywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3MuIFRoaXMgZmlsZSBzaG91bGQgYmUgYSBrZXkgc291cmNlIGZvciBmaWd1cmluZyBvdXQgd2hpY2ggVFRZIGRyaXZlciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCwgYW5kIEkgd2FudCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBvc3NpYmxlIHZhcmlhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMToyNC45MTcyMTQ0MThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy90dHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY29uc29sZS5yc3RcXHUwMDNlIGZvciBtb3JlXFxuICA5MTpcXHRcXHQgIGluZm9ybWF0aW9uLiBGb3IgZnJhbWVidWZmZXIgY29uc29sZSB1c2VycywgcGxlYXNlIHJlZmVyIHRvXFxuICA5MjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmIvZmJjb24ucnN0XFx1MDAzZS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0Y29uZmlnIFVOSVg5OF9QVFlTXFxuICA5NTpcXHRcXHRib29sIFxcXCJVbml4OTggUFRZIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgOTY6XFx0XFx0ZGVmYXVsdCB5XFxuICA5NzpcXHRcXHRoZWxwXFxuICA5ODpcXHRcXHQgIEEgcHNldWRvIHRlcm1pbmFsIChQVFkpIGlzIGEgc29mdHdhcmUgZGV2aWNlIGNvbnNpc3Rpbmcgb2YgdHdvXFxuICA5OTpcXHRcXHQgIGhhbHZlczogYSBtYXN0ZXIgYW5kIGEgc2xhdmUuIFRoZSBzbGF2ZSBkZXZpY2UgYmVoYXZlcyBpZGVudGljYWwgdG9cXG4gMTAwOlxcdFxcdCAgYSBwaHlzaWNhbCB0ZXJtaW5hbDsgdGhlIG1hc3RlciBkZXZpY2UgaXMgdXNlZCBieSBhIHByb2Nlc3MgdG9cXG4gMTAxOlxcdFxcdCAgcmVhZCBkYXRhIGZyb20gYW5kIHdyaXRlIGRhdGEgdG8gdGhlIHNsYXZlLCB0aGVyZWJ5IGVtdWxhdGluZyBhXFxuIDEwMjpcXHRcXHQgIHRlcm1pbmFsLiBUeXBpY2FsIHByb2dyYW1zIGZvciB0aGUgbWFzdGVyIHNpZGUgYXJlIHRlbG5ldCBzZXJ2ZXJzXFxuIDEwMzpcXHRcXHQgIGFuZCB4dGVybXMuXFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdCAgTGludXggaGFzIHRyYWRpdGlvbmFsbHkgdXNlZCB0aGUgQlNELWxpa2UgbmFtZXMgL2Rldi9wdHl4eCBmb3JcXG4gMTA2OlxcdFxcdCAgbWFzdGVycyBhbmQgL2Rldi90dHl4eCBmb3Igc2xhdmVzIG9mIHBzZXVkbyB0ZXJtaW5hbHMuIFRoaXMgc2NoZW1lXFxuIDEwNzpcXHRcXHQgIGhhcyBhIG51bWJlciBvZiBwcm9ibGVtcy4gVGhlIEdOVSBDIGxpYnJhcnkgZ2xpYmMgMi4xIGFuZCBsYXRlcixcXG4gMTA4OlxcdFxcdCAgaG93ZXZlciwgc3VwcG9ydHMgdGhlIFVuaXg5OCBuYW1pbmcgc3RhbmRhcmQ6IGluIG9yZGVyIHRvIGFjcXVpcmUgYVxcbiAxMDk6XFx0XFx0ICBwc2V1ZG8gdGVybWluYWwsIGEgcHJvY2VzcyBvcGVucyAvZGV2L3B0bXg7IHRoZSBudW1iZXIgb2YgdGhlIHBzZXVkb1xcbiAxMTA6XFx0XFx0ICB0ZXJtaW5hbCBpcyB0aGVuIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9jZXNzIGFuZCB0aGUgcHNldWRvXFxuIDExMTpcXHRcXHQgIHRlcm1pbmFsIHNsYXZlIGNhbiBiZSBhY2Nlc3NlZCBhcyAvZGV2L3B0cy9cXHUwMDNjbnVtYmVyXFx1MDAzZS4gV2hhdCB3YXNcXG4gMTEyOlxcdFxcdCAgdHJhZGl0aW9uYWxseSAvZGV2L3R0eXAyIHdpbGwgdGhlbiBiZSAvZGV2L3B0cy8yLCBmb3IgZXhhbXBsZS5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0ICBBbGwgbW9kZXJuIExpbnV4IHN5c3RlbXMgdXNlIHRoZSBVbml4OTggcHR5cy4gIFNheSBZIHVubGVzc1xcbiAxMTU6XFx0XFx0ICB5b3UncmUgb24gYW4gZW1iZWRkZWQgc3lzdGVtIGFuZCB3YW50IHRvIGNvbnNlcnZlIG1lbW9yeS5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0Y29uZmlnIExFR0FDWV9QVFlTXFxuIDExODpcXHRcXHRib29sIFxcXCJMZWdhY3kgKEJTRCkgUFRZIHN1cHBvcnRcXFwiXFxuIDExOTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MjQuOTE3Mjk1NDI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMTg0Njc4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZGV2cHRzYCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGNhbiB3ZSBldmVuICpyZWFjaCogYGRldnB0c2AgaW4gYSB0eXBpY2FsIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50PyBZZXMsIG5vIHByb2JsZW0uIEl0J3MgdGhlIHN0YW5kYXJkIGAvZGV2L3B0c2AgZmlsZXN5c3RlbSwgbW91bnRlZCB1c2luZyBzdGFuZGFyZCBtZXRob2RzIGxpa2UgYG1vdW50YCB3aXRoIG9wdGlvbnMsIG9yIHRocm91Z2ggYGZzY29uZmlnYCBvciBgZnNvcGVuYCBzeXNjYWxscy4gVW5wcml2aWxlZ2VkIHVzZXJzIGNhbiBhY2Nlc3MgaXQgdGhhbmtzIHRvIGBGU19VU0VSTlNfTU9VTlRgLCBzbyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gQ2hlY2suXG5cbk5vdyBmb3IgdGhlIGNyaXRlcmlhOlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRob3NlIFZGUyBzeXNjYWxscy4gVGljay5cbiogICAqKkNvZGUgTW9kaWZpY2F0aW9uPyoqIFllcywgdGhlIGtleSBpcyBgZGV2cHRzX3BhcnNlX3BhcmFtYCBpbiBgZnMvZGV2cHRzL2lub2RlLmNgLiBUaGF0J3Mgd2hlcmUgd2Ugd2FudCB0byBmb2N1cy5cbiogICAqKldvcnRoRnV6emluZz8qKiBBYnNvbHV0ZWx5LCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5leHQsIHRoZSBzcGVjaWZpY3M6IEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy5cblxuV2UnbGwgZGVmaW5pdGVseSBuZWVkIHRoZSBgVU5JWDk4X1BUWVNgIGNvbmZpZyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBgZnMvZGV2cHRzL01ha2VmaWxlYCwgdGhhdCdzIHRoZSBrZXkuXG5cbkZvciBGb2N1c1N5bWJvbHMsIHdlJ3JlIGRlZmluaXRlbHkgemVyb2luZyBpbiBvbiBgZGV2cHRzX3BhcnNlX3BhcmFtYC4gSSdsbCBjb25zaWRlciBgZGV2cHRzX3JlY29uZmlndXJlYCwgYGRldnB0c19maWxsX3N1cGVyYCwgYW5kIGBkZXZwdHNfbmV3X2luZGV4YCwgYW5kIGBkZXZwdHNfaW5pdF9mc19jb250ZXh0YCBhcyBwb3NzaWJsZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBleGFtaW5lLlxuXG5gZGV2cHRzX3BhcnNlX3BhcmFtYCBsb29rcyBsaWtlIHRoZSBwcmltZSB0YXJnZXQgYmVjYXVzZSB0aGF0J3MgdGhlIG9uZSB0aGF0J3MgYWN0dWFsbHkgbW9kaWZpZWQuIE5vdywgaXMgYGRldnB0c19wYXJzZV9wYXJhbWAgc3RhdGljPyBZZXMsIGFuZCBpdCdzIHJlZmVyZW5jZWQgYnkgcG9pbnRlciBpbiBgZGV2cHRzX2NvbnRleHRfb3BzLnBhcnNlX3BhcmFtID0gZGV2cHRzX3BhcnNlX3BhcmFtYCB3aGljaCBtZWFucyBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gT2theSwgdGhhdCdzIGdvb2QuXG5cbkxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIG90aGVyIHN5bWJvbHMgaW4gYGZzL2RldnB0cy9pbm9kZS5jYDogWWVwLCBgZGV2cHRzX3BhcnNlX3BhcmFtYCwgYGRldnB0c19uZXdfaW5kZXhgLCBgZGV2cHRzX3JlY29uZmlndXJlYCwgYW5kIGBkZXZwdHNfZmlsbF9zdXBlcmAuXG5cbkZpbmFsbHksIGNvbmZpcm0gYFVOSVg5OF9QVFlTYCBpcyB0aGUgb25seSBjb25maWc6IHRoZSBgTWFrZWZpbGVgIGNvbmZpcm1zIGl0LiBOb3RoaW5nIGVsc2UgaXMgaW4gYGZzL2RldnB0c2AgdGhhdCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLlxuXG5TbywgaW4gc3VtbWFyeTogYGRldnB0c19wYXJzZV9wYXJhbWAgd2l0aCBgVU5JWDk4X1BUWVNgIGVuYWJsZWQgaXMgb3VyIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSdsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBidXQgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgdGhlIGNvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDEwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzAuMjM1NzY1NTM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJmcy9kZXZwdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiaW5vZGUuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTozMC4yMzU4MTAyMzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4Mjk4MTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgZGV2cHRzIE1vdW50IFBhcmFtZXRlciBQYXJzZXIqKlxuXG5Pa2F5LCBzbyB0aGUgc2NvcGUgaXMgcmVhbGx5IGp1c3QgYGlub2RlLmNgIOKAkyB0aGF0J3MgdGhlIHByaW1hcnkgdGFyZ2V0LiBCZWZvcmUgZGl2aW5nIGluLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGtub3cgYFVOSVg5OF9QVFlTYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3R0eS9LY29uZmlnYCwgYnV0IHRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCB0aGluZy4gQW5kLCBvZiBjb3Vyc2UsIGBUVFlgIGlzIGVzc2VudGlhbGx5IGltcGxpZWQgYnkgYSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvcmUgcmVhc29uaW5nLiBFc3NlbnRpYWxseSwgSSdtIG1vZGlmeWluZyB0aGUgYGRldnB0c19wYXJzZV9wYXJhbWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyByZWplY3RpbmcgYSBgbWF4PTBgIHBhcmFtZXRlci4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGRldnB0cyBpcyBhIGNvcmUgcHNldWRvLWZpbGVzeXN0ZW0uIEl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBtb3VudCwgZnNvcGVuLCBhbmQgZnNjb25maWcgc3lzY2FsbHMsIHdoaWNoIG1lYW5zIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCeSBjcmFmdGluZyB0ZXN0cyB0aGF0IGludGVyYWN0IHdpdGggcHRzIGFsbG9jYXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbW91bnQvcmVtb3VudCBwYXJhbWV0ZXJzLCB3ZSBjYW4gcHJvYmUgZm9yIHZ1bG5lcmFiaWxpdGllcy5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGVzc2VudGlhbHMuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTksIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTozMy4zMTg3OTM3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDQ2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYOThfUFRZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnB0c19wYXJzZV9wYXJhbVwiLFxuICAgIFwiZGV2cHRzX3JlY29uZmlndXJlXCIsXG4gICAgXCJkZXZwdHNfbmV3X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJ21heCcgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYOThfUFRZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnB0c19wYXJzZV9wYXJhbVwiLFxuICAgIFwiZGV2cHRzX3JlY29uZmlndXJlXCIsXG4gICAgXCJkZXZwdHNfbmV3X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJ21heCcgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzMuMzk1ODQ2NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTY0MjgwMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzMuMzk2MzE4NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzk2MzgwNTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVxcdTAwM2Vtb3VudF9vcHRzLm1heCAtIDEsIC4uLilgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWE2ZDRkYzEzNGNjNDZjNGQ4ZmY0MjY2N2RiZjkxZWI3ZjY2MzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNToxOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmNcbmluZGV4IDk4NDRkY2YzNTRlZTkuLmJkMWU4ZWIyNmVkYjcgMTAwNjQ0XG4tLS0gYS9mcy9kZXZwdHMvaW5vZGUuY1xuKysrIGIvZnMvZGV2cHRzL2lub2RlLmNcbkBAIC0yNDksNiArMjQ5LDggQEAgc3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiBcdGNhc2UgT3B0X21heDpcbiBcdFx0aWYgKHJlc3VsdC51aW50XzMyIFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcbiBcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcIm1heCBvdXQgb2YgcmFuZ2VcIik7XG4rXHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuK1x0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gXHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzMuMzk2MzE5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODAyMTM1ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGV2cHRzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYGZzL2RldnB0cy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRldnB0c19wYXJzZV9wYXJhbWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrOiBpZiBgb3B0cy1cdTAwM2VtYXhgICh3aGljaCBJIGFzc3VtZSBpcyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUgZGV2cHRzIGZpbGVzeXN0ZW0pIGlzIHNldCB0byB6ZXJvLCB0aGVuIHRoZSBtb3VudCBvcGVyYXRpb24gc2hvdWxkIGZhaWwuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBlbmZvcmNpbmcgdGhhdCBgbWF4YCBiZSBncmVhdGVyIHRoYW4gemVybz8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYSB6ZXJvIHZhbHVlIHdvdWxkIHByb2JhYmx5IGxlYWQgdG8gaXNzdWVzLCBsaWtlIHByZXZlbnRpbmcgdGhlIGNyZWF0aW9uIG9mIG5ldyBwc2V1ZG8tdGVybWluYWxzLCBvciBjYXVzaW5nIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIHNvbWV3aGVyZSBkb3duc3RyZWFtIHdoZW4gY2FsY3VsYXRpbmcgbGltaXRzLiBJdCdzIGEgc2Vuc2libGUgYWRkaXRpb24sIHByZXZlbnRpbmcgYSBsaWtlbHkgZWRnZSBjYXNlLlxuXG5UbyBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgdGhlIGZ1bGwgY29udGV4dC4gSSdsbCBjaGVjayBgZnMvZGV2cHRzL2lub2RlLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgY2FsbGVkLCBob3cgYG9wdHMtXHUwMDNlbWF4YCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIG1vZHVsZSwgYW5kIHdoYXQgb3RoZXIgcGFyYW1ldGVycyB0aGUgZmlsZXN5c3RlbSBhY2NlcHRzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYWRkaXRpb24gaXMgY29tcGxldGVseSBpc29sYXRlZCBvciBpZiBpdCBoYXMgc29tZSByaXBwbGUgZWZmZWN0IG9uIG90aGVyIHBvcnRpb25zIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHRoYXQgbWlnaHQgaW1wbGljaXRseSBkZXBlbmQgb24gdGhlcmUgYmVpbmcgKnNvbWUqIGFsbG93YWJsZSB2YWx1ZSBmb3IgYG1heGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTo0My4xOTg0NTc5OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGV2cHRzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIwOlxcdCAqL1xcbiAyMjE6XFx0c3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4gMjIyOlxcdHtcXG4gMjIzOlxcdFxcdHN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4gMjI0OlxcdFxcdHN0cnVjdCBwdHNfbW91bnRfb3B0cyAqb3B0cyA9IFxcdTAwMjZmc2ktXFx1MDAzZW1vdW50X29wdHM7XFxuIDIyNTpcXHRcXHRzdHJ1Y3QgZnNfcGFyc2VfcmVzdWx0IHJlc3VsdDtcXG4gMjI2OlxcdFxcdGludCBvcHQ7XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdG9wdCA9IGZzX3BhcnNlKGZjLCBkZXZwdHNfcGFyYW1fc3BlY3MsIHBhcmFtLCBcXHUwMDI2cmVzdWx0KTtcXG4gMjI5OlxcdFxcdGlmIChvcHQgXFx1MDAzYyAwKVxcbiAyMzA6XFx0XFx0XFx0cmV0dXJuIG9wdDtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gMjMzOlxcdFxcdGNhc2UgT3B0X3VpZDpcXG4gMjM0OlxcdFxcdFxcdG9wdHMtXFx1MDAzZXVpZCA9IHJlc3VsdC51aWQ7XFxuIDIzNTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VzZXR1aWQgPSAxO1xcbiAyMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDIzNzpcXHRcXHRjYXNlIE9wdF9naWQ6XFxuIDIzODpcXHRcXHRcXHRvcHRzLVxcdTAwM2VnaWQgPSByZXN1bHQuZ2lkO1xcbiAyMzk6XFx0XFx0XFx0b3B0cy1cXHUwMDNlc2V0Z2lkID0gMTtcXG4gMjQwOlxcdFxcdFxcdGJyZWFrO1xcbiAyNDE6XFx0XFx0Y2FzZSBPcHRfbW9kZTpcXG4gMjQyOlxcdFxcdFxcdG9wdHMtXFx1MDAzZW1vZGUgPSByZXN1bHQudWludF8zMiBcXHUwMDI2IFNfSUFMTFVHTztcXG4gMjQzOlxcdFxcdFxcdGJyZWFrO1xcbiAyNDQ6XFx0XFx0Y2FzZSBPcHRfcHRteG1vZGU6XFxuIDI0NTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VwdG14bW9kZSA9IHJlc3VsdC51aW50XzMyIFxcdTAwMjYgU19JQUxMVUdPO1xcbiAyNDY6XFx0XFx0XFx0YnJlYWs7XFxuIDI0NzpcXHRcXHRjYXNlIE9wdF9uZXdpbnN0YW5jZTpcXG4gMjQ4OlxcdFxcdFxcdGJyZWFrO1xcbiAyNDk6XFx0XFx0Y2FzZSBPcHRfbWF4OlxcbiAyNTA6XFx0XFx0XFx0aWYgKHJlc3VsdC51aW50XzMyIFxcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXFxuIDI1MTpcXHRcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG91dCBvZiByYW5nZVxcXCIpO1xcbiAyNTI6XFx0XFx0XFx0aWYgKHJlc3VsdC51aW50XzMyID09IDApXFxuIDI1MzpcXHRcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcXFwiKTtcXG4gMjU0OlxcdFxcdFxcdG9wdHMtXFx1MDAzZW1heCA9IHJlc3VsdC51aW50XzMyO1xcbiAyNTU6XFx0XFx0XFx0YnJlYWs7XFxuIDI1NjpcXHRcXHR9XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdHJldHVybiAwO1xcbiAyNTk6XFx0fVxcbiAyNjA6XFx0XFxuIDI2MTpcXHRzdGF0aWMgaW50IG1rbm9kX3B0bXgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiAyNjI6XFx0e1xcbiAyNjM6XFx0XFx0aW50IG1vZGU7XFxuIDI2NDpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuIDI2NTpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiAyNjY6XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdCA9IHNiLVxcdTAwM2VzX3Jvb3Q7XFxuIDI2NzpcXHRcXHRzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSA9IERFVlBUU19TQihzYik7XFxuIDI2ODpcXHRcXHRzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHMgPSBcXHUwMDI2ZnNpLVxcdTAwM2Vtb3VudF9vcHRzO1xcbiAyNjk6XFx0XFx0a3VpZF90IHB0bXhfdWlkID0gY3VycmVudF9mc3VpZCgpO1xcbiAyNzA6XFx0XFx0a2dpZF90IHB0bXhfZ2lkID0gY3VycmVudF9mc2dpZCgpO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRkZW50cnkgPSBzaW1wbGVfc3RhcnRfY3JlYXRpbmcocm9vdCwgXFxcInB0bXhcXFwiKTtcXG4gMjczOlxcdFxcdGlmIChJU19FUlIoZGVudHJ5KSkge1xcbiAyNzQ6XFx0XFx0XFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gYWxsb2MgZGVudHJ5IGZvciBwdG14IG5vZGVcXFxcblxcXCIpO1xcbiAyNzU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGVudHJ5KTtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0LypcXG4gMjc5OlxcdFxcdCAqIENyZWF0ZSBhIG5ldyAncHRteCcgbm9kZSBpbiB0aGlzIG1vdW50IG9mIGRldnB0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6NDMuMTk4NTI5NzUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjgzNzI0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgb3B0cy1cdTAwM2VtYXhgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYG9wdHMtXHUwMDNlbWF4YCB2YXJpYWJsZS4gV2hlcmUncyBpdCBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGBkZXZwdHNgIGNvZGU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW5mbHVlbmNlLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gZmlyZSB1cCBgZ3JlcGAgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5zdGFuY2Ugb2YgYC1cdTAwM2VtYXhgIG9yLCB0byBiZSBzdXBlciBzcGVjaWZpYywgYG9wdHMtXHUwMDNlbWF4YCwgc2luY2UgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIGV4YWN0IG1lbWJlciBpcyBhY2Nlc3NlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhpcyB2YWx1ZSBpcyBiZWluZyB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBwcm9qZWN0LiBUaGUgZ29hbCBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGltcGFjdCBvZiBgb3B0cy1cdTAwM2VtYXhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTo0NS40MjY5MDU4MzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTUyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kZXZwdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGV2cHRzL2lub2RlLmM9NDU9c3RhdGljIGludCBwdHlfbGltaXRfbWluO1xcbmZzL2RldnB0cy9pbm9kZS5jOjQ2OnN0YXRpYyBpbnQgcHR5X2xpbWl0X21heCA9IElOVF9NQVg7XFxuZnMvZGV2cHRzL2lub2RlLmMtNDctc3RhdGljIGF0b21pY190IHB0eV9jb3VudCA9IEFUT01JQ19JTklUKDApO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgcHR5X3RhYmxlW10gPSB7XFxuZnMvZGV2cHRzL2lub2RlLmMtNTAtXFx0e1xcbmZzL2RldnB0cy9pbm9kZS5jOjUxOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm1heFxcXCIsXFxuZnMvZGV2cHRzL2lub2RlLmM6NTI6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKGludCksXFxuZnMvZGV2cHRzL2lub2RlLmMtNTMtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuZnMvZGV2cHRzL2lub2RlLmMtNTQtXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZwdHlfbGltaXQsXFxuZnMvZGV2cHRzL2lub2RlLmM6NTU6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNTYtXFx0XFx0LmV4dHJhMVxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9taW4sXFxuZnMvZGV2cHRzL2lub2RlLmM6NTc6XFx0XFx0LmV4dHJhMlxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNTgtXFx0fSwge1xcbmZzL2RldnB0cy9pbm9kZS5jLTU5LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInJlc2VydmVcXFwiLFxcbmZzL2RldnB0cy9pbm9kZS5jOjYwOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbmZzL2RldnB0cy9pbm9kZS5jLTYxLVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbmZzL2RldnB0cy9pbm9kZS5jLTYyLVxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cHR5X3Jlc2VydmUsXFxuZnMvZGV2cHRzL2lub2RlLmM6NjM6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNjQtXFx0XFx0LmV4dHJhMVxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9taW4sXFxuZnMvZGV2cHRzL2lub2RlLmM6NjU6XFx0XFx0LmV4dHJhMlxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNjYtXFx0fSwge1xcbmZzL2RldnB0cy9pbm9kZS5jLTY3LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm5yXFxcIixcXG5mcy9kZXZwdHMvaW5vZGUuYzo2ODpcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG5mcy9kZXZwdHMvaW5vZGUuYy02OS1cXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTc1PXN0cnVjdCBwdHNfbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy04Mi1cXHRpbnQgcmVzZXJ2ZTtcXG5mcy9kZXZwdHMvaW5vZGUuYzo4MzpcXHRpbnQgbWF4O1xcbmZzL2RldnB0cy9pbm9kZS5jLTg0LX07XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz04Nj1lbnVtIHtcXG5mcy9kZXZwdHMvaW5vZGUuYzo4NzpcXHRPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfbW9kZSwgT3B0X3B0bXhtb2RlLCBPcHRfbmV3aW5zdGFuY2UsICBPcHRfbWF4LFxcbmZzL2RldnB0cy9pbm9kZS5jLTg4LVxcdE9wdF9lcnJcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZGV2cHRzX3BhcmFtX3NwZWNzW10gPSB7XFxuZnMvZGV2cHRzL2lub2RlLmMtOTItXFx0ZnNwYXJhbV9naWRcXHQoXFxcImdpZFxcXCIsXFx0XFx0T3B0X2dpZCksXFxuZnMvZGV2cHRzL2lub2RlLmM6OTM6XFx0ZnNwYXJhbV9zMzJcXHQoXFxcIm1heFxcXCIsXFx0XFx0T3B0X21heCksXFxuZnMvZGV2cHRzL2lub2RlLmMtOTQtXFx0ZnNwYXJhbV91MzJvY3RcXHQoXFxcIm1vZGVcXFwiLFxcdE9wdF9tb2RlKSxcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTIyMT1zdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMjQ4LVxcdFxcdGJyZWFrO1xcbmZzL2RldnB0cy9pbm9kZS5jOjI0OTpcXHRjYXNlIE9wdF9tYXg6XFxuZnMvZGV2cHRzL2lub2RlLmMtMjUwLVxcdFxcdGlmIChyZXN1bHQudWludF8zMiBcXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxcbmZzL2RldnB0cy9pbm9kZS5jOjI1MTpcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG91dCBvZiByYW5nZVxcXCIpO1xcbmZzL2RldnB0cy9pbm9kZS5jLTI1Mi1cXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgPT0gMClcXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTM6XFx0XFx0XFx0cmV0dXJuIGludmFsZihmYywgXFxcIm1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXFxcIik7XFxuZnMvZGV2cHRzL2lub2RlLmM6MjU0OlxcdFxcdG9wdHMtXFx1MDAzZW1heCA9IHJlc3VsdC51aW50XzMyO1xcbmZzL2RldnB0cy9pbm9kZS5jLTI1NS1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTMwOT1zdGF0aWMgaW50IGRldnB0c19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0zMjQtXFx0ZnNpLVxcdTAwM2Vtb3VudF9vcHRzLnB0bXhtb2RlXFx0PSBuZXctXFx1MDAzZW1vdW50X29wdHMucHRteG1vZGU7XFxuZnMvZGV2cHRzL2lub2RlLmM6MzI1OlxcdGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXhcXHRcXHQ9IG5ldy1cXHUwMDNlbW91bnRfb3B0cy5tYXg7XFxuZnMvZGV2cHRzL2lub2RlLmMtMzI2LVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9MzM4PXN0YXRpYyBpbnQgZGV2cHRzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTM1MC1cXHRzZXFfcHJpbnRmKHNlcSwgXFxcIixwdG14bW9kZT0lMDNvXFxcIiwgb3B0cy1cXHUwMDNlcHRteG1vZGUpO1xcbmZzL2RldnB0cy9pbm9kZS5jOjM1MTpcXHRpZiAob3B0cy1cXHUwMDNlbWF4IFxcdTAwM2MgTlJfVU5JWDk4X1BUWV9NQVgpXFxuZnMvZGV2cHRzL2lub2RlLmM6MzUyOlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiLG1heD0lZFxcXCIsIG9wdHMtXFx1MDAzZW1heCk7XFxuZnMvZGV2cHRzL2lub2RlLmMtMzUzLVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9NDIxPXN0YXRpYyBpbnQgZGV2cHRzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00MzMtXFx0ZnNpLVxcdTAwM2Vtb3VudF9vcHRzLnB0bXhtb2RlID0gREVWUFRTX0RFRkFVTFRfUFRNWF9NT0RFO1xcbmZzL2RldnB0cy9pbm9kZS5jOjQzNDpcXHRmc2ktXFx1MDAzZW1vdW50X29wdHMubWF4ICAgICA9IE5SX1VOSVg5OF9QVFlfTUFYO1xcbmZzL2RldnB0cy9pbm9kZS5jLTQzNS1cXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTQ2OD1pbnQgZGV2cHRzX25ld19pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ3NS1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0NzY6XFx0aW5kZXggPSBpZGFfYWxsb2NfbWF4KFxcdTAwMjZmc2ktXFx1MDAzZWFsbG9jYXRlZF9wdHlzLCBmc2ktXFx1MDAzZW1vdW50X29wdHMubWF4IC0gMSxcXG5mcy9kZXZwdHMvaW5vZGUuYy00NzctXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIxOjQ1LjQ3NDA2NjQ4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg2MDM5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IGBkZXZwdHNfbmV3X2luZGV4YCBWdWxuZXJhYmlsaXR5IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGRldnB0c19uZXdfaW5kZXhgIGFuZCB0aGUgcG90ZW50aWFsIGlzc3VlIHN1cnJvdW5kaW5nIHRoZSBgbWF4YCBtb3VudCBvcHRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBob3cgYGlkYV9hbGxvY19tYXhgIGhhbmRsZXMgaXRzIGlucHV0LiBTcGVjaWZpY2FsbHksIGlmIGBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXhgIGlzIHplcm8sIHdlJ2QgaGF2ZSBhbiB1bmRlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIGAwIC0gMWAsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWxseSBpbnZhbGlkIGBpZGFfYWxsb2NfbWF4YCBjYWxsLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWF4YCBpcyB2YWxpZGF0ZWQgZHVyaW5nIHRoZSBtb3VudCBvcHRpb24gcGFyc2luZy5cblxuVGhlIHBhdGNoJ3MgYWRkaXRpb24gY2hlY2tzIGZvciBhIGBtYXhgIHZhbHVlIG9mIHplcm8uIElmIGl0IGlzLCB0aGUgbW91bnQgZmFpbHMsIHJldHVybmluZyBhbiBcImludmFsaWQgbWF4XCIgZXJyb3IuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPyBTcGVjaWZpY2FsbHksIGFtIEkgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIGluZm9ybWF0aW9uLCBsZWF2aW5nIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgbWVzc2luZyB3aXRoIHBhZGRpbmcsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZDogTm9wZSwgdGhpcyBvbmx5IHZhbGlkYXRlcyBhbiBpbnRlZ2VyIG1vdW50IHBhcmFtZXRlci5cblxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBObywgdGhlIGByZXN1bHRgIHZhcmlhYmxlIGlzIHBvcHVsYXRlZCB2aWEgYGZzX3BhcnNlYCwgc28gaXQncyBpbml0aWFsaXplZC5cblxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXI6IE5vLCBhZ2FpbiwgdGhpcyBpcyBzaW1wbHkgaW5wdXQgdmFsaWRhdGlvbiBvZiBhIHNpbmdsZSBpbnRlZ2VyLlxuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBsZXRzIHN1cnJvdW5kaW5nIGNvZGUgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6IEFic29sdXRlbHkgbm90LiBUaGlzIGlzIHN0cmFpZ2h0IGlucHV0IHZhbGlkYXRpb24sIGFuZCBgcmVzdWx0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIHRob3JvdWdoIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGlucHV0IHZhbGlkYXRpb24gZml4LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBoZXJlLCBhbmQgaXQncyBhIHZlcnkgY2xlYXItY3V0IGNhc2Ugb2Ygc2ltcGxlIGlucHV0IHZhbGlkYXRpb24uIFRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjcsIk91dHB1dFRva2VucyI6MTQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIxOjUxLjM2MDEwNzg5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVxcdTAwM2Vtb3VudF9vcHRzLm1heCAtIDEsIC4uLilgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGlucHV0IHZhbGlkYXRpb24gY2hlY2sgaW4gYGRldnB0c19wYXJzZV9wYXJhbWAgdG8gcmVqZWN0IGEgbW91bnQgb3B0aW9uIHZhbHVlIG9mIGBtYXg9MGAgKGBtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMGApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCB1bmRlcmZsb3cgaW4gYGlkYV9hbGxvY19tYXgoLi4uLCBmc2ktXFx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgLi4uKWAuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGxvZ2ljIG9uIHBhcnNlZCBpbnRlZ2Vycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzttt7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 04:12:26 +0000 UTC FinishedAt: 2026-09-04 05:21:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX98_PTYS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX98_PTYS" ], "series_id": "7147fe7f-66db-48cc-a8d0-fdc863fe27f2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "devpts_parse_param", "devpts_reconfigure", "devpts_new_index" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVg5OF9QVFlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2cHRzX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2RldnB0c19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfbmV3X2luZGV4JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgLi4uKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJiMzOTttYXgmIzM5OyBtb3VudCBwYXJhbWV0ZXIgaXMgbm9uLXplcm8uIFRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyByZWFjaGFibGUgdmlhIG1vdW50IGFuZCBmc29wZW4vZnNjb25maWcgc3lzY2FsbHMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTFhNmQ0ZGMxMzRjYzQ2YzRkOGZmNDI2NjdkYmY5MWViN2Y2NjMwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MTk6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuY1xuaW5kZXggOTg0NGRjZjM1NGVlOS4uYmQxZThlYjI2ZWRiNyAxMDA2NDRcbi0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9kZXZwdHMvaW5vZGUuY1xuQEAgLTI0OSw2ICYjNDM7MjQ5LDggQEAgc3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiBcdGNhc2UgT3B0X21heDpcbiBcdFx0aWYgKHJlc3VsdC51aW50XzMyIFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcbiBcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwmIzM0Oyk7XG4gXHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG4gXHRcdGJyZWFrO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVg5OF9QVFlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2cHRzX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2RldnB0c19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfbmV3X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcmFtZXRlciBwYXJzaW5nIGxvZ2ljIGluIGRldnB0c19wYXJzZV9wYXJhbSAoZnMvZGV2cHRzL2lub2RlLmMpIHRvIHZhbGlkYXRlIHRoYXQgdGhlICYjMzk7bWF4JiMzOTsgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExYTZkNGRjMTM0Y2M0NmM0ZDhmZjQyNjY3ZGJmOTFlYjdmNjYzMDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA1OjE5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuYwppbmRleCA5ODQ0ZGNmMzU0ZWU5Li5iZDFlOGViMjZlZGI3IDEwMDY0NAotLS0gYS9mcy9kZXZwdHMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kZXZwdHMvaW5vZGUuYwpAQCAtMjQ5LDYgJiM0MzsyNDksOCBAQCBzdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKQogCWNhc2UgT3B0X21heDoKIAkJaWYgKHJlc3VsdC51aW50XzMyICZndDsgTlJfVU5JWDk4X1BUWV9NQVgpCiAJCQlyZXR1cm4gaW52YWxmKGZjLCAmIzM0O21heCBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiYjNDM7CQlpZiAocmVzdWx0LnVpbnRfMzIgPT0gMCkKJiM0MzsJCQlyZXR1cm4gaW52YWxmKGZjLCAmIzM0O21heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJiMzNDspOwogCQlvcHRzLSZndDttYXggPSByZXN1bHQudWludF8zMjsKIAkJYnJlYWs7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgZGV2cHRzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHNlZSBhIGBkZXZwdHMvaW5vZGUuY2AgY2hhbmdlLCB3aGljaCBzdWdnZXN0cyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgcHNldWRvLXRlcm1pbmFsIGZpbGVzeXN0ZW0uIFRoZSBkaWZmIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IGFkZHMgYSBjaGVjayB3aXRoaW4gYGRldnB0c19wYXJzZV9wYXJhbWAgd2hlbiBoYW5kbGluZyB0aGUgYE9wdF9tYXhgIHBhcmFtZXRlci4gU3BlY2lmaWNhbGx5LCBpdCBub3cgdmFsaWRhdGVzIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBzZXVkby10ZXJtaW5hbHMgYWxsb3dlZCAoYG9wdHMtJmd0O21heGApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBIHplcm8gdmFsdWUgaXMgbm93IGNvbnNpZGVyZWQgaW52YWxpZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGNvbmZpZyBvcHRpb25zIGVuYWJsZSBgZnMvZGV2cHRzL2lub2RlLmNgIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGBPcHRfbWF4YCBwYXJhbWV0ZXIgYmVpbmcgcGFyc2VkLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIGNvZGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBhIHJlYXNvbmFibGUgZml4IGZvciBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGV2cHRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RldnB0cy9NYWtlZmlsZS01LVxuZnMvZGV2cHRzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1VOSVg5OF9QVFlTKVx0XHQmIzQzOz0gZGV2cHRzLm9cbmZzL2RldnB0cy9NYWtlZmlsZS03LVxuZnMvZGV2cHRzL01ha2VmaWxlOjg6ZGV2cHRzLSQoQ09ORklHX1VOSVg5OF9QVFlTKVx0XHQ6PSBpbm9kZS5vXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMy0gKlxuZnMvZGV2cHRzL2lub2RlLmM6NDogKiBsaW51eC9mcy9kZXZwdHMvaW5vZGUuY1xuZnMvZGV2cHRzL2lub2RlLmMtNS0gKlxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTI0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZwdHNfZnMuaFx1MDAzZVxuZnMvZGV2cHRzL2lub2RlLmMtMjYtI2luY2x1ZGUgXHUwMDNjbGludXgvZnNub3RpZnkuaFx1MDAzZVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTg2PWVudW0ge1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTkwLVxuZnMvZGV2cHRzL2lub2RlLmM6OTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBkZXZwdHNfcGFyYW1fc3BlY3NbXSA9IHtcbmZzL2RldnB0cy9pbm9kZS5jLTkyLVx0ZnNwYXJhbV9naWRcdChcJiMzNDtnaWRcJiMzNDssXHRcdE9wdF9naWQpLFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTEwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBwdHNfZnNfaW5mbyAqREVWUFRTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTEyLVxuZnMvZGV2cHRzL2lub2RlLmM6MTEzOnN0YXRpYyBpbnQgZGV2cHRzX3B0bXhfcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aClcbmZzL2RldnB0cy9pbm9kZS5jLTExNC17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTE3LVxuZnMvZGV2cHRzL2lub2RlLmM6MTE4Olx0LyogSXMgYSBkZXZwdHMgZmlsZXN5c3RlbSBhdCBcJiMzNDtwdHNcJiMzNDsgaW4gdGhlIHNhbWUgZGlyZWN0b3J5PyAqL1xuZnMvZGV2cHRzL2lub2RlLmMtMTE5LVx0ZXJyID0gcGF0aF9wdHMocGF0aCk7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTIyLVxuZnMvZGV2cHRzL2lub2RlLmM6MTIzOlx0LyogSXMgdGhlIHBhdGggdGhlIHJvb3Qgb2YgYSBkZXZwdHMgZmlsZXN5c3RlbT8gKi9cbmZzL2RldnB0cy9pbm9kZS5jLTEyNC1cdHNiID0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3NiO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTEzMi0vKlxuZnMvZGV2cHRzL2lub2RlLmM6MTMzOiAqIFRyeSB0byBmaW5kIGEgc3VpdGFibGUgZGV2cHRzIGZpbGVzeXN0ZW0uIFdlIHN1cHBvcnQgdGhlIGZvbGxvd2luZ1xuZnMvZGV2cHRzL2lub2RlLmMtMTM0LSAqIHNjZW5hcmlvczpcbmZzL2RldnB0cy9pbm9kZS5jOjEzNTogKiAtIFRoZSBwdG14IGRldmljZSBub2RlIGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBkZXZwdHNcbmZzL2RldnB0cy9pbm9kZS5jLTEzNi0gKiAgIG1vdW50IHdoZXJlIHRoZSBwdHMgZGV2aWNlIG5vZGVzIGFyZSBsb2NhdGVkLlxuZnMvZGV2cHRzL2lub2RlLmMtMTM3LSAqICAgVGhpcyBpcyBlLmcuIHRoZSBjYXNlIHdoZW4gY2FsbGluZyBvcGVuIG9uIHRoZSAvZGV2L3B0cy9wdG14IGRldmljZVxuZnMvZGV2cHRzL2lub2RlLmM6MTM4OiAqICAgbm9kZSB3aGVuIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGF0IC9kZXYvcHRzLlxuZnMvZGV2cHRzL2lub2RlLmM6MTM5OiAqIC0gVGhlIHB0bXggZGV2aWNlIG5vZGUgaXMgbG9jYXRlZCBvdXRzaWRlIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSBtb3VudFxuZnMvZGV2cHRzL2lub2RlLmMtMTQwLSAqICAgd2hlcmUgdGhlIHB0cyBkZXZpY2Ugbm9kZXMgYXJlIGxvY2F0ZWQuIEZvciBleGFtcGxlLCB0aGUgcHRteCBkZXZpY2Vcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xNDQtICogICBzdWJkaXJlY3RvcnkgY2FuIGJlIGZvdW5kIGluIHRoZSBjb21tb24gcGFyZW50IGRpcmVjdG9yeSAvZGV2IG9mIHRoZVxuZnMvZGV2cHRzL2lub2RlLmM6MTQ1OiAqICAgZGV2cHRzIG1vdW50IGFuZCB0aGUgcHRteCBiaW5kLW1vdW50LCBhZnRlciByZXNvbHZpbmcgdGhlIC9kZXYvcHRteFxuZnMvZGV2cHRzL2lub2RlLmMtMTQ2LSAqICAgYmluZC1tb3VudC5cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xNDktICovXG5mcy9kZXZwdHMvaW5vZGUuYzoxNTA6c3RydWN0IHZmc21vdW50ICpkZXZwdHNfbW50Z2V0KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbmZzL2RldnB0cy9pbm9kZS5jLTE1MS17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMTY0LVxuZnMvZGV2cHRzL2lub2RlLmM6MTY1Olx0LyogZGV2cHRzX3B0bXhfcGF0aCgpIGZpbmRzIGEgZGV2cHRzIGZzIG9yIHJldHVybnMgYW4gZXJyb3IuICovXG5mcy9kZXZwdHMvaW5vZGUuYy0xNjYtXHRpZiAoKHBhdGgubW50LVx1MDAzZW1udF9zYi1cdTAwM2VzX21hZ2ljICE9IERFVlBUU19TVVBFUl9NQUdJQykgfHxcbmZzL2RldnB0cy9pbm9kZS5jLTE2Ny1cdCAgICAoREVWUFRTX1NCKHBhdGgubW50LVx1MDAzZW1udF9zYikgIT0gZnNpKSlcbmZzL2RldnB0cy9pbm9kZS5jOjE2ODpcdFx0ZXJyID0gZGV2cHRzX3B0bXhfcGF0aChcdTAwMjZwYXRoKTtcbmZzL2RldnB0cy9pbm9kZS5jLTE2OS1cdGRwdXQocGF0aC5kZW50cnkpO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTE4MC1cbmZzL2RldnB0cy9pbm9kZS5jOjE4MTpzdHJ1Y3QgcHRzX2ZzX2luZm8gKmRldnB0c19hY3F1aXJlKHN0cnVjdCBmaWxlICpmaWxwKVxuZnMvZGV2cHRzL2lub2RlLmMtMTgyLXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xODktXG5mcy9kZXZwdHMvaW5vZGUuYzoxOTA6XHQvKiBIYXMgdGhlIGRldnB0cyBmaWxlc3lzdGVtIGFscmVhZHkgYmVlbiBmb3VuZD8gKi9cbmZzL2RldnB0cy9pbm9kZS5jLTE5MS1cdGlmIChwYXRoLm1udC1cdTAwM2VtbnRfc2ItXHUwMDNlc19tYWdpYyAhPSBERVZQVFNfU1VQRVJfTUFHSUMpIHtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0xOTMtXG5mcy9kZXZwdHMvaW5vZGUuYzoxOTQ6XHRcdGVyciA9IGRldnB0c19wdG14X3BhdGgoXHUwMDI2cGF0aCk7XG5mcy9kZXZwdHMvaW5vZGUuYy0xOTUtXHRcdGlmIChlcnIpIHtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0yMTItXG5mcy9kZXZwdHMvaW5vZGUuYzoyMTM6dm9pZCBkZXZwdHNfcmVsZWFzZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbmZzL2RldnB0cy9pbm9kZS5jLTIxNC17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMjE4LS8qXG5mcy9kZXZwdHMvaW5vZGUuYzoyMTk6ICogZGV2cHRzX3BhcnNlX3BhcmFtIC0gUGFyc2UgbW91bnQgcGFyYW1ldGVyc1xuZnMvZGV2cHRzL2lub2RlLmMtMjIwLSAqL1xuZnMvZGV2cHRzL2lub2RlLmM6MjIxOnN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG5mcy9kZXZwdHMvaW5vZGUuYy0yMjIte1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTIyNy1cbmZzL2RldnB0cy9pbm9kZS5jOjIyODpcdG9wdCA9IGZzX3BhcnNlKGZjLCBkZXZwdHNfcGFyYW1fc3BlY3MsIHBhcmFtLCBcdTAwMjZyZXN1bHQpO1xuZnMvZGV2cHRzL2lub2RlLmMtMjI5LVx0aWYgKG9wdCBcdTAwM2MgMClcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz0yNjE9c3RhdGljIGludCBta25vZF9wdG14KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0yNzgtXHQvKlxuZnMvZGV2cHRzL2lub2RlLmM6Mjc5Olx0ICogQ3JlYXRlIGEgbmV3ICYjMzk7cHRteCYjMzk7IG5vZGUgaW4gdGhpcyBtb3VudCBvZiBkZXZwdHMuXG5mcy9kZXZwdHMvaW5vZGUuYy0yODAtXHQgKi9cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz0zMDQ9c3RhdGljIHZvaWQgdXBkYXRlX3B0bXhfbW9kZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zMDgtXG5mcy9kZXZwdHMvaW5vZGUuYzozMDk6c3RhdGljIGludCBkZXZwdHNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZGV2cHRzL2lub2RlLmMtMzEwLXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zMzctXG5mcy9kZXZwdHMvaW5vZGUuYzozMzg6c3RhdGljIGludCBkZXZwdHNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuZnMvZGV2cHRzL2lub2RlLmMtMzM5LXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zNTYtXG5mcy9kZXZwdHMvaW5vZGUuYzozNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRldnB0c19zb3BzID0ge1xuZnMvZGV2cHRzL2lub2RlLmMtMzU4LVx0LnN0YXRmc1x0XHQ9IHNpbXBsZV9zdGF0ZnMsXG5mcy9kZXZwdHMvaW5vZGUuYzozNTk6XHQuc2hvd19vcHRpb25zXHQ9IGRldnB0c19zaG93X29wdGlvbnMsXG5mcy9kZXZwdHMvaW5vZGUuYy0zNjAtfTtcbmZzL2RldnB0cy9pbm9kZS5jLTM2MS1cbmZzL2RldnB0cy9pbm9kZS5jOjM2MjpzdGF0aWMgaW50IGRldnB0c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZGV2cHRzL2lub2RlLmMtMzYzLXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zNzAtXHRzLVx1MDAzZXNfbWFnaWMgPSBERVZQVFNfU1VQRVJfTUFHSUM7XG5mcy9kZXZwdHMvaW5vZGUuYzozNzE6XHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZkZXZwdHNfc29wcztcbmZzL2RldnB0cy9pbm9kZS5jLTM3Mi1cdHMtXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zOTUtLypcbmZzL2RldnB0cy9pbm9kZS5jOjM5NjogKiBkZXZwdHNfZ2V0X3RyZWUoKVxuZnMvZGV2cHRzL2lub2RlLmMtMzk3LSAqXG5mcy9kZXZwdHMvaW5vZGUuYzozOTg6ICogICAgIE1vdW50IGEgbmV3IChwcml2YXRlKSBpbnN0YW5jZSBvZiBkZXZwdHMuICBQVFlzIGNyZWF0ZWQgaW4gdGhpc1xuZnMvZGV2cHRzL2lub2RlLmM6Mzk5OiAqICAgICBpbnN0YW5jZSBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIFBUWXMgaW4gb3RoZXIgZGV2cHRzIGluc3RhbmNlcy5cbmZzL2RldnB0cy9pbm9kZS5jLTQwMC0gKi9cbmZzL2RldnB0cy9pbm9kZS5jOjQwMTpzdGF0aWMgaW50IGRldnB0c19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9kZXZwdHMvaW5vZGUuYy00MDIte1xuZnMvZGV2cHRzL2lub2RlLmM6NDAzOlx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBkZXZwdHNfZmlsbF9zdXBlcik7XG5mcy9kZXZwdHMvaW5vZGUuYy00MDQtfVxuZnMvZGV2cHRzL2lub2RlLmMtNDA1LVxuZnMvZGV2cHRzL2lub2RlLmM6NDA2OnN0YXRpYyB2b2lkIGRldnB0c19mcmVlX2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2RldnB0cy9pbm9kZS5jLTQwNy17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDEwLVxuZnMvZGV2cHRzL2lub2RlLmM6NDExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGRldnB0c19jb250ZXh0X29wcyA9IHtcbmZzL2RldnB0cy9pbm9kZS5jOjQxMjpcdC5mcmVlXHRcdD0gZGV2cHRzX2ZyZWVfZmMsXG5mcy9kZXZwdHMvaW5vZGUuYzo0MTM6XHQucGFyc2VfcGFyYW1cdD0gZGV2cHRzX3BhcnNlX3BhcmFtLFxuZnMvZGV2cHRzL2lub2RlLmM6NDE0Olx0LmdldF90cmVlXHQ9IGRldnB0c19nZXRfdHJlZSxcbmZzL2RldnB0cy9pbm9kZS5jOjQxNTpcdC5yZWNvbmZpZ3VyZVx0PSBkZXZwdHNfcmVjb25maWd1cmUsXG5mcy9kZXZwdHMvaW5vZGUuYy00MTYtfTtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy00MjAtICovXG5mcy9kZXZwdHMvaW5vZGUuYzo0MjE6c3RhdGljIGludCBkZXZwdHNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2RldnB0cy9pbm9kZS5jLTQyMi17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDQwLVx0ZmMtXHUwMDNlc19mc19pbmZvID0gZnNpO1xuZnMvZGV2cHRzL2lub2RlLmM6NDQxOlx0ZmMtXHUwMDNlb3BzID0gXHUwMDI2ZGV2cHRzX2NvbnRleHRfb3BzO1xuZnMvZGV2cHRzL2lub2RlLmMtNDQyLVx0cmV0dXJuIDA7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDQ0LVxuZnMvZGV2cHRzL2lub2RlLmM6NDQ1OnN0YXRpYyB2b2lkIGRldnB0c19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9kZXZwdHMvaW5vZGUuYy00NDYte1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQ1NC1cbmZzL2RldnB0cy9pbm9kZS5jOjQ1NTpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZGV2cHRzX2ZzX3R5cGUgPSB7XG5mcy9kZXZwdHMvaW5vZGUuYzo0NTY6XHQubmFtZVx0XHQ9IFwmIzM0O2RldnB0c1wmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjQ1NzpcdC5pbml0X2ZzX2NvbnRleHQgPSBkZXZwdHNfaW5pdF9mc19jb250ZXh0LFxuZnMvZGV2cHRzL2lub2RlLmM6NDU4Olx0LnBhcmFtZXRlcnNcdD0gZGV2cHRzX3BhcmFtX3NwZWNzLFxuZnMvZGV2cHRzL2lub2RlLmM6NDU5Olx0LmtpbGxfc2JcdD0gZGV2cHRzX2tpbGxfc2IsXG5mcy9kZXZwdHMvaW5vZGUuYy00NjAtXHQuZnNfZmxhZ3NcdD0gRlNfVVNFUk5TX01PVU5ULFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQ2Ny1cbmZzL2RldnB0cy9pbm9kZS5jOjQ2ODppbnQgZGV2cHRzX25ld19pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbmZzL2RldnB0cy9pbm9kZS5jLTQ2OS17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDg0LVxuZnMvZGV2cHRzL2lub2RlLmM6NDg1OnZvaWQgZGV2cHRzX2tpbGxfaW5kZXgoc3RydWN0IHB0c19mc19pbmZvICpmc2ksIGludCBpZHgpXG5mcy9kZXZwdHMvaW5vZGUuYy00ODYte1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQ5MS0vKipcbmZzL2RldnB0cy9pbm9kZS5jOjQ5MjogKiBkZXZwdHNfcHR5X25ldyAtLSBjcmVhdGUgYSBuZXcgaW5vZGUgaW4gL2Rldi9wdHMvXG5mcy9kZXZwdHMvaW5vZGUuYy00OTMtICogQGZzaTogRmlsZXN5c3RlbSBpbmZvIGZvciB0aGlzIGluc3RhbmNlLlxuZnMvZGV2cHRzL2lub2RlLmMtNDk0LSAqIEBpbmRleDogdXNlZCBhcyBhIG5hbWUgb2YgdGhlIG5vZGVcbmZzL2RldnB0cy9pbm9kZS5jOjQ5NTogKiBAcHJpdjogd2hhdCYjMzk7cyBnaXZlbiBiYWNrIGJ5IGRldnB0c19nZXRfcHJpdlxuZnMvZGV2cHRzL2lub2RlLmMtNDk2LSAqXG5mcy9kZXZwdHMvaW5vZGUuYy00OTctICogVGhlIGRlbnRyeSBmb3IgdGhlIGNyZWF0ZWQgaW5vZGUgaXMgcmV0dXJuZWQuXG5mcy9kZXZwdHMvaW5vZGUuYzo0OTg6ICogUmVtb3ZlIGl0IGZyb20gL2Rldi9wdHMvIHdpdGggZGV2cHRzX3B0eV9raWxsKCkuXG5mcy9kZXZwdHMvaW5vZGUuYy00OTktICovXG5mcy9kZXZwdHMvaW5vZGUuYzo1MDA6c3RydWN0IGRlbnRyeSAqZGV2cHRzX3B0eV9uZXcoc3RydWN0IHB0c19mc19pbmZvICpmc2ksIGludCBpbmRleCwgdm9pZCAqcHJpdilcbmZzL2RldnB0cy9pbm9kZS5jLTUwMS17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNTM2LS8qKlxuZnMvZGV2cHRzL2lub2RlLmM6NTM3OiAqIGRldnB0c19nZXRfcHJpdiAtLSBnZXQgcHJpdmF0ZSBkYXRhIGZvciBhIHNsYXZlXG5mcy9kZXZwdHMvaW5vZGUuYy01MzgtICogQGRlbnRyeTogZGVudHJ5IG9mIHRoZSBzbGF2ZVxuZnMvZGV2cHRzL2lub2RlLmMtNTM5LSAqXG5mcy9kZXZwdHMvaW5vZGUuYzo1NDA6ICogUmV0dXJucyB3aGF0ZXZlciB3YXMgcGFzc2VkIGFzIHByaXYgaW4gZGV2cHRzX3B0eV9uZXcgZm9yIGEgZ2l2ZW4gaW5vZGUuXG5mcy9kZXZwdHMvaW5vZGUuYy01NDEtICovXG5mcy9kZXZwdHMvaW5vZGUuYzo1NDI6dm9pZCAqZGV2cHRzX2dldF9wcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2RldnB0cy9pbm9kZS5jLTU0My17XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNTQ5LS8qKlxuZnMvZGV2cHRzL2lub2RlLmM6NTUwOiAqIGRldnB0c19wdHlfa2lsbCAtLSByZW1vdmUgaW5vZGUgZm9ybSAvZGV2L3B0cy9cbmZzL2RldnB0cy9pbm9kZS5jLTU1MS0gKiBAZGVudHJ5OiBkZW50cnkgb2YgdGhlIHNsYXZlIHRvIGJlIHJlbW92ZWRcbmZzL2RldnB0cy9pbm9kZS5jLTU1Mi0gKlxuZnMvZGV2cHRzL2lub2RlLmM6NTUzOiAqIFRoaXMgaXMgYW4gaW52ZXJzZSBvcGVyYXRpb24gb2YgZGV2cHRzX3B0eV9uZXcuXG5mcy9kZXZwdHMvaW5vZGUuYy01NTQtICovXG5mcy9kZXZwdHMvaW5vZGUuYzo1NTU6dm9pZCBkZXZwdHNfcHR5X2tpbGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvZGV2cHRzL2lub2RlLmMtNTU2LXtcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy01NjUtXG5mcy9kZXZwdHMvaW5vZGUuYzo1NjY6c3RhdGljIGludCBfX2luaXQgaW5pdF9kZXZwdHNfZnModm9pZClcbmZzL2RldnB0cy9pbm9kZS5jLTU2Ny17XG5mcy9kZXZwdHMvaW5vZGUuYzo1Njg6XHRpbnQgZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZkZXZwdHNfZnNfdHlwZSk7XG5mcy9kZXZwdHMvaW5vZGUuYy01NjktXHRpZiAoIWVycikge1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTU3My19XG5mcy9kZXZwdHMvaW5vZGUuYzo1NzQ6bW9kdWxlX2luaXQoaW5pdF9kZXZwdHNfZnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIERldnB0cyBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXJzZWQgaW4gdGhlIGBkZXZwdHNgIGZpbGVzeXN0ZW0uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBmcy9kZXZwdHMvaW5vZGUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBgZGV2cHRzX3BhcnNlX3BhcmFtYCBmdW5jdGlvbiBhbmQgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBieSBjaGVja2luZyBpdCBvdXQgYXJvdW5kIGxpbmUgMjQ5IG9mIHRoYXQgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZGV2cHRzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdCAqL1xuIDIyMTpcdHN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4gMjIyOlx0e1xuIDIyMzpcdFx0c3RydWN0IHB0c19mc19pbmZvICpmc2kgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4gMjI0Olx0XHRzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHMgPSBcdTAwMjZmc2ktXHUwMDNlbW91bnRfb3B0cztcbiAyMjU6XHRcdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xuIDIyNjpcdFx0aW50IG9wdDtcbiAyMjc6XHRcbiAyMjg6XHRcdG9wdCA9IGZzX3BhcnNlKGZjLCBkZXZwdHNfcGFyYW1fc3BlY3MsIHBhcmFtLCBcdTAwMjZyZXN1bHQpO1xuIDIyOTpcdFx0aWYgKG9wdCBcdTAwM2MgMClcbiAyMzA6XHRcdFx0cmV0dXJuIG9wdDtcbiAyMzE6XHRcbiAyMzI6XHRcdHN3aXRjaCAob3B0KSB7XG4gMjMzOlx0XHRjYXNlIE9wdF91aWQ6XG4gMjM0Olx0XHRcdG9wdHMtXHUwMDNldWlkID0gcmVzdWx0LnVpZDtcbiAyMzU6XHRcdFx0b3B0cy1cdTAwM2VzZXR1aWQgPSAxO1xuIDIzNjpcdFx0XHRicmVhaztcbiAyMzc6XHRcdGNhc2UgT3B0X2dpZDpcbiAyMzg6XHRcdFx0b3B0cy1cdTAwM2VnaWQgPSByZXN1bHQuZ2lkO1xuIDIzOTpcdFx0XHRvcHRzLVx1MDAzZXNldGdpZCA9IDE7XG4gMjQwOlx0XHRcdGJyZWFrO1xuIDI0MTpcdFx0Y2FzZSBPcHRfbW9kZTpcbiAyNDI6XHRcdFx0b3B0cy1cdTAwM2Vtb2RlID0gcmVzdWx0LnVpbnRfMzIgXHUwMDI2IFNfSUFMTFVHTztcbiAyNDM6XHRcdFx0YnJlYWs7XG4gMjQ0Olx0XHRjYXNlIE9wdF9wdG14bW9kZTpcbiAyNDU6XHRcdFx0b3B0cy1cdTAwM2VwdG14bW9kZSA9IHJlc3VsdC51aW50XzMyIFx1MDAyNiBTX0lBTExVR087XG4gMjQ2Olx0XHRcdGJyZWFrO1xuIDI0NzpcdFx0Y2FzZSBPcHRfbmV3aW5zdGFuY2U6XG4gMjQ4Olx0XHRcdGJyZWFrO1xuIDI0OTpcdFx0Y2FzZSBPcHRfbWF4OlxuIDI1MDpcdFx0XHRpZiAocmVzdWx0LnVpbnRfMzIgXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxuIDI1MTpcdFx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIDI1MjpcdFx0XHRpZiAocmVzdWx0LnVpbnRfMzIgPT0gMClcbiAyNTM6XHRcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwmIzM0Oyk7XG4gMjU0Olx0XHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG4gMjU1Olx0XHRcdGJyZWFrO1xuIDI1NjpcdFx0fVxuIDI1NzpcdFxuIDI1ODpcdFx0cmV0dXJuIDA7XG4gMjU5Olx0fVxuIDI2MDpcdFxuIDI2MTpcdHN0YXRpYyBpbnQgbWtub2RfcHRteChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gMjYyOlx0e1xuIDI2MzpcdFx0aW50IG1vZGU7XG4gMjY0Olx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3NwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYG9wdHMtJmd0O21heGAgdmFyaWFibGUgaW4gdGhlIGBkZXZwdHNgIGNvbnRleHQ6CgoqKkFuYWx5emluZyB0aGUgUm9sZSBvZiBgb3B0cy0mZ3Q7bWF4YCBpbiBkZXZwdHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBvcHRzLSZndDttYXhgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgZGV2cHRzYCBtb2R1bGUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHBpbnBvaW50IGl0cyBpbml0aWFsaXphdGlvbiBhbmQgYW55IHN1YnNlcXVlbnQgdXNhZ2UuIEkmIzM5O20gdGhpbmtpbmcsIGlzIGl0IGEgc2l6ZSBsaW1pdCwgYSBjb3VudGVyLCBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiBhbmQgc2VlIHdoZXJlIGl0IHNob3dzIHVwLiBJcyBpdCBkZXJpdmVkIGZyb20gYSBzeXN0ZW0gc2V0dGluZywgYSB1c2VyIGlucHV0LCBvciBhIGhhcmRjb2RlZCBkZWZhdWx0PyBBbmQgaW1wb3J0YW50bHksIGhvdyBpcyB0aGlzIHZhbHVlIGludGVycHJldGVkIGFuZCBlbXBsb3llZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgYGRldnB0c2AgZmlsZXN5c3RlbT8gS25vd2luZyB3aGVyZSBhbmQgaG93IGBvcHRzLSZndDttYXhgIGlzIHVzZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGRldmljZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBgZGV2cHRzYCBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBjb2RlIGZvciBpdHMgdXNhZ2UsIGFuZCB0aGVuIEkmIzM5O2xsIHRyYWNlIGJhY2sgaXRzIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3B0cy1cdTAwM2VtYXh8ZnNpLVx1MDAzZW1vdW50X29wdHNcXC5tYXh8TlJfVU5JWDk4X1BUWV9NQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kZXZwdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGV2cHRzL2lub2RlLmM9MjIxPXN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMjQ5LVx0Y2FzZSBPcHRfbWF4OlxuZnMvZGV2cHRzL2lub2RlLmM6MjUwOlx0XHRpZiAocmVzdWx0LnVpbnRfMzIgXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxuZnMvZGV2cHRzL2lub2RlLmMtMjUxLVx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTI1My1cdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwmIzM0Oyk7XG5mcy9kZXZwdHMvaW5vZGUuYzoyNTQ6XHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG5mcy9kZXZwdHMvaW5vZGUuYy0yNTUtXHRcdGJyZWFrO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTMwOT1zdGF0aWMgaW50IGRldnB0c19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtMzI0LVx0ZnNpLVx1MDAzZW1vdW50X29wdHMucHRteG1vZGVcdD0gbmV3LVx1MDAzZW1vdW50X29wdHMucHRteG1vZGU7XG5mcy9kZXZwdHMvaW5vZGUuYzozMjU6XHRmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXhcdFx0PSBuZXctXHUwMDNlbW91bnRfb3B0cy5tYXg7XG5mcy9kZXZwdHMvaW5vZGUuYy0zMjYtXG4tLVxuZnMvZGV2cHRzL2lub2RlLmM9MzM4PXN0YXRpYyBpbnQgZGV2cHRzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zNTAtXHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7LHB0bXhtb2RlPSUwM29cJiMzNDssIG9wdHMtXHUwMDNlcHRteG1vZGUpO1xuZnMvZGV2cHRzL2lub2RlLmM6MzUxOlx0aWYgKG9wdHMtXHUwMDNlbWF4IFx1MDAzYyBOUl9VTklYOThfUFRZX01BWClcbmZzL2RldnB0cy9pbm9kZS5jOjM1MjpcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyxtYXg9JWRcJiMzNDssIG9wdHMtXHUwMDNlbWF4KTtcbmZzL2RldnB0cy9pbm9kZS5jLTM1My1cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz00MjE9c3RhdGljIGludCBkZXZwdHNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy00MzMtXHRmc2ktXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZSA9IERFVlBUU19ERUZBVUxUX1BUTVhfTU9ERTtcbmZzL2RldnB0cy9pbm9kZS5jOjQzNDpcdGZzaS1cdTAwM2Vtb3VudF9vcHRzLm1heCAgICAgPSBOUl9VTklYOThfUFRZX01BWDtcbmZzL2RldnB0cy9pbm9kZS5jLTQzNS1cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz00Njg9aW50IGRldnB0c19uZXdfaW5kZXgoc3RydWN0IHB0c19mc19pbmZvICpmc2kpXG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtNDc1LVxuZnMvZGV2cHRzL2lub2RlLmM6NDc2Olx0aW5kZXggPSBpZGFfYWxsb2NfbWF4KFx1MDAyNmZzaS1cdTAwM2VhbGxvY2F0ZWRfcHR5cywgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSxcbmZzL2RldnB0cy9pbm9kZS5jLTQ3Ny1cdFx0XHRHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIHRoZSBkZXZwdHMgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGV2cHRzX25ld19pbmRleGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgYWxsb2NhdGVzIGluZGV4ZXMgdXNpbmcgYGlkYV9hbGxvY19tYXhgLiBJIHNlZSB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgbGluZTogYGluZGV4ID0gaWRhX2FsbG9jX21heCgmYW1wO2ZzaS0mZ3Q7YWxsb2NhdGVkX3B0eXMsIGZzaS0mZ3Q7bW91bnRfb3B0cy5tYXggLSAxLCBHRlBfS0VSTkVMKTtgIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB3aGF0IGhhcHBlbnMgaWYgYGZzaS0mZ3Q7bW91bnRfb3B0cy5tYXhgIGlzIHplcm8uIFRoYXQgYC0gMWAgaXMgc2V0dGluZyBvZmYgYWxhcm0gYmVsbHMgYmVjYXVzZSBhIHplcm8gdmFsdWUsIHdoZW4gc3VidHJhY3RlZCBieSBvbmUsIHJlc3VsdHMgaW4gYC0xYCwgd2hpY2ggaXMgZWl0aGVyIGFuIGludmFsaWQgbWF4aW11bSB2YWx1ZSwgb3Igd29yc2UsIGNhbiBsZWFkIHRvIGludGVnZXIgdW5kZXJmbG93IGluIHRoZSBgaWRhX2FsbG9jX21heGAgZnVuY3Rpb24uIFRoaXMgd291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LgoKVGhlIHBhdGNoIEkmIzM5O20gcmV2aWV3aW5nIGFkZHJlc3NlcyB0aGlzIHByZWNpc2VseS4gSXQgYWRkcyBhIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRoYXQgc3BlY2lmaWNhbGx5IHZhbGlkYXRlcyB0aGUgYG1heGAgdmFsdWUuIElmIGl0JiMzOTtzIHplcm8sIHRoZSBjb2RlIG5vdyByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UsICYjMzQ7bWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuJiMzNDsgVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIHByZXZlbnQgdGhhdCBwb3RlbnRpYWwgaW50ZWdlciB1bmRlcmZsb3cuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYFVOSVg5OF9QVFlTYCB0byBlbnN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHdlJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVU5JWDk4X1BUWVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9LY29uZmlnPTc4PWNvbmZpZyBWVF9IV19DT05TT0xFX0JJTkRJTkdcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnLTkzLVxuZHJpdmVycy90dHkvS2NvbmZpZzo5NDpjb25maWcgVU5JWDk4X1BUWVNcbmRyaXZlcnMvdHR5L0tjb25maWctOTUtXHRib29sIFwmIzM0O1VuaXg5OCBQVFkgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHR0eS9LY29uZmlnIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdHR5L0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSA5MyBhbmQgdGhlIHN1cnJvdW5kaW5nIGFyZWEuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFRUWSBkcml2ZXJzLCBhbmQgSSBuZWVkIHRvIHJldmlldyB0aGVtIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHNldHRpbmdzLiBUaGlzIGZpbGUgc2hvdWxkIGJlIGEga2V5IHNvdXJjZSBmb3IgZmlndXJpbmcgb3V0IHdoaWNoIFRUWSBkcml2ZXIgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQsIGFuZCBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSB2YXJpYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jb25zb2xlLnJzdFx1MDAzZSBmb3IgbW9yZVxuICA5MTpcdFx0ICBpbmZvcm1hdGlvbi4gRm9yIGZyYW1lYnVmZmVyIGNvbnNvbGUgdXNlcnMsIHBsZWFzZSByZWZlciB0b1xuICA5MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmIvZmJjb24ucnN0XHUwMDNlLlxuICA5MzpcdFxuICA5NDpcdGNvbmZpZyBVTklYOThfUFRZU1xuICA5NTpcdFx0Ym9vbCBcJiMzNDtVbml4OTggUFRZIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4gIDk2Olx0XHRkZWZhdWx0IHlcbiAgOTc6XHRcdGhlbHBcbiAgOTg6XHRcdCAgQSBwc2V1ZG8gdGVybWluYWwgKFBUWSkgaXMgYSBzb2Z0d2FyZSBkZXZpY2UgY29uc2lzdGluZyBvZiB0d29cbiAgOTk6XHRcdCAgaGFsdmVzOiBhIG1hc3RlciBhbmQgYSBzbGF2ZS4gVGhlIHNsYXZlIGRldmljZSBiZWhhdmVzIGlkZW50aWNhbCB0b1xuIDEwMDpcdFx0ICBhIHBoeXNpY2FsIHRlcm1pbmFsOyB0aGUgbWFzdGVyIGRldmljZSBpcyB1c2VkIGJ5IGEgcHJvY2VzcyB0b1xuIDEwMTpcdFx0ICByZWFkIGRhdGEgZnJvbSBhbmQgd3JpdGUgZGF0YSB0byB0aGUgc2xhdmUsIHRoZXJlYnkgZW11bGF0aW5nIGFcbiAxMDI6XHRcdCAgdGVybWluYWwuIFR5cGljYWwgcHJvZ3JhbXMgZm9yIHRoZSBtYXN0ZXIgc2lkZSBhcmUgdGVsbmV0IHNlcnZlcnNcbiAxMDM6XHRcdCAgYW5kIHh0ZXJtcy5cbiAxMDQ6XHRcbiAxMDU6XHRcdCAgTGludXggaGFzIHRyYWRpdGlvbmFsbHkgdXNlZCB0aGUgQlNELWxpa2UgbmFtZXMgL2Rldi9wdHl4eCBmb3JcbiAxMDY6XHRcdCAgbWFzdGVycyBhbmQgL2Rldi90dHl4eCBmb3Igc2xhdmVzIG9mIHBzZXVkbyB0ZXJtaW5hbHMuIFRoaXMgc2NoZW1lXG4gMTA3Olx0XHQgIGhhcyBhIG51bWJlciBvZiBwcm9ibGVtcy4gVGhlIEdOVSBDIGxpYnJhcnkgZ2xpYmMgMi4xIGFuZCBsYXRlcixcbiAxMDg6XHRcdCAgaG93ZXZlciwgc3VwcG9ydHMgdGhlIFVuaXg5OCBuYW1pbmcgc3RhbmRhcmQ6IGluIG9yZGVyIHRvIGFjcXVpcmUgYVxuIDEwOTpcdFx0ICBwc2V1ZG8gdGVybWluYWwsIGEgcHJvY2VzcyBvcGVucyAvZGV2L3B0bXg7IHRoZSBudW1iZXIgb2YgdGhlIHBzZXVkb1xuIDExMDpcdFx0ICB0ZXJtaW5hbCBpcyB0aGVuIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9jZXNzIGFuZCB0aGUgcHNldWRvXG4gMTExOlx0XHQgIHRlcm1pbmFsIHNsYXZlIGNhbiBiZSBhY2Nlc3NlZCBhcyAvZGV2L3B0cy9cdTAwM2NudW1iZXJcdTAwM2UuIFdoYXQgd2FzXG4gMTEyOlx0XHQgIHRyYWRpdGlvbmFsbHkgL2Rldi90dHlwMiB3aWxsIHRoZW4gYmUgL2Rldi9wdHMvMiwgZm9yIGV4YW1wbGUuXG4gMTEzOlx0XG4gMTE0Olx0XHQgIEFsbCBtb2Rlcm4gTGludXggc3lzdGVtcyB1c2UgdGhlIFVuaXg5OCBwdHlzLiAgU2F5IFkgdW5sZXNzXG4gMTE1Olx0XHQgIHlvdSYjMzk7cmUgb24gYW4gZW1iZWRkZWQgc3lzdGVtIGFuZCB3YW50IHRvIGNvbnNlcnZlIG1lbW9yeS5cbiAxMTY6XHRcbiAxMTc6XHRjb25maWcgTEVHQUNZX1BUWVNcbiAxMTg6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IChCU0QpIFBUWSBzdXBwb3J0XCYjMzQ7XG4gMTE5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgZGV2cHRzYCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgY2FuIHdlIGV2ZW4gKnJlYWNoKiBgZGV2cHRzYCBpbiBhIHR5cGljYWwgUUVNVS9zeXprYWxsZXIgZW52aXJvbm1lbnQ/IFllcywgbm8gcHJvYmxlbS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGAvZGV2L3B0c2AgZmlsZXN5c3RlbSwgbW91bnRlZCB1c2luZyBzdGFuZGFyZCBtZXRob2RzIGxpa2UgYG1vdW50YCB3aXRoIG9wdGlvbnMsIG9yIHRocm91Z2ggYGZzY29uZmlnYCBvciBgZnNvcGVuYCBzeXNjYWxscy4gVW5wcml2aWxlZ2VkIHVzZXJzIGNhbiBhY2Nlc3MgaXQgdGhhbmtzIHRvIGBGU19VU0VSTlNfTU9VTlRgLCBzbyBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIENoZWNrLgoKTm93IGZvciB0aGUgY3JpdGVyaWE6CgoqICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRob3NlIFZGUyBzeXNjYWxscy4gVGljay4KKiAgICoqQ29kZSBNb2RpZmljYXRpb24/KiogWWVzLCB0aGUga2V5IGlzIGBkZXZwdHNfcGFyc2VfcGFyYW1gIGluIGBmcy9kZXZwdHMvaW5vZGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgd2Ugd2FudCB0byBmb2N1cy4KKiAgICoqV29ydGhGdXp6aW5nPyoqIEFic29sdXRlbHksIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZS4KCk5leHQsIHRoZSBzcGVjaWZpY3M6IEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4KCldlJiMzOTtsbCBkZWZpbml0ZWx5IG5lZWQgdGhlIGBVTklYOThfUFRZU2AgY29uZmlnIGVuYWJsZWQuIExvb2tpbmcgYXQgdGhlIGBmcy9kZXZwdHMvTWFrZWZpbGVgLCB0aGF0JiMzOTtzIHRoZSBrZXkuCgpGb3IgRm9jdXNTeW1ib2xzLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSB6ZXJvaW5nIGluIG9uIGBkZXZwdHNfcGFyc2VfcGFyYW1gLiBJJiMzOTtsbCBjb25zaWRlciBgZGV2cHRzX3JlY29uZmlndXJlYCwgYGRldnB0c19maWxsX3N1cGVyYCwgYW5kIGBkZXZwdHNfbmV3X2luZGV4YCwgYW5kIGBkZXZwdHNfaW5pdF9mc19jb250ZXh0YCBhcyBwb3NzaWJsZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBleGFtaW5lLgoKYGRldnB0c19wYXJzZV9wYXJhbWAgbG9va3MgbGlrZSB0aGUgcHJpbWUgdGFyZ2V0IGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgYWN0dWFsbHkgbW9kaWZpZWQuIE5vdywgaXMgYGRldnB0c19wYXJzZV9wYXJhbWAgc3RhdGljPyBZZXMsIGFuZCBpdCYjMzk7cyByZWZlcmVuY2VkIGJ5IHBvaW50ZXIgaW4gYGRldnB0c19jb250ZXh0X29wcy5wYXJzZV9wYXJhbSA9IGRldnB0c19wYXJzZV9wYXJhbWAgd2hpY2ggbWVhbnMgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQmIzM5O3MgZ29vZC4KCkxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIG90aGVyIHN5bWJvbHMgaW4gYGZzL2RldnB0cy9pbm9kZS5jYDogWWVwLCBgZGV2cHRzX3BhcnNlX3BhcmFtYCwgYGRldnB0c19uZXdfaW5kZXhgLCBgZGV2cHRzX3JlY29uZmlndXJlYCwgYW5kIGBkZXZwdHNfZmlsbF9zdXBlcmAuCgpGaW5hbGx5LCBjb25maXJtIGBVTklYOThfUFRZU2AgaXMgdGhlIG9ubHkgY29uZmlnOiB0aGUgYE1ha2VmaWxlYCBjb25maXJtcyBpdC4gTm90aGluZyBlbHNlIGlzIGluIGBmcy9kZXZwdHNgIHRoYXQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4KClNvLCBpbiBzdW1tYXJ5OiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB3aXRoIGBVTklYOThfUFRZU2AgZW5hYmxlZCBpcyBvdXIgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuIFdlJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBidXQgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgdGhlIGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2ZzL2RldnB0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2lub2RlLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5OQoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIGRldnB0cyBNb3VudCBQYXJhbWV0ZXIgUGFyc2VyKioKCk9rYXksIHNvIHRoZSBzY29wZSBpcyByZWFsbHkganVzdCBgaW5vZGUuY2Ag4oCTIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGFyZ2V0LiBCZWZvcmUgZGl2aW5nIGluLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGtub3cgYFVOSVg5OF9QVFlTYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3R0eS9LY29uZmlnYCwgYnV0IHRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgdGhpbmcuIEFuZCwgb2YgY291cnNlLCBgVFRZYCBpcyBlc3NlbnRpYWxseSBpbXBsaWVkIGJ5IGEgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvcmUgcmVhc29uaW5nLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBtb2RpZnlpbmcgdGhlIGBkZXZwdHNfcGFyc2VfcGFyYW1gIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgcmVqZWN0aW5nIGEgYG1heD0wYCBwYXJhbWV0ZXIuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBkZXZwdHMgaXMgYSBjb3JlIHBzZXVkby1maWxlc3lzdGVtLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIG1vdW50LCBmc29wZW4sIGFuZCBmc2NvbmZpZyBzeXNjYWxscywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCeSBjcmFmdGluZyB0ZXN0cyB0aGF0IGludGVyYWN0IHdpdGggcHRzIGFsbG9jYXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbW91bnQvcmVtb3VudCBwYXJhbWV0ZXJzLCB3ZSBjYW4gcHJvYmUgZm9yIHZ1bG5lcmFiaWxpdGllcy4KCkFscmlnaHQsIHRoYXQgY292ZXJzIHRoZSBlc3NlbnRpYWxzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYOThfUFRZUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldnB0c19wYXJzZV9wYXJhbSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZGV2cHRzX25ld19pbmRleCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYXJhbWV0ZXIgcGFyc2luZyBsb2dpYyBpbiBkZXZwdHNfcGFyc2VfcGFyYW0gKGZzL2RldnB0cy9pbm9kZS5jKSB0byB2YWxpZGF0ZSB0aGF0IHRoZSAmIzM5O21heCYjMzk7IG1vdW50IHBhcmFtZXRlciBpcyBub24temVyby4gVGhlIGRldnB0cyBmaWxlc3lzdGVtIGlzIHJlYWNoYWJsZSB2aWEgbW91bnQgYW5kIGZzb3Blbi9mc2NvbmZpZyBzeXNjYWxscyBmcm9tIHVzZXJzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVg5OF9QVFlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2cHRzX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2RldnB0c19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtkZXZwdHNfbmV3X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcmFtZXRlciBwYXJzaW5nIGxvZ2ljIGluIGRldnB0c19wYXJzZV9wYXJhbSAoZnMvZGV2cHRzL2lub2RlLmMpIHRvIHZhbGlkYXRlIHRoYXQgdGhlICYjMzk7bWF4JiMzOTsgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayBpbiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB0byByZWplY3QgYSBtb3VudCBvcHRpb24gdmFsdWUgb2YgYG1heD0wYCAoYG1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHVuZGVyZmxvdyBpbiBgaWRhX2FsbG9jX21heCguLi4sIGZzaS1cdTAwM2Vtb3VudF9vcHRzLm1heCAtIDEsIC4uLilgLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gbG9naWMgb24gcGFyc2VkIGludGVnZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWE2ZDRkYzEzNGNjNDZjNGQ4ZmY0MjY2N2RiZjkxZWI3ZjY2MzAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNToxOTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggOTg0NGRjZjM1NGVlOS4uYmQxZThlYjI2ZWRiNyAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTI0OSw2ICYjNDM7MjQ5LDggQEAgc3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSkKIAljYXNlIE9wdF9tYXg6CiAJCWlmIChyZXN1bHQudWludF8zMiAmZ3Q7IE5SX1VOSVg5OF9QVFlfTUFYKQogCQkJcmV0dXJuIGludmFsZihmYywgJiMzNDttYXggb3V0IG9mIHJhbmdlJiMzNDspOwomIzQzOwkJaWYgKHJlc3VsdC51aW50XzMyID09IDApCiYjNDM7CQkJcmV0dXJuIGludmFsZihmYywgJiMzNDttYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCYjMzQ7KTsKIAkJb3B0cy0mZ3Q7bWF4ID0gcmVzdWx0LnVpbnRfMzI7CiAJCWJyZWFrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZwdHMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBkaWZmIHNob3dzIGEgbW9kaWZpY2F0aW9uIHRvIGBmcy9kZXZwdHMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkZXZwdHNfcGFyc2VfcGFyYW1gIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjazogaWYgYG9wdHMtJmd0O21heGAgKHdoaWNoIEkgYXNzdW1lIGlzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSkgaXMgc2V0IHRvIHplcm8sIHRoZW4gdGhlIG1vdW50IG9wZXJhdGlvbiBzaG91bGQgZmFpbC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBlbmZvcmNpbmcgdGhhdCBgbWF4YCBiZSBncmVhdGVyIHRoYW4gemVybz8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYSB6ZXJvIHZhbHVlIHdvdWxkIHByb2JhYmx5IGxlYWQgdG8gaXNzdWVzLCBsaWtlIHByZXZlbnRpbmcgdGhlIGNyZWF0aW9uIG9mIG5ldyBwc2V1ZG8tdGVybWluYWxzLCBvciBjYXVzaW5nIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIHNvbWV3aGVyZSBkb3duc3RyZWFtIHdoZW4gY2FsY3VsYXRpbmcgbGltaXRzLiBJdCYjMzk7cyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBwcmV2ZW50aW5nIGEgbGlrZWx5IGVkZ2UgY2FzZS4KClRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayBgZnMvZGV2cHRzL2lub2RlLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgY2FsbGVkLCBob3cgYG9wdHMtJmd0O21heGAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBtb2R1bGUsIGFuZCB3aGF0IG90aGVyIHBhcmFtZXRlcnMgdGhlIGZpbGVzeXN0ZW0gYWNjZXB0cy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGRldGVybWluZSBpZiB0aGlzIGFkZGl0aW9uIGlzIGNvbXBsZXRlbHkgaXNvbGF0ZWQgb3IgaWYgaXQgaGFzIHNvbWUgcmlwcGxlIGVmZmVjdCBvbiBvdGhlciBwb3J0aW9ucyBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBpbXBsaWNpdGx5IGRlcGVuZCBvbiB0aGVyZSBiZWluZyAqc29tZSogYWxsb3dhYmxlIHZhbHVlIGZvciBgbWF4YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kZXZwdHMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0ICovXG4gMjIxOlx0c3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbiAyMjQ6XHRcdHN0cnVjdCBwdHNfbW91bnRfb3B0cyAqb3B0cyA9IFx1MDAyNmZzaS1cdTAwM2Vtb3VudF9vcHRzO1xuIDIyNTpcdFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XG4gMjI2Olx0XHRpbnQgb3B0O1xuIDIyNzpcdFxuIDIyODpcdFx0b3B0ID0gZnNfcGFyc2UoZmMsIGRldnB0c19wYXJhbV9zcGVjcywgcGFyYW0sIFx1MDAyNnJlc3VsdCk7XG4gMjI5Olx0XHRpZiAob3B0IFx1MDAzYyAwKVxuIDIzMDpcdFx0XHRyZXR1cm4gb3B0O1xuIDIzMTpcdFxuIDIzMjpcdFx0c3dpdGNoIChvcHQpIHtcbiAyMzM6XHRcdGNhc2UgT3B0X3VpZDpcbiAyMzQ6XHRcdFx0b3B0cy1cdTAwM2V1aWQgPSByZXN1bHQudWlkO1xuIDIzNTpcdFx0XHRvcHRzLVx1MDAzZXNldHVpZCA9IDE7XG4gMjM2Olx0XHRcdGJyZWFrO1xuIDIzNzpcdFx0Y2FzZSBPcHRfZ2lkOlxuIDIzODpcdFx0XHRvcHRzLVx1MDAzZWdpZCA9IHJlc3VsdC5naWQ7XG4gMjM5Olx0XHRcdG9wdHMtXHUwMDNlc2V0Z2lkID0gMTtcbiAyNDA6XHRcdFx0YnJlYWs7XG4gMjQxOlx0XHRjYXNlIE9wdF9tb2RlOlxuIDI0MjpcdFx0XHRvcHRzLVx1MDAzZW1vZGUgPSByZXN1bHQudWludF8zMiBcdTAwMjYgU19JQUxMVUdPO1xuIDI0MzpcdFx0XHRicmVhaztcbiAyNDQ6XHRcdGNhc2UgT3B0X3B0bXhtb2RlOlxuIDI0NTpcdFx0XHRvcHRzLVx1MDAzZXB0bXhtb2RlID0gcmVzdWx0LnVpbnRfMzIgXHUwMDI2IFNfSUFMTFVHTztcbiAyNDY6XHRcdFx0YnJlYWs7XG4gMjQ3Olx0XHRjYXNlIE9wdF9uZXdpbnN0YW5jZTpcbiAyNDg6XHRcdFx0YnJlYWs7XG4gMjQ5Olx0XHRjYXNlIE9wdF9tYXg6XG4gMjUwOlx0XHRcdGlmIChyZXN1bHQudWludF8zMiBcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXG4gMjUxOlx0XHRcdFx0cmV0dXJuIGludmFsZihmYywgXCYjMzQ7bWF4IG91dCBvZiByYW5nZVwmIzM0Oyk7XG4gMjUyOlx0XHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuIDI1MzpcdFx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCYjMzQ7KTtcbiAyNTQ6XHRcdFx0b3B0cy1cdTAwM2VtYXggPSByZXN1bHQudWludF8zMjtcbiAyNTU6XHRcdFx0YnJlYWs7XG4gMjU2Olx0XHR9XG4gMjU3Olx0XG4gMjU4Olx0XHRyZXR1cm4gMDtcbiAyNTk6XHR9XG4gMjYwOlx0XG4gMjYxOlx0c3RhdGljIGludCBta25vZF9wdG14KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiAyNjI6XHR7XG4gMjYzOlx0XHRpbnQgbW9kZTtcbiAyNjQ6XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiAyNjU6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gMjY2Olx0XHRzdHJ1Y3QgZGVudHJ5ICpyb290ID0gc2ItXHUwMDNlc19yb290O1xuIDI2NzpcdFx0c3RydWN0IHB0c19mc19pbmZvICpmc2kgPSBERVZQVFNfU0Ioc2IpO1xuIDI2ODpcdFx0c3RydWN0IHB0c19tb3VudF9vcHRzICpvcHRzID0gXHUwMDI2ZnNpLVx1MDAzZW1vdW50X29wdHM7XG4gMjY5Olx0XHRrdWlkX3QgcHRteF91aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4gMjcwOlx0XHRrZ2lkX3QgcHRteF9naWQgPSBjdXJyZW50X2ZzZ2lkKCk7XG4gMjcxOlx0XG4gMjcyOlx0XHRkZW50cnkgPSBzaW1wbGVfc3RhcnRfY3JlYXRpbmcocm9vdCwgXCYjMzQ7cHRteFwmIzM0Oyk7XG4gMjczOlx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpIHtcbiAyNzQ6XHRcdFx0cHJfZXJyKFwmIzM0O1VuYWJsZSB0byBhbGxvYyBkZW50cnkgZm9yIHB0bXggbm9kZVxcblwmIzM0Oyk7XG4gMjc1Olx0XHRcdHJldHVybiBQVFJfRVJSKGRlbnRyeSk7XG4gMjc2Olx0XHR9XG4gMjc3Olx0XG4gMjc4Olx0XHQvKlxuIDI3OTpcdFx0ICogQ3JlYXRlIGEgbmV3ICYjMzk7cHRteCYjMzk7IG5vZGUgaW4gdGhpcyBtb3VudCBvZiBkZXZwdHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYG9wdHMtJmd0O21heGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBvcHRzLSZndDttYXhgIHZhcmlhYmxlLiBXaGVyZSYjMzk7cyBpdCBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGBkZXZwdHNgIGNvZGU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW5mbHVlbmNlLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYGdyZXBgIGFuZCBzZWFyY2ggdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbnN0YW5jZSBvZiBgLSZndDttYXhgIG9yLCB0byBiZSBzdXBlciBzcGVjaWZpYywgYG9wdHMtJmd0O21heGAsIHNpbmNlIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBleGFjdCBtZW1iZXIgaXMgYWNjZXNzZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoaXMgdmFsdWUgaXMgYmVpbmcgdXRpbGl6ZWQgdGhyb3VnaG91dCB0aGUgcHJvamVjdC4gVGhlIGdvYWwgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBpbXBhY3Qgb2YgYG9wdHMtJmd0O21heGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RldnB0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kZXZwdHMvaW5vZGUuYz00NT1zdGF0aWMgaW50IHB0eV9saW1pdF9taW47XG5mcy9kZXZwdHMvaW5vZGUuYzo0NjpzdGF0aWMgaW50IHB0eV9saW1pdF9tYXggPSBJTlRfTUFYO1xuZnMvZGV2cHRzL2lub2RlLmMtNDctc3RhdGljIGF0b21pY190IHB0eV9jb3VudCA9IEFUT01JQ19JTklUKDApO1xuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHB0eV90YWJsZVtdID0ge1xuZnMvZGV2cHRzL2lub2RlLmMtNTAtXHR7XG5mcy9kZXZwdHMvaW5vZGUuYzo1MTpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21heFwmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjUyOlx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG5mcy9kZXZwdHMvaW5vZGUuYy01My1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuZnMvZGV2cHRzL2lub2RlLmMtNTQtXHRcdC5kYXRhXHRcdD0gXHUwMDI2cHR5X2xpbWl0LFxuZnMvZGV2cHRzL2lub2RlLmM6NTU6XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG5mcy9kZXZwdHMvaW5vZGUuYy01Ni1cdFx0LmV4dHJhMVx0XHQ9IFx1MDAyNnB0eV9saW1pdF9taW4sXG5mcy9kZXZwdHMvaW5vZGUuYzo1NzpcdFx0LmV4dHJhMlx0XHQ9IFx1MDAyNnB0eV9saW1pdF9tYXgsXG5mcy9kZXZwdHMvaW5vZGUuYy01OC1cdH0sIHtcbmZzL2RldnB0cy9pbm9kZS5jLTU5LVx0XHQucHJvY25hbWVcdD0gXCYjMzQ7cmVzZXJ2ZVwmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjYwOlx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG5mcy9kZXZwdHMvaW5vZGUuYy02MS1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuZnMvZGV2cHRzL2lub2RlLmMtNjItXHRcdC5kYXRhXHRcdD0gXHUwMDI2cHR5X3Jlc2VydmUsXG5mcy9kZXZwdHMvaW5vZGUuYzo2MzpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbmZzL2RldnB0cy9pbm9kZS5jLTY0LVx0XHQuZXh0cmExXHRcdD0gXHUwMDI2cHR5X2xpbWl0X21pbixcbmZzL2RldnB0cy9pbm9kZS5jOjY1Olx0XHQuZXh0cmEyXHRcdD0gXHUwMDI2cHR5X2xpbWl0X21heCxcbmZzL2RldnB0cy9pbm9kZS5jLTY2LVx0fSwge1xuZnMvZGV2cHRzL2lub2RlLmMtNjctXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtuclwmIzM0OyxcbmZzL2RldnB0cy9pbm9kZS5jOjY4Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG5mcy9kZXZwdHMvaW5vZGUuYy02OS1cdFx0Lm1vZGVcdFx0PSAwNDQ0LFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTc1PXN0cnVjdCBwdHNfbW91bnRfb3B0cyB7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmMtODItXHRpbnQgcmVzZXJ2ZTtcbmZzL2RldnB0cy9pbm9kZS5jOjgzOlx0aW50IG1heDtcbmZzL2RldnB0cy9pbm9kZS5jLTg0LX07XG4tLVxuZnMvZGV2cHRzL2lub2RlLmM9ODY9ZW51bSB7XG5mcy9kZXZwdHMvaW5vZGUuYzo4NzpcdE9wdF91aWQsIE9wdF9naWQsIE9wdF9tb2RlLCBPcHRfcHRteG1vZGUsIE9wdF9uZXdpbnN0YW5jZSwgIE9wdF9tYXgsXG5mcy9kZXZwdHMvaW5vZGUuYy04OC1cdE9wdF9lcnJcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz05MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGRldnB0c19wYXJhbV9zcGVjc1tdID0ge1xuZnMvZGV2cHRzL2lub2RlLmMtOTItXHRmc3BhcmFtX2dpZFx0KFwmIzM0O2dpZFwmIzM0OyxcdFx0T3B0X2dpZCksXG5mcy9kZXZwdHMvaW5vZGUuYzo5MzpcdGZzcGFyYW1fczMyXHQoXCYjMzQ7bWF4XCYjMzQ7LFx0XHRPcHRfbWF4KSxcbmZzL2RldnB0cy9pbm9kZS5jLTk0LVx0ZnNwYXJhbV91MzJvY3RcdChcJiMzNDttb2RlXCYjMzQ7LFx0T3B0X21vZGUpLFxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTIyMT1zdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTI0OC1cdFx0YnJlYWs7XG5mcy9kZXZwdHMvaW5vZGUuYzoyNDk6XHRjYXNlIE9wdF9tYXg6XG5mcy9kZXZwdHMvaW5vZGUuYy0yNTAtXHRcdGlmIChyZXN1bHQudWludF8zMiBcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTE6XHRcdFx0cmV0dXJuIGludmFsZihmYywgXCYjMzQ7bWF4IG91dCBvZiByYW5nZVwmIzM0Oyk7XG5mcy9kZXZwdHMvaW5vZGUuYy0yNTItXHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuZnMvZGV2cHRzL2lub2RlLmM6MjUzOlx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwmIzM0O21heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCYjMzQ7KTtcbmZzL2RldnB0cy9pbm9kZS5jOjI1NDpcdFx0b3B0cy1cdTAwM2VtYXggPSByZXN1bHQudWludF8zMjtcbmZzL2RldnB0cy9pbm9kZS5jLTI1NS1cdFx0YnJlYWs7XG4tLVxuZnMvZGV2cHRzL2lub2RlLmM9MzA5PXN0YXRpYyBpbnQgZGV2cHRzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy0zMjQtXHRmc2ktXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZVx0PSBuZXctXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZTtcbmZzL2RldnB0cy9pbm9kZS5jOjMyNTpcdGZzaS1cdTAwM2Vtb3VudF9vcHRzLm1heFx0XHQ9IG5ldy1cdTAwM2Vtb3VudF9vcHRzLm1heDtcbmZzL2RldnB0cy9pbm9kZS5jLTMyNi1cbi0tXG5mcy9kZXZwdHMvaW5vZGUuYz0zMzg9c3RhdGljIGludCBkZXZwdHNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTM1MC1cdHNlcV9wcmludGYoc2VxLCBcJiMzNDsscHRteG1vZGU9JTAzb1wmIzM0Oywgb3B0cy1cdTAwM2VwdG14bW9kZSk7XG5mcy9kZXZwdHMvaW5vZGUuYzozNTE6XHRpZiAob3B0cy1cdTAwM2VtYXggXHUwMDNjIE5SX1VOSVg5OF9QVFlfTUFYKVxuZnMvZGV2cHRzL2lub2RlLmM6MzUyOlx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7LG1heD0lZFwmIzM0Oywgb3B0cy1cdTAwM2VtYXgpO1xuZnMvZGV2cHRzL2lub2RlLmMtMzUzLVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTQyMT1zdGF0aWMgaW50IGRldnB0c19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jLTQzMy1cdGZzaS1cdTAwM2Vtb3VudF9vcHRzLnB0bXhtb2RlID0gREVWUFRTX0RFRkFVTFRfUFRNWF9NT0RFO1xuZnMvZGV2cHRzL2lub2RlLmM6NDM0Olx0ZnNpLVx1MDAzZW1vdW50X29wdHMubWF4ICAgICA9IE5SX1VOSVg5OF9QVFlfTUFYO1xuZnMvZGV2cHRzL2lub2RlLmMtNDM1LVxuLS1cbmZzL2RldnB0cy9pbm9kZS5jPTQ2OD1pbnQgZGV2cHRzX25ld19pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcbi0tXG5mcy9kZXZwdHMvaW5vZGUuYy00NzUtXG5mcy9kZXZwdHMvaW5vZGUuYzo0NzY6XHRpbmRleCA9IGlkYV9hbGxvY19tYXgoXHUwMDI2ZnNpLVx1MDAzZWFsbG9jYXRlZF9wdHlzLCBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLFxuZnMvZGV2cHRzL2lub2RlLmMtNDc3LVx0XHRcdEdGUF9LRVJORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDI3CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBgZGV2cHRzX25ld19pbmRleGAgVnVsbmVyYWJpbGl0eSBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBkZXZwdHNfbmV3X2luZGV4YCBhbmQgdGhlIHBvdGVudGlhbCBpc3N1ZSBzdXJyb3VuZGluZyB0aGUgYG1heGAgbW91bnQgb3B0aW9uLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaG93IGBpZGFfYWxsb2NfbWF4YCBoYW5kbGVzIGl0cyBpbnB1dC4gU3BlY2lmaWNhbGx5LCBpZiBgZnNpLSZndDttb3VudF9vcHRzLm1heGAgaXMgemVybywgd2UmIzM5O2QgaGF2ZSBhbiB1bmRlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIGAwIC0gMWAsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWxseSBpbnZhbGlkIGBpZGFfYWxsb2NfbWF4YCBjYWxsLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWF4YCBpcyB2YWxpZGF0ZWQgZHVyaW5nIHRoZSBtb3VudCBvcHRpb24gcGFyc2luZy4KClRoZSBwYXRjaCYjMzk7cyBhZGRpdGlvbiBjaGVja3MgZm9yIGEgYG1heGAgdmFsdWUgb2YgemVyby4gSWYgaXQgaXMsIHRoZSBtb3VudCBmYWlscywgcmV0dXJuaW5nIGFuICYjMzQ7aW52YWxpZCBtYXgmIzM0OyBlcnJvci4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPyBTcGVjaWZpY2FsbHksIGFtIEkgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIGluZm9ybWF0aW9uLCBsZWF2aW5nIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgbWVzc2luZyB3aXRoIHBhZGRpbmcsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkOiBOb3BlLCB0aGlzIG9ubHkgdmFsaWRhdGVzIGFuIGludGVnZXIgbW91bnQgcGFyYW1ldGVyLgoKMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBObywgdGhlIGByZXN1bHRgIHZhcmlhYmxlIGlzIHBvcHVsYXRlZCB2aWEgYGZzX3BhcnNlYCwgc28gaXQmIzM5O3MgaW5pdGlhbGl6ZWQuCgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgY291bGQgYmUgcmVhZCBsYXRlcjogTm8sIGFnYWluLCB0aGlzIGlzIHNpbXBseSBpbnB1dCB2YWxpZGF0aW9uIG9mIGEgc2luZ2xlIGludGVnZXIuCgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBsZXRzIHN1cnJvdW5kaW5nIGNvZGUgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6IEFic29sdXRlbHkgbm90LiBUaGlzIGlzIHN0cmFpZ2h0IGlucHV0IHZhbGlkYXRpb24sIGFuZCBgcmVzdWx0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGlucHV0IHZhbGlkYXRpb24gZml4LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBoZXJlLCBhbmQgaXQmIzM5O3MgYSB2ZXJ5IGNsZWFyLWN1dCBjYXNlIG9mIHNpbXBsZSBpbnB1dCB2YWxpZGF0aW9uLiBUaW1lIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGlucHV0IHZhbGlkYXRpb24gY2hlY2sgaW4gYGRldnB0c19wYXJzZV9wYXJhbWAgdG8gcmVqZWN0IGEgbW91bnQgb3B0aW9uIHZhbHVlIG9mIGBtYXg9MGAgKGBtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMGApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCB1bmRlcmZsb3cgaW4gYGlkYV9hbGxvY19tYXgoLi4uLCBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLCAuLi4pYC5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGxvZ2ljIG9uIHBhcnNlZCBpbnRlZ2Vycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgLi4uKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTk6MDIuOTc1NDcxNTg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mzg0NjYzODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVg5OF9QVFlTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2cHRzX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJkZXZwdHNfcmVjb25maWd1cmVcIixcbiAgICBcImRldnB0c19uZXdfaW5kZXhcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayBpbiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB0byByZWplY3QgYSBtb3VudCBvcHRpb24gdmFsdWUgb2YgYG1heD0wYCAoYG1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHVuZGVyZmxvdyBpbiBgaWRhX2FsbG9jX21heCguLi4sIGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLCAuLi4pYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gbG9naWMgb24gcGFyc2VkIGludGVnZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJ21heCcgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTk6MDIuOTc1NDc1ODY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1ODA0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTFhNmQ0ZGMxMzRjYzQ2YzRkOGZmNDI2NjdkYmY5MWViN2Y2NjMwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjE5OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmNcXG5pbmRleCA5ODQ0ZGNmMzU0ZWU5Li5iZDFlOGViMjZlZGI3IDEwMDY0NFxcbi0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jXFxuKysrIGIvZnMvZGV2cHRzL2lub2RlLmNcXG5AQCAtMjQ5LDYgKzI0OSw4IEBAIHN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuIFxcdGNhc2UgT3B0X21heDpcXG4gXFx0XFx0aWYgKHJlc3VsdC51aW50XzMyIFxcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXFxuIFxcdFxcdFxcdHJldHVybiBpbnZhbGYoZmMsIFxcXCJtYXggb3V0IG9mIHJhbmdlXFxcIik7XFxuK1xcdFxcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcXFwiKTtcXG4gXFx0XFx0b3B0cy1cXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjE5OjA0LjQ1MTg2NTkzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ4OTQzOTc3MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVg5OF9QVFlTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2cHRzX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJkZXZwdHNfcmVjb25maWd1cmVcIixcbiAgICBcImRldnB0c19uZXdfaW5kZXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJhbWV0ZXIgcGFyc2luZyBsb2dpYyBpbiBkZXZwdHNfcGFyc2VfcGFyYW0gKGZzL2RldnB0cy9pbm9kZS5jKSB0byB2YWxpZGF0ZSB0aGF0IHRoZSAnbWF4JyBtb3VudCBwYXJhbWV0ZXIgaXMgbm9uLXplcm8uIFRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyByZWFjaGFibGUgdmlhIG1vdW50IGFuZCBmc29wZW4vZnNjb25maWcgc3lzY2FsbHMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExYTZkNGRjMTM0Y2M0NmM0ZDhmZjQyNjY3ZGJmOTFlYjdmNjYzMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjE5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuY1xuaW5kZXggOTg0NGRjZjM1NGVlOS4uYmQxZThlYjI2ZWRiNyAxMDA2NDRcbi0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jXG4rKysgYi9mcy9kZXZwdHMvaW5vZGUuY1xuQEAgLTI0OSw2ICsyNDksOCBAQCBzdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuIFx0Y2FzZSBPcHRfbWF4OlxuIFx0XHRpZiAocmVzdWx0LnVpbnRfMzIgXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxuIFx0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwibWF4IG91dCBvZiByYW5nZVwiKTtcbitcdFx0aWYgKHJlc3VsdC51aW50XzMyID09IDApXG4rXHRcdFx0cmV0dXJuIGludmFsZihmYywgXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiBcdFx0b3B0cy1cdTAwM2VtYXggPSByZXN1bHQudWludF8zMjtcbiBcdFx0YnJlYWs7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxOTowNC40NTE4NzIzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDgyMDMyMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZGV2cHRzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBzZWUgYSBgZGV2cHRzL2lub2RlLmNgIGNoYW5nZSwgd2hpY2ggc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHBzZXVkby10ZXJtaW5hbCBmaWxlc3lzdGVtLiBUaGUgZGlmZiBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgY2hlY2sgd2l0aGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHdoZW4gaGFuZGxpbmcgdGhlIGBPcHRfbWF4YCBwYXJhbWV0ZXIuIFNwZWNpZmljYWxseSwgaXQgbm93IHZhbGlkYXRlcyB0aGF0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwc2V1ZG8tdGVybWluYWxzIGFsbG93ZWQgKGBvcHRzLVx1MDAzZW1heGApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBIHplcm8gdmFsdWUgaXMgbm93IGNvbnNpZGVyZWQgaW52YWxpZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgYGZzL2RldnB0cy9pbm9kZS5jYCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBgT3B0X21heGAgcGFyYW1ldGVyIGJlaW5nIHBhcnNlZC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIGNvZGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBhIHJlYXNvbmFibGUgZml4IGZvciBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxOTowOC45MzM5MDY2MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RldnB0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kZXZwdHMvTWFrZWZpbGUtNS1cXG5mcy9kZXZwdHMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVU5JWDk4X1BUWVMpXFx0XFx0Kz0gZGV2cHRzLm9cXG5mcy9kZXZwdHMvTWFrZWZpbGUtNy1cXG5mcy9kZXZwdHMvTWFrZWZpbGU6ODpkZXZwdHMtJChDT05GSUdfVU5JWDk4X1BUWVMpXFx0XFx0Oj0gaW5vZGUub1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMy0gKlxcbmZzL2RldnB0cy9pbm9kZS5jOjQ6ICogbGludXgvZnMvZGV2cHRzL2lub2RlLmNcXG5mcy9kZXZwdHMvaW5vZGUuYy01LSAqXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxuZnMvZGV2cHRzL2lub2RlLmM6MjU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldnB0c19mcy5oXFx1MDAzZVxcbmZzL2RldnB0cy9pbm9kZS5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc25vdGlmeS5oXFx1MDAzZVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9ODY9ZW51bSB7XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy05MC1cXG5mcy9kZXZwdHMvaW5vZGUuYzo5MTpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGRldnB0c19wYXJhbV9zcGVjc1tdID0ge1xcbmZzL2RldnB0cy9pbm9kZS5jLTkyLVxcdGZzcGFyYW1fZ2lkXFx0KFxcXCJnaWRcXFwiLFxcdFxcdE9wdF9naWQpLFxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9MTA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHB0c19mc19pbmZvICpERVZQVFNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTExMi1cXG5mcy9kZXZwdHMvaW5vZGUuYzoxMTM6c3RhdGljIGludCBkZXZwdHNfcHRteF9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKVxcbmZzL2RldnB0cy9pbm9kZS5jLTExNC17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0xMTctXFxuZnMvZGV2cHRzL2lub2RlLmM6MTE4OlxcdC8qIElzIGEgZGV2cHRzIGZpbGVzeXN0ZW0gYXQgXFxcInB0c1xcXCIgaW4gdGhlIHNhbWUgZGlyZWN0b3J5PyAqL1xcbmZzL2RldnB0cy9pbm9kZS5jLTExOS1cXHRlcnIgPSBwYXRoX3B0cyhwYXRoKTtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTEyMi1cXG5mcy9kZXZwdHMvaW5vZGUuYzoxMjM6XFx0LyogSXMgdGhlIHBhdGggdGhlIHJvb3Qgb2YgYSBkZXZwdHMgZmlsZXN5c3RlbT8gKi9cXG5mcy9kZXZwdHMvaW5vZGUuYy0xMjQtXFx0c2IgPSBwYXRoLVxcdTAwM2VtbnQtXFx1MDAzZW1udF9zYjtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTEzMi0vKlxcbmZzL2RldnB0cy9pbm9kZS5jOjEzMzogKiBUcnkgdG8gZmluZCBhIHN1aXRhYmxlIGRldnB0cyBmaWxlc3lzdGVtLiBXZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmdcXG5mcy9kZXZwdHMvaW5vZGUuYy0xMzQtICogc2NlbmFyaW9zOlxcbmZzL2RldnB0cy9pbm9kZS5jOjEzNTogKiAtIFRoZSBwdG14IGRldmljZSBub2RlIGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBkZXZwdHNcXG5mcy9kZXZwdHMvaW5vZGUuYy0xMzYtICogICBtb3VudCB3aGVyZSB0aGUgcHRzIGRldmljZSBub2RlcyBhcmUgbG9jYXRlZC5cXG5mcy9kZXZwdHMvaW5vZGUuYy0xMzctICogICBUaGlzIGlzIGUuZy4gdGhlIGNhc2Ugd2hlbiBjYWxsaW5nIG9wZW4gb24gdGhlIC9kZXYvcHRzL3B0bXggZGV2aWNlXFxuZnMvZGV2cHRzL2lub2RlLmM6MTM4OiAqICAgbm9kZSB3aGVuIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGF0IC9kZXYvcHRzLlxcbmZzL2RldnB0cy9pbm9kZS5jOjEzOTogKiAtIFRoZSBwdG14IGRldmljZSBub2RlIGlzIGxvY2F0ZWQgb3V0c2lkZSB0aGUgZGV2cHRzIGZpbGVzeXN0ZW0gbW91bnRcXG5mcy9kZXZwdHMvaW5vZGUuYy0xNDAtICogICB3aGVyZSB0aGUgcHRzIGRldmljZSBub2RlcyBhcmUgbG9jYXRlZC4gRm9yIGV4YW1wbGUsIHRoZSBwdG14IGRldmljZVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMTQ0LSAqICAgc3ViZGlyZWN0b3J5IGNhbiBiZSBmb3VuZCBpbiB0aGUgY29tbW9uIHBhcmVudCBkaXJlY3RvcnkgL2RldiBvZiB0aGVcXG5mcy9kZXZwdHMvaW5vZGUuYzoxNDU6ICogICBkZXZwdHMgbW91bnQgYW5kIHRoZSBwdG14IGJpbmQtbW91bnQsIGFmdGVyIHJlc29sdmluZyB0aGUgL2Rldi9wdG14XFxuZnMvZGV2cHRzL2lub2RlLmMtMTQ2LSAqICAgYmluZC1tb3VudC5cXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTE0OS0gKi9cXG5mcy9kZXZwdHMvaW5vZGUuYzoxNTA6c3RydWN0IHZmc21vdW50ICpkZXZwdHNfbW50Z2V0KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG5mcy9kZXZwdHMvaW5vZGUuYy0xNTEte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMTY0LVxcbmZzL2RldnB0cy9pbm9kZS5jOjE2NTpcXHQvKiBkZXZwdHNfcHRteF9wYXRoKCkgZmluZHMgYSBkZXZwdHMgZnMgb3IgcmV0dXJucyBhbiBlcnJvci4gKi9cXG5mcy9kZXZwdHMvaW5vZGUuYy0xNjYtXFx0aWYgKChwYXRoLm1udC1cXHUwMDNlbW50X3NiLVxcdTAwM2VzX21hZ2ljICE9IERFVlBUU19TVVBFUl9NQUdJQykgfHxcXG5mcy9kZXZwdHMvaW5vZGUuYy0xNjctXFx0ICAgIChERVZQVFNfU0IocGF0aC5tbnQtXFx1MDAzZW1udF9zYikgIT0gZnNpKSlcXG5mcy9kZXZwdHMvaW5vZGUuYzoxNjg6XFx0XFx0ZXJyID0gZGV2cHRzX3B0bXhfcGF0aChcXHUwMDI2cGF0aCk7XFxuZnMvZGV2cHRzL2lub2RlLmMtMTY5LVxcdGRwdXQocGF0aC5kZW50cnkpO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMTgwLVxcbmZzL2RldnB0cy9pbm9kZS5jOjE4MTpzdHJ1Y3QgcHRzX2ZzX2luZm8gKmRldnB0c19hY3F1aXJlKHN0cnVjdCBmaWxlICpmaWxwKVxcbmZzL2RldnB0cy9pbm9kZS5jLTE4Mi17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0xODktXFxuZnMvZGV2cHRzL2lub2RlLmM6MTkwOlxcdC8qIEhhcyB0aGUgZGV2cHRzIGZpbGVzeXN0ZW0gYWxyZWFkeSBiZWVuIGZvdW5kPyAqL1xcbmZzL2RldnB0cy9pbm9kZS5jLTE5MS1cXHRpZiAocGF0aC5tbnQtXFx1MDAzZW1udF9zYi1cXHUwMDNlc19tYWdpYyAhPSBERVZQVFNfU1VQRVJfTUFHSUMpIHtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTE5My1cXG5mcy9kZXZwdHMvaW5vZGUuYzoxOTQ6XFx0XFx0ZXJyID0gZGV2cHRzX3B0bXhfcGF0aChcXHUwMDI2cGF0aCk7XFxuZnMvZGV2cHRzL2lub2RlLmMtMTk1LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTIxMi1cXG5mcy9kZXZwdHMvaW5vZGUuYzoyMTM6dm9pZCBkZXZwdHNfcmVsZWFzZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG5mcy9kZXZwdHMvaW5vZGUuYy0yMTQte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMjE4LS8qXFxuZnMvZGV2cHRzL2lub2RlLmM6MjE5OiAqIGRldnB0c19wYXJzZV9wYXJhbSAtIFBhcnNlIG1vdW50IHBhcmFtZXRlcnNcXG5mcy9kZXZwdHMvaW5vZGUuYy0yMjAtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6MjIxOnN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvZGV2cHRzL2lub2RlLmMtMjIyLXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTIyNy1cXG5mcy9kZXZwdHMvaW5vZGUuYzoyMjg6XFx0b3B0ID0gZnNfcGFyc2UoZmMsIGRldnB0c19wYXJhbV9zcGVjcywgcGFyYW0sIFxcdTAwMjZyZXN1bHQpO1xcbmZzL2RldnB0cy9pbm9kZS5jLTIyOS1cXHRpZiAob3B0IFxcdTAwM2MgMClcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTI2MT1zdGF0aWMgaW50IG1rbm9kX3B0bXgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMjc4LVxcdC8qXFxuZnMvZGV2cHRzL2lub2RlLmM6Mjc5OlxcdCAqIENyZWF0ZSBhIG5ldyAncHRteCcgbm9kZSBpbiB0aGlzIG1vdW50IG9mIGRldnB0cy5cXG5mcy9kZXZwdHMvaW5vZGUuYy0yODAtXFx0ICovXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz0zMDQ9c3RhdGljIHZvaWQgdXBkYXRlX3B0bXhfbW9kZShzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTMwOC1cXG5mcy9kZXZwdHMvaW5vZGUuYzozMDk6c3RhdGljIGludCBkZXZwdHNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTMxMC17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0zMzctXFxuZnMvZGV2cHRzL2lub2RlLmM6MzM4OnN0YXRpYyBpbnQgZGV2cHRzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG5mcy9kZXZwdHMvaW5vZGUuYy0zMzkte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMzU2LVxcbmZzL2RldnB0cy9pbm9kZS5jOjM1NzpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGV2cHRzX3NvcHMgPSB7XFxuZnMvZGV2cHRzL2lub2RlLmMtMzU4LVxcdC5zdGF0ZnNcXHRcXHQ9IHNpbXBsZV9zdGF0ZnMsXFxuZnMvZGV2cHRzL2lub2RlLmM6MzU5OlxcdC5zaG93X29wdGlvbnNcXHQ9IGRldnB0c19zaG93X29wdGlvbnMsXFxuZnMvZGV2cHRzL2lub2RlLmMtMzYwLX07XFxuZnMvZGV2cHRzL2lub2RlLmMtMzYxLVxcbmZzL2RldnB0cy9pbm9kZS5jOjM2MjpzdGF0aWMgaW50IGRldnB0c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTM2My17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0zNzAtXFx0cy1cXHUwMDNlc19tYWdpYyA9IERFVlBUU19TVVBFUl9NQUdJQztcXG5mcy9kZXZwdHMvaW5vZGUuYzozNzE6XFx0cy1cXHUwMDNlc19vcCA9IFxcdTAwMjZkZXZwdHNfc29wcztcXG5mcy9kZXZwdHMvaW5vZGUuYy0zNzItXFx0cy1cXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTM5NS0vKlxcbmZzL2RldnB0cy9pbm9kZS5jOjM5NjogKiBkZXZwdHNfZ2V0X3RyZWUoKVxcbmZzL2RldnB0cy9pbm9kZS5jLTM5Ny0gKlxcbmZzL2RldnB0cy9pbm9kZS5jOjM5ODogKiAgICAgTW91bnQgYSBuZXcgKHByaXZhdGUpIGluc3RhbmNlIG9mIGRldnB0cy4gIFBUWXMgY3JlYXRlZCBpbiB0aGlzXFxuZnMvZGV2cHRzL2lub2RlLmM6Mzk5OiAqICAgICBpbnN0YW5jZSBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIFBUWXMgaW4gb3RoZXIgZGV2cHRzIGluc3RhbmNlcy5cXG5mcy9kZXZwdHMvaW5vZGUuYy00MDAtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NDAxOnN0YXRpYyBpbnQgZGV2cHRzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9kZXZwdHMvaW5vZGUuYy00MDIte1xcbmZzL2RldnB0cy9pbm9kZS5jOjQwMzpcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGRldnB0c19maWxsX3N1cGVyKTtcXG5mcy9kZXZwdHMvaW5vZGUuYy00MDQtfVxcbmZzL2RldnB0cy9pbm9kZS5jLTQwNS1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0MDY6c3RhdGljIHZvaWQgZGV2cHRzX2ZyZWVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTQwNy17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00MTAtXFxuZnMvZGV2cHRzL2lub2RlLmM6NDExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGRldnB0c19jb250ZXh0X29wcyA9IHtcXG5mcy9kZXZwdHMvaW5vZGUuYzo0MTI6XFx0LmZyZWVcXHRcXHQ9IGRldnB0c19mcmVlX2ZjLFxcbmZzL2RldnB0cy9pbm9kZS5jOjQxMzpcXHQucGFyc2VfcGFyYW1cXHQ9IGRldnB0c19wYXJzZV9wYXJhbSxcXG5mcy9kZXZwdHMvaW5vZGUuYzo0MTQ6XFx0LmdldF90cmVlXFx0PSBkZXZwdHNfZ2V0X3RyZWUsXFxuZnMvZGV2cHRzL2lub2RlLmM6NDE1OlxcdC5yZWNvbmZpZ3VyZVxcdD0gZGV2cHRzX3JlY29uZmlndXJlLFxcbmZzL2RldnB0cy9pbm9kZS5jLTQxNi19O1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDIwLSAqL1xcbmZzL2RldnB0cy9pbm9kZS5jOjQyMTpzdGF0aWMgaW50IGRldnB0c19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2RldnB0cy9pbm9kZS5jLTQyMi17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00NDAtXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGZzaTtcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NDE6XFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkZXZwdHNfY29udGV4dF9vcHM7XFxuZnMvZGV2cHRzL2lub2RlLmMtNDQyLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDQ0LVxcbmZzL2RldnB0cy9pbm9kZS5jOjQ0NTpzdGF0aWMgdm9pZCBkZXZwdHNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ0Ni17XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00NTQtXFxuZnMvZGV2cHRzL2lub2RlLmM6NDU1OnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXZwdHNfZnNfdHlwZSA9IHtcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NTY6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJkZXZwdHNcXFwiLFxcbmZzL2RldnB0cy9pbm9kZS5jOjQ1NzpcXHQuaW5pdF9mc19jb250ZXh0ID0gZGV2cHRzX2luaXRfZnNfY29udGV4dCxcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NTg6XFx0LnBhcmFtZXRlcnNcXHQ9IGRldnB0c19wYXJhbV9zcGVjcyxcXG5mcy9kZXZwdHMvaW5vZGUuYzo0NTk6XFx0LmtpbGxfc2JcXHQ9IGRldnB0c19raWxsX3NiLFxcbmZzL2RldnB0cy9pbm9kZS5jLTQ2MC1cXHQuZnNfZmxhZ3NcXHQ9IEZTX1VTRVJOU19NT1VOVCxcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ2Ny1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0Njg6aW50IGRldnB0c19uZXdfaW5kZXgoc3RydWN0IHB0c19mc19pbmZvICpmc2kpXFxuZnMvZGV2cHRzL2lub2RlLmMtNDY5LXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ4NC1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0ODU6dm9pZCBkZXZwdHNfa2lsbF9pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSwgaW50IGlkeClcXG5mcy9kZXZwdHMvaW5vZGUuYy00ODYte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDkxLS8qKlxcbmZzL2RldnB0cy9pbm9kZS5jOjQ5MjogKiBkZXZwdHNfcHR5X25ldyAtLSBjcmVhdGUgYSBuZXcgaW5vZGUgaW4gL2Rldi9wdHMvXFxuZnMvZGV2cHRzL2lub2RlLmMtNDkzLSAqIEBmc2k6IEZpbGVzeXN0ZW0gaW5mbyBmb3IgdGhpcyBpbnN0YW5jZS5cXG5mcy9kZXZwdHMvaW5vZGUuYy00OTQtICogQGluZGV4OiB1c2VkIGFzIGEgbmFtZSBvZiB0aGUgbm9kZVxcbmZzL2RldnB0cy9pbm9kZS5jOjQ5NTogKiBAcHJpdjogd2hhdCdzIGdpdmVuIGJhY2sgYnkgZGV2cHRzX2dldF9wcml2XFxuZnMvZGV2cHRzL2lub2RlLmMtNDk2LSAqXFxuZnMvZGV2cHRzL2lub2RlLmMtNDk3LSAqIFRoZSBkZW50cnkgZm9yIHRoZSBjcmVhdGVkIGlub2RlIGlzIHJldHVybmVkLlxcbmZzL2RldnB0cy9pbm9kZS5jOjQ5ODogKiBSZW1vdmUgaXQgZnJvbSAvZGV2L3B0cy8gd2l0aCBkZXZwdHNfcHR5X2tpbGwoKS5cXG5mcy9kZXZwdHMvaW5vZGUuYy00OTktICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NTAwOnN0cnVjdCBkZW50cnkgKmRldnB0c19wdHlfbmV3KHN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpLCBpbnQgaW5kZXgsIHZvaWQgKnByaXYpXFxuZnMvZGV2cHRzL2lub2RlLmMtNTAxLXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTUzNi0vKipcXG5mcy9kZXZwdHMvaW5vZGUuYzo1Mzc6ICogZGV2cHRzX2dldF9wcml2IC0tIGdldCBwcml2YXRlIGRhdGEgZm9yIGEgc2xhdmVcXG5mcy9kZXZwdHMvaW5vZGUuYy01MzgtICogQGRlbnRyeTogZGVudHJ5IG9mIHRoZSBzbGF2ZVxcbmZzL2RldnB0cy9pbm9kZS5jLTUzOS0gKlxcbmZzL2RldnB0cy9pbm9kZS5jOjU0MDogKiBSZXR1cm5zIHdoYXRldmVyIHdhcyBwYXNzZWQgYXMgcHJpdiBpbiBkZXZwdHNfcHR5X25ldyBmb3IgYSBnaXZlbiBpbm9kZS5cXG5mcy9kZXZwdHMvaW5vZGUuYy01NDEtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NTQyOnZvaWQgKmRldnB0c19nZXRfcHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvZGV2cHRzL2lub2RlLmMtNTQzLXtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTU0OS0vKipcXG5mcy9kZXZwdHMvaW5vZGUuYzo1NTA6ICogZGV2cHRzX3B0eV9raWxsIC0tIHJlbW92ZSBpbm9kZSBmb3JtIC9kZXYvcHRzL1xcbmZzL2RldnB0cy9pbm9kZS5jLTU1MS0gKiBAZGVudHJ5OiBkZW50cnkgb2YgdGhlIHNsYXZlIHRvIGJlIHJlbW92ZWRcXG5mcy9kZXZwdHMvaW5vZGUuYy01NTItICpcXG5mcy9kZXZwdHMvaW5vZGUuYzo1NTM6ICogVGhpcyBpcyBhbiBpbnZlcnNlIG9wZXJhdGlvbiBvZiBkZXZwdHNfcHR5X25ldy5cXG5mcy9kZXZwdHMvaW5vZGUuYy01NTQtICovXFxuZnMvZGV2cHRzL2lub2RlLmM6NTU1OnZvaWQgZGV2cHRzX3B0eV9raWxsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9kZXZwdHMvaW5vZGUuYy01NTYte1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNTY1LVxcbmZzL2RldnB0cy9pbm9kZS5jOjU2NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2RldnB0c19mcyh2b2lkKVxcbmZzL2RldnB0cy9pbm9kZS5jLTU2Ny17XFxuZnMvZGV2cHRzL2lub2RlLmM6NTY4OlxcdGludCBlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZkZXZwdHNfZnNfdHlwZSk7XFxuZnMvZGV2cHRzL2lub2RlLmMtNTY5LVxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy01NzMtfVxcbmZzL2RldnB0cy9pbm9kZS5jOjU3NDptb2R1bGVfaW5pdChpbml0X2RldnB0c19mcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTk6MDguOTgwOTcwOTY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxNDcyODc1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIERldnB0cyBGaWxlc3lzdGVtKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhcnNlZCBpbiB0aGUgYGRldnB0c2AgZmlsZXN5c3RlbS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZnMvZGV2cHRzL2lub2RlLmNgLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBgZGV2cHRzX3BhcnNlX3BhcmFtYCBmdW5jdGlvbiBhbmQgaG93IGl0J3MgYWN0dWFsbHkgdXNlZC4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGJ5IGNoZWNraW5nIGl0IG91dCBhcm91bmQgbGluZSAyNDkgb2YgdGhhdCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMDoxMS4xMjgyNjEwMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kZXZwdHMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0ICovXFxuIDIyMTpcXHRzdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbiAyMjI6XFx0e1xcbiAyMjM6XFx0XFx0c3RydWN0IHB0c19mc19pbmZvICpmc2kgPSBmYy1cXHUwMDNlc19mc19pbmZvO1xcbiAyMjQ6XFx0XFx0c3RydWN0IHB0c19tb3VudF9vcHRzICpvcHRzID0gXFx1MDAyNmZzaS1cXHUwMDNlbW91bnRfb3B0cztcXG4gMjI1OlxcdFxcdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xcbiAyMjY6XFx0XFx0aW50IG9wdDtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0b3B0ID0gZnNfcGFyc2UoZmMsIGRldnB0c19wYXJhbV9zcGVjcywgcGFyYW0sIFxcdTAwMjZyZXN1bHQpO1xcbiAyMjk6XFx0XFx0aWYgKG9wdCBcXHUwMDNjIDApXFxuIDIzMDpcXHRcXHRcXHRyZXR1cm4gb3B0O1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiAyMzM6XFx0XFx0Y2FzZSBPcHRfdWlkOlxcbiAyMzQ6XFx0XFx0XFx0b3B0cy1cXHUwMDNldWlkID0gcmVzdWx0LnVpZDtcXG4gMjM1OlxcdFxcdFxcdG9wdHMtXFx1MDAzZXNldHVpZCA9IDE7XFxuIDIzNjpcXHRcXHRcXHRicmVhaztcXG4gMjM3OlxcdFxcdGNhc2UgT3B0X2dpZDpcXG4gMjM4OlxcdFxcdFxcdG9wdHMtXFx1MDAzZWdpZCA9IHJlc3VsdC5naWQ7XFxuIDIzOTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VzZXRnaWQgPSAxO1xcbiAyNDA6XFx0XFx0XFx0YnJlYWs7XFxuIDI0MTpcXHRcXHRjYXNlIE9wdF9tb2RlOlxcbiAyNDI6XFx0XFx0XFx0b3B0cy1cXHUwMDNlbW9kZSA9IHJlc3VsdC51aW50XzMyIFxcdTAwMjYgU19JQUxMVUdPO1xcbiAyNDM6XFx0XFx0XFx0YnJlYWs7XFxuIDI0NDpcXHRcXHRjYXNlIE9wdF9wdG14bW9kZTpcXG4gMjQ1OlxcdFxcdFxcdG9wdHMtXFx1MDAzZXB0bXhtb2RlID0gcmVzdWx0LnVpbnRfMzIgXFx1MDAyNiBTX0lBTExVR087XFxuIDI0NjpcXHRcXHRcXHRicmVhaztcXG4gMjQ3OlxcdFxcdGNhc2UgT3B0X25ld2luc3RhbmNlOlxcbiAyNDg6XFx0XFx0XFx0YnJlYWs7XFxuIDI0OTpcXHRcXHRjYXNlIE9wdF9tYXg6XFxuIDI1MDpcXHRcXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgXFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcXG4gMjUxOlxcdFxcdFxcdFxcdHJldHVybiBpbnZhbGYoZmMsIFxcXCJtYXggb3V0IG9mIHJhbmdlXFxcIik7XFxuIDI1MjpcXHRcXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgPT0gMClcXG4gMjUzOlxcdFxcdFxcdFxcdHJldHVybiBpbnZhbGYoZmMsIFxcXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMFxcXCIpO1xcbiAyNTQ6XFx0XFx0XFx0b3B0cy1cXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XFxuIDI1NTpcXHRcXHRcXHRicmVhaztcXG4gMjU2OlxcdFxcdH1cXG4gMjU3OlxcdFxcbiAyNTg6XFx0XFx0cmV0dXJuIDA7XFxuIDI1OTpcXHR9XFxuIDI2MDpcXHRcXG4gMjYxOlxcdHN0YXRpYyBpbnQgbWtub2RfcHRteChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIDI2MjpcXHR7XFxuIDI2MzpcXHRcXHRpbnQgbW9kZTtcXG4gMjY0OlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjA6MTEuMTI4MzQxMDU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA2MDY1MDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYG9wdHMtXHUwMDNlbWF4YCB2YXJpYWJsZSBpbiB0aGUgYGRldnB0c2AgY29udGV4dDpcblxuKipBbmFseXppbmcgdGhlIFJvbGUgb2YgYG9wdHMtXHUwMDNlbWF4YCBpbiBkZXZwdHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG9wdHMtXHUwMDNlbWF4YCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYGRldnB0c2AgbW9kdWxlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBwaW5wb2ludCBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIGFueSBzdWJzZXF1ZW50IHVzYWdlLiBJJ20gdGhpbmtpbmcsIGlzIGl0IGEgc2l6ZSBsaW1pdCwgYSBjb3VudGVyLCBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiBhbmQgc2VlIHdoZXJlIGl0IHNob3dzIHVwLiBJcyBpdCBkZXJpdmVkIGZyb20gYSBzeXN0ZW0gc2V0dGluZywgYSB1c2VyIGlucHV0LCBvciBhIGhhcmRjb2RlZCBkZWZhdWx0PyBBbmQgaW1wb3J0YW50bHksIGhvdyBpcyB0aGlzIHZhbHVlIGludGVycHJldGVkIGFuZCBlbXBsb3llZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgYGRldnB0c2AgZmlsZXN5c3RlbT8gS25vd2luZyB3aGVyZSBhbmQgaG93IGBvcHRzLVx1MDAzZW1heGAgaXMgdXNlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGBkZXZwdHNgIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZSBmb3IgaXRzIHVzYWdlLCBhbmQgdGhlbiBJJ2xsIHRyYWNlIGJhY2sgaXRzIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIwOjE2LjE4ODk5NDIwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxODI2NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wdHMtXFx1MDAzZW1heHxmc2ktXFx1MDAzZW1vdW50X29wdHNcXFxcLm1heHxOUl9VTklYOThfUFRZX01BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kZXZwdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGV2cHRzL2lub2RlLmM9MjIxPXN0YXRpYyBpbnQgZGV2cHRzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0yNDktXFx0Y2FzZSBPcHRfbWF4OlxcbmZzL2RldnB0cy9pbm9kZS5jOjI1MDpcXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgXFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcXG5mcy9kZXZwdHMvaW5vZGUuYy0yNTEtXFx0XFx0XFx0cmV0dXJuIGludmFsZihmYywgXFxcIm1heCBvdXQgb2YgcmFuZ2VcXFwiKTtcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTI1My1cXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcXFwiKTtcXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTQ6XFx0XFx0b3B0cy1cXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XFxuZnMvZGV2cHRzL2lub2RlLmMtMjU1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9MzA5PXN0YXRpYyBpbnQgZGV2cHRzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTMyNC1cXHRmc2ktXFx1MDAzZW1vdW50X29wdHMucHRteG1vZGVcXHQ9IG5ldy1cXHUwMDNlbW91bnRfb3B0cy5wdG14bW9kZTtcXG5mcy9kZXZwdHMvaW5vZGUuYzozMjU6XFx0ZnNpLVxcdTAwM2Vtb3VudF9vcHRzLm1heFxcdFxcdD0gbmV3LVxcdTAwM2Vtb3VudF9vcHRzLm1heDtcXG5mcy9kZXZwdHMvaW5vZGUuYy0zMjYtXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz0zMzg9c3RhdGljIGludCBkZXZwdHNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMzUwLVxcdHNlcV9wcmludGYoc2VxLCBcXFwiLHB0bXhtb2RlPSUwM29cXFwiLCBvcHRzLVxcdTAwM2VwdG14bW9kZSk7XFxuZnMvZGV2cHRzL2lub2RlLmM6MzUxOlxcdGlmIChvcHRzLVxcdTAwM2VtYXggXFx1MDAzYyBOUl9VTklYOThfUFRZX01BWClcXG5mcy9kZXZwdHMvaW5vZGUuYzozNTI6XFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsbWF4PSVkXFxcIiwgb3B0cy1cXHUwMDNlbWF4KTtcXG5mcy9kZXZwdHMvaW5vZGUuYy0zNTMtXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz00MjE9c3RhdGljIGludCBkZXZwdHNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQzMy1cXHRmc2ktXFx1MDAzZW1vdW50X29wdHMucHRteG1vZGUgPSBERVZQVFNfREVGQVVMVF9QVE1YX01PREU7XFxuZnMvZGV2cHRzL2lub2RlLmM6NDM0OlxcdGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXggICAgID0gTlJfVU5JWDk4X1BUWV9NQVg7XFxuZnMvZGV2cHRzL2lub2RlLmMtNDM1LVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9NDY4PWludCBkZXZwdHNfbmV3X2luZGV4KHN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpKVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtNDc1LVxcbmZzL2RldnB0cy9pbm9kZS5jOjQ3NjpcXHRpbmRleCA9IGlkYV9hbGxvY19tYXgoXFx1MDAyNmZzaS1cXHUwMDNlYWxsb2NhdGVkX3B0eXMsIGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXggLSAxLFxcbmZzL2RldnB0cy9pbm9kZS5jLTQ3Ny1cXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjA6MTcuNjQwODI1MTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzEyMjg0MjY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiB0aGUgZGV2cHRzIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkZXZwdHNfbmV3X2luZGV4YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBhbGxvY2F0ZXMgaW5kZXhlcyB1c2luZyBgaWRhX2FsbG9jX21heGAuIEkgc2VlIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBsaW5lOiBgaW5kZXggPSBpZGFfYWxsb2NfbWF4KFx1MDAyNmZzaS1cdTAwM2VhbGxvY2F0ZWRfcHR5cywgZnNpLVx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgR0ZQX0tFUk5FTCk7YCBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgd2hhdCBoYXBwZW5zIGlmIGBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXhgIGlzIHplcm8uIFRoYXQgYC0gMWAgaXMgc2V0dGluZyBvZmYgYWxhcm0gYmVsbHMgYmVjYXVzZSBhIHplcm8gdmFsdWUsIHdoZW4gc3VidHJhY3RlZCBieSBvbmUsIHJlc3VsdHMgaW4gYC0xYCwgd2hpY2ggaXMgZWl0aGVyIGFuIGludmFsaWQgbWF4aW11bSB2YWx1ZSwgb3Igd29yc2UsIGNhbiBsZWFkIHRvIGludGVnZXIgdW5kZXJmbG93IGluIHRoZSBgaWRhX2FsbG9jX21heGAgZnVuY3Rpb24uIFRoaXMgd291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG5UaGUgcGF0Y2ggSSdtIHJldmlld2luZyBhZGRyZXNzZXMgdGhpcyBwcmVjaXNlbHkuIEl0IGFkZHMgYSBjaGVjayBpbiBgZGV2cHRzX3BhcnNlX3BhcmFtYCB0aGF0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIGBtYXhgIHZhbHVlLiBJZiBpdCdzIHplcm8sIHRoZSBjb2RlIG5vdyByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UsIFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXCIgVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIHByZXZlbnQgdGhhdCBwb3RlbnRpYWwgaW50ZWdlciB1bmRlcmZsb3cuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGBVTklYOThfUFRZU2AgdG8gZW5zdXJlIHRoaXMgaXMgcHJvcGVybHkgZW5hYmxlZC4gTGV0J3Mgc2VlIGlmIHdlJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MjAuNzYzNjcwNzc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwNzM2NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVTklYOThfUFRZU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS9LY29uZmlnPTc4PWNvbmZpZyBWVF9IV19DT05TT0xFX0JJTkRJTkdcXG4tLVxcbmRyaXZlcnMvdHR5L0tjb25maWctOTMtXFxuZHJpdmVycy90dHkvS2NvbmZpZzo5NDpjb25maWcgVU5JWDk4X1BUWVNcXG5kcml2ZXJzL3R0eS9LY29uZmlnLTk1LVxcdGJvb2wgXFxcIlVuaXg5OCBQVFkgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIxOjIyLjk2NDQxMzA2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTUyNzk4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0dHkvS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy90dHkvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmUgOTMgYW5kIHRoZSBzdXJyb3VuZGluZyBhcmVhLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gd2lsbCBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBUVFkgZHJpdmVycywgYW5kIEkgbmVlZCB0byByZXZpZXcgdGhlbSB0byB1bmRlcnN0YW5kIHdoYXQncyBhdmFpbGFibGUgYW5kIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmbGFncywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3MuIFRoaXMgZmlsZSBzaG91bGQgYmUgYSBrZXkgc291cmNlIGZvciBmaWd1cmluZyBvdXQgd2hpY2ggVFRZIGRyaXZlciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCwgYW5kIEkgd2FudCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBvc3NpYmxlIHZhcmlhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMToyNC45MTcyMTQ0MThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy90dHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY29uc29sZS5yc3RcXHUwMDNlIGZvciBtb3JlXFxuICA5MTpcXHRcXHQgIGluZm9ybWF0aW9uLiBGb3IgZnJhbWVidWZmZXIgY29uc29sZSB1c2VycywgcGxlYXNlIHJlZmVyIHRvXFxuICA5MjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmIvZmJjb24ucnN0XFx1MDAzZS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0Y29uZmlnIFVOSVg5OF9QVFlTXFxuICA5NTpcXHRcXHRib29sIFxcXCJVbml4OTggUFRZIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgOTY6XFx0XFx0ZGVmYXVsdCB5XFxuICA5NzpcXHRcXHRoZWxwXFxuICA5ODpcXHRcXHQgIEEgcHNldWRvIHRlcm1pbmFsIChQVFkpIGlzIGEgc29mdHdhcmUgZGV2aWNlIGNvbnNpc3Rpbmcgb2YgdHdvXFxuICA5OTpcXHRcXHQgIGhhbHZlczogYSBtYXN0ZXIgYW5kIGEgc2xhdmUuIFRoZSBzbGF2ZSBkZXZpY2UgYmVoYXZlcyBpZGVudGljYWwgdG9cXG4gMTAwOlxcdFxcdCAgYSBwaHlzaWNhbCB0ZXJtaW5hbDsgdGhlIG1hc3RlciBkZXZpY2UgaXMgdXNlZCBieSBhIHByb2Nlc3MgdG9cXG4gMTAxOlxcdFxcdCAgcmVhZCBkYXRhIGZyb20gYW5kIHdyaXRlIGRhdGEgdG8gdGhlIHNsYXZlLCB0aGVyZWJ5IGVtdWxhdGluZyBhXFxuIDEwMjpcXHRcXHQgIHRlcm1pbmFsLiBUeXBpY2FsIHByb2dyYW1zIGZvciB0aGUgbWFzdGVyIHNpZGUgYXJlIHRlbG5ldCBzZXJ2ZXJzXFxuIDEwMzpcXHRcXHQgIGFuZCB4dGVybXMuXFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdCAgTGludXggaGFzIHRyYWRpdGlvbmFsbHkgdXNlZCB0aGUgQlNELWxpa2UgbmFtZXMgL2Rldi9wdHl4eCBmb3JcXG4gMTA2OlxcdFxcdCAgbWFzdGVycyBhbmQgL2Rldi90dHl4eCBmb3Igc2xhdmVzIG9mIHBzZXVkbyB0ZXJtaW5hbHMuIFRoaXMgc2NoZW1lXFxuIDEwNzpcXHRcXHQgIGhhcyBhIG51bWJlciBvZiBwcm9ibGVtcy4gVGhlIEdOVSBDIGxpYnJhcnkgZ2xpYmMgMi4xIGFuZCBsYXRlcixcXG4gMTA4OlxcdFxcdCAgaG93ZXZlciwgc3VwcG9ydHMgdGhlIFVuaXg5OCBuYW1pbmcgc3RhbmRhcmQ6IGluIG9yZGVyIHRvIGFjcXVpcmUgYVxcbiAxMDk6XFx0XFx0ICBwc2V1ZG8gdGVybWluYWwsIGEgcHJvY2VzcyBvcGVucyAvZGV2L3B0bXg7IHRoZSBudW1iZXIgb2YgdGhlIHBzZXVkb1xcbiAxMTA6XFx0XFx0ICB0ZXJtaW5hbCBpcyB0aGVuIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9jZXNzIGFuZCB0aGUgcHNldWRvXFxuIDExMTpcXHRcXHQgIHRlcm1pbmFsIHNsYXZlIGNhbiBiZSBhY2Nlc3NlZCBhcyAvZGV2L3B0cy9cXHUwMDNjbnVtYmVyXFx1MDAzZS4gV2hhdCB3YXNcXG4gMTEyOlxcdFxcdCAgdHJhZGl0aW9uYWxseSAvZGV2L3R0eXAyIHdpbGwgdGhlbiBiZSAvZGV2L3B0cy8yLCBmb3IgZXhhbXBsZS5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0ICBBbGwgbW9kZXJuIExpbnV4IHN5c3RlbXMgdXNlIHRoZSBVbml4OTggcHR5cy4gIFNheSBZIHVubGVzc1xcbiAxMTU6XFx0XFx0ICB5b3UncmUgb24gYW4gZW1iZWRkZWQgc3lzdGVtIGFuZCB3YW50IHRvIGNvbnNlcnZlIG1lbW9yeS5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0Y29uZmlnIExFR0FDWV9QVFlTXFxuIDExODpcXHRcXHRib29sIFxcXCJMZWdhY3kgKEJTRCkgUFRZIHN1cHBvcnRcXFwiXFxuIDExOTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MjQuOTE3Mjk1NDI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMTg0Njc4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZGV2cHRzYCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGNhbiB3ZSBldmVuICpyZWFjaCogYGRldnB0c2AgaW4gYSB0eXBpY2FsIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50PyBZZXMsIG5vIHByb2JsZW0uIEl0J3MgdGhlIHN0YW5kYXJkIGAvZGV2L3B0c2AgZmlsZXN5c3RlbSwgbW91bnRlZCB1c2luZyBzdGFuZGFyZCBtZXRob2RzIGxpa2UgYG1vdW50YCB3aXRoIG9wdGlvbnMsIG9yIHRocm91Z2ggYGZzY29uZmlnYCBvciBgZnNvcGVuYCBzeXNjYWxscy4gVW5wcml2aWxlZ2VkIHVzZXJzIGNhbiBhY2Nlc3MgaXQgdGhhbmtzIHRvIGBGU19VU0VSTlNfTU9VTlRgLCBzbyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gQ2hlY2suXG5cbk5vdyBmb3IgdGhlIGNyaXRlcmlhOlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRob3NlIFZGUyBzeXNjYWxscy4gVGljay5cbiogICAqKkNvZGUgTW9kaWZpY2F0aW9uPyoqIFllcywgdGhlIGtleSBpcyBgZGV2cHRzX3BhcnNlX3BhcmFtYCBpbiBgZnMvZGV2cHRzL2lub2RlLmNgLiBUaGF0J3Mgd2hlcmUgd2Ugd2FudCB0byBmb2N1cy5cbiogICAqKldvcnRoRnV6emluZz8qKiBBYnNvbHV0ZWx5LCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5leHQsIHRoZSBzcGVjaWZpY3M6IEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy5cblxuV2UnbGwgZGVmaW5pdGVseSBuZWVkIHRoZSBgVU5JWDk4X1BUWVNgIGNvbmZpZyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBgZnMvZGV2cHRzL01ha2VmaWxlYCwgdGhhdCdzIHRoZSBrZXkuXG5cbkZvciBGb2N1c1N5bWJvbHMsIHdlJ3JlIGRlZmluaXRlbHkgemVyb2luZyBpbiBvbiBgZGV2cHRzX3BhcnNlX3BhcmFtYC4gSSdsbCBjb25zaWRlciBgZGV2cHRzX3JlY29uZmlndXJlYCwgYGRldnB0c19maWxsX3N1cGVyYCwgYW5kIGBkZXZwdHNfbmV3X2luZGV4YCwgYW5kIGBkZXZwdHNfaW5pdF9mc19jb250ZXh0YCBhcyBwb3NzaWJsZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBleGFtaW5lLlxuXG5gZGV2cHRzX3BhcnNlX3BhcmFtYCBsb29rcyBsaWtlIHRoZSBwcmltZSB0YXJnZXQgYmVjYXVzZSB0aGF0J3MgdGhlIG9uZSB0aGF0J3MgYWN0dWFsbHkgbW9kaWZpZWQuIE5vdywgaXMgYGRldnB0c19wYXJzZV9wYXJhbWAgc3RhdGljPyBZZXMsIGFuZCBpdCdzIHJlZmVyZW5jZWQgYnkgcG9pbnRlciBpbiBgZGV2cHRzX2NvbnRleHRfb3BzLnBhcnNlX3BhcmFtID0gZGV2cHRzX3BhcnNlX3BhcmFtYCB3aGljaCBtZWFucyBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gT2theSwgdGhhdCdzIGdvb2QuXG5cbkxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIG90aGVyIHN5bWJvbHMgaW4gYGZzL2RldnB0cy9pbm9kZS5jYDogWWVwLCBgZGV2cHRzX3BhcnNlX3BhcmFtYCwgYGRldnB0c19uZXdfaW5kZXhgLCBgZGV2cHRzX3JlY29uZmlndXJlYCwgYW5kIGBkZXZwdHNfZmlsbF9zdXBlcmAuXG5cbkZpbmFsbHksIGNvbmZpcm0gYFVOSVg5OF9QVFlTYCBpcyB0aGUgb25seSBjb25maWc6IHRoZSBgTWFrZWZpbGVgIGNvbmZpcm1zIGl0LiBOb3RoaW5nIGVsc2UgaXMgaW4gYGZzL2RldnB0c2AgdGhhdCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLlxuXG5TbywgaW4gc3VtbWFyeTogYGRldnB0c19wYXJzZV9wYXJhbWAgd2l0aCBgVU5JWDk4X1BUWVNgIGVuYWJsZWQgaXMgb3VyIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSdsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBidXQgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgdGhlIGNvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDEwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzAuMjM1NzY1NTM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJmcy9kZXZwdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiaW5vZGUuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTozMC4yMzU4MTAyMzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4Mjk4MTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgZGV2cHRzIE1vdW50IFBhcmFtZXRlciBQYXJzZXIqKlxuXG5Pa2F5LCBzbyB0aGUgc2NvcGUgaXMgcmVhbGx5IGp1c3QgYGlub2RlLmNgIOKAkyB0aGF0J3MgdGhlIHByaW1hcnkgdGFyZ2V0LiBCZWZvcmUgZGl2aW5nIGluLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGtub3cgYFVOSVg5OF9QVFlTYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3R0eS9LY29uZmlnYCwgYnV0IHRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCB0aGluZy4gQW5kLCBvZiBjb3Vyc2UsIGBUVFlgIGlzIGVzc2VudGlhbGx5IGltcGxpZWQgYnkgYSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvcmUgcmVhc29uaW5nLiBFc3NlbnRpYWxseSwgSSdtIG1vZGlmeWluZyB0aGUgYGRldnB0c19wYXJzZV9wYXJhbWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyByZWplY3RpbmcgYSBgbWF4PTBgIHBhcmFtZXRlci4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGRldnB0cyBpcyBhIGNvcmUgcHNldWRvLWZpbGVzeXN0ZW0uIEl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBtb3VudCwgZnNvcGVuLCBhbmQgZnNjb25maWcgc3lzY2FsbHMsIHdoaWNoIG1lYW5zIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCeSBjcmFmdGluZyB0ZXN0cyB0aGF0IGludGVyYWN0IHdpdGggcHRzIGFsbG9jYXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbW91bnQvcmVtb3VudCBwYXJhbWV0ZXJzLCB3ZSBjYW4gcHJvYmUgZm9yIHZ1bG5lcmFiaWxpdGllcy5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGVzc2VudGlhbHMuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTksIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTozMy4zMTg3OTM3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDQ2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYOThfUFRZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnB0c19wYXJzZV9wYXJhbVwiLFxuICAgIFwiZGV2cHRzX3JlY29uZmlndXJlXCIsXG4gICAgXCJkZXZwdHNfbmV3X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJ21heCcgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYOThfUFRZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnB0c19wYXJzZV9wYXJhbVwiLFxuICAgIFwiZGV2cHRzX3JlY29uZmlndXJlXCIsXG4gICAgXCJkZXZwdHNfbmV3X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyYW1ldGVyIHBhcnNpbmcgbG9naWMgaW4gZGV2cHRzX3BhcnNlX3BhcmFtIChmcy9kZXZwdHMvaW5vZGUuYykgdG8gdmFsaWRhdGUgdGhhdCB0aGUgJ21heCcgbW91bnQgcGFyYW1ldGVyIGlzIG5vbi16ZXJvLiBUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gaXMgcmVhY2hhYmxlIHZpYSBtb3VudCBhbmQgZnNvcGVuL2ZzY29uZmlnIHN5c2NhbGxzIGZyb20gdXNlcnNwYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzMuMzk1ODQ2NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTY0MjgwMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzMuMzk2MzE4NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzk2MzgwNTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVxcdTAwM2Vtb3VudF9vcHRzLm1heCAtIDEsIC4uLilgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWE2ZDRkYzEzNGNjNDZjNGQ4ZmY0MjY2N2RiZjkxZWI3ZjY2MzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNToxOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmNcbmluZGV4IDk4NDRkY2YzNTRlZTkuLmJkMWU4ZWIyNmVkYjcgMTAwNjQ0XG4tLS0gYS9mcy9kZXZwdHMvaW5vZGUuY1xuKysrIGIvZnMvZGV2cHRzL2lub2RlLmNcbkBAIC0yNDksNiArMjQ5LDggQEAgc3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiBcdGNhc2UgT3B0X21heDpcbiBcdFx0aWYgKHJlc3VsdC51aW50XzMyIFx1MDAzZSBOUl9VTklYOThfUFRZX01BWClcbiBcdFx0XHRyZXR1cm4gaW52YWxmKGZjLCBcIm1heCBvdXQgb2YgcmFuZ2VcIik7XG4rXHRcdGlmIChyZXN1bHQudWludF8zMiA9PSAwKVxuK1x0XHRcdHJldHVybiBpbnZhbGYoZmMsIFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gXHRcdG9wdHMtXHUwMDNlbWF4ID0gcmVzdWx0LnVpbnRfMzI7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6MzMuMzk2MzE5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODAyMTM1ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGV2cHRzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYGZzL2RldnB0cy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRldnB0c19wYXJzZV9wYXJhbWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrOiBpZiBgb3B0cy1cdTAwM2VtYXhgICh3aGljaCBJIGFzc3VtZSBpcyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUgZGV2cHRzIGZpbGVzeXN0ZW0pIGlzIHNldCB0byB6ZXJvLCB0aGVuIHRoZSBtb3VudCBvcGVyYXRpb24gc2hvdWxkIGZhaWwuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBlbmZvcmNpbmcgdGhhdCBgbWF4YCBiZSBncmVhdGVyIHRoYW4gemVybz8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYSB6ZXJvIHZhbHVlIHdvdWxkIHByb2JhYmx5IGxlYWQgdG8gaXNzdWVzLCBsaWtlIHByZXZlbnRpbmcgdGhlIGNyZWF0aW9uIG9mIG5ldyBwc2V1ZG8tdGVybWluYWxzLCBvciBjYXVzaW5nIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIHNvbWV3aGVyZSBkb3duc3RyZWFtIHdoZW4gY2FsY3VsYXRpbmcgbGltaXRzLiBJdCdzIGEgc2Vuc2libGUgYWRkaXRpb24sIHByZXZlbnRpbmcgYSBsaWtlbHkgZWRnZSBjYXNlLlxuXG5UbyBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgdGhlIGZ1bGwgY29udGV4dC4gSSdsbCBjaGVjayBgZnMvZGV2cHRzL2lub2RlLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGRldnB0c19wYXJzZV9wYXJhbWAgaXMgY2FsbGVkLCBob3cgYG9wdHMtXHUwMDNlbWF4YCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIG1vZHVsZSwgYW5kIHdoYXQgb3RoZXIgcGFyYW1ldGVycyB0aGUgZmlsZXN5c3RlbSBhY2NlcHRzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYWRkaXRpb24gaXMgY29tcGxldGVseSBpc29sYXRlZCBvciBpZiBpdCBoYXMgc29tZSByaXBwbGUgZWZmZWN0IG9uIG90aGVyIHBvcnRpb25zIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHRoYXQgbWlnaHQgaW1wbGljaXRseSBkZXBlbmQgb24gdGhlcmUgYmVpbmcgKnNvbWUqIGFsbG93YWJsZSB2YWx1ZSBmb3IgYG1heGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTo0My4xOTg0NTc5OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGV2cHRzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIwOlxcdCAqL1xcbiAyMjE6XFx0c3RhdGljIGludCBkZXZwdHNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4gMjIyOlxcdHtcXG4gMjIzOlxcdFxcdHN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4gMjI0OlxcdFxcdHN0cnVjdCBwdHNfbW91bnRfb3B0cyAqb3B0cyA9IFxcdTAwMjZmc2ktXFx1MDAzZW1vdW50X29wdHM7XFxuIDIyNTpcXHRcXHRzdHJ1Y3QgZnNfcGFyc2VfcmVzdWx0IHJlc3VsdDtcXG4gMjI2OlxcdFxcdGludCBvcHQ7XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdG9wdCA9IGZzX3BhcnNlKGZjLCBkZXZwdHNfcGFyYW1fc3BlY3MsIHBhcmFtLCBcXHUwMDI2cmVzdWx0KTtcXG4gMjI5OlxcdFxcdGlmIChvcHQgXFx1MDAzYyAwKVxcbiAyMzA6XFx0XFx0XFx0cmV0dXJuIG9wdDtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gMjMzOlxcdFxcdGNhc2UgT3B0X3VpZDpcXG4gMjM0OlxcdFxcdFxcdG9wdHMtXFx1MDAzZXVpZCA9IHJlc3VsdC51aWQ7XFxuIDIzNTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VzZXR1aWQgPSAxO1xcbiAyMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDIzNzpcXHRcXHRjYXNlIE9wdF9naWQ6XFxuIDIzODpcXHRcXHRcXHRvcHRzLVxcdTAwM2VnaWQgPSByZXN1bHQuZ2lkO1xcbiAyMzk6XFx0XFx0XFx0b3B0cy1cXHUwMDNlc2V0Z2lkID0gMTtcXG4gMjQwOlxcdFxcdFxcdGJyZWFrO1xcbiAyNDE6XFx0XFx0Y2FzZSBPcHRfbW9kZTpcXG4gMjQyOlxcdFxcdFxcdG9wdHMtXFx1MDAzZW1vZGUgPSByZXN1bHQudWludF8zMiBcXHUwMDI2IFNfSUFMTFVHTztcXG4gMjQzOlxcdFxcdFxcdGJyZWFrO1xcbiAyNDQ6XFx0XFx0Y2FzZSBPcHRfcHRteG1vZGU6XFxuIDI0NTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VwdG14bW9kZSA9IHJlc3VsdC51aW50XzMyIFxcdTAwMjYgU19JQUxMVUdPO1xcbiAyNDY6XFx0XFx0XFx0YnJlYWs7XFxuIDI0NzpcXHRcXHRjYXNlIE9wdF9uZXdpbnN0YW5jZTpcXG4gMjQ4OlxcdFxcdFxcdGJyZWFrO1xcbiAyNDk6XFx0XFx0Y2FzZSBPcHRfbWF4OlxcbiAyNTA6XFx0XFx0XFx0aWYgKHJlc3VsdC51aW50XzMyIFxcdTAwM2UgTlJfVU5JWDk4X1BUWV9NQVgpXFxuIDI1MTpcXHRcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG91dCBvZiByYW5nZVxcXCIpO1xcbiAyNTI6XFx0XFx0XFx0aWYgKHJlc3VsdC51aW50XzMyID09IDApXFxuIDI1MzpcXHRcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcXFwiKTtcXG4gMjU0OlxcdFxcdFxcdG9wdHMtXFx1MDAzZW1heCA9IHJlc3VsdC51aW50XzMyO1xcbiAyNTU6XFx0XFx0XFx0YnJlYWs7XFxuIDI1NjpcXHRcXHR9XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdHJldHVybiAwO1xcbiAyNTk6XFx0fVxcbiAyNjA6XFx0XFxuIDI2MTpcXHRzdGF0aWMgaW50IG1rbm9kX3B0bXgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiAyNjI6XFx0e1xcbiAyNjM6XFx0XFx0aW50IG1vZGU7XFxuIDI2NDpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuIDI2NTpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiAyNjY6XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdCA9IHNiLVxcdTAwM2VzX3Jvb3Q7XFxuIDI2NzpcXHRcXHRzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSA9IERFVlBUU19TQihzYik7XFxuIDI2ODpcXHRcXHRzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHMgPSBcXHUwMDI2ZnNpLVxcdTAwM2Vtb3VudF9vcHRzO1xcbiAyNjk6XFx0XFx0a3VpZF90IHB0bXhfdWlkID0gY3VycmVudF9mc3VpZCgpO1xcbiAyNzA6XFx0XFx0a2dpZF90IHB0bXhfZ2lkID0gY3VycmVudF9mc2dpZCgpO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRkZW50cnkgPSBzaW1wbGVfc3RhcnRfY3JlYXRpbmcocm9vdCwgXFxcInB0bXhcXFwiKTtcXG4gMjczOlxcdFxcdGlmIChJU19FUlIoZGVudHJ5KSkge1xcbiAyNzQ6XFx0XFx0XFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gYWxsb2MgZGVudHJ5IGZvciBwdG14IG5vZGVcXFxcblxcXCIpO1xcbiAyNzU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGVudHJ5KTtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0LypcXG4gMjc5OlxcdFxcdCAqIENyZWF0ZSBhIG5ldyAncHRteCcgbm9kZSBpbiB0aGlzIG1vdW50IG9mIGRldnB0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjE6NDMuMTk4NTI5NzUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjgzNzI0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgb3B0cy1cdTAwM2VtYXhgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYG9wdHMtXHUwMDNlbWF4YCB2YXJpYWJsZS4gV2hlcmUncyBpdCBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGBkZXZwdHNgIGNvZGU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW5mbHVlbmNlLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gZmlyZSB1cCBgZ3JlcGAgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5zdGFuY2Ugb2YgYC1cdTAwM2VtYXhgIG9yLCB0byBiZSBzdXBlciBzcGVjaWZpYywgYG9wdHMtXHUwMDNlbWF4YCwgc2luY2UgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIGV4YWN0IG1lbWJlciBpcyBhY2Nlc3NlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhpcyB2YWx1ZSBpcyBiZWluZyB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBwcm9qZWN0LiBUaGUgZ29hbCBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGltcGFjdCBvZiBgb3B0cy1cdTAwM2VtYXhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyMTo0NS40MjY5MDU4MzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTUyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kZXZwdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGV2cHRzL2lub2RlLmM9NDU9c3RhdGljIGludCBwdHlfbGltaXRfbWluO1xcbmZzL2RldnB0cy9pbm9kZS5jOjQ2OnN0YXRpYyBpbnQgcHR5X2xpbWl0X21heCA9IElOVF9NQVg7XFxuZnMvZGV2cHRzL2lub2RlLmMtNDctc3RhdGljIGF0b21pY190IHB0eV9jb3VudCA9IEFUT01JQ19JTklUKDApO1xcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgcHR5X3RhYmxlW10gPSB7XFxuZnMvZGV2cHRzL2lub2RlLmMtNTAtXFx0e1xcbmZzL2RldnB0cy9pbm9kZS5jOjUxOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm1heFxcXCIsXFxuZnMvZGV2cHRzL2lub2RlLmM6NTI6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKGludCksXFxuZnMvZGV2cHRzL2lub2RlLmMtNTMtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuZnMvZGV2cHRzL2lub2RlLmMtNTQtXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZwdHlfbGltaXQsXFxuZnMvZGV2cHRzL2lub2RlLmM6NTU6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNTYtXFx0XFx0LmV4dHJhMVxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9taW4sXFxuZnMvZGV2cHRzL2lub2RlLmM6NTc6XFx0XFx0LmV4dHJhMlxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNTgtXFx0fSwge1xcbmZzL2RldnB0cy9pbm9kZS5jLTU5LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInJlc2VydmVcXFwiLFxcbmZzL2RldnB0cy9pbm9kZS5jOjYwOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbmZzL2RldnB0cy9pbm9kZS5jLTYxLVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbmZzL2RldnB0cy9pbm9kZS5jLTYyLVxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cHR5X3Jlc2VydmUsXFxuZnMvZGV2cHRzL2lub2RlLmM6NjM6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNjQtXFx0XFx0LmV4dHJhMVxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9taW4sXFxuZnMvZGV2cHRzL2lub2RlLmM6NjU6XFx0XFx0LmV4dHJhMlxcdFxcdD0gXFx1MDAyNnB0eV9saW1pdF9tYXgsXFxuZnMvZGV2cHRzL2lub2RlLmMtNjYtXFx0fSwge1xcbmZzL2RldnB0cy9pbm9kZS5jLTY3LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm5yXFxcIixcXG5mcy9kZXZwdHMvaW5vZGUuYzo2ODpcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG5mcy9kZXZwdHMvaW5vZGUuYy02OS1cXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTc1PXN0cnVjdCBwdHNfbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy04Mi1cXHRpbnQgcmVzZXJ2ZTtcXG5mcy9kZXZwdHMvaW5vZGUuYzo4MzpcXHRpbnQgbWF4O1xcbmZzL2RldnB0cy9pbm9kZS5jLTg0LX07XFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYz04Nj1lbnVtIHtcXG5mcy9kZXZwdHMvaW5vZGUuYzo4NzpcXHRPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfbW9kZSwgT3B0X3B0bXhtb2RlLCBPcHRfbmV3aW5zdGFuY2UsICBPcHRfbWF4LFxcbmZzL2RldnB0cy9pbm9kZS5jLTg4LVxcdE9wdF9lcnJcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZGV2cHRzX3BhcmFtX3NwZWNzW10gPSB7XFxuZnMvZGV2cHRzL2lub2RlLmMtOTItXFx0ZnNwYXJhbV9naWRcXHQoXFxcImdpZFxcXCIsXFx0XFx0T3B0X2dpZCksXFxuZnMvZGV2cHRzL2lub2RlLmM6OTM6XFx0ZnNwYXJhbV9zMzJcXHQoXFxcIm1heFxcXCIsXFx0XFx0T3B0X21heCksXFxuZnMvZGV2cHRzL2lub2RlLmMtOTQtXFx0ZnNwYXJhbV91MzJvY3RcXHQoXFxcIm1vZGVcXFwiLFxcdE9wdF9tb2RlKSxcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTIyMT1zdGF0aWMgaW50IGRldnB0c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmMtMjQ4LVxcdFxcdGJyZWFrO1xcbmZzL2RldnB0cy9pbm9kZS5jOjI0OTpcXHRjYXNlIE9wdF9tYXg6XFxuZnMvZGV2cHRzL2lub2RlLmMtMjUwLVxcdFxcdGlmIChyZXN1bHQudWludF8zMiBcXHUwMDNlIE5SX1VOSVg5OF9QVFlfTUFYKVxcbmZzL2RldnB0cy9pbm9kZS5jOjI1MTpcXHRcXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwibWF4IG91dCBvZiByYW5nZVxcXCIpO1xcbmZzL2RldnB0cy9pbm9kZS5jLTI1Mi1cXHRcXHRpZiAocmVzdWx0LnVpbnRfMzIgPT0gMClcXG5mcy9kZXZwdHMvaW5vZGUuYzoyNTM6XFx0XFx0XFx0cmV0dXJuIGludmFsZihmYywgXFxcIm1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXFxcIik7XFxuZnMvZGV2cHRzL2lub2RlLmM6MjU0OlxcdFxcdG9wdHMtXFx1MDAzZW1heCA9IHJlc3VsdC51aW50XzMyO1xcbmZzL2RldnB0cy9pbm9kZS5jLTI1NS1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTMwOT1zdGF0aWMgaW50IGRldnB0c19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy0zMjQtXFx0ZnNpLVxcdTAwM2Vtb3VudF9vcHRzLnB0bXhtb2RlXFx0PSBuZXctXFx1MDAzZW1vdW50X29wdHMucHRteG1vZGU7XFxuZnMvZGV2cHRzL2lub2RlLmM6MzI1OlxcdGZzaS1cXHUwMDNlbW91bnRfb3B0cy5tYXhcXHRcXHQ9IG5ldy1cXHUwMDNlbW91bnRfb3B0cy5tYXg7XFxuZnMvZGV2cHRzL2lub2RlLmMtMzI2LVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9MzM4PXN0YXRpYyBpbnQgZGV2cHRzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTM1MC1cXHRzZXFfcHJpbnRmKHNlcSwgXFxcIixwdG14bW9kZT0lMDNvXFxcIiwgb3B0cy1cXHUwMDNlcHRteG1vZGUpO1xcbmZzL2RldnB0cy9pbm9kZS5jOjM1MTpcXHRpZiAob3B0cy1cXHUwMDNlbWF4IFxcdTAwM2MgTlJfVU5JWDk4X1BUWV9NQVgpXFxuZnMvZGV2cHRzL2lub2RlLmM6MzUyOlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiLG1heD0lZFxcXCIsIG9wdHMtXFx1MDAzZW1heCk7XFxuZnMvZGV2cHRzL2lub2RlLmMtMzUzLVxcbi0tXFxuZnMvZGV2cHRzL2lub2RlLmM9NDIxPXN0YXRpYyBpbnQgZGV2cHRzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9kZXZwdHMvaW5vZGUuYy00MzMtXFx0ZnNpLVxcdTAwM2Vtb3VudF9vcHRzLnB0bXhtb2RlID0gREVWUFRTX0RFRkFVTFRfUFRNWF9NT0RFO1xcbmZzL2RldnB0cy9pbm9kZS5jOjQzNDpcXHRmc2ktXFx1MDAzZW1vdW50X29wdHMubWF4ICAgICA9IE5SX1VOSVg5OF9QVFlfTUFYO1xcbmZzL2RldnB0cy9pbm9kZS5jLTQzNS1cXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jPTQ2OD1pbnQgZGV2cHRzX25ld19pbmRleChzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaSlcXG4tLVxcbmZzL2RldnB0cy9pbm9kZS5jLTQ3NS1cXG5mcy9kZXZwdHMvaW5vZGUuYzo0NzY6XFx0aW5kZXggPSBpZGFfYWxsb2NfbWF4KFxcdTAwMjZmc2ktXFx1MDAzZWFsbG9jYXRlZF9wdHlzLCBmc2ktXFx1MDAzZW1vdW50X29wdHMubWF4IC0gMSxcXG5mcy9kZXZwdHMvaW5vZGUuYy00NzctXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIxOjQ1LjQ3NDA2NjQ4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg2MDM5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IGBkZXZwdHNfbmV3X2luZGV4YCBWdWxuZXJhYmlsaXR5IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGRldnB0c19uZXdfaW5kZXhgIGFuZCB0aGUgcG90ZW50aWFsIGlzc3VlIHN1cnJvdW5kaW5nIHRoZSBgbWF4YCBtb3VudCBvcHRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBob3cgYGlkYV9hbGxvY19tYXhgIGhhbmRsZXMgaXRzIGlucHV0LiBTcGVjaWZpY2FsbHksIGlmIGBmc2ktXHUwMDNlbW91bnRfb3B0cy5tYXhgIGlzIHplcm8sIHdlJ2QgaGF2ZSBhbiB1bmRlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIGAwIC0gMWAsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWxseSBpbnZhbGlkIGBpZGFfYWxsb2NfbWF4YCBjYWxsLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWF4YCBpcyB2YWxpZGF0ZWQgZHVyaW5nIHRoZSBtb3VudCBvcHRpb24gcGFyc2luZy5cblxuVGhlIHBhdGNoJ3MgYWRkaXRpb24gY2hlY2tzIGZvciBhIGBtYXhgIHZhbHVlIG9mIHplcm8uIElmIGl0IGlzLCB0aGUgbW91bnQgZmFpbHMsIHJldHVybmluZyBhbiBcImludmFsaWQgbWF4XCIgZXJyb3IuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPyBTcGVjaWZpY2FsbHksIGFtIEkgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIGluZm9ybWF0aW9uLCBsZWF2aW5nIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgbWVzc2luZyB3aXRoIHBhZGRpbmcsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZDogTm9wZSwgdGhpcyBvbmx5IHZhbGlkYXRlcyBhbiBpbnRlZ2VyIG1vdW50IHBhcmFtZXRlci5cblxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBObywgdGhlIGByZXN1bHRgIHZhcmlhYmxlIGlzIHBvcHVsYXRlZCB2aWEgYGZzX3BhcnNlYCwgc28gaXQncyBpbml0aWFsaXplZC5cblxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXI6IE5vLCBhZ2FpbiwgdGhpcyBpcyBzaW1wbHkgaW5wdXQgdmFsaWRhdGlvbiBvZiBhIHNpbmdsZSBpbnRlZ2VyLlxuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBsZXRzIHN1cnJvdW5kaW5nIGNvZGUgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6IEFic29sdXRlbHkgbm90LiBUaGlzIGlzIHN0cmFpZ2h0IGlucHV0IHZhbGlkYXRpb24sIGFuZCBgcmVzdWx0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIHRob3JvdWdoIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGlucHV0IHZhbGlkYXRpb24gZml4LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBoZXJlLCBhbmQgaXQncyBhIHZlcnkgY2xlYXItY3V0IGNhc2Ugb2Ygc2ltcGxlIGlucHV0IHZhbGlkYXRpb24uIFRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjcsIk91dHB1dFRva2VucyI6MTQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjIxOjUxLjM2MDEwNzg5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIGluIGBkZXZwdHNfcGFyc2VfcGFyYW1gIHRvIHJlamVjdCBhIG1vdW50IG9wdGlvbiB2YWx1ZSBvZiBgbWF4PTBgIChgbWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5kZXJmbG93IGluIGBpZGFfYWxsb2NfbWF4KC4uLiwgZnNpLVxcdTAwM2Vtb3VudF9vcHRzLm1heCAtIDEsIC4uLilgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBsb2dpYyBvbiBwYXJzZWQgaW50ZWdlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGlucHV0IHZhbGlkYXRpb24gY2hlY2sgaW4gYGRldnB0c19wYXJzZV9wYXJhbWAgdG8gcmVqZWN0IGEgbW91bnQgb3B0aW9uIHZhbHVlIG9mIGBtYXg9MGAgKGBtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gMGApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCB1bmRlcmZsb3cgaW4gYGlkYV9hbGxvY19tYXgoLi4uLCBmc2ktXFx1MDAzZW1vdW50X29wdHMubWF4IC0gMSwgLi4uKWAuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGxvZ2ljIG9uIHBhcnNlZCBpbnRlZ2Vycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzttt7[1] Phase: Succeeded StartedAt: 2026-09-04 05:22:02 +0000 UTC FinishedAt: 2026-09-04 05:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 05:22:02 +0000 UTC FinishedAt: 2026-09-04 05:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2] Phase: Succeeded StartedAt: 2026-09-04 05:22:02 +0000 UTC FinishedAt: 2026-09-04 09:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 05:22:02 +0000 UTC FinishedAt: 2026-09-04 09:02:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 05:22:02 +0000 UTC FinishedAt: 2026-09-04 05:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 05:22:02 +0000 UTC FinishedAt: 2026-09-04 05:22:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzttt7/series-workflowzttt7-convert-artifact-4277876677/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 05:22:12 +0000 UTC FinishedAt: 2026-09-04 05:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 05:22:12 +0000 UTC FinishedAt: 2026-09-04 05:39:48 +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:*caf66879-3c1b-46c0-9653-a2fb00088fe2,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-workflowzttt7/series-workflowzttt7-convert-artifact-4277876677/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": "b0535d6d-b164-456e-9408-0acb63f8b401", "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-workflowzttt7/series-workflowzttt7-build-action-2784747115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 05:22:12 +0000 UTC FinishedAt: 2026-09-04 05:39:38 +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:*caf66879-3c1b-46c0-9653-a2fb00088fe2,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-workflowzttt7/series-workflowzttt7-convert-artifact-4277876677/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": "b0535d6d-b164-456e-9408-0acb63f8b401", "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-workflowzttt7/series-workflowzttt7-build-action-2784747115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 05:39:48 +0000 UTC FinishedAt: 2026-09-04 05:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 05:39:48 +0000 UTC FinishedAt: 2026-09-04 05:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 05:39:48 +0000 UTC FinishedAt: 2026-09-04 05:39:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 05:39:48 +0000 UTC FinishedAt: 2026-09-04 05:39:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzttt7/series-workflowzttt7-convert-artifact-1855658656/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 05:39:58 +0000 UTC FinishedAt: 2026-09-04 05:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 05:39:58 +0000 UTC FinishedAt: 2026-09-04 05:41:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0535d6d-b164-456e-9408-0acb63f8b401,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-workflowzttt7/series-workflowzttt7-build-action-2784747115/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-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 05:41:55 +0000 UTC FinishedAt: 2026-09-04 05:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 05:41:55 +0000 UTC FinishedAt: 2026-09-04 05:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 05:41:55 +0000 UTC FinishedAt: 2026-09-04 05:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 05:41:55 +0000 UTC FinishedAt: 2026-09-04 05:58:42 +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:*caf66879-3c1b-46c0-9653-a2fb00088fe2,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-workflowzttt7/series-workflowzttt7-convert-artifact-1855658656/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": "a1effc1b-40d5-4a93-b545-efc2eb249a71", "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-workflowzttt7/series-workflowzttt7-build-action-2528907356/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 05:41:55 +0000 UTC FinishedAt: 2026-09-04 05:58:32 +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:*caf66879-3c1b-46c0-9653-a2fb00088fe2,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-workflowzttt7/series-workflowzttt7-convert-artifact-1855658656/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": "a1effc1b-40d5-4a93-b545-efc2eb249a71", "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-workflowzttt7/series-workflowzttt7-build-action-2528907356/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 05:58:42 +0000 UTC FinishedAt: 2026-09-04 05:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 05:58:42 +0000 UTC FinishedAt: 2026-09-04 05:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 05:58:42 +0000 UTC FinishedAt: 2026-09-04 06:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 05:58:42 +0000 UTC FinishedAt: 2026-09-04 06:00:41 +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:*a1effc1b-40d5-4a93-b545-efc2eb249a71,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-workflowzttt7/series-workflowzttt7-build-action-2528907356/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-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 06:00:51 +0000 UTC FinishedAt: 2026-09-04 09:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 06:00:51 +0000 UTC FinishedAt: 2026-09-04 09:02:28 +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":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"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:*b0535d6d-b164-456e-9408-0acb63f8b401,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a1effc1b-40d5-4a93-b545-efc2eb249a71,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-workflowzttt7/series-workflowzttt7-build-action-2784747115/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-workflowzttt7/series-workflowzttt7-build-action-2528907356/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 06:00:51 +0000 UTC FinishedAt: 2026-09-04 06:01:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 06:00:51 +0000 UTC FinishedAt: 2026-09-04 06:00:55 +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":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"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-workflowzttt7/series-workflowzttt7-convert-artifact-1142648313/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 06:00:51 +0000 UTC FinishedAt: 2026-09-04 06:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 06:00:51 +0000 UTC FinishedAt: 2026-09-04 06:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 06:00:51 +0000 UTC FinishedAt: 2026-09-04 06:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 06:01:01 +0000 UTC FinishedAt: 2026-09-04 09:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzttt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devpts_parse_param","devpts_reconfigure","devpts_new_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX98_PTYS"],"series_id":"7147fe7f-66db-48cc-a8d0-fdc863fe27f2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 06:01:01 +0000 UTC FinishedAt: 2026-09-04 09:02:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0535d6d-b164-456e-9408-0acb63f8b401,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a1effc1b-40d5-4a93-b545-efc2eb249a71,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-workflowzttt7/series-workflowzttt7-build-action-2784747115/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-workflowzttt7/series-workflowzttt7-build-action-2528907356/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-workflowzttt7/series-workflowzttt7-convert-artifact-1142648313/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,}