Name: series-workflowq6rml Phase: Succeeded StartedAt: 2026-08-04 10:14:04 +0000 UTC FinishedAt: 2026-08-04 11:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[0] Phase: Succeeded StartedAt: 2026-08-04 10:14:04 +0000 UTC FinishedAt: 2026-08-04 10:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 10:14:04 +0000 UTC FinishedAt: 2026-08-04 10:35:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9a4cdc958dd79fc6c3b20b51a10debec6ca09fec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO", "ZRAM_MULTI_COMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9a4cdc958dd79fc6c3b20b51a10debec6ca09fec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO", "ZRAM_MULTI_COMP" ], "series_id": "f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "algorithm_params_store", "comp_algorithm_store", "recomp_algorithm_store", "disksize_store", "zcomp_create" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0SEMmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX1pTVEQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EXzg0MiYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFpPJiMzNDssCiAgICAmIzM0O1pSQU1fTVVMVElfQ09NUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7Y29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gdmFyaW91cyB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzICg4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCB6c3RkKS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCB2aWEgc3lzZnMgKGUuZy4sIGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgKSBhbmQgdmFsaWRhdGVkIHdoZW4gdGhlIGNvbXByZXNzaW9uIGJhY2tlbmQgaXMgaW5pdGlhbGl6ZWQgKGUuZy4sIHdoZW4gc2V0dGluZyBgZGlza3NpemVgKS4gRnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcyBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0MDA1ZmI3YWQxZDllYzMwZDQ5NGJkMWY5MWIyMzhmZTY1ODVjNzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjMzOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbmluZGV4IDEwZDlkNWM2MGY1MzEuLjM4NDZhMDRjNjlkNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0Ozg0MjogXCYjMzQ7IGZtdFxuJiM0MztcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3ODQyLmhcdTAwM2VcbkBAIC0xMyw2ICYjNDM7MTUsMTQgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcbiBzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWRpY3Rfc3opIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWxldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG5pbmRleCBiM2Y3ZDA4YjQ5ZDkzLi5mNzFiMTFiY2FjNzg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2RlZmxhdGU6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbkBAIC0yMiwxNSAmIzQzOzI0LDI2IEBAIHN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWRpY3Rfc3opIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjtcbiYjNDM7XHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgWl9ERUZBVUxUX0NPTVBSRVNTSU9OIHx8XG4mIzQzO1x0XHQgICBwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNlIFpfQkVTVF9DT01QUkVTU0lPTikge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXG5cJiMzNDssIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gREVGTEFURV9ERUZfV0lOQklUUztcbiBcdH0gZWxzZSB7XG4gXHRcdHMzMiB3YiA9IHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHM7XG4gXG4gXHRcdGlmICgod2IgXHUwMDNjIC0xNSB8fCB3YiBcdTAwM2UgLTkpIFx1MDAyNlx1MDAyNiAod2IgXHUwMDNjIDkgfHwgd2IgXHUwMDNlIDE1KSkge1xuLVx0XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIGRlZmxhdGUgd2luYml0czogJWRcXG5cJiMzNDssIHdiKTtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgd2luYml0cyAlZFxcblwmIzM0Oywgd2IpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uMWUyODEwNGFkOTY0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTEsMyAmIzQzOzEsNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtsejQ6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sejQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTI4LDggJiM0MzszMiwxMiBAQCBzdGF0aWMgaW50IGx6NF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFx0TFo0X3N0cmVhbV90ICpkaWN0X3N0cmVhbTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVDtcbiYjNDM7XHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgTFo0X0FDQ0VMRVJBVElPTl9ERUZBVUxUKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7aW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcblwmIzM0OywgcGFyYW1zLVx1MDAzZWxldmVsKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdGlmICghcGFyYW1zLVx1MDAzZWRpY3QgfHwgIXBhcmFtcy1cdTAwM2VkaWN0X3N6KVxuIFx0XHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uZDhhYTAxYmIyNThmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xLDMgJiM0MzsxLDcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7bHo0aGM6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sejQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTE4LDggJiM0MzsyMiwxOCBAQCBzdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4gXG4gc3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0gTFo0SENfREVGQVVMVF9DTEVWRUw7XG4mIzQzO1x0fSBlbHNlIGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNjIDEgfHwgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSBMWjRIQ19NQVhfQ0xFVkVMKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVXNlIFx1MDAzYyAxIHJhdGhlciB0aGFuIFx1MDAzYyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZVxuJiM0MztcdFx0ICogTFo0SENfY29tcHJlc3NfZ2VuZXJpYygpIG9ubHkgY2xhbXBzIGxldmVscyBiZWxvdyAxXG4mIzQzO1x0XHQgKiAobGV2ZWxzIDEgYW5kIDIgYXJlIHZhbGlkKS4gTFo0SENfTUlOX0NMRVZFTCAoMykgaXNcbiYjNDM7XHRcdCAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCYjMzQ7LCBwYXJhbXMtXHUwMDNlbGV2ZWwpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLmQ4M2Y5MmNmNzU3Y2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2x6bzogXCYjMzQ7IGZtdFxuJiM0MztcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2x6by5oXHUwMDNlXG5AQCAtMTIsNiAmIzQzOzE0LDE0IEBAIHN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4gXG4gc3RhdGljIGludCBsem9fc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VkaWN0X3N6KSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7ZGljdGlvbmFyeSBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7Y29tcHJlc3Npb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbmluZGV4IDEwNjQwYzk2Y2JmY2EuLjFiMTIwZDA2MmM5MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2x6by1ybGU6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sem8uaFx1MDAzZVxuQEAgLTEyLDYgJiM0MzsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgbHpvcmxlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4ge1xuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlZGljdF9zeikge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2RpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2NvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjA4ZGEzODEwY2ZmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xuQEAgLTEsNSAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7enN0ZDogXCYjMzQ7IGZtdFxuJiM0MztcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuQEAgLTU4LDggJiM0Mzs2MCwxMyBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRwYXJhbXMtXHUwMDNlZHJ2X2RhdGEgPSB6cDtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0genN0ZF9kZWZhdWx0X2NsZXZlbCgpO1xuJiM0MztcdH0gZWxzZSBpZiAocGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzYyB6c3RkX21pbl9jbGV2ZWwoKSB8fFxuJiM0MztcdFx0ICAgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXG5cJiMzNDssIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiBcbiBcdHpwLVx1MDAzZWNwcm0gPSB6c3RkX2dldF9wYXJhbXMocGFyYW1zLVx1MDAzZWxldmVsLCBQQUdFX1NJWkUpO1xuIFxuQEAgLTg1LDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG5AQCAtMTYxLDcgJiM0MzsxNjcsNiBAQCBzdGF0aWMgaW50IHpzdGRfY3JlYXRlKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHR6c3RkX2Rlc3Ryb3koY3R4KTtcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBjZmE5ODg0NmFjNDg0Li41NjE4M2M4MjdlMWIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtMTY1Miw2ICYjNDM7MTY1MiwxNyBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4gXHR6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dO1xuJiM0MztcbiYjNDM7XHR2ZnJlZShwYXJhbXMtXHUwMDNlZGljdCk7XG4mIzQzO1x0cGFyYW1zLVx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbiYjNDM7XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbiYjNDM7XHRwYXJhbXMtXHUwMDNlZGljdF9zeiA9IDA7XG4mIzQzO1x0cGFyYW1zLVx1MDAzZWRpY3QgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbiB7XG4gXHRjb25zdCBjaGFyICphbGc7XG5AQCAtMTY3MiwyMCAmIzQzOzE2ODMsMTAgQEAgc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIFx0fVxuIFxuIFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XG4mIzQzO1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuLXtcbi1cdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dO1xuLVxuLVx0dmZyZWUocGFyYW1zLVx1MDAzZWRpY3QpO1xuLVx0cGFyYW1zLVx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbi1cdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3Rfc3ogPSAwO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3QgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqZGljdF9wYXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGRlZmxhdGVfcGFyYW1zICpkZWZsYXRlX3BhcmFtcylcbkBAIC0xNzAwLDggJiM0MzsxNzAxLDE2IEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0SU5UX01BWCxcbiBcdFx0XHRcdFx0XHROVUxMLFxuIFx0XHRcdFx0XHRcdFJFQURJTkdfUE9MSUNZKTtcbi1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuJiM0MztcdFx0aWYgKHN6IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gbG9hZCBkaWN0aW9uYXJ5ICVzIChlcnI9JXpkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIGRpY3RfcGF0aCwgc3opO1xuJiM0MztcdFx0XHRyZXR1cm4gc3o7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoc3ogPT0gMCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZW1wdHkgZmlsZSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBkaWN0X3BhdGgpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0enJhbS1cdTAwM2VwYXJhbXNbcHJpb10uZGljdF9zeiA9IHN6O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NDAwNWZiN2FkMWQ5ZWMzMGQ0OTRiZDFmOTFiMjM4ZmU2NTg1YzcyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxMDozMzoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMKaW5kZXggMTBkOWQ1YzYwZjUzMS4uMzg0NmEwNGM2OWQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMKQEAgLTEsNSAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKIAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDs4NDI6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdzg0Mi5oJmd0OwpAQCAtMTMsNiAmIzQzOzE1LDE0IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiAKIHN0YXRpYyBpbnQgc2V0dXBfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiB7CiYjNDM7CWlmIChwYXJhbXMtJmd0O2RpY3Rfc3opIHsKJiM0MzsJCXByX2VycigmIzM0O2RpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CWlmIChwYXJhbXMtJmd0O2xldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHsKJiM0MzsJCXByX2VycigmIzM0O2NvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMKaW5kZXggYjNmN2QwOGI0OWQ5My4uZjcxYjExYmNhYzc4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYwpAQCAtMSw1ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogCiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2RlZmxhdGU6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CkBAIC0yMiwxNSAmIzQzOzI0LDI2IEBAIHN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCiBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcykKIHsKLQlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtkaWN0X3N6KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiAJCXBhcmFtcy0mZ3Q7bGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiYjNDM7CX0gZWxzZSBpZiAocGFyYW1zLSZndDtsZXZlbCAmbHQ7IFpfREVGQVVMVF9DT01QUkVTU0lPTiB8fAomIzQzOwkJICAgcGFyYW1zLSZndDtsZXZlbCAmZ3Q7IFpfQkVTVF9DT01QUkVTU0lPTikgewomIzQzOwkJcHJfZXJyKCYjMzQ7aW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxuJiMzNDssIHBhcmFtcy0mZ3Q7bGV2ZWwpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAocGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewogCQlwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7CiAJfSBlbHNlIHsKIAkJczMyIHdiID0gcGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHM7CiAKIAkJaWYgKCh3YiAmbHQ7IC0xNSB8fCB3YiAmZ3Q7IC05KSAmYW1wOyZhbXA7ICh3YiAmbHQ7IDkgfHwgd2IgJmd0OyAxNSkpIHsKLQkJCXByX2VycigmIzM0O2ludmFsaWQgZGVmbGF0ZSB3aW5iaXRzOiAlZFxuJiMzNDssIHdiKTsKJiM0MzsJCQlwcl9lcnIoJiMzNDtpbnZhbGlkIHdpbmJpdHMgJWRcbiYjMzQ7LCB3Yik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uMWUyODEwNGFkOTY0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKQEAgLTEsMyAmIzQzOzEsNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2x6NDogJiMzNDsgZm10CiYjNDM7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbHo0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtMjgsOCAmIzQzOzMyLDEyIEBAIHN0YXRpYyBpbnQgbHo0X3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiAJTFo0X3N0cmVhbV90ICpkaWN0X3N0cmVhbTsKIAlpbnQgcmV0OwogCi0JaWYgKHBhcmFtcy0mZ3Q7bGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7bGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewogCQlwYXJhbXMtJmd0O2xldmVsID0gTFo0X0FDQ0VMRVJBVElPTl9ERUZBVUxUOwomIzQzOwl9IGVsc2UgaWYgKHBhcmFtcy0mZ3Q7bGV2ZWwgJmx0OyBMWjRfQUNDRUxFUkFUSU9OX0RFRkFVTFQpIHsKJiM0MzsJCXByX2VycigmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcbiYjMzQ7LCBwYXJhbXMtJmd0O2xldmVsKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlpZiAoIXBhcmFtcy0mZ3Q7ZGljdCB8fCAhcGFyYW1zLSZndDtkaWN0X3N6KQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jCmluZGV4IGY2YTMzNmFjZmUyMDIuLmQ4YWEwMWJiMjU4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYwpAQCAtMSwzICYjNDM7MSw3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7bHo0aGM6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2x6NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTE4LDggJiM0MzsyMiwxOCBAQCBzdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiAKIHN0YXRpYyBpbnQgbHo0aGNfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcykKIHsKLQlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiAJCXBhcmFtcy0mZ3Q7bGV2ZWwgPSBMWjRIQ19ERUZBVUxUX0NMRVZFTDsKJiM0MzsJfSBlbHNlIGlmIChwYXJhbXMtJmd0O2xldmVsICZsdDsgMSB8fCBwYXJhbXMtJmd0O2xldmVsICZndDsgTFo0SENfTUFYX0NMRVZFTCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVzZSAmbHQ7IDEgcmF0aGVyIHRoYW4gJmx0OyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZQomIzQzOwkJICogTFo0SENfY29tcHJlc3NfZ2VuZXJpYygpIG9ubHkgY2xhbXBzIGxldmVscyBiZWxvdyAxCiYjNDM7CQkgKiAobGV2ZWxzIDEgYW5kIDIgYXJlIHZhbGlkKS4gTFo0SENfTUlOX0NMRVZFTCAoMykgaXMKJiM0MzsJCSAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuCiYjNDM7CQkgKi8KJiM0MzsJCXByX2VycigmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcbiYjMzQ7LCBwYXJhbXMtJmd0O2xldmVsKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMKaW5kZXggNGM5MDZiZWFhZTZiMy4uZDgzZjkyY2Y3NTdjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMKQEAgLTEsNSAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKIAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtsem86ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sem8uaCZndDsKQEAgLTEyLDYgJiM0MzsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9fcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCiBzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogewomIzQzOwlpZiAocGFyYW1zLSZndDtkaWN0X3N6KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYwppbmRleCAxMDY0MGM5NmNiZmNhLi4xYjEyMGQwNjJjOTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYwpAQCAtMSw1ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogCiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2x6by1ybGU6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sem8uaCZndDsKQEAgLTEyLDYgJiM0MzsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCiBzdGF0aWMgaW50IGx6b3JsZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogewomIzQzOwlpZiAocGFyYW1zLSZndDtkaWN0X3N6KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jCmluZGV4IGQwMGI1NDgwNTZkYzIuLjA4ZGEzODEwY2ZmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMKQEAgLTEsNSAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKIAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDt6c3RkOiAmIzM0OyBmbXQKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwpAQCAtNTgsOCAmIzQzOzYwLDEzIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXBhcmFtcy0mZ3Q7ZHJ2X2RhdGEgPSB6cDsKLQlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiAJCXBhcmFtcy0mZ3Q7bGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7CiYjNDM7CX0gZWxzZSBpZiAocGFyYW1zLSZndDtsZXZlbCAmbHQ7IHpzdGRfbWluX2NsZXZlbCgpIHx8CiYjNDM7CQkgICBwYXJhbXMtJmd0O2xldmVsICZndDsgenN0ZF9tYXhfY2xldmVsKCkpIHsKJiM0MzsJCXByX2VycigmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcbiYjMzQ7LCBwYXJhbXMtJmd0O2xldmVsKTsKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CX0KIAogCXpwLSZndDtjcHJtID0genN0ZF9nZXRfcGFyYW1zKHBhcmFtcy0mZ3Q7bGV2ZWwsIFBBR0VfU0laRSk7CiAKQEAgLTg1LDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCXJldHVybiAwOwogCiBlcnJvcjoKLQl6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTE2MSw3ICYjNDM7MTY3LDYgQEAgc3RhdGljIGludCB6c3RkX2NyZWF0ZShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCkKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JenN0ZF9yZWxlYXNlX3BhcmFtcyhwYXJhbXMpOwogCXpzdGRfZGVzdHJveShjdHgpOwogCXJldHVybiAtRUlOVkFMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBjZmE5ODg0NmFjNDg0Li41NjE4M2M4MjdlMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMTY1Miw2ICYjNDM7MTY1MiwxNyBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpCiAJenJhbS0mZ3Q7Y29tcF9hbGdzW3ByaW9dID0gYWxnOwogfQogCiYjNDM7c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zID0gJmFtcDt6cmFtLSZndDtwYXJhbXNbcHJpb107CiYjNDM7CiYjNDM7CXZmcmVlKHBhcmFtcy0mZ3Q7ZGljdCk7CiYjNDM7CXBhcmFtcy0mZ3Q7bGV2ZWwgPSBaQ09NUF9QQVJBTV9OT1RfU0VUOwomIzQzOwlwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9IFpDT01QX1BBUkFNX05PVF9TRVQ7CiYjNDM7CXBhcmFtcy0mZ3Q7ZGljdF9zeiA9IDA7CiYjNDM7CXBhcmFtcy0mZ3Q7ZGljdCA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKQogewogCWNvbnN0IGNoYXIgKmFsZzsKQEAgLTE2NzIsMjAgJiM0MzsxNjgzLDEwIEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZikKIAl9CiAKIAljb21wX2FsZ29yaXRobV9zZXQoenJhbSwgcHJpbywgYWxnKTsKJiM0MzsJY29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbykKLXsKLQlzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMgPSAmYW1wO3pyYW0tJmd0O3BhcmFtc1twcmlvXTsKLQotCXZmcmVlKHBhcmFtcy0mZ3Q7ZGljdCk7Ci0JcGFyYW1zLSZndDtsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7Ci0JcGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUOwotCXBhcmFtcy0mZ3Q7ZGljdF9zeiA9IDA7Ci0JcGFyYW1zLSZndDtkaWN0ID0gTlVMTDsKLX0KLQogc3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCwKIAkJCSAgICAgY29uc3QgY2hhciAqZGljdF9wYXRoLAogCQkJICAgICBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgKmRlZmxhdGVfcGFyYW1zKQpAQCAtMTcwMCw4ICYjNDM7MTcwMSwxNiBAQCBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLAogCQkJCQkJSU5UX01BWCwKIAkJCQkJCU5VTEwsCiAJCQkJCQlSRUFESU5HX1BPTElDWSk7Ci0JCWlmIChzeiAmbHQ7IDApCiYjNDM7CQlpZiAoc3ogJmx0OyAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBkaWN0X3BhdGgsIHN6KTsKJiM0MzsJCQlyZXR1cm4gc3o7CiYjNDM7CQl9CiYjNDM7CQlpZiAoc3ogPT0gMCkgewomIzQzOwkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVtcHR5IGZpbGUpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZGljdF9wYXRoKTsKIAkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCXpyYW0tJmd0O3BhcmFtc1twcmlvXS5kaWN0X3N6ID0gc3o7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIENvbXByZXNzaW9uIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgenJhbSBiYWNrZW5kIGNvbXByZXNzaW9uIGRyaXZlcnMuIEl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IOKAkyA4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCBhbmQgenN0ZCDigJMgYW5kIGFsc28gYHpyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFkZGluZyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIGBzZXR1cF9wYXJhbXNgIGZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBJIHNlZSB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGNoZWNraW5nIHRoaW5ncyBsaWtlIGBkaWN0X3N6YCwgYGxldmVsYCwgYW5kIGV2ZW4gYHdpbmJpdHNgIGZvciBkZWZsYXRlLCByZXR1cm5pbmcgZXJyb3JzIGxpa2UgYC1FT1BOT1RTVVBQYCBvciBgLUVJTlZBTGAgd2hlbiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLiBUaGlzIGlzIGEgZ29vZCB0aGluZyDigJMgcm9idXN0IGVycm9yIGhhbmRsaW5nIGlzIGFsd2F5cyBjcnVjaWFsLCBlc3BlY2lhbGx5IGZvciBhIGJsb2NrIGRldmljZSBkcml2ZXIuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgYmFkIHBhcmFtZXRlcnMgbWlnaHQgaGF2ZSBiZWVuIGlnbm9yZWQgb3IgY291bGQgaGF2ZSBsZWFkIHRvIGEgY3Jhc2guCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBUaGlzIHZhbGlkYXRpb24gaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciwgYnV0IGZvciB0aGUgYmV0dGVyLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBiZWNhdXNlIHRoZXNlIHpyYW0gcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCBmcm9tIHVzZXIgc3BhY2UsIHZpYSBzeXNmcy4gV2FpdCwgaXQgaXMgY29uZmlndXJlZCB2aWEgc3lzZnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucy4KClJpZ2h0LCBzbyBgenJhbV9kcnYuY2AgaXMgZ29pbmcgdG8gYmUga2V5IGhlcmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHNldHVwX3BhcmFtc2Agd2l0aGluIHRoYXQgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCB6cmFtIGluaXRpYWxpemF0aW9uIGFuZCBwYXJhbWV0ZXIgc2V0dGluZy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhvc2Ugc3lzZnMgaGFuZGxlcnMg4oCTIHRoZSBvbmVzIGFjY2Vzc2libGUgdGhyb3VnaCBwYXRocyBsaWtlIGAvc3lzL2Jsb2NrL3pyYW0wL2NvbXBfYWxnb3JpdGhtYCwgYC9zeXMvYmxvY2svenJhbTAvY29tcF9hbGdvcml0aG1fcGFyYW1zYCwgb3Igc2ltaWxhci4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgdG8gaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYW5kIHZhbGlkYXRlZC4KClNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgY29tcF9wYXJhbXNfcmVzZXRgIGhhcyBiZWVuIG1vdmVkIHRvIGV4ZWN1dGUgYmVmb3JlIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgd2hpY2ggbWVhbnMgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYXJlIHJlc2V0IGJlZm9yZSB0aGUgbmV3IGFsZ29yaXRobSBpcyBhc3NpZ25lZC4gSXQgYWxzbyBhZGRzIGVycm9yIGxvZ2dpbmcgZm9yIGRpY3Rpb25hcnkgbG9hZGluZy4gT2theSwgdGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBfcGFyYW1zX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg5LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MDpzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5MS1cdFx0XHQgICAgIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3OTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzk3Olx0cmV0ID0gY29tcF9wYXJhbXNfc3RvcmUoenJhbSwgcHJpbywgbGV2ZWwsIGRpY3RfcGF0aCwgXHUwMDI2ZGVmbGF0ZV9wYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTc5OC1cdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgWlJBTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyB0aGUgc3lzZnMgZnVuY3Rpb24gZm9yIHRoZSBwYXJhbWV0ZXJzIHN0b3JlLiBHb3QgaXQuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBrbm9icyBhcmUgd2UgZ29pbmcgdG8gbmVlZCBmb3IgenJhbT8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGVzc2VudGlhbCBwYXJhbWV0ZXJzIOKAkyBjb21wcmVzc2lvbiBhbGdvcml0aG0gY2hvaWNlcywgbWVtb3J5IGxpbWl0cywgY2h1bmsgc2l6ZXMsIGFuZCBwcm9iYWJseSBzb21lIHR1bmluZyBwYXJhbWV0ZXJzIGZvciBwZXJmb3JtYW5jZSBiYXNlZCBvbiB0eXBpY2FsIHdvcmtsb2Fkcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBvcHRpbWl6YXRpb25zIGFuZCBob3cgdG8gbWFrZSB0aGUgY29uZmlndXJhdGlvbnMgaW50dWl0aXZlIGZvciB0aGUgdXNlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlJBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjIzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDt6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzYtXHRib29sIFwmIzM0O2RlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDE6Y29uZmlnIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDs4NDIgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVx0ZGVwZW5kcyBvbiBaUkFNXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo1Mzpjb25maWcgWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXHRib29sIFwmIzM0O2x6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7IGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjA9Y2hvaWNlXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2NTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9STEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtsem8tcmxlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtsem9cJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzQtXHRib29sIFwmIzM0O2x6NFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Nzc6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtsejRoY1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4OTpjb25maWcgWlJBTV9ERUZfQ09NUF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz05Mz1lbmRjaG9pY2VcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk2LVx0c3RyaW5nXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O1RyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQwOmNvbmZpZyBaUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTE2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpSQU0gQ29uZmlndXJhdGlvbiBJbXBsZW1lbnRhdGlvbiBQbGFuKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBpbXBsZW1lbnRpbmcgdGhlIFpSQU0gY29tcHJlc3Npb24gYWxnb3JpdGhtIGNvbmZpZ3VyYXRpb25zLiBNeSBwbGFuIGlzIHRvIGFkZCB0aGUgdmFyaW91cyBiYWNrZW5kIG9wdGlvbnMgSSBzZWUgaGVyZeKAlGBaUkFNYCwgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBhbmQgYFpSQU1fQkFDS0VORF9MWk9g4oCUaW50byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQsIGltcG9ydGFudGx5LCBjaGVjayBpZiBgY29tcF9hbGdvcml0aG1fc3RvcmVgIGV2ZW4gZXhpc3RzIGluIHRoaXMgY29udGV4dC4gVGhlbiwgb2YgY291cnNlLCB0aGUgc2V0dXAgZnVuY3Rpb25zIGZvciBlYWNoIGFsZ29yaXRobTogYHNldHVwX3BhcmFtc184NDJgLCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBgbHo0X3NldHVwX3BhcmFtc2AsIGBsejRoY19zZXR1cF9wYXJhbXNgLCBgbHpvX3NldHVwX3BhcmFtc2AsIGBsem9ybGVfc2V0dXBfcGFyYW1zYCwgYW5kIGB6c3RkX3NldHVwX3BhcmFtc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgYWxsIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgIChpZiBwcmVzZW50KSBhcmUgaW5kZWVkIHRoZSBhcHByb3ByaWF0ZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgdGhhdCBJIHRoaW5rIHRoZXkgYXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGV5JiMzOTtyZSBkb2luZyB3aGF0IEkgZXhwZWN0LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY5MD1zdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzIyOnN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyMy1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSGVyZSB3ZSBnby4uLgoKKipFeHBsb3JpbmcgQXZhaWxhYmxlIEZ1bmN0aW9uYWxpdHkqKgoKSG1tLCBub3cgdGhhdCBJJiMzOTt2ZSBnb3R0ZW4gdGhpcyBmYXIsIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZGVmaW5pdGUgYWN0aW9uLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGp1c3QgcGF1c2UgYW5kIHRha2UgYSBicmllZiBsb29rIGFyb3VuZCwgc28gdG8gc3BlYWsuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBXaGF0IG90aGVyIG9wdGlvbnMgYXJlIGF0IG15IGRpc3Bvc2FsPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciB1dGlsaXRpZXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGU/IEl04oCZcyBub3QgYSBxdWVzdGlvbiBvZiBhc3N1bWluZyBJIGhhdmUgZXZlcnl0aGluZyBJIG5lZWQsIGJ1dCByYXRoZXIsIGFzIGEgcHJvZmVzc2lvbmFsLCBpdCYjMzk7cyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLCBvZiBtYWtpbmcgc3VyZSBJJiMzOTttIGZ1bGx5IGF3YXJlIG9mIG15IHRvb2xraXQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIG15IGN1cnJlbnQgZnVuY3Rpb25hbGl0eSwgYmVmb3JlIEkgY29tbWl0IHRvIGEgcGFydGljdWxhciBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjU1PXN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY2NjpzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xODAxPXN0YXRpYyBzc2l6ZV90IGNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODEzOnN0YXRpYyBzc2l6ZV90IGNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTQtXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MjE6XHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBidWYpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMi1cdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgyNj1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODQ1OnN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODgyOlx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBwcmlvLCBhbGcpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4My1cdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaQ29tcCBCYWNrZW5kIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3lzZnMgc3RvcmUgZnVuY3Rpb25zOiBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYmFja2VuZCBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgc2V0IHVwLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIHRoZSBiYWNrZW5kIHNldHVwIGZ1bmN0aW9ucyBhcmUgYHNldHVwX3BhcmFtc184NDJgLCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBgbHo0X3NldHVwX3BhcmFtc2AsIGBsejRoY19zZXR1cF9wYXJhbXNgLCBgbHpvX3NldHVwX3BhcmFtc2AsIGBsem9ybGVfc2V0dXBfcGFyYW1zYCwgYW5kIGB6c3RkX3NldHVwX3BhcmFtc2AuCgpUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIHJldmlld2luZyBhbGlnbiB3aXRoIHRoZSBndWlkYW5jZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgZG9uJiMzOTt0IHJlcHJlc2VudCB0aGUgc3RhdGljIGlubGluZWQga2luZC4KCkxldCYjMzk7cyBzdGFydCB3aXRoIGBzZXR1cF9wYXJhbXNfODQyYC4gVGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgaXQmIzM5O3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgYW5kIGl0IHJlc2lkZXMgaW4gYGJhY2tlbmRfODQyLmNgLiBIbW0sIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBnaXZlbiB0aGUgcnVsZSBhYm91dCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHdhaXQuLi4gYXJlIHRoZXkgYWN0dWFsbHkgdXNlZCBhcyBwYXJ0IG9mIGEgZnVuY3Rpb24gcG9pbnRlcj8gQmVjYXVzZSBpbiBzb21lIHNjZW5hcmlvcywgc3RhdGljIGZ1bmN0aW9ucyBpbiBzZXBhcmF0ZSBmaWxlcyBiZWNvbWUgbW9yZSBsaWtlICYjMzQ7cHVibGljJiMzNDsgbWV0aG9kcyB3aGVuIGFzc2lnbmVkIGludG8gc3RydWN0dXJlcy4gR29pbmcgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIHRoZSBgc3RydWN0IHpjb21wX2JhY2tlbmRgLCBhcyB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIHNob3VsZCBjaGVjayBgYmFja2VuZF84NDIuY2AgYW5kIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0dXBfcGFyYW1zXzg0MiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9MTI9c3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjE2OnN0YXRpYyBpbnQgc2V0dXBfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNy17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9NjM9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02Ny1cdC5kZXN0cm95X2N0eFx0PSBkZXN0cm95Xzg0MixcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjY4Olx0LnNldHVwX3BhcmFtc1x0PSBzZXR1cF9wYXJhbXNfODQyLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNjktXHQucmVsZWFzZV9wYXJhbXNcdD0gcmVsZWFzZV9wYXJhbXNfODQyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTdGF0aWMgRnVuY3Rpb24gUG9pbnRlcnMgaW4genJhbV9kcnYuYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGJlY2F1c2UgdGhleSYjMzk7cmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5JiMzOTtsbCBlYWNoIGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBUaGF0JiMzOTtzIGZpbmUsIEkgZXhwZWN0ZWQgdGhhdC4gVGhlIGNhdGNoIGlzIHRoYXQgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhvc2Ugb3RoZXIgYHN0YXRpY2AgdmFyaWFibGVzIGluIGB6cmFtX2Rydi5jYCwgc3BlY2lmaWNhbGx5IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYW5kIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYC4gVGhvc2UgYXJlIGNsZWFybHkgc3lzZnMgZW50cnkgcG9pbnRzLiBBbmQgdGhlbiBpdCBoaXRzIG1lOyBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIHRob3NlIGluIG15IGFuYWx5c2lzIGFzIHdlbGwuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpbmNsdWRlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYW5kIGFsc28gdGhhdCB1bmRlcnNjb3JlLXByZWZpeGVkIG9uZTogYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJIHNob3VsZCBjb3ZlciBhbGwgdGhlIGJhc2VzIGhlcmUuCgpBbmQsIGp1c3QgaW4gY2FzZSwgSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYHpjb21wX3NldHVwX3BhcmFtc2AuIFRoYXQgdGhpbmcgKnByb2JhYmx5KiBjYWxscyB0aGUgYmFja2VuZCYjMzk7cyBgc2V0dXBfcGFyYW1zYCBmdW5jdGlvbiwgYW5kIHRoYXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gaW5jbHVkZSBpbiBteSBzY29wZSBhcyB3ZWxsLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0dXBfcGFyYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz0xMj1zdGF0aWMgdm9pZCByZWxlYXNlX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE1LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6MTY6c3RhdGljIGludCBzZXR1cF9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz02Mz1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTY3LVx0LmRlc3Ryb3lfY3R4XHQ9IGRlc3Ryb3lfODQyLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6Njg6XHQuc2V0dXBfcGFyYW1zXHQ9IHNldHVwX3BhcmFtc184NDIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02OS1cdC5yZWxlYXNlX3BhcmFtc1x0PSByZWxlYXNlX3BhcmFtc184NDIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTIxPXN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0yNC1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoyNTpzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0yNi17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE2MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTY1LVx0LmRlc3Ryb3lfY3R4XHQ9IGRlZmxhdGVfZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoxNjY6XHQuc2V0dXBfcGFyYW1zXHQ9IGRlZmxhdGVfc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE2Ny1cdC5yZWxlYXNlX3BhcmFtc1x0PSBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE5PXN0YXRpYyB2b2lkIGx6NF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMjktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYzozMDpzdGF0aWMgaW50IGx6NF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMzEte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE1MD1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1NC1cdC5kZXN0cm95X2N0eFx0PSBsejRfZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjE1NTpcdC5zZXR1cF9wYXJhbXNcdD0gbHo0X3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1Ni1cdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xOT1zdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0yMi1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MjM6c3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0yNC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xMzQ9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMTM4LVx0LmRlc3Ryb3lfY3R4XHQ9IGx6NGhjX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjEzOTpcdC5zZXR1cF9wYXJhbXNcdD0gbHo0aGNfc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xNDAtXHQucmVsZWFzZV9wYXJhbXNcdD0gbHo0aGNfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9MTE9c3RhdGljIHZvaWQgbHpvX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNC1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjE1OnN0YXRpYyBpbnQgbHpvX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNi17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9NjE9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy02NS1cdC5kZXN0cm95X2N0eFx0PSBsem9fZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjY2Olx0LnNldHVwX3BhcmFtc1x0PSBsem9fc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNjctXHQucmVsZWFzZV9wYXJhbXNcdD0gbHpvX3JlbGVhc2VfcGFyYW1zLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTExPXN0YXRpYyB2b2lkIGx6b3JsZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzoxNTpzdGF0aWMgaW50IGx6b3JsZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTYte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTYxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNjUtXHQuZGVzdHJveV9jdHhcdD0gbHpvcmxlX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo2NjpcdC5zZXR1cF9wYXJhbXNcdD0gbHpvcmxlX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTY3LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9NDA9c3RhdGljIHZvaWQgenN0ZF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjUzOnN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTU0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MjE0PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTgtXHQuZGVzdHJveV9jdHhcdD0genN0ZF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxOTpcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjIwLVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTk3PXN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXHRjb21wLVx1MDAzZXBhcmFtcyA9IHBhcmFtcztcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVx1MDAzZXBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTU3PXN0cnVjdCB6Y29tcF9vcHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NjY6XHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02Ny1cdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb21wcmVzc2lvbiBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHpjb21wX2luaXRgIG5vdy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZOKAlGl0JiMzOTtzIGNhbGxpbmcgYGNvbXAtJmd0O29wcy0mZ3Q7c2V0dXBfcGFyYW1zYC4gVGhhdCYjMzk7cyB0aGUga2V5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIHdoZXJlIGB6Y29tcF9pbml0YCBpdHNlbGYgaXMgYmVpbmcgY2FsbGVkIGZyb20uIE5lZWQgdG8gdHJhY2UgdGhhdCBwYXRoIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIExldCYjMzk7cyBzZWUuLi4gd2hlcmUgZG9lcyB0aGlzIGd1eSBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE4Nj1pbnQgemNvbXBfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTk2LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTk3OnN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE5OC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MjMzPXN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1NS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjI1NjpcdGVycm9yID0gemNvbXBfaW5pdChjb21wLCBwYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjU3LVx0aWYgKGVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6CgoqKkRlZXAgRGl2ZSBpbnRvIFpSQU0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgYHpjb21wX2NyZWF0ZWAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB6cmFtX2Rydi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciBhIFpSQU0gZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMg4oCTIHdoZXJlIHRoZSBjb21wcmVzc2lvbiBlbmdpbmUgZ2V0cyBzZXQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYW5kIGV4YWN0bHkgaG93IHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkLiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgY2FsbCBpbXBhY3RzIHRoZSBkZXZpY2UgY3JlYXRpb24uIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcywgaWYgYW55LCBhcmUgYmVpbmcgdGFrZW4/IEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGluaXRpYWwgZGV2aWNlIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIyNT12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIzMzpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzNC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODM9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODYtdm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg2MD1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg3Olx0XHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4OC1cdFx0XHRcdCAgICBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIENvbXByZXNzaW9uIEJhY2tlbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBob3cgY29tcHJlc3Npb24gYmFja2VuZHMgYXJlIHNldCB1cCBpbiB0aGlzIHN5c3RlbS4gSXQgbG9va3MgbGlrZSBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQsIGFzIGl0JiMzOTtzIHRoZSBvbmUgdGhhdCBjYWxscyBgemNvbXBfY3JlYXRlYC4gVGhhdCB0ZWxscyBtZSB3aGVuIHRoZSBkaXNrIHNpemUgaXMgY29uZmlndXJlZCwgdGhlIGNvbXByZXNzaW9uIGJhY2tlbmRzIGdldCBpbml0aWFsaXplZCwgYW5kIGltcG9ydGFudGx5LCB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWRhdGVkLgoKVGhlIGNvcmUgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSB0aGlzIGFyZSBzZXQgdmlhIHRoZXNlIGZ1bmN0aW9uczogYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aG9zZSwgYXMgd2VsbCBhcyBgZGlza3NpemVfc3RvcmVgIGFuZCBgemNvbXBfY3JlYXRlYCwgb2J2aW91c2x5LiBBbHNvIHRoZXNlIG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9uczogYGNvbXBfcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLgoKV2FpdCBhIG1pbnV0ZS4uLiBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBub3Qgc3VyZSBpZiBpdCBpcyBpbmxpbmVkIG9yIG5vdC4gQW5kIGBjb21wX3BhcmFtc19zdG9yZWAgaXMgYWxzbyBzdGF0aWMuIEhvd2V2ZXIsIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyBkZWZpbml0ZWx5IGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBTYW1lIHdpdGggYGRpc2tzaXplX3N0b3JlYCAtIGl0JiMzOTtzIGEgc3lzZnMgZnVuY3Rpb24uIEFuZCBgemNvbXBfY3JlYXRlYCBpcyBlaXRoZXIgZXhwb3J0ZWQgb3Igbm90IHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdmVyaWZ5IGB6Y29tcF9jcmVhdGVgJiMzOTtzIHZpc2liaWxpdHkuIFllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBgemNvbXAuY2AgYW5kIGRlY2xhcmVkIGluIGB6Y29tcC5oYCwgY29uZmlybWluZyBpdCYjMzk7cyBhdmFpbGFibGUuCgpOb3csIGxldCYjMzk7cyBsaXN0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGlzIHdob2xlIHByb2Nlc3M6IGBaUkFNYCwgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBgWlJBTV9CQUNLRU5EX0xaT2AgYW5kLCBzaW5jZSBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgcmVsYXRlZCB0byBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zLCBgWlJBTV9NVUxUSV9DT01QYC4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgd2hldGhlciBgWlJBTV9NVUxUSV9DT01QYCBpcyBhY3R1YWxseSBuZWVkZWQsIHNpbmNlIGl0IGluZmx1ZW5jZXMgaG93IHdlIHJlLWNvbXByZXNzIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgyNj1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODQ1OnN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uOiBBIFJvdXRpbmUgRGlhZ25vc3RpYyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZSBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNoZWNrLCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSB3b3VsZCBkbyB3aGVuIGFuYWx5emluZyB6cmFtIGNvZGUsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG11bHRpLWNvbXByZXNzaW9uIGFsZ29yaXRobXMuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCByZWZsZXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aUkFNX01VTFRJX0NPTVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxNz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjM6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTM9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODI1OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODI2LXN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjM1NT1zdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2Mi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNjM6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjQtI2RlZmluZSBSRUNPTVBSRVNTX0lETEVcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk4Nj1zdGF0aWMgREVWSUNFX0FUVFJfUlcoY29tcHJlc3NlZF93cml0ZWJhY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4Ny0jZW5kaWZcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODg6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5ODktc3RhdGljIERFVklDRV9BVFRSX1JXKHJlY29tcF9hbGdvcml0aG0pO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5OTQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTQtXHRcdTAwMjZkZXZfYXR0cl9kZWJ1Z19zdGF0LmF0dHIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDE1OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDE2LVx0XHUwMDI2ZGV2X2F0dHJfcmVjb21wX2FsZ29yaXRobS5hdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTc5PXN0cnVjdCB6cmFtX3N0YXRzIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC05Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjk3OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC05OC0jZGVmaW5lIFpSQU1fUFJJTUFSWV9DT01QXHQwVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCkFscmlnaHQsIHNvIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYCAqaXMqIGluZGVlZCBuZXN0bGVkIHVuZGVyIGBDT05GSUdfWlJBTV9NVUxUSV9DT01QYC4gVGhhdOKAmXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gYWRkIGBaUkFNX01VTFRJX0NPTVBgIHRvIG15IEVuYWJsZUNvbmZpZ3MuIFNpbXBsZS4KCk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXPigKYgd2hlcmUgZG9lcyBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgc2l0IHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGU/IEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgc28sIHdoaWNoIG9uZXMuIFRoaXMgY291bGQgaW5mbHVlbmNlIG15IGRlY2lzaW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2OTA9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzIxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyMjpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFpSQU0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCB0aWVkIHRvIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgaXQmIzM5O3MganVzdCBkZWFsaW5nIHdpdGggYFpSQU1gIGRpcmVjdGx5LiBSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBjb21wX3BhcmFtc19zdG9yZWAsIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYW5kIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYC4gSSBuZWVkIHRvIGFkZCB0aG9zZSB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBzbyBJJiMzOTtsbCBpbmNsdWRlOgoKKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYAoqICAgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYAoqICAgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgCiogICBgZGlza3NpemVfc3RvcmVgCiogICBgemNvbXBfY3JlYXRlYAoKSG1tLCBoYW5nIG9uLiBgemNvbXBfY3JlYXRlYCAqbWlnaHQqIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IGl0IGxvb2tzIGxpa2UgYGRpc2tzaXplX3N0b3JlYCBjYWxscyBpdC4gT2theSwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFdoYXQgYWJvdXQgdGhvc2UgYHNldHVwX3BhcmFtc184NDJgIHR5cGUgZnVuY3Rpb25zPyBUaGV5JiMzOTtyZSBkZWZpbmVkIGFzIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCB0aGUgZnV6emVyIGNvdWxkIHBvdGVudGlhbGx5IHJlYWNoIHRocm91Z2ggYHpjb21wX2NyZWF0ZWAuIEdvb2QsIHNvIEkmIzM5O2xsIGFkZCBgemNvbXBfY3JlYXRlYCBhbmQgYGRpc2tzaXplX3N0b3JlYCBhcyBteSBpbml0aWFsIHRhcmdldCBzeW1ib2xzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgWlJBTWAgbW9kdWxlLCBpZiBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzIEkgbWlnaHQgaGF2ZToKCioqWlJBTSBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIGNsZWFyIG9uIHRoZSBgWlJBTWAgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSB3YW50IHRvIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb21wb25lbnRzLiAgT2theSwgSSBzZWUgaXQgcmVsaWVzIG9uIGBCTE9DS2AsIGBTWVNGU2AsIGBaU01BTExPQ2AsIGFuZCBgQ1JZUFRPYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiBicm9hZCBzdHJva2VzLCBidXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGl04oCZcyBhbHdheXMgYmV0dGVyIHRvIHJlYWQgdGhlIGBjb25maWcgWlJBTWAgYmxvY2sgZGlyZWN0bHkuIE5lZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIGFsbCB0aGUgZmluZXIgbnVhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgWlJBTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAgIDU6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXG4gICA4Olx0XHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcbiAgIDk6XHRcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xuICAxMDpcdFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcbiAgMTM6XHRcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAyMDpcdFx0c2VsZWN0IExaNF9DT01QUkVTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2NQoJCQkJCQkJb3V0cHV0OiAyNTEKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWlJBTSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGEgZnV6emluZyBzdHJhdGVneS4gRmlyc3QsIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBmb3IgYFpSQU1gIGl0c2VsZiBhcmUgc3RhbmRhcmQ6IGBCTE9DS2AsIGBTWVNGU2AsIGFuZCBgTU1VYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIG9idmlvdXNseSwgYW5kIHRoZW4gYWxsIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kcyB0aGF0IHdlcmUgYWRkZWQ6IGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYFpSQU1fQkFDS0VORF9MWk9gLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuIFRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgYEVuYWJsZUNvbmZpZ3NgLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgaW4gYHpyYW1fZHJ2LmNgLiBJIHNlZSBgY29tcF9hbGdvcml0aG1fc2V0YCwgYGNvbXBfcGFyYW1zX3Jlc2V0YCwgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGNvbXBfcGFyYW1zX3N0b3JlYC4gU2luY2UgdGhlIHRhc2sgaXMgZnV6emluZywgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpjb21wX2NyZWF0ZWAgdG8gYEZvY3VzU3ltYm9sc2AuCgpIb2xkIG9uIGEgc2VjLi4uIGBjb21wX3BhcmFtc19zdG9yZWAgaXMgc3RhdGljLCBidXQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgICpjYWxscyogaXQuIEdvb2QgY2F0Y2guIEkmIzM5O2xsIHN0aWNrIHdpdGggbXkgaW5pdGlhbCBsaXN0IG9mIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpjb21wX2NyZWF0ZWAgaW4gYEZvY3VzU3ltYm9sc2AuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY29uZmlybSBgemNvbXBfY3JlYXRlYCBpcyBhY3R1YWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuIEFoLCB5ZXMsIGBkaXNrc2l6ZV9zdG9yZWAgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBmb3IgYC9zeXMvYmxvY2svenJhbVgvZGlza3NpemVgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFdoZW4geW91IHdyaXRlIHRvIGBkaXNrc2l6ZWAsIGl0IGNhbGxzIGB6Y29tcF9jcmVhdGVgLCB3aGljaCB0aGVuIGNhbGxzIGB6Y29tcF9pbml0YCBhbmQgZXZlbnR1YWxseSBgc2V0dXBfcGFyYW1zYCBmb3IgdGhlIHNlbGVjdGVkIGJhY2tlbmQuIEFuZCAqaW1wb3J0YW50bHkqLCB0aG9zZSBwYXJhbWV0ZXJzIGFyZSBzZXQgKmJlZm9yZSogYGRpc2tzaXplYCBpcyB3cml0dGVuLCB2aWEgdGhlIGBjb21wX2FsZ29yaXRobWAgYW5kIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgIHN5c2ZzIGZpbGVzLgoKU28sIHRoZSBmdXp6aW5nIHNlcXVlbmNlIGlzIGNsZWFyOiB3cml0ZSB0byBgY29tcF9hbGdvcml0aG1gLCB3cml0ZSB0byBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCwgYW5kIHRoZW4gd3JpdGUgdG8gYGRpc2tzaXplYC4gUGVyZmVjdC4gVGhhdCYjMzk7cyBlbnRpcmVseSBmdXp6YWJsZSB2aWEgc3lzZnMuIFRoaXMgaXMgd2hlcmUgSSB3YW50IHRoZSBmdXp6ZXIgdG8gZm9jdXMgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGFkZGVkIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcy4KClRoZXJlZm9yZSwgdGhlIGZpbmFsIHNldHVwIGZvciB0aGUgZnV6emVyIHdpbGwgYmU6CgoqICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgCiogICAqKkZvY3VzU3ltYm9scyoqOiBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYGRpc2tzaXplX3N0b3JlYCwgYHpjb21wX2NyZWF0ZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWlJBTWAsIGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYFpSQU1fQkFDS0VORF9MWk9gLCBgWlJBTV9NVUxUSV9DT01QYAoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcywgYW5kIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgYW5kIHZhbGlkYXRlZCB2aWEgc3lzZnMuIFRoZXJlZm9yZSwgZnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgLCBhbmQgYGRpc2tzaXplYCwgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0SEMmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX1pTVEQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EXzg0MiYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFpPJiMzNDssCiAgICAmIzM0O1pSQU1fTVVMVElfQ09NUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7Y29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gdmFyaW91cyB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzICg4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCB6c3RkKS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCB2aWEgc3lzZnMgKGUuZy4sIGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgKSBhbmQgdmFsaWRhdGVkIHdoZW4gdGhlIGNvbXByZXNzaW9uIGJhY2tlbmQgaXMgaW5pdGlhbGl6ZWQgKGUuZy4sIHdoZW4gc2V0dGluZyBgZGlza3NpemVgKS4gRnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcyBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjIzLjc0Mjk4Njk3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1OTAwMTc4OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRIQ1wiLFxuICAgIFwiWlJBTV9CQUNLRU5EX1pTVERcIixcbiAgICBcIlpSQU1fQkFDS0VORF9ERUZMQVRFXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfODQyXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFpPXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGdvcml0aG1fcGFyYW1zX3N0b3JlXCIsXG4gICAgXCJjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwicmVjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjIzLjc0Mjk5MjY2NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2Mjg3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDQwMDVmYjdhZDFkOWVjMzBkNDk0YmQxZjkxYjIzOGZlNjU4NWM3MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjMzOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5pbmRleCAxMGQ5ZDVjNjBmNTMxLi4zODQ2YTA0YzY5ZDcxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIjg0MjogXFxcIiBmbXRcXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3ODQyLmhcXHUwMDNlXFxuQEAgLTEzLDYgKzE1LDE0IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcbiBzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWRpY3Rfc3opIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImNvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xcbmluZGV4IGIzZjdkMDhiNDlkOTMuLmY3MWIxMWJjYWM3ODggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXFxuQEAgLTEsNSArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuIFxcbisjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJkZWZsYXRlOiBcXFwiIGZtdFxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbkBAIC0yMiwxNSArMjQsMjYgQEAgc3RhdGljIHZvaWQgZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcbiBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VkaWN0X3N6KSB7XFxuK1xcdFxcdHByX2VycihcXFwiZGljdGlvbmFyeSBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XFxuK1xcdH0gZWxzZSBpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCBcXHUwMDNjIFpfREVGQVVMVF9DT01QUkVTU0lPTiB8fFxcbitcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWxldmVsIFxcdTAwM2UgWl9CRVNUX0NPTVBSRVNTSU9OKSB7XFxuK1xcdFxcdHByX2VycihcXFwiaW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcXFxuXFxcIiwgcGFyYW1zLVxcdTAwM2VsZXZlbCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHMzMiB3YiA9IHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzO1xcbiBcXG4gXFx0XFx0aWYgKCh3YiBcXHUwMDNjIC0xNSB8fCB3YiBcXHUwMDNlIC05KSBcXHUwMDI2XFx1MDAyNiAod2IgXFx1MDAzYyA5IHx8IHdiIFxcdTAwM2UgMTUpKSB7XFxuLVxcdFxcdFxcdHByX2VycihcXFwiaW52YWxpZCBkZWZsYXRlIHdpbmJpdHM6ICVkXFxcXG5cXFwiLCB3Yik7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiaW52YWxpZCB3aW5iaXRzICVkXFxcXG5cXFwiLCB3Yik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xcbmluZGV4IGM0NDlkNTExYmE4NmYuLjFlMjgxMDRhZDk2NDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xcbkBAIC0xLDMgKzEsNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwibHo0OiBcXFwiIGZtdFxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHo0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuQEAgLTI4LDggKzMyLDEyIEBAIHN0YXRpYyBpbnQgbHo0X3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcdExaNF9zdHJlYW1fdCAqZGljdF9zdHJlYW07XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBMWjRfQUNDRUxFUkFUSU9OX0RFRkFVTFQ7XFxuK1xcdH0gZWxzZSBpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCBcXHUwMDNjIExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXFxcblxcXCIsIHBhcmFtcy1cXHUwMDNlbGV2ZWwpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKCFwYXJhbXMtXFx1MDAzZWRpY3QgfHwgIXBhcmFtcy1cXHUwMDNlZGljdF9zeilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jXFxuaW5kZXggZjZhMzM2YWNmZTIwMi4uZDhhYTAxYmIyNThmZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xcbkBAIC0xLDMgKzEsNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwibHo0aGM6IFxcXCIgZm10XFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sejQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtMTgsOCArMjIsMTggQEAgc3RhdGljIHZvaWQgbHo0aGNfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiBcXG4gc3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuLVxcdGlmIChwYXJhbXMtXFx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VsZXZlbCA9IExaNEhDX0RFRkFVTFRfQ0xFVkVMO1xcbitcXHR9IGVsc2UgaWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzYyAxIHx8IHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzZSBMWjRIQ19NQVhfQ0xFVkVMKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVzZSBcXHUwMDNjIDEgcmF0aGVyIHRoYW4gXFx1MDAzYyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZVxcbitcXHRcXHQgKiBMWjRIQ19jb21wcmVzc19nZW5lcmljKCkgb25seSBjbGFtcHMgbGV2ZWxzIGJlbG93IDFcXG4rXFx0XFx0ICogKGxldmVscyAxIGFuZCAyIGFyZSB2YWxpZCkuIExaNEhDX01JTl9DTEVWRUwgKDMpIGlzXFxuK1xcdFxcdCAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXFxcblxcXCIsIHBhcmFtcy1cXHUwMDNlbGV2ZWwpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xcbmluZGV4IDRjOTA2YmVhYWU2YjMuLmQ4M2Y5MmNmNzU3Y2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xcbkBAIC0xLDUgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiBcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwibHpvOiBcXFwiIGZtdFxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHpvLmhcXHUwMDNlXFxuQEAgLTEyLDYgKzE0LDE0IEBAIHN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcbiBzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWRpY3Rfc3opIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImNvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5pbmRleCAxMDY0MGM5NmNiZmNhLi4xYjEyMGQwNjJjOTI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImx6by1ybGU6IFxcXCIgZm10XFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sem8uaFxcdTAwM2VcXG5AQCAtMTIsNiArMTQsMTQgQEAgc3RhdGljIHZvaWQgbHpvcmxlX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4gXFxuIHN0YXRpYyBpbnQgbHpvcmxlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlZGljdF9zeikge1xcbitcXHRcXHRwcl9lcnIoXFxcImRpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuK1xcdFxcdHByX2VycihcXFwiY29tcHJlc3Npb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXFxuaW5kZXggZDAwYjU0ODA1NmRjMi4uMDhkYTM4MTBjZmZkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcInpzdGQ6IFxcXCIgZm10XFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTU4LDggKzYwLDEzIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHBhcmFtcy1cXHUwMDNlZHJ2X2RhdGEgPSB6cDtcXG4tXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0genN0ZF9kZWZhdWx0X2NsZXZlbCgpO1xcbitcXHR9IGVsc2UgaWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzYyB6c3RkX21pbl9jbGV2ZWwoKSB8fFxcbitcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWxldmVsIFxcdTAwM2UgenN0ZF9tYXhfY2xldmVsKCkpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxcXG5cXFwiLCBwYXJhbXMtXFx1MDAzZWxldmVsKTtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0fVxcbiBcXG4gXFx0enAtXFx1MDAzZWNwcm0gPSB6c3RkX2dldF9wYXJhbXMocGFyYW1zLVxcdTAwM2VsZXZlbCwgUEFHRV9TSVpFKTtcXG4gXFxuQEAgLTg1LDcgKzkyLDYgQEAgc3RhdGljIGludCB6c3RkX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyb3I6XFxuLVxcdHpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTtcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuQEAgLTE2MSw3ICsxNjcsNiBAQCBzdGF0aWMgaW50IHpzdGRfY3JlYXRlKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycm9yOlxcbi1cXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XFxuIFxcdHpzdGRfZGVzdHJveShjdHgpO1xcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuaW5kZXggY2ZhOTg4NDZhYzQ4NC4uNTYxODNjODI3ZTFiMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuQEAgLTE2NTIsNiArMTY1MiwxNyBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXFxuIFxcdHpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb107XFxuK1xcbitcXHR2ZnJlZShwYXJhbXMtXFx1MDAzZWRpY3QpO1xcbitcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG4rXFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbitcXHRwYXJhbXMtXFx1MDAzZWRpY3Rfc3ogPSAwO1xcbitcXHRwYXJhbXMtXFx1MDAzZWRpY3QgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqYWxnO1xcbkBAIC0xNjcyLDIwICsxNjgzLDEwIEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4gXFx0fVxcbiBcXG4gXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XFxuK1xcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxcbi17XFxuLVxcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb107XFxuLVxcbi1cXHR2ZnJlZShwYXJhbXMtXFx1MDAzZWRpY3QpO1xcbi1cXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG4tXFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbi1cXHRwYXJhbXMtXFx1MDAzZWRpY3Rfc3ogPSAwO1xcbi1cXHRwYXJhbXMtXFx1MDAzZWRpY3QgPSBOVUxMO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgKmRlZmxhdGVfcGFyYW1zKVxcbkBAIC0xNzAwLDggKzE3MDEsMTYgQEAgc3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0SU5UX01BWCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0UkVBRElOR19QT0xJQ1kpO1xcbi1cXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbitcXHRcXHRpZiAoc3ogXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBkaWN0X3BhdGgsIHN6KTtcXG4rXFx0XFx0XFx0cmV0dXJuIHN6O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChzeiA9PSAwKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZW1wdHkgZmlsZSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBkaWN0X3BhdGgpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHR6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10uZGljdF9zeiA9IHN6O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzoyNC4xNjAwMDYyMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NTQ4MzE1MDcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0XCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0SENcIixcbiAgICBcIlpSQU1fQkFDS0VORF9aU1REXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EXzg0MlwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaT1wiLFxuICAgIFwiWlJBTV9NVUxUSV9DT01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwiY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcInJlY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJ6Y29tcF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyB0byB2YXJpb3VzIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMgKDg0MiwgZGVmbGF0ZSwgbHo0LCBsejRoYywgbHpvLCBsem9ybGUsIHpzdGQpLiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkIHZpYSBzeXNmcyAoZS5nLiwgYGNvbXBfYWxnb3JpdGhtYCwgYGNvbXBfYWxnb3JpdGhtX3BhcmFtc2ApIGFuZCB2YWxpZGF0ZWQgd2hlbiB0aGUgY29tcHJlc3Npb24gYmFja2VuZCBpcyBpbml0aWFsaXplZCAoZS5nLiwgd2hlbiBzZXR0aW5nIGBkaXNrc2l6ZWApLiBGdXp6aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2VzIGlzIHJlcXVpcmVkIHRvIHRlc3QgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDAwNWZiN2FkMWQ5ZWMzMGQ0OTRiZDFmOTFiMjM4ZmU2NTg1YzcyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMDozMzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbmluZGV4IDEwZDlkNWM2MGY1MzEuLjM4NDZhMDRjNjlkNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcIjg0MjogXCIgZm10XG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdzg0Mi5oXHUwMDNlXG5AQCAtMTMsNiArMTUsMTQgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcbiBzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbitcdGlmIChwYXJhbXMtXHUwMDNlZGljdF9zeikge1xuK1x0XHRwcl9lcnIoXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuK1x0XHRwcl9lcnIoXCJjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG5pbmRleCBiM2Y3ZDA4YjQ5ZDkzLi5mNzFiMTFiY2FjNzg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImRlZmxhdGU6IFwiIGZtdFxuK1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMjIsMTUgKzI0LDI2IEBAIHN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbitcdGlmIChwYXJhbXMtXHUwMDNlZGljdF9zeikge1xuK1x0XHRwcl9lcnIoXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XG4rXHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgWl9ERUZBVUxUX0NPTVBSRVNTSU9OIHx8XG4rXHRcdCAgIHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2UgWl9CRVNUX0NPTVBSRVNTSU9OKSB7XG4rXHRcdHByX2VycihcImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXG5cIiwgcGFyYW1zLVx1MDAzZWxldmVsKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAocGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBERUZMQVRFX0RFRl9XSU5CSVRTO1xuIFx0fSBlbHNlIHtcbiBcdFx0czMyIHdiID0gcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cztcbiBcbiBcdFx0aWYgKCh3YiBcdTAwM2MgLTE1IHx8IHdiIFx1MDAzZSAtOSkgXHUwMDI2XHUwMDI2ICh3YiBcdTAwM2MgOSB8fCB3YiBcdTAwM2UgMTUpKSB7XG4tXHRcdFx0cHJfZXJyKFwiaW52YWxpZCBkZWZsYXRlIHdpbmJpdHM6ICVkXFxuXCIsIHdiKTtcbitcdFx0XHRwcl9lcnIoXCJpbnZhbGlkIHdpbmJpdHMgJWRcXG5cIiwgd2IpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uMWUyODEwNGFkOTY0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTEsMyArMSw3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwibHo0OiBcIiBmbXRcbitcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2x6NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMjgsOCArMzIsMTIgQEAgc3RhdGljIGludCBsejRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdExaNF9zdHJlYW1fdCAqZGljdF9zdHJlYW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxuK1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVDtcbitcdH0gZWxzZSBpZiAocGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzYyBMWjRfQUNDRUxFUkFUSU9OX0RFRkFVTFQpIHtcbitcdFx0cHJfZXJyKFwiaW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcblwiLCBwYXJhbXMtXHUwMDNlbGV2ZWwpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdGlmICghcGFyYW1zLVx1MDAzZWRpY3QgfHwgIXBhcmFtcy1cdTAwM2VkaWN0X3N6KVxuIFx0XHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uZDhhYTAxYmIyNThmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xLDMgKzEsNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImx6NGhjOiBcIiBmbXRcbitcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2x6NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTgsOCArMjIsMTggQEAgc3RhdGljIHZvaWQgbHo0aGNfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgbHo0aGNfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4tXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4rXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0gTFo0SENfREVGQVVMVF9DTEVWRUw7XG4rXHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgMSB8fCBwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNlIExaNEhDX01BWF9DTEVWRUwpIHtcbitcdFx0LypcbitcdFx0ICogVXNlIFx1MDAzYyAxIHJhdGhlciB0aGFuIFx1MDAzYyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZVxuK1x0XHQgKiBMWjRIQ19jb21wcmVzc19nZW5lcmljKCkgb25seSBjbGFtcHMgbGV2ZWxzIGJlbG93IDFcbitcdFx0ICogKGxldmVscyAxIGFuZCAyIGFyZSB2YWxpZCkuIExaNEhDX01JTl9DTEVWRUwgKDMpIGlzXG4rXHRcdCAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuXG4rXHRcdCAqL1xuK1x0XHRwcl9lcnIoXCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCIsIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLmQ4M2Y5MmNmNzU3Y2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImx6bzogXCIgZm10XG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sem8uaFx1MDAzZVxuQEAgLTEyLDYgKzE0LDE0IEBAIHN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4gXG4gc3RhdGljIGludCBsem9fc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4rXHRpZiAocGFyYW1zLVx1MDAzZWRpY3Rfc3opIHtcbitcdFx0cHJfZXJyKFwiZGljdGlvbmFyeSBpcyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbitcdFx0cHJfZXJyKFwiY29tcHJlc3Npb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbmluZGV4IDEwNjQwYzk2Y2JmY2EuLjFiMTIwZDA2MmM5MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImx6by1ybGU6IFwiIGZtdFxuK1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHpvLmhcdTAwM2VcbkBAIC0xMiw2ICsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgbHpvcmxlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4ge1xuK1x0aWYgKHBhcmFtcy1cdTAwM2VkaWN0X3N6KSB7XG4rXHRcdHByX2VycihcImRpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4rXHRcdHByX2VycihcImNvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjA4ZGEzODEwY2ZmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xuQEAgLTEsNSArMSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiBcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwienN0ZDogXCIgZm10XG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbkBAIC01OCw4ICs2MCwxMyBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRwYXJhbXMtXHUwMDNlZHJ2X2RhdGEgPSB6cDtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbitcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XG4rXHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgenN0ZF9taW5fY2xldmVsKCkgfHxcbitcdFx0ICAgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xuK1x0XHRwcl9lcnIoXCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCIsIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4rXHRcdGdvdG8gZXJyb3I7XG4rXHR9XG4gXG4gXHR6cC1cdTAwM2VjcHJtID0genN0ZF9nZXRfcGFyYW1zKHBhcmFtcy1cdTAwM2VsZXZlbCwgUEFHRV9TSVpFKTtcbiBcbkBAIC04NSw3ICs5Miw2IEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG5AQCAtMTYxLDcgKzE2Nyw2IEBAIHN0YXRpYyBpbnQgenN0ZF9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJvcjpcbi1cdHpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTtcbiBcdHpzdGRfZGVzdHJveShjdHgpO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGNmYTk4ODQ2YWM0ODQuLjU2MTgzYzgyN2UxYjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0xNjUyLDYgKzE2NTIsMTcgQEAgc3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxuIFx0enJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBhbGc7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbit7XG4rXHRzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMgPSBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXTtcbitcbitcdHZmcmVlKHBhcmFtcy1cdTAwM2VkaWN0KTtcbitcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG4rXHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbitcdHBhcmFtcy1cdTAwM2VkaWN0X3N6ID0gMDtcbitcdHBhcmFtcy1cdTAwM2VkaWN0ID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmFsZztcbkBAIC0xNjcyLDIwICsxNjgzLDEwIEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbiBcdH1cbiBcbiBcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuK1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuLXtcbi1cdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dO1xuLVxuLVx0dmZyZWUocGFyYW1zLVx1MDAzZWRpY3QpO1xuLVx0cGFyYW1zLVx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbi1cdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3Rfc3ogPSAwO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3QgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqZGljdF9wYXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGRlZmxhdGVfcGFyYW1zICpkZWZsYXRlX3BhcmFtcylcbkBAIC0xNzAwLDggKzE3MDEsMTYgQEAgc3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbiBcdFx0XHRcdFx0XHRJTlRfTUFYLFxuIFx0XHRcdFx0XHRcdE5VTEwsXG4gXHRcdFx0XHRcdFx0UkVBRElOR19QT0xJQ1kpO1xuLVx0XHRpZiAoc3ogXHUwMDNjIDApXG4rXHRcdGlmIChzeiBcdTAwM2MgMCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVycj0lemQpXFxuXCIsXG4rXHRcdFx0ICAgICAgIGRpY3RfcGF0aCwgc3opO1xuK1x0XHRcdHJldHVybiBzejtcbitcdFx0fVxuK1x0XHRpZiAoc3ogPT0gMCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVtcHR5IGZpbGUpXFxuXCIsXG4rXHRcdFx0ICAgICAgIGRpY3RfcGF0aCk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dLmRpY3Rfc3ogPSBzejtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjI0LjE2MDAwNzUwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTQyODE0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaUkFNIENvbXByZXNzaW9uIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIHpyYW0gYmFja2VuZCBjb21wcmVzc2lvbiBkcml2ZXJzLiBJdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IOKAkyA4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCBhbmQgenN0ZCDigJMgYW5kIGFsc28gYHpyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFkZGluZyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIGBzZXR1cF9wYXJhbXNgIGZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBJIHNlZSB0aGV5J3JlIGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhpbmdzIGxpa2UgYGRpY3Rfc3pgLCBgbGV2ZWxgLCBhbmQgZXZlbiBgd2luYml0c2AgZm9yIGRlZmxhdGUsIHJldHVybmluZyBlcnJvcnMgbGlrZSBgLUVPUE5PVFNVUFBgIG9yIGAtRUlOVkFMYCB3aGVuIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuIFRoaXMgaXMgYSBnb29kIHRoaW5nIOKAkyByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgYWx3YXlzIGNydWNpYWwsIGVzcGVjaWFsbHkgZm9yIGEgYmxvY2sgZGV2aWNlIGRyaXZlci4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBiYWQgcGFyYW1ldGVycyBtaWdodCBoYXZlIGJlZW4gaWdub3JlZCBvciBjb3VsZCBoYXZlIGxlYWQgdG8gYSBjcmFzaC5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBUaGlzIHZhbGlkYXRpb24gaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciwgYnV0IGZvciB0aGUgYmV0dGVyLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBiZWNhdXNlIHRoZXNlIHpyYW0gcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCBmcm9tIHVzZXIgc3BhY2UsIHZpYSBzeXNmcy4gV2FpdCwgaXQgaXMgY29uZmlndXJlZCB2aWEgc3lzZnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucy5cblxuUmlnaHQsIHNvIGB6cmFtX2Rydi5jYCBpcyBnb2luZyB0byBiZSBrZXkgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgc2V0dXBfcGFyYW1zYCB3aXRoaW4gdGhhdCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHpyYW0gaW5pdGlhbGl6YXRpb24gYW5kIHBhcmFtZXRlciBzZXR0aW5nLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aG9zZSBzeXNmcyBoYW5kbGVycyDigJMgdGhlIG9uZXMgYWNjZXNzaWJsZSB0aHJvdWdoIHBhdGhzIGxpa2UgYC9zeXMvYmxvY2svenJhbTAvY29tcF9hbGdvcml0aG1gLCBgL3N5cy9ibG9jay96cmFtMC9jb21wX2FsZ29yaXRobV9wYXJhbXNgLCBvciBzaW1pbGFyLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IGFuZCB2YWxpZGF0ZWQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgY29tcF9wYXJhbXNfcmVzZXRgIGhhcyBiZWVuIG1vdmVkIHRvIGV4ZWN1dGUgYmVmb3JlIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgd2hpY2ggbWVhbnMgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYXJlIHJlc2V0IGJlZm9yZSB0aGUgbmV3IGFsZ29yaXRobSBpcyBhc3NpZ25lZC4gSXQgYWxzbyBhZGRzIGVycm9yIGxvZ2dpbmcgZm9yIGRpY3Rpb25hcnkgbG9hZGluZy4gT2theSwgdGhhdCdzIHdoYXQgSSBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozMS40NzQyOTUwNDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NTA5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcF9wYXJhbXNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MDpzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTEtXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpkaWN0X3BhdGgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTc5Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzk3OlxcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFxcdTAwMjZkZWZsYXRlX3BhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTc5OC1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozMS41MTY3NTA5MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTc0NzI5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgWlJBTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGlzIHRoZSBzeXNmcyBmdW5jdGlvbiBmb3IgdGhlIHBhcmFtZXRlcnMgc3RvcmUuIEdvdCBpdC4gTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24ga25vYnMgYXJlIHdlIGdvaW5nIHRvIG5lZWQgZm9yIHpyYW0/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBlc3NlbnRpYWwgcGFyYW1ldGVycyDigJMgY29tcHJlc3Npb24gYWxnb3JpdGhtIGNob2ljZXMsIG1lbW9yeSBsaW1pdHMsIGNodW5rIHNpemVzLCBhbmQgcHJvYmFibHkgc29tZSB0dW5pbmcgcGFyYW1ldGVycyBmb3IgcGVyZm9ybWFuY2UgYmFzZWQgb24gdHlwaWNhbCB3b3JrbG9hZHMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgb3B0aW1pemF0aW9ucyBhbmQgaG93IHRvIG1ha2UgdGhlIGNvbmZpZ3VyYXRpb25zIGludHVpdGl2ZSBmb3IgdGhlIHVzZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozNy42OTE0ODMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg0OTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozNy43MzMzMzgxODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI5ODk4MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpSQU0gQ29uZmlndXJhdGlvbiBJbXBsZW1lbnRhdGlvbiBQbGFuKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaW1wbGVtZW50aW5nIHRoZSBaUkFNIGNvbXByZXNzaW9uIGFsZ29yaXRobSBjb25maWd1cmF0aW9ucy4gTXkgcGxhbiBpcyB0byBhZGQgdGhlIHZhcmlvdXMgYmFja2VuZCBvcHRpb25zIEkgc2VlIGhlcmXigJRgWlJBTWAsIGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYW5kIGBaUkFNX0JBQ0tFTkRfTFpPYOKAlGludG8gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgY29tcF9wYXJhbXNfc3RvcmVgLCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCwgaW1wb3J0YW50bHksIGNoZWNrIGlmIGBjb21wX2FsZ29yaXRobV9zdG9yZWAgZXZlbiBleGlzdHMgaW4gdGhpcyBjb250ZXh0LiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBzZXR1cCBmdW5jdGlvbnMgZm9yIGVhY2ggYWxnb3JpdGhtOiBgc2V0dXBfcGFyYW1zXzg0MmAsIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AsIGBsejRfc2V0dXBfcGFyYW1zYCwgYGx6NGhjX3NldHVwX3BhcmFtc2AsIGBsem9fc2V0dXBfcGFyYW1zYCwgYGx6b3JsZV9zZXR1cF9wYXJhbXNgLCBhbmQgYHpzdGRfc2V0dXBfcGFyYW1zYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5J3JlIGFsbCBmdW5jdGlvbmluZyBjb3JyZWN0bHkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgIChpZiBwcmVzZW50KSBhcmUgaW5kZWVkIHRoZSBhcHByb3ByaWF0ZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgdGhhdCBJIHRoaW5rIHRoZXkgYXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGV5J3JlIGRvaW5nIHdoYXQgSSBleHBlY3QuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjQyLjY2MzIzOTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTA3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjkwPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzIxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MjI6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyMy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzM6NDIuNzA0NzUyNzk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MzQwOTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBIZXJlIHdlIGdvLi4uXG5cbioqRXhwbG9yaW5nIEF2YWlsYWJsZSBGdW5jdGlvbmFsaXR5KipcblxuSG1tLCBub3cgdGhhdCBJJ3ZlIGdvdHRlbiB0aGlzIGZhciwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBkZWZpbml0ZSBhY3Rpb24sIGl0J3MgcHJvYmFibHkgYmVzdCB0byBqdXN0IHBhdXNlIGFuZCB0YWtlIGEgYnJpZWYgbG9vayBhcm91bmQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBXaGF0IG90aGVyIG9wdGlvbnMgYXJlIGF0IG15IGRpc3Bvc2FsPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciB1dGlsaXRpZXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGU/IEl04oCZcyBub3QgYSBxdWVzdGlvbiBvZiBhc3N1bWluZyBJIGhhdmUgZXZlcnl0aGluZyBJIG5lZWQsIGJ1dCByYXRoZXIsIGFzIGEgcHJvZmVzc2lvbmFsLCBpdCdzIGEgbWF0dGVyIG9mIGR1ZSBkaWxpZ2VuY2UsIG9mIG1ha2luZyBzdXJlIEknbSBmdWxseSBhd2FyZSBvZiBteSB0b29sa2l0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBteSBjdXJyZW50IGZ1bmN0aW9uYWxpdHksIGJlZm9yZSBJIGNvbW1pdCB0byBhIHBhcnRpY3VsYXIgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzM6NDUuODc4MTY0ODgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjI0Njg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTU9c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY2OnN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MDE9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODEyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MTM6c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlxcdHJldCA9IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGJ1Zik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMi1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgyNj1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODQ1OnN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODgxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4ODI6XFx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBwcmlvLCBhbGcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODMtXFx0cmV0dXJuIHJldCA/IHJldCA6IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzM6NDUuOTIwNDIwODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4OTY3ODk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpDb21wIEJhY2tlbmQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc3lzZnMgc3RvcmUgZnVuY3Rpb25zOiBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYmFja2VuZCBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgc2V0IHVwLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIHRoZSBiYWNrZW5kIHNldHVwIGZ1bmN0aW9ucyBhcmUgYHNldHVwX3BhcmFtc184NDJgLCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBgbHo0X3NldHVwX3BhcmFtc2AsIGBsejRoY19zZXR1cF9wYXJhbXNgLCBgbHpvX3NldHVwX3BhcmFtc2AsIGBsem9ybGVfc2V0dXBfcGFyYW1zYCwgYW5kIGB6c3RkX3NldHVwX3BhcmFtc2AuXG5cblRoZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgZnVuY3Rpb25zIEknbSByZXZpZXdpbmcgYWxpZ24gd2l0aCB0aGUgZ3VpZGFuY2UgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvbid0IHJlcHJlc2VudCB0aGUgc3RhdGljIGlubGluZWQga2luZC5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgc2V0dXBfcGFyYW1zXzg0MmAuIFRoZSBjb2RlIGNsZWFybHkgaW5kaWNhdGVzIGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgYW5kIGl0IHJlc2lkZXMgaW4gYGJhY2tlbmRfODQyLmNgLiBIbW0sIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBnaXZlbiB0aGUgcnVsZSBhYm91dCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHdhaXQuLi4gYXJlIHRoZXkgYWN0dWFsbHkgdXNlZCBhcyBwYXJ0IG9mIGEgZnVuY3Rpb24gcG9pbnRlcj8gQmVjYXVzZSBpbiBzb21lIHNjZW5hcmlvcywgc3RhdGljIGZ1bmN0aW9ucyBpbiBzZXBhcmF0ZSBmaWxlcyBiZWNvbWUgbW9yZSBsaWtlIFwicHVibGljXCIgbWV0aG9kcyB3aGVuIGFzc2lnbmVkIGludG8gc3RydWN0dXJlcy4gR29pbmcgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIHRoZSBgc3RydWN0IHpjb21wX2JhY2tlbmRgLCBhcyB0aGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgc2hvdWxkIGNoZWNrIGBiYWNrZW5kXzg0Mi5jYCBhbmQgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjUxLjExMDEwMjI4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNzc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfcGFyYW1zXzg0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTEyPXN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzoxNjpzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTYzPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF84NDIgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02Ny1cXHQuZGVzdHJveV9jdHhcXHQ9IGRlc3Ryb3lfODQyLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjY4OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IHNldHVwX3BhcmFtc184NDIsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNjktXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSByZWxlYXNlX3BhcmFtc184NDIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjUxLjE1MjI4NDQ5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQwMTU1MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFN0YXRpYyBGdW5jdGlvbiBQb2ludGVycyBpbiB6cmFtX2Rydi5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgYmVjYXVzZSB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5J2xsIGVhY2ggaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBmaW5lLCBJIGV4cGVjdGVkIHRoYXQuIFRoZSBjYXRjaCBpcyB0aGF0IHRoZXkncmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRob3NlIG90aGVyIGBzdGF0aWNgIHZhcmlhYmxlcyBpbiBgenJhbV9kcnYuY2AsIHNwZWNpZmljYWxseSBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAuIFRob3NlIGFyZSBjbGVhcmx5IHN5c2ZzIGVudHJ5IHBvaW50cy4gQW5kIHRoZW4gaXQgaGl0cyBtZTsgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSB0aG9zZSBpbiBteSBhbmFseXNpcyBhcyB3ZWxsLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpbmNsdWRlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYW5kIGFsc28gdGhhdCB1bmRlcnNjb3JlLXByZWZpeGVkIG9uZTogYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJIHNob3VsZCBjb3ZlciBhbGwgdGhlIGJhc2VzIGhlcmUuXG5cbkFuZCwganVzdCBpbiBjYXNlLCBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBgemNvbXBfc2V0dXBfcGFyYW1zYC4gVGhhdCB0aGluZyAqcHJvYmFibHkqIGNhbGxzIHRoZSBiYWNrZW5kJ3MgYHNldHVwX3BhcmFtc2AgZnVuY3Rpb24sIGFuZCB0aGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGluY2x1ZGUgaW4gbXkgc2NvcGUgYXMgd2VsbC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjU2LjQ5MjQ0OTE5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTc3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9MTI9c3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE1LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjE2OnN0YXRpYyBpbnQgc2V0dXBfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9NjM9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTY3LVxcdC5kZXN0cm95X2N0eFxcdD0gZGVzdHJveV84NDIsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6Njg6XFx0LnNldHVwX3BhcmFtc1xcdD0gc2V0dXBfcGFyYW1zXzg0MixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02OS1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHJlbGVhc2VfcGFyYW1zXzg0MixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0yMT1zdGF0aWMgdm9pZCBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0yNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MjU6c3RhdGljIGludCBkZWZsYXRlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0xNjE9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTY1LVxcdC5kZXN0cm95X2N0eFxcdD0gZGVmbGF0ZV9kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoxNjY6XFx0LnNldHVwX3BhcmFtc1xcdD0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE2Ny1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYz0xOT1zdGF0aWMgdm9pZCBsejRfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMjktXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM6MzA6c3RhdGljIGludCBsejRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0zMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYz0xNTA9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1NC1cXHQuZGVzdHJveV9jdHhcXHQ9IGx6NF9kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjE1NTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsejRfc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1Ni1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6NF9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM9MTk9c3RhdGljIHZvaWQgbHo0aGNfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjIzOnN0YXRpYyBpbnQgbHo0aGNfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTI0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM9MTM0PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejRoYyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMTM4LVxcdC5kZXN0cm95X2N0eFxcdD0gbHo0aGNfZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjEzOTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsejRoY19zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xNDAtXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSBsejRoY19yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jPTExPXN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzoxNTpzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jLTE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jPTYxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy02NS1cXHQuZGVzdHJveV9jdHhcXHQ9IGx6b19kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjY2OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6b19zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNjctXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSBsem9fcmVsZWFzZV9wYXJhbXMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz0xMT1zdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTQtXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM6MTU6c3RhdGljIGludCBsem9ybGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYy0xNi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz02MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNjUtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9ybGVfZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo2NjpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTY3LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHpvcmxlX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTQwPXN0YXRpYyB2b2lkIHpzdGRfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzo1MzpzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtNTQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTIxND1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfenN0ZCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTgtXFx0LmRlc3Ryb3lfY3R4XFx0PSB6c3RkX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxOTpcXHQuc2V0dXBfcGFyYW1zXFx0PSB6c3RkX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjIwLVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE5Nz1zdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXFx0Y29tcC1cXHUwMDNlcGFyYW1zID0gcGFyYW1zO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcXHRyZXQgPSBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVxcdTAwM2VwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIwNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NTc9c3RydWN0IHpjb21wX29wcyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo2NjpcXHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjctXFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzo1Ni41MzUzMTIzOTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5MDczOTkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29tcHJlc3Npb24gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgemNvbXBfaW5pdGAgbm93LiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJk4oCUaXQncyBjYWxsaW5nIGBjb21wLVx1MDAzZW9wcy1cdTAwM2VzZXR1cF9wYXJhbXNgLiBUaGF0J3MgdGhlIGtleSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCB3aGVyZSBgemNvbXBfaW5pdGAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBOZWVkIHRvIHRyYWNlIHRoYXQgcGF0aCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyBzZWUuLi4gd2hlcmUgZG9lcyB0aGlzIGd1eSBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MDAuOTI2MDU1MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTc1OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xODY9aW50IHpjb21wX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTk2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE5NzpzdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTk4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIzMz1zdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyNTY6XFx0ZXJyb3IgPSB6Y29tcF9pbml0KGNvbXAsIHBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjU3LVxcdGlmIChlcnJvcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDowMC45Njg2MzYxNzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjY1NDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFpSQU0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGB6Y29tcF9jcmVhdGVgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGB6cmFtX2Rydi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciBhIFpSQU0gZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMg4oCTIHdoZXJlIHRoZSBjb21wcmVzc2lvbiBlbmdpbmUgZ2V0cyBzZXQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYW5kIGV4YWN0bHkgaG93IHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkLiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgY2FsbCBpbXBhY3RzIHRoZSBkZXZpY2UgY3JlYXRpb24uIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcywgaWYgYW55LCBhcmUgYmVpbmcgdGFrZW4/IEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgaW5pdGlhbCBkZXZpY2Ugc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjg4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MDQuODQ1MjkyNzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAzNDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yMjU9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzM6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTgzPWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg2LXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg2MD1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg3OlxcdFxcdGNvbXAgPSB6Y29tcF9jcmVhdGUoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODgtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDowNC44ODczMzI5MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1NzAzMDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBDb21wcmVzc2lvbiBCYWNrZW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGhvdyBjb21wcmVzc2lvbiBiYWNrZW5kcyBhcmUgc2V0IHVwIGluIHRoaXMgc3lzdGVtLiBJdCBsb29rcyBsaWtlIGBkaXNrc2l6ZV9zdG9yZWAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCwgYXMgaXQncyB0aGUgb25lIHRoYXQgY2FsbHMgYHpjb21wX2NyZWF0ZWAuIFRoYXQgdGVsbHMgbWUgd2hlbiB0aGUgZGlzayBzaXplIGlzIGNvbmZpZ3VyZWQsIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kcyBnZXQgaW5pdGlhbGl6ZWQsIGFuZCBpbXBvcnRhbnRseSwgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkYXRlZC5cblxuVGhlIGNvcmUgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSB0aGlzIGFyZSBzZXQgdmlhIHRoZXNlIGZ1bmN0aW9uczogYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aG9zZSwgYXMgd2VsbCBhcyBgZGlza3NpemVfc3RvcmVgIGFuZCBgemNvbXBfY3JlYXRlYCwgb2J2aW91c2x5LiBBbHNvIHRoZXNlIG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9uczogYGNvbXBfcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLlxuXG5XYWl0IGEgbWludXRlLi4uIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJ20gbm90IHN1cmUgaWYgaXQgaXMgaW5saW5lZCBvciBub3QuIEFuZCBgY29tcF9wYXJhbXNfc3RvcmVgIGlzIGFsc28gc3RhdGljLiBIb3dldmVyLCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgaXMgZGVmaW5pdGVseSBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBzbyBpdCdzIG5vdCBpbmxpbmVkLiBTYW1lIHdpdGggYGRpc2tzaXplX3N0b3JlYCAtIGl0J3MgYSBzeXNmcyBmdW5jdGlvbi4gQW5kIGB6Y29tcF9jcmVhdGVgIGlzIGVpdGhlciBleHBvcnRlZCBvciBub3Qgc3RhdGljLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCBsZXQncyB2ZXJpZnkgYHpjb21wX2NyZWF0ZWAncyB2aXNpYmlsaXR5LiBZZXMsIGl0J3MgZGVmaW5lZCBpbiBgemNvbXAuY2AgYW5kIGRlY2xhcmVkIGluIGB6Y29tcC5oYCwgY29uZmlybWluZyBpdCdzIGF2YWlsYWJsZS5cblxuTm93LCBsZXQncyBsaXN0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGlzIHdob2xlIHByb2Nlc3M6IGBaUkFNYCwgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBgWlJBTV9CQUNLRU5EX0xaT2AgYW5kLCBzaW5jZSBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgcmVsYXRlZCB0byBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zLCBgWlJBTV9NVUxUSV9DT01QYC5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHdoZXRoZXIgYFpSQU1fTVVMVElfQ09NUGAgaXMgYWN0dWFsbHkgbmVlZGVkLCBzaW5jZSBpdCBpbmZsdWVuY2VzIGhvdyB3ZSByZS1jb21wcmVzcyBkYXRhLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTIuMDQ0MzY1NzM4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5MjEyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MjY9c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg0NTpzdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODQ2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDoxMi4xODEyOTE1MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDcxMTA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb246IEEgUm91dGluZSBEaWFnbm9zdGljKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlIGBDT05GSUdfWlJBTV9NVUxUSV9DT01QYCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBjaGVjaywgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSXQncyB0aGUgZmlyc3QgdGhpbmcgSSB3b3VsZCBkbyB3aGVuIGFuYWx5emluZyB6cmFtIGNvZGUsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG11bHRpLWNvbXByZXNzaW9uIGFsZ29yaXRobXMuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCByZWZsZXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTUuNzAyMDA1NzQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyMDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlJBTV9NVUxUSV9DT01QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYXJ0aWFsX2lvKHN0cnVjdCBiaW9fdmVjICpidmVjKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMzojaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0sgfHwgZGVmaW5lZCBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgxMz1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODI0LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MjU6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODI2LXN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzU1PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjItXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM2MzojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjQtI2RlZmluZSBSRUNPTVBSRVNTX0lETEVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk4Nj1zdGF0aWMgREVWSUNFX0FUVFJfUlcoY29tcHJlc3NlZF93cml0ZWJhY2spO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5ODctI2VuZGlmXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4ODojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5ODktc3RhdGljIERFVklDRV9BVFRSX1JXKHJlY29tcF9hbGdvcml0aG0pO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk5ND1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqenJhbV9kaXNrX2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDE0LVxcdFxcdTAwMjZkZXZfYXR0cl9kZWJ1Z19zdGF0LmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAxNTojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTYtXFx0XFx1MDAyNmRldl9hdHRyX3JlY29tcF9hbGdvcml0aG0uYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTc5PXN0cnVjdCB6cmFtX3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjk3OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtOTgtI2RlZmluZSBaUkFNX1BSSU1BUllfQ09NUFxcdDBVXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjM0OjE1Ljc0NjczMjYyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxNDMyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgc28gYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgICppcyogaW5kZWVkIG5lc3RsZWQgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGF04oCZcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgYFpSQU1fTVVMVElfQ09NUGAgdG8gbXkgRW5hYmxlQ29uZmlncy4gU2ltcGxlLlxuXG5Ob3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIGlz4oCmIHdoZXJlIGRvZXMgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIHNpdCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlPyBJIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgc28sIHdoaWNoIG9uZXMuIFRoaXMgY291bGQgaW5mbHVlbmNlIG15IGRlY2lzaW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTkuMTM4MTY4MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTY5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjkwPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzIxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MjI6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyMy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTkuMTgxNzQyNDE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDUxNDE0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFpSQU0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgdGllZCB0byBhbnkgcGFydGljdWxhciBjb25maWd1cmF0aW9uIHNldHRpbmcsIGl0J3MganVzdCBkZWFsaW5nIHdpdGggYFpSQU1gIGRpcmVjdGx5LiBSaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgdG8gYWRkIHRob3NlIHRvIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHNvIEknbGwgaW5jbHVkZTpcblxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYFxuKiAgIGBjb21wX2FsZ29yaXRobV9zdG9yZWBcbiogICBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWBcbiogICBgZGlza3NpemVfc3RvcmVgXG4qICAgYHpjb21wX2NyZWF0ZWBcblxuSG1tLCBoYW5nIG9uLiBgemNvbXBfY3JlYXRlYCAqbWlnaHQqIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IGl0IGxvb2tzIGxpa2UgYGRpc2tzaXplX3N0b3JlYCBjYWxscyBpdC4gT2theSwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFdoYXQgYWJvdXQgdGhvc2UgYHNldHVwX3BhcmFtc184NDJgIHR5cGUgZnVuY3Rpb25zPyBUaGV5J3JlIGRlZmluZWQgYXMgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIHRoZSBmdXp6ZXIgY291bGQgcG90ZW50aWFsbHkgcmVhY2ggdGhyb3VnaCBgemNvbXBfY3JlYXRlYC4gR29vZCwgc28gSSdsbCBhZGQgYHpjb21wX2NyZWF0ZWAgYW5kIGBkaXNrc2l6ZV9zdG9yZWAgYXMgbXkgaW5pdGlhbCB0YXJnZXQgc3ltYm9scy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIGBaUkFNYCBtb2R1bGUsIGlmIGFueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MjQuNzI2ODg2NTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE4NzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDoyNC43NjkwODE0MThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTIwMzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzIEkgbWlnaHQgaGF2ZTpcblxuKipaUkFNIERlcGVuZGVuY2llczogQSBRdWljayBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gdGhlIGBaUkFNYCBkZXBlbmRlbmNpZXMuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29tcG9uZW50cy4gIE9rYXksIEkgc2VlIGl0IHJlbGllcyBvbiBgQkxPQ0tgLCBgU1lTRlNgLCBgWlNNQUxMT0NgLCBhbmQgYENSWVBUT2AuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gYnJvYWQgc3Ryb2tlcywgYnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byByZWFkIHRoZSBgY29uZmlnIFpSQU1gIGJsb2NrIGRpcmVjdGx5LiBOZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBhbGwgdGhlIGZpbmVyIG51YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MjcuOTQ0Mjg3NzFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgWlJBTVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DSyBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gICA1OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXFxuICAgODpcXHRcXHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcXG4gICA5OlxcdFxcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xcbiAgMTA6XFx0XFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQgaGFzIHNldmVyYWwgdXNlIGNhc2VzLCBmb3IgZXhhbXBsZTogL3RtcCBzdG9yYWdlLCB1c2UgYXMgc3dhcFxcbiAgMTM6XFx0XFx0ICBkaXNrcyBhbmQgbWF5YmUgbWFueSBtb3JlLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDIwOlxcdFxcdHNlbGVjdCBMWjRfQ09NUFJFU1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MjcuOTQ0MzUwNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MTk3NTU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWlJBTSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBhIGZ1enppbmcgc3RyYXRlZ3kuIEZpcnN0LCB0aGUgY29yZSBkZXBlbmRlbmNpZXMgZm9yIGBaUkFNYCBpdHNlbGYgYXJlIHN0YW5kYXJkOiBgQkxPQ0tgLCBgU1lTRlNgLCBhbmQgYE1NVWAuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSdsbCBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIG9idmlvdXNseSwgYW5kIHRoZW4gYWxsIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kcyB0aGF0IHdlcmUgYWRkZWQ6IGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYFpSQU1fQkFDS0VORF9MWk9gLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuIFRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IGluIGB6cmFtX2Rydi5jYC4gSSBzZWUgYGNvbXBfYWxnb3JpdGhtX3NldGAsIGBjb21wX3BhcmFtc19yZXNldGAsIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYW5kIGBjb21wX3BhcmFtc19zdG9yZWAuIFNpbmNlIHRoZSB0YXNrIGlzIGZ1enppbmcsIEknbSBpbnRlcmVzdGVkIGluIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEknbSBnb2luZyB0byBhZGQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAsIGBkaXNrc2l6ZV9zdG9yZWAsIGFuZCBgemNvbXBfY3JlYXRlYCB0byBgRm9jdXNTeW1ib2xzYC5cblxuSG9sZCBvbiBhIHNlYy4uLiBgY29tcF9wYXJhbXNfc3RvcmVgIGlzIHN0YXRpYywgYnV0IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAqY2FsbHMqIGl0LiBHb29kIGNhdGNoLiBJJ2xsIHN0aWNrIHdpdGggbXkgaW5pdGlhbCBsaXN0IG9mIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpjb21wX2NyZWF0ZWAgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbkFscmlnaHQsIGxldCdzIGNvbmZpcm0gYHpjb21wX2NyZWF0ZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBBaCwgeWVzLCBgZGlza3NpemVfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gZm9yIGAvc3lzL2Jsb2NrL3pyYW1YL2Rpc2tzaXplYC4gVGhhdCdzIHRoZSBrZXkuIFdoZW4geW91IHdyaXRlIHRvIGBkaXNrc2l6ZWAsIGl0IGNhbGxzIGB6Y29tcF9jcmVhdGVgLCB3aGljaCB0aGVuIGNhbGxzIGB6Y29tcF9pbml0YCBhbmQgZXZlbnR1YWxseSBgc2V0dXBfcGFyYW1zYCBmb3IgdGhlIHNlbGVjdGVkIGJhY2tlbmQuIEFuZCAqaW1wb3J0YW50bHkqLCB0aG9zZSBwYXJhbWV0ZXJzIGFyZSBzZXQgKmJlZm9yZSogYGRpc2tzaXplYCBpcyB3cml0dGVuLCB2aWEgdGhlIGBjb21wX2FsZ29yaXRobWAgYW5kIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgIHN5c2ZzIGZpbGVzLlxuXG5TbywgdGhlIGZ1enppbmcgc2VxdWVuY2UgaXMgY2xlYXI6IHdyaXRlIHRvIGBjb21wX2FsZ29yaXRobWAsIHdyaXRlIHRvIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgLCBhbmQgdGhlbiB3cml0ZSB0byBgZGlza3NpemVgLiBQZXJmZWN0LiBUaGF0J3MgZW50aXJlbHkgZnV6emFibGUgdmlhIHN5c2ZzLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0aGUgZnV6emVyIHRvIGZvY3VzIHRvIHRlc3QgdGhlIG5ldyB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyBhZGRlZCB0byB2YXJpb3VzIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMuXG5cblRoZXJlZm9yZSwgdGhlIGZpbmFsIHNldHVwIGZvciB0aGUgZnV6emVyIHdpbGwgYmU6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYGRpc2tzaXplX3N0b3JlYCwgYHpjb21wX2NyZWF0ZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFpSQU1gLCBgWlJBTV9CQUNLRU5EX0xaNGAsIGBaUkFNX0JBQ0tFTkRfTFo0SENgLCBgWlJBTV9CQUNLRU5EX1pTVERgLCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgLCBgWlJBTV9CQUNLRU5EXzg0MmAsIGBaUkFNX0JBQ0tFTkRfTFpPYCwgYFpSQU1fTVVMVElfQ09NUGBcbiogICAqKlJlYXNvbmluZyoqOiBUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyB0byB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzLCBhbmQgdGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCBhbmQgdmFsaWRhdGVkIHZpYSBzeXNmcy4gVGhlcmVmb3JlLCBmdXp6aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgYGNvbXBfYWxnb3JpdGhtYCwgYGNvbXBfYWxnb3JpdGhtX3BhcmFtc2AsIGFuZCBgZGlza3NpemVgLCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NjUsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MzkuNTY0MTA5MTQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNDQ3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRIQ1wiLFxuICAgIFwiWlJBTV9CQUNLRU5EX1pTVERcIixcbiAgICBcIlpSQU1fQkFDS0VORF9ERUZMQVRFXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfODQyXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFpPXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGdvcml0aG1fcGFyYW1zX3N0b3JlXCIsXG4gICAgXCJjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwicmVjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNEhDXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfWlNURFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIixcbiAgICBcIlpSQU1fQkFDS0VORF84NDJcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWk9cIixcbiAgICBcIlpSQU1fTVVMVElfQ09NUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcImNvbXBfYWxnb3JpdGhtX3N0b3JlXCIsXG4gICAgXCJyZWNvbXBfYWxnb3JpdGhtX3N0b3JlXCIsXG4gICAgXCJkaXNrc2l6ZV9zdG9yZVwiLFxuICAgIFwiemNvbXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gdmFyaW91cyB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzICg4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCB6c3RkKS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCB2aWEgc3lzZnMgKGUuZy4sIGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgKSBhbmQgdmFsaWRhdGVkIHdoZW4gdGhlIGNvbXByZXNzaW9uIGJhY2tlbmQgaXMgaW5pdGlhbGl6ZWQgKGUuZy4sIHdoZW4gc2V0dGluZyBgZGlza3NpemVgKS4gRnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcyBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6rml[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 10:14:04 +0000 UTC FinishedAt: 2026-08-04 10:34:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9a4cdc958dd79fc6c3b20b51a10debec6ca09fec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO", "ZRAM_MULTI_COMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9a4cdc958dd79fc6c3b20b51a10debec6ca09fec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO", "ZRAM_MULTI_COMP" ], "series_id": "f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "algorithm_params_store", "comp_algorithm_store", "recomp_algorithm_store", "disksize_store", "zcomp_create" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0SEMmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX1pTVEQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EXzg0MiYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFpPJiMzNDssCiAgICAmIzM0O1pSQU1fTVVMVElfQ09NUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7Y29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gdmFyaW91cyB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzICg4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCB6c3RkKS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCB2aWEgc3lzZnMgKGUuZy4sIGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgKSBhbmQgdmFsaWRhdGVkIHdoZW4gdGhlIGNvbXByZXNzaW9uIGJhY2tlbmQgaXMgaW5pdGlhbGl6ZWQgKGUuZy4sIHdoZW4gc2V0dGluZyBgZGlza3NpemVgKS4gRnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcyBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0MDA1ZmI3YWQxZDllYzMwZDQ5NGJkMWY5MWIyMzhmZTY1ODVjNzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjMzOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbmluZGV4IDEwZDlkNWM2MGY1MzEuLjM4NDZhMDRjNjlkNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0Ozg0MjogXCYjMzQ7IGZtdFxuJiM0MztcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3ODQyLmhcdTAwM2VcbkBAIC0xMyw2ICYjNDM7MTUsMTQgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcbiBzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWRpY3Rfc3opIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWxldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG5pbmRleCBiM2Y3ZDA4YjQ5ZDkzLi5mNzFiMTFiY2FjNzg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2RlZmxhdGU6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbkBAIC0yMiwxNSAmIzQzOzI0LDI2IEBAIHN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWRpY3Rfc3opIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjtcbiYjNDM7XHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgWl9ERUZBVUxUX0NPTVBSRVNTSU9OIHx8XG4mIzQzO1x0XHQgICBwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNlIFpfQkVTVF9DT01QUkVTU0lPTikge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXG5cJiMzNDssIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gREVGTEFURV9ERUZfV0lOQklUUztcbiBcdH0gZWxzZSB7XG4gXHRcdHMzMiB3YiA9IHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHM7XG4gXG4gXHRcdGlmICgod2IgXHUwMDNjIC0xNSB8fCB3YiBcdTAwM2UgLTkpIFx1MDAyNlx1MDAyNiAod2IgXHUwMDNjIDkgfHwgd2IgXHUwMDNlIDE1KSkge1xuLVx0XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIGRlZmxhdGUgd2luYml0czogJWRcXG5cJiMzNDssIHdiKTtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgd2luYml0cyAlZFxcblwmIzM0Oywgd2IpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uMWUyODEwNGFkOTY0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTEsMyAmIzQzOzEsNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtsejQ6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sejQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTI4LDggJiM0MzszMiwxMiBAQCBzdGF0aWMgaW50IGx6NF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFx0TFo0X3N0cmVhbV90ICpkaWN0X3N0cmVhbTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVDtcbiYjNDM7XHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgTFo0X0FDQ0VMRVJBVElPTl9ERUZBVUxUKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7aW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcblwmIzM0OywgcGFyYW1zLVx1MDAzZWxldmVsKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdGlmICghcGFyYW1zLVx1MDAzZWRpY3QgfHwgIXBhcmFtcy1cdTAwM2VkaWN0X3N6KVxuIFx0XHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uZDhhYTAxYmIyNThmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xLDMgJiM0MzsxLDcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7bHo0aGM6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sejQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTE4LDggJiM0MzsyMiwxOCBAQCBzdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4gXG4gc3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0gTFo0SENfREVGQVVMVF9DTEVWRUw7XG4mIzQzO1x0fSBlbHNlIGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNjIDEgfHwgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSBMWjRIQ19NQVhfQ0xFVkVMKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVXNlIFx1MDAzYyAxIHJhdGhlciB0aGFuIFx1MDAzYyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZVxuJiM0MztcdFx0ICogTFo0SENfY29tcHJlc3NfZ2VuZXJpYygpIG9ubHkgY2xhbXBzIGxldmVscyBiZWxvdyAxXG4mIzQzO1x0XHQgKiAobGV2ZWxzIDEgYW5kIDIgYXJlIHZhbGlkKS4gTFo0SENfTUlOX0NMRVZFTCAoMykgaXNcbiYjNDM7XHRcdCAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCYjMzQ7LCBwYXJhbXMtXHUwMDNlbGV2ZWwpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLmQ4M2Y5MmNmNzU3Y2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2x6bzogXCYjMzQ7IGZtdFxuJiM0MztcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2x6by5oXHUwMDNlXG5AQCAtMTIsNiAmIzQzOzE0LDE0IEBAIHN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4gXG4gc3RhdGljIGludCBsem9fc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VkaWN0X3N6KSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7ZGljdGlvbmFyeSBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7Y29tcHJlc3Npb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbmluZGV4IDEwNjQwYzk2Y2JmY2EuLjFiMTIwZDA2MmM5MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbkBAIC0xLDUgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2x6by1ybGU6IFwmIzM0OyBmbXRcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sem8uaFx1MDAzZVxuQEAgLTEyLDYgJiM0MzsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgbHpvcmxlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4ge1xuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlZGljdF9zeikge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2RpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2NvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjA4ZGEzODEwY2ZmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xuQEAgLTEsNSAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7enN0ZDogXCYjMzQ7IGZtdFxuJiM0MztcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuQEAgLTU4LDggJiM0Mzs2MCwxMyBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRwYXJhbXMtXHUwMDNlZHJ2X2RhdGEgPSB6cDtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0genN0ZF9kZWZhdWx0X2NsZXZlbCgpO1xuJiM0MztcdH0gZWxzZSBpZiAocGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzYyB6c3RkX21pbl9jbGV2ZWwoKSB8fFxuJiM0MztcdFx0ICAgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXG5cJiMzNDssIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiBcbiBcdHpwLVx1MDAzZWNwcm0gPSB6c3RkX2dldF9wYXJhbXMocGFyYW1zLVx1MDAzZWxldmVsLCBQQUdFX1NJWkUpO1xuIFxuQEAgLTg1LDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG5AQCAtMTYxLDcgJiM0MzsxNjcsNiBAQCBzdGF0aWMgaW50IHpzdGRfY3JlYXRlKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHR6c3RkX2Rlc3Ryb3koY3R4KTtcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBjZmE5ODg0NmFjNDg0Li41NjE4M2M4MjdlMWIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtMTY1Miw2ICYjNDM7MTY1MiwxNyBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4gXHR6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dO1xuJiM0MztcbiYjNDM7XHR2ZnJlZShwYXJhbXMtXHUwMDNlZGljdCk7XG4mIzQzO1x0cGFyYW1zLVx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbiYjNDM7XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbiYjNDM7XHRwYXJhbXMtXHUwMDNlZGljdF9zeiA9IDA7XG4mIzQzO1x0cGFyYW1zLVx1MDAzZWRpY3QgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbiB7XG4gXHRjb25zdCBjaGFyICphbGc7XG5AQCAtMTY3MiwyMCAmIzQzOzE2ODMsMTAgQEAgc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIFx0fVxuIFxuIFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XG4mIzQzO1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuLXtcbi1cdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dO1xuLVxuLVx0dmZyZWUocGFyYW1zLVx1MDAzZWRpY3QpO1xuLVx0cGFyYW1zLVx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbi1cdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3Rfc3ogPSAwO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3QgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqZGljdF9wYXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGRlZmxhdGVfcGFyYW1zICpkZWZsYXRlX3BhcmFtcylcbkBAIC0xNzAwLDggJiM0MzsxNzAxLDE2IEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0SU5UX01BWCxcbiBcdFx0XHRcdFx0XHROVUxMLFxuIFx0XHRcdFx0XHRcdFJFQURJTkdfUE9MSUNZKTtcbi1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuJiM0MztcdFx0aWYgKHN6IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gbG9hZCBkaWN0aW9uYXJ5ICVzIChlcnI9JXpkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIGRpY3RfcGF0aCwgc3opO1xuJiM0MztcdFx0XHRyZXR1cm4gc3o7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoc3ogPT0gMCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZW1wdHkgZmlsZSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBkaWN0X3BhdGgpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0enJhbS1cdTAwM2VwYXJhbXNbcHJpb10uZGljdF9zeiA9IHN6O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NDAwNWZiN2FkMWQ5ZWMzMGQ0OTRiZDFmOTFiMjM4ZmU2NTg1YzcyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxMDozMzoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMKaW5kZXggMTBkOWQ1YzYwZjUzMS4uMzg0NmEwNGM2OWQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMKQEAgLTEsNSAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKIAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDs4NDI6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdzg0Mi5oJmd0OwpAQCAtMTMsNiAmIzQzOzE1LDE0IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiAKIHN0YXRpYyBpbnQgc2V0dXBfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiB7CiYjNDM7CWlmIChwYXJhbXMtJmd0O2RpY3Rfc3opIHsKJiM0MzsJCXByX2VycigmIzM0O2RpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CWlmIChwYXJhbXMtJmd0O2xldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHsKJiM0MzsJCXByX2VycigmIzM0O2NvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMKaW5kZXggYjNmN2QwOGI0OWQ5My4uZjcxYjExYmNhYzc4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYwpAQCAtMSw1ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogCiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2RlZmxhdGU6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CkBAIC0yMiwxNSAmIzQzOzI0LDI2IEBAIHN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCiBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcykKIHsKLQlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtkaWN0X3N6KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiAJCXBhcmFtcy0mZ3Q7bGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiYjNDM7CX0gZWxzZSBpZiAocGFyYW1zLSZndDtsZXZlbCAmbHQ7IFpfREVGQVVMVF9DT01QUkVTU0lPTiB8fAomIzQzOwkJICAgcGFyYW1zLSZndDtsZXZlbCAmZ3Q7IFpfQkVTVF9DT01QUkVTU0lPTikgewomIzQzOwkJcHJfZXJyKCYjMzQ7aW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxuJiMzNDssIHBhcmFtcy0mZ3Q7bGV2ZWwpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAocGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewogCQlwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7CiAJfSBlbHNlIHsKIAkJczMyIHdiID0gcGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHM7CiAKIAkJaWYgKCh3YiAmbHQ7IC0xNSB8fCB3YiAmZ3Q7IC05KSAmYW1wOyZhbXA7ICh3YiAmbHQ7IDkgfHwgd2IgJmd0OyAxNSkpIHsKLQkJCXByX2VycigmIzM0O2ludmFsaWQgZGVmbGF0ZSB3aW5iaXRzOiAlZFxuJiMzNDssIHdiKTsKJiM0MzsJCQlwcl9lcnIoJiMzNDtpbnZhbGlkIHdpbmJpdHMgJWRcbiYjMzQ7LCB3Yik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uMWUyODEwNGFkOTY0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKQEAgLTEsMyAmIzQzOzEsNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2x6NDogJiMzNDsgZm10CiYjNDM7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbHo0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtMjgsOCAmIzQzOzMyLDEyIEBAIHN0YXRpYyBpbnQgbHo0X3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiAJTFo0X3N0cmVhbV90ICpkaWN0X3N0cmVhbTsKIAlpbnQgcmV0OwogCi0JaWYgKHBhcmFtcy0mZ3Q7bGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7bGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewogCQlwYXJhbXMtJmd0O2xldmVsID0gTFo0X0FDQ0VMRVJBVElPTl9ERUZBVUxUOwomIzQzOwl9IGVsc2UgaWYgKHBhcmFtcy0mZ3Q7bGV2ZWwgJmx0OyBMWjRfQUNDRUxFUkFUSU9OX0RFRkFVTFQpIHsKJiM0MzsJCXByX2VycigmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcbiYjMzQ7LCBwYXJhbXMtJmd0O2xldmVsKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlpZiAoIXBhcmFtcy0mZ3Q7ZGljdCB8fCAhcGFyYW1zLSZndDtkaWN0X3N6KQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jCmluZGV4IGY2YTMzNmFjZmUyMDIuLmQ4YWEwMWJiMjU4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYwpAQCAtMSwzICYjNDM7MSw3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7bHo0aGM6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2x6NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTE4LDggJiM0MzsyMiwxOCBAQCBzdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpCiAKIHN0YXRpYyBpbnQgbHo0aGNfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcykKIHsKLQlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiAJCXBhcmFtcy0mZ3Q7bGV2ZWwgPSBMWjRIQ19ERUZBVUxUX0NMRVZFTDsKJiM0MzsJfSBlbHNlIGlmIChwYXJhbXMtJmd0O2xldmVsICZsdDsgMSB8fCBwYXJhbXMtJmd0O2xldmVsICZndDsgTFo0SENfTUFYX0NMRVZFTCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVzZSAmbHQ7IDEgcmF0aGVyIHRoYW4gJmx0OyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZQomIzQzOwkJICogTFo0SENfY29tcHJlc3NfZ2VuZXJpYygpIG9ubHkgY2xhbXBzIGxldmVscyBiZWxvdyAxCiYjNDM7CQkgKiAobGV2ZWxzIDEgYW5kIDIgYXJlIHZhbGlkKS4gTFo0SENfTUlOX0NMRVZFTCAoMykgaXMKJiM0MzsJCSAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuCiYjNDM7CQkgKi8KJiM0MzsJCXByX2VycigmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcbiYjMzQ7LCBwYXJhbXMtJmd0O2xldmVsKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMKaW5kZXggNGM5MDZiZWFhZTZiMy4uZDgzZjkyY2Y3NTdjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMKQEAgLTEsNSAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKIAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtsem86ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sem8uaCZndDsKQEAgLTEyLDYgJiM0MzsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9fcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCiBzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogewomIzQzOwlpZiAocGFyYW1zLSZndDtkaWN0X3N6KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYwppbmRleCAxMDY0MGM5NmNiZmNhLi4xYjEyMGQwNjJjOTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYwpAQCAtMSw1ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogCiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O2x6by1ybGU6ICYjMzQ7IGZtdAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sem8uaCZndDsKQEAgLTEyLDYgJiM0MzsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCiBzdGF0aWMgaW50IGx6b3JsZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogewomIzQzOwlpZiAocGFyYW1zLSZndDtkaWN0X3N6KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jCmluZGV4IGQwMGI1NDgwNTZkYzIuLjA4ZGEzODEwY2ZmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMKQEAgLTEsNSAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKIAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDt6c3RkOiAmIzM0OyBmbXQKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwpAQCAtNTgsOCAmIzQzOzYwLDEzIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXBhcmFtcy0mZ3Q7ZHJ2X2RhdGEgPSB6cDsKLQlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7CiAJCXBhcmFtcy0mZ3Q7bGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7CiYjNDM7CX0gZWxzZSBpZiAocGFyYW1zLSZndDtsZXZlbCAmbHQ7IHpzdGRfbWluX2NsZXZlbCgpIHx8CiYjNDM7CQkgICBwYXJhbXMtJmd0O2xldmVsICZndDsgenN0ZF9tYXhfY2xldmVsKCkpIHsKJiM0MzsJCXByX2VycigmIzM0O2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcbiYjMzQ7LCBwYXJhbXMtJmd0O2xldmVsKTsKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CX0KIAogCXpwLSZndDtjcHJtID0genN0ZF9nZXRfcGFyYW1zKHBhcmFtcy0mZ3Q7bGV2ZWwsIFBBR0VfU0laRSk7CiAKQEAgLTg1LDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCXJldHVybiAwOwogCiBlcnJvcjoKLQl6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTE2MSw3ICYjNDM7MTY3LDYgQEAgc3RhdGljIGludCB6c3RkX2NyZWF0ZShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCkKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JenN0ZF9yZWxlYXNlX3BhcmFtcyhwYXJhbXMpOwogCXpzdGRfZGVzdHJveShjdHgpOwogCXJldHVybiAtRUlOVkFMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBjZmE5ODg0NmFjNDg0Li41NjE4M2M4MjdlMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMTY1Miw2ICYjNDM7MTY1MiwxNyBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpCiAJenJhbS0mZ3Q7Y29tcF9hbGdzW3ByaW9dID0gYWxnOwogfQogCiYjNDM7c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zID0gJmFtcDt6cmFtLSZndDtwYXJhbXNbcHJpb107CiYjNDM7CiYjNDM7CXZmcmVlKHBhcmFtcy0mZ3Q7ZGljdCk7CiYjNDM7CXBhcmFtcy0mZ3Q7bGV2ZWwgPSBaQ09NUF9QQVJBTV9OT1RfU0VUOwomIzQzOwlwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9IFpDT01QX1BBUkFNX05PVF9TRVQ7CiYjNDM7CXBhcmFtcy0mZ3Q7ZGljdF9zeiA9IDA7CiYjNDM7CXBhcmFtcy0mZ3Q7ZGljdCA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKQogewogCWNvbnN0IGNoYXIgKmFsZzsKQEAgLTE2NzIsMjAgJiM0MzsxNjgzLDEwIEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZikKIAl9CiAKIAljb21wX2FsZ29yaXRobV9zZXQoenJhbSwgcHJpbywgYWxnKTsKJiM0MzsJY29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbykKLXsKLQlzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMgPSAmYW1wO3pyYW0tJmd0O3BhcmFtc1twcmlvXTsKLQotCXZmcmVlKHBhcmFtcy0mZ3Q7ZGljdCk7Ci0JcGFyYW1zLSZndDtsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7Ci0JcGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUOwotCXBhcmFtcy0mZ3Q7ZGljdF9zeiA9IDA7Ci0JcGFyYW1zLSZndDtkaWN0ID0gTlVMTDsKLX0KLQogc3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCwKIAkJCSAgICAgY29uc3QgY2hhciAqZGljdF9wYXRoLAogCQkJICAgICBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgKmRlZmxhdGVfcGFyYW1zKQpAQCAtMTcwMCw4ICYjNDM7MTcwMSwxNiBAQCBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLAogCQkJCQkJSU5UX01BWCwKIAkJCQkJCU5VTEwsCiAJCQkJCQlSRUFESU5HX1BPTElDWSk7Ci0JCWlmIChzeiAmbHQ7IDApCiYjNDM7CQlpZiAoc3ogJmx0OyAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBkaWN0X3BhdGgsIHN6KTsKJiM0MzsJCQlyZXR1cm4gc3o7CiYjNDM7CQl9CiYjNDM7CQlpZiAoc3ogPT0gMCkgewomIzQzOwkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVtcHR5IGZpbGUpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZGljdF9wYXRoKTsKIAkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCXpyYW0tJmd0O3BhcmFtc1twcmlvXS5kaWN0X3N6ID0gc3o7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIENvbXByZXNzaW9uIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgenJhbSBiYWNrZW5kIGNvbXByZXNzaW9uIGRyaXZlcnMuIEl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IOKAkyA4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCBhbmQgenN0ZCDigJMgYW5kIGFsc28gYHpyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFkZGluZyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIGBzZXR1cF9wYXJhbXNgIGZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBJIHNlZSB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGNoZWNraW5nIHRoaW5ncyBsaWtlIGBkaWN0X3N6YCwgYGxldmVsYCwgYW5kIGV2ZW4gYHdpbmJpdHNgIGZvciBkZWZsYXRlLCByZXR1cm5pbmcgZXJyb3JzIGxpa2UgYC1FT1BOT1RTVVBQYCBvciBgLUVJTlZBTGAgd2hlbiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLiBUaGlzIGlzIGEgZ29vZCB0aGluZyDigJMgcm9idXN0IGVycm9yIGhhbmRsaW5nIGlzIGFsd2F5cyBjcnVjaWFsLCBlc3BlY2lhbGx5IGZvciBhIGJsb2NrIGRldmljZSBkcml2ZXIuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgYmFkIHBhcmFtZXRlcnMgbWlnaHQgaGF2ZSBiZWVuIGlnbm9yZWQgb3IgY291bGQgaGF2ZSBsZWFkIHRvIGEgY3Jhc2guCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBUaGlzIHZhbGlkYXRpb24gaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciwgYnV0IGZvciB0aGUgYmV0dGVyLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBiZWNhdXNlIHRoZXNlIHpyYW0gcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCBmcm9tIHVzZXIgc3BhY2UsIHZpYSBzeXNmcy4gV2FpdCwgaXQgaXMgY29uZmlndXJlZCB2aWEgc3lzZnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucy4KClJpZ2h0LCBzbyBgenJhbV9kcnYuY2AgaXMgZ29pbmcgdG8gYmUga2V5IGhlcmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHNldHVwX3BhcmFtc2Agd2l0aGluIHRoYXQgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCB6cmFtIGluaXRpYWxpemF0aW9uIGFuZCBwYXJhbWV0ZXIgc2V0dGluZy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhvc2Ugc3lzZnMgaGFuZGxlcnMg4oCTIHRoZSBvbmVzIGFjY2Vzc2libGUgdGhyb3VnaCBwYXRocyBsaWtlIGAvc3lzL2Jsb2NrL3pyYW0wL2NvbXBfYWxnb3JpdGhtYCwgYC9zeXMvYmxvY2svenJhbTAvY29tcF9hbGdvcml0aG1fcGFyYW1zYCwgb3Igc2ltaWxhci4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgdG8gaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYW5kIHZhbGlkYXRlZC4KClNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgY29tcF9wYXJhbXNfcmVzZXRgIGhhcyBiZWVuIG1vdmVkIHRvIGV4ZWN1dGUgYmVmb3JlIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgd2hpY2ggbWVhbnMgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYXJlIHJlc2V0IGJlZm9yZSB0aGUgbmV3IGFsZ29yaXRobSBpcyBhc3NpZ25lZC4gSXQgYWxzbyBhZGRzIGVycm9yIGxvZ2dpbmcgZm9yIGRpY3Rpb25hcnkgbG9hZGluZy4gT2theSwgdGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBfcGFyYW1zX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg5LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MDpzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5MS1cdFx0XHQgICAgIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3OTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzk3Olx0cmV0ID0gY29tcF9wYXJhbXNfc3RvcmUoenJhbSwgcHJpbywgbGV2ZWwsIGRpY3RfcGF0aCwgXHUwMDI2ZGVmbGF0ZV9wYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTc5OC1cdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgWlJBTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyB0aGUgc3lzZnMgZnVuY3Rpb24gZm9yIHRoZSBwYXJhbWV0ZXJzIHN0b3JlLiBHb3QgaXQuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBrbm9icyBhcmUgd2UgZ29pbmcgdG8gbmVlZCBmb3IgenJhbT8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGVzc2VudGlhbCBwYXJhbWV0ZXJzIOKAkyBjb21wcmVzc2lvbiBhbGdvcml0aG0gY2hvaWNlcywgbWVtb3J5IGxpbWl0cywgY2h1bmsgc2l6ZXMsIGFuZCBwcm9iYWJseSBzb21lIHR1bmluZyBwYXJhbWV0ZXJzIGZvciBwZXJmb3JtYW5jZSBiYXNlZCBvbiB0eXBpY2FsIHdvcmtsb2Fkcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBvcHRpbWl6YXRpb25zIGFuZCBob3cgdG8gbWFrZSB0aGUgY29uZmlndXJhdGlvbnMgaW50dWl0aXZlIGZvciB0aGUgdXNlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlJBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjIzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDt6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzYtXHRib29sIFwmIzM0O2RlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDE6Y29uZmlnIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDs4NDIgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVx0ZGVwZW5kcyBvbiBaUkFNXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo1Mzpjb25maWcgWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXHRib29sIFwmIzM0O2x6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7IGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjA9Y2hvaWNlXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2NTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9STEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtsem8tcmxlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtsem9cJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzQtXHRib29sIFwmIzM0O2x6NFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Nzc6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtsejRoY1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4OTpjb25maWcgWlJBTV9ERUZfQ09NUF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz05Mz1lbmRjaG9pY2VcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk2LVx0c3RyaW5nXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O1RyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQwOmNvbmZpZyBaUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTE2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpSQU0gQ29uZmlndXJhdGlvbiBJbXBsZW1lbnRhdGlvbiBQbGFuKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBpbXBsZW1lbnRpbmcgdGhlIFpSQU0gY29tcHJlc3Npb24gYWxnb3JpdGhtIGNvbmZpZ3VyYXRpb25zLiBNeSBwbGFuIGlzIHRvIGFkZCB0aGUgdmFyaW91cyBiYWNrZW5kIG9wdGlvbnMgSSBzZWUgaGVyZeKAlGBaUkFNYCwgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBhbmQgYFpSQU1fQkFDS0VORF9MWk9g4oCUaW50byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQsIGltcG9ydGFudGx5LCBjaGVjayBpZiBgY29tcF9hbGdvcml0aG1fc3RvcmVgIGV2ZW4gZXhpc3RzIGluIHRoaXMgY29udGV4dC4gVGhlbiwgb2YgY291cnNlLCB0aGUgc2V0dXAgZnVuY3Rpb25zIGZvciBlYWNoIGFsZ29yaXRobTogYHNldHVwX3BhcmFtc184NDJgLCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBgbHo0X3NldHVwX3BhcmFtc2AsIGBsejRoY19zZXR1cF9wYXJhbXNgLCBgbHpvX3NldHVwX3BhcmFtc2AsIGBsem9ybGVfc2V0dXBfcGFyYW1zYCwgYW5kIGB6c3RkX3NldHVwX3BhcmFtc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgYWxsIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgIChpZiBwcmVzZW50KSBhcmUgaW5kZWVkIHRoZSBhcHByb3ByaWF0ZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgdGhhdCBJIHRoaW5rIHRoZXkgYXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGV5JiMzOTtyZSBkb2luZyB3aGF0IEkgZXhwZWN0LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY5MD1zdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzIyOnN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyMy1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSGVyZSB3ZSBnby4uLgoKKipFeHBsb3JpbmcgQXZhaWxhYmxlIEZ1bmN0aW9uYWxpdHkqKgoKSG1tLCBub3cgdGhhdCBJJiMzOTt2ZSBnb3R0ZW4gdGhpcyBmYXIsIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZGVmaW5pdGUgYWN0aW9uLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGp1c3QgcGF1c2UgYW5kIHRha2UgYSBicmllZiBsb29rIGFyb3VuZCwgc28gdG8gc3BlYWsuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBXaGF0IG90aGVyIG9wdGlvbnMgYXJlIGF0IG15IGRpc3Bvc2FsPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciB1dGlsaXRpZXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGU/IEl04oCZcyBub3QgYSBxdWVzdGlvbiBvZiBhc3N1bWluZyBJIGhhdmUgZXZlcnl0aGluZyBJIG5lZWQsIGJ1dCByYXRoZXIsIGFzIGEgcHJvZmVzc2lvbmFsLCBpdCYjMzk7cyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLCBvZiBtYWtpbmcgc3VyZSBJJiMzOTttIGZ1bGx5IGF3YXJlIG9mIG15IHRvb2xraXQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIG15IGN1cnJlbnQgZnVuY3Rpb25hbGl0eSwgYmVmb3JlIEkgY29tbWl0IHRvIGEgcGFydGljdWxhciBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjU1PXN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY2NjpzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xODAxPXN0YXRpYyBzc2l6ZV90IGNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODEzOnN0YXRpYyBzc2l6ZV90IGNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTQtXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MjE6XHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBidWYpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMi1cdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgyNj1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODQ1OnN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODgyOlx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBwcmlvLCBhbGcpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4My1cdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaQ29tcCBCYWNrZW5kIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3lzZnMgc3RvcmUgZnVuY3Rpb25zOiBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYmFja2VuZCBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgc2V0IHVwLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIHRoZSBiYWNrZW5kIHNldHVwIGZ1bmN0aW9ucyBhcmUgYHNldHVwX3BhcmFtc184NDJgLCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBgbHo0X3NldHVwX3BhcmFtc2AsIGBsejRoY19zZXR1cF9wYXJhbXNgLCBgbHpvX3NldHVwX3BhcmFtc2AsIGBsem9ybGVfc2V0dXBfcGFyYW1zYCwgYW5kIGB6c3RkX3NldHVwX3BhcmFtc2AuCgpUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIHJldmlld2luZyBhbGlnbiB3aXRoIHRoZSBndWlkYW5jZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgZG9uJiMzOTt0IHJlcHJlc2VudCB0aGUgc3RhdGljIGlubGluZWQga2luZC4KCkxldCYjMzk7cyBzdGFydCB3aXRoIGBzZXR1cF9wYXJhbXNfODQyYC4gVGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgaXQmIzM5O3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgYW5kIGl0IHJlc2lkZXMgaW4gYGJhY2tlbmRfODQyLmNgLiBIbW0sIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBnaXZlbiB0aGUgcnVsZSBhYm91dCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHdhaXQuLi4gYXJlIHRoZXkgYWN0dWFsbHkgdXNlZCBhcyBwYXJ0IG9mIGEgZnVuY3Rpb24gcG9pbnRlcj8gQmVjYXVzZSBpbiBzb21lIHNjZW5hcmlvcywgc3RhdGljIGZ1bmN0aW9ucyBpbiBzZXBhcmF0ZSBmaWxlcyBiZWNvbWUgbW9yZSBsaWtlICYjMzQ7cHVibGljJiMzNDsgbWV0aG9kcyB3aGVuIGFzc2lnbmVkIGludG8gc3RydWN0dXJlcy4gR29pbmcgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIHRoZSBgc3RydWN0IHpjb21wX2JhY2tlbmRgLCBhcyB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIHNob3VsZCBjaGVjayBgYmFja2VuZF84NDIuY2AgYW5kIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0dXBfcGFyYW1zXzg0MiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9MTI9c3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjE2OnN0YXRpYyBpbnQgc2V0dXBfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNy17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9NjM9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02Ny1cdC5kZXN0cm95X2N0eFx0PSBkZXN0cm95Xzg0MixcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjY4Olx0LnNldHVwX3BhcmFtc1x0PSBzZXR1cF9wYXJhbXNfODQyLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNjktXHQucmVsZWFzZV9wYXJhbXNcdD0gcmVsZWFzZV9wYXJhbXNfODQyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTdGF0aWMgRnVuY3Rpb24gUG9pbnRlcnMgaW4genJhbV9kcnYuYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGJlY2F1c2UgdGhleSYjMzk7cmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5JiMzOTtsbCBlYWNoIGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBUaGF0JiMzOTtzIGZpbmUsIEkgZXhwZWN0ZWQgdGhhdC4gVGhlIGNhdGNoIGlzIHRoYXQgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhvc2Ugb3RoZXIgYHN0YXRpY2AgdmFyaWFibGVzIGluIGB6cmFtX2Rydi5jYCwgc3BlY2lmaWNhbGx5IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYW5kIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYC4gVGhvc2UgYXJlIGNsZWFybHkgc3lzZnMgZW50cnkgcG9pbnRzLiBBbmQgdGhlbiBpdCBoaXRzIG1lOyBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIHRob3NlIGluIG15IGFuYWx5c2lzIGFzIHdlbGwuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpbmNsdWRlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYW5kIGFsc28gdGhhdCB1bmRlcnNjb3JlLXByZWZpeGVkIG9uZTogYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJIHNob3VsZCBjb3ZlciBhbGwgdGhlIGJhc2VzIGhlcmUuCgpBbmQsIGp1c3QgaW4gY2FzZSwgSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYHpjb21wX3NldHVwX3BhcmFtc2AuIFRoYXQgdGhpbmcgKnByb2JhYmx5KiBjYWxscyB0aGUgYmFja2VuZCYjMzk7cyBgc2V0dXBfcGFyYW1zYCBmdW5jdGlvbiwgYW5kIHRoYXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gaW5jbHVkZSBpbiBteSBzY29wZSBhcyB3ZWxsLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0dXBfcGFyYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz0xMj1zdGF0aWMgdm9pZCByZWxlYXNlX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE1LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6MTY6c3RhdGljIGludCBzZXR1cF9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz02Mz1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTY3LVx0LmRlc3Ryb3lfY3R4XHQ9IGRlc3Ryb3lfODQyLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6Njg6XHQuc2V0dXBfcGFyYW1zXHQ9IHNldHVwX3BhcmFtc184NDIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02OS1cdC5yZWxlYXNlX3BhcmFtc1x0PSByZWxlYXNlX3BhcmFtc184NDIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTIxPXN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0yNC1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoyNTpzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0yNi17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE2MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTY1LVx0LmRlc3Ryb3lfY3R4XHQ9IGRlZmxhdGVfZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoxNjY6XHQuc2V0dXBfcGFyYW1zXHQ9IGRlZmxhdGVfc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE2Ny1cdC5yZWxlYXNlX3BhcmFtc1x0PSBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE5PXN0YXRpYyB2b2lkIGx6NF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMjktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYzozMDpzdGF0aWMgaW50IGx6NF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMzEte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE1MD1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1NC1cdC5kZXN0cm95X2N0eFx0PSBsejRfZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjE1NTpcdC5zZXR1cF9wYXJhbXNcdD0gbHo0X3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1Ni1cdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xOT1zdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0yMi1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MjM6c3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0yNC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xMzQ9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMTM4LVx0LmRlc3Ryb3lfY3R4XHQ9IGx6NGhjX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjEzOTpcdC5zZXR1cF9wYXJhbXNcdD0gbHo0aGNfc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xNDAtXHQucmVsZWFzZV9wYXJhbXNcdD0gbHo0aGNfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9MTE9c3RhdGljIHZvaWQgbHpvX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNC1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjE1OnN0YXRpYyBpbnQgbHpvX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNi17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9NjE9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy02NS1cdC5kZXN0cm95X2N0eFx0PSBsem9fZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjY2Olx0LnNldHVwX3BhcmFtc1x0PSBsem9fc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNjctXHQucmVsZWFzZV9wYXJhbXNcdD0gbHpvX3JlbGVhc2VfcGFyYW1zLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTExPXN0YXRpYyB2b2lkIGx6b3JsZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzoxNTpzdGF0aWMgaW50IGx6b3JsZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTYte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTYxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNjUtXHQuZGVzdHJveV9jdHhcdD0gbHpvcmxlX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo2NjpcdC5zZXR1cF9wYXJhbXNcdD0gbHpvcmxlX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTY3LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9NDA9c3RhdGljIHZvaWQgenN0ZF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjUzOnN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTU0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MjE0PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTgtXHQuZGVzdHJveV9jdHhcdD0genN0ZF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxOTpcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjIwLVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTk3PXN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXHRjb21wLVx1MDAzZXBhcmFtcyA9IHBhcmFtcztcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVx1MDAzZXBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTU3PXN0cnVjdCB6Y29tcF9vcHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NjY6XHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02Ny1cdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb21wcmVzc2lvbiBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHpjb21wX2luaXRgIG5vdy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZOKAlGl0JiMzOTtzIGNhbGxpbmcgYGNvbXAtJmd0O29wcy0mZ3Q7c2V0dXBfcGFyYW1zYC4gVGhhdCYjMzk7cyB0aGUga2V5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIHdoZXJlIGB6Y29tcF9pbml0YCBpdHNlbGYgaXMgYmVpbmcgY2FsbGVkIGZyb20uIE5lZWQgdG8gdHJhY2UgdGhhdCBwYXRoIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIExldCYjMzk7cyBzZWUuLi4gd2hlcmUgZG9lcyB0aGlzIGd1eSBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE4Nj1pbnQgemNvbXBfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTk2LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTk3OnN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE5OC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MjMzPXN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1NS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjI1NjpcdGVycm9yID0gemNvbXBfaW5pdChjb21wLCBwYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjU3LVx0aWYgKGVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6CgoqKkRlZXAgRGl2ZSBpbnRvIFpSQU0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgYHpjb21wX2NyZWF0ZWAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB6cmFtX2Rydi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciBhIFpSQU0gZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMg4oCTIHdoZXJlIHRoZSBjb21wcmVzc2lvbiBlbmdpbmUgZ2V0cyBzZXQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYW5kIGV4YWN0bHkgaG93IHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkLiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgY2FsbCBpbXBhY3RzIHRoZSBkZXZpY2UgY3JlYXRpb24uIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcywgaWYgYW55LCBhcmUgYmVpbmcgdGFrZW4/IEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGluaXRpYWwgZGV2aWNlIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIyNT12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIzMzpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzNC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODM9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODYtdm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg2MD1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg3Olx0XHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4OC1cdFx0XHRcdCAgICBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIENvbXByZXNzaW9uIEJhY2tlbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBob3cgY29tcHJlc3Npb24gYmFja2VuZHMgYXJlIHNldCB1cCBpbiB0aGlzIHN5c3RlbS4gSXQgbG9va3MgbGlrZSBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQsIGFzIGl0JiMzOTtzIHRoZSBvbmUgdGhhdCBjYWxscyBgemNvbXBfY3JlYXRlYC4gVGhhdCB0ZWxscyBtZSB3aGVuIHRoZSBkaXNrIHNpemUgaXMgY29uZmlndXJlZCwgdGhlIGNvbXByZXNzaW9uIGJhY2tlbmRzIGdldCBpbml0aWFsaXplZCwgYW5kIGltcG9ydGFudGx5LCB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWRhdGVkLgoKVGhlIGNvcmUgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSB0aGlzIGFyZSBzZXQgdmlhIHRoZXNlIGZ1bmN0aW9uczogYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aG9zZSwgYXMgd2VsbCBhcyBgZGlza3NpemVfc3RvcmVgIGFuZCBgemNvbXBfY3JlYXRlYCwgb2J2aW91c2x5LiBBbHNvIHRoZXNlIG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9uczogYGNvbXBfcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLgoKV2FpdCBhIG1pbnV0ZS4uLiBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBub3Qgc3VyZSBpZiBpdCBpcyBpbmxpbmVkIG9yIG5vdC4gQW5kIGBjb21wX3BhcmFtc19zdG9yZWAgaXMgYWxzbyBzdGF0aWMuIEhvd2V2ZXIsIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyBkZWZpbml0ZWx5IGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBTYW1lIHdpdGggYGRpc2tzaXplX3N0b3JlYCAtIGl0JiMzOTtzIGEgc3lzZnMgZnVuY3Rpb24uIEFuZCBgemNvbXBfY3JlYXRlYCBpcyBlaXRoZXIgZXhwb3J0ZWQgb3Igbm90IHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdmVyaWZ5IGB6Y29tcF9jcmVhdGVgJiMzOTtzIHZpc2liaWxpdHkuIFllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBgemNvbXAuY2AgYW5kIGRlY2xhcmVkIGluIGB6Y29tcC5oYCwgY29uZmlybWluZyBpdCYjMzk7cyBhdmFpbGFibGUuCgpOb3csIGxldCYjMzk7cyBsaXN0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGlzIHdob2xlIHByb2Nlc3M6IGBaUkFNYCwgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBgWlJBTV9CQUNLRU5EX0xaT2AgYW5kLCBzaW5jZSBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgcmVsYXRlZCB0byBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zLCBgWlJBTV9NVUxUSV9DT01QYC4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgd2hldGhlciBgWlJBTV9NVUxUSV9DT01QYCBpcyBhY3R1YWxseSBuZWVkZWQsIHNpbmNlIGl0IGluZmx1ZW5jZXMgaG93IHdlIHJlLWNvbXByZXNzIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgyNj1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODQ1OnN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uOiBBIFJvdXRpbmUgRGlhZ25vc3RpYyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZSBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNoZWNrLCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSB3b3VsZCBkbyB3aGVuIGFuYWx5emluZyB6cmFtIGNvZGUsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG11bHRpLWNvbXByZXNzaW9uIGFsZ29yaXRobXMuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCByZWZsZXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aUkFNX01VTFRJX0NPTVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxNz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjM6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTM9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODI1OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODI2LXN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjM1NT1zdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2Mi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNjM6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjQtI2RlZmluZSBSRUNPTVBSRVNTX0lETEVcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk4Nj1zdGF0aWMgREVWSUNFX0FUVFJfUlcoY29tcHJlc3NlZF93cml0ZWJhY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4Ny0jZW5kaWZcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODg6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5ODktc3RhdGljIERFVklDRV9BVFRSX1JXKHJlY29tcF9hbGdvcml0aG0pO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5OTQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTQtXHRcdTAwMjZkZXZfYXR0cl9kZWJ1Z19zdGF0LmF0dHIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDE1OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDE2LVx0XHUwMDI2ZGV2X2F0dHJfcmVjb21wX2FsZ29yaXRobS5hdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTc5PXN0cnVjdCB6cmFtX3N0YXRzIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC05Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjk3OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC05OC0jZGVmaW5lIFpSQU1fUFJJTUFSWV9DT01QXHQwVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCkFscmlnaHQsIHNvIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYCAqaXMqIGluZGVlZCBuZXN0bGVkIHVuZGVyIGBDT05GSUdfWlJBTV9NVUxUSV9DT01QYC4gVGhhdOKAmXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gYWRkIGBaUkFNX01VTFRJX0NPTVBgIHRvIG15IEVuYWJsZUNvbmZpZ3MuIFNpbXBsZS4KCk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXPigKYgd2hlcmUgZG9lcyBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgc2l0IHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGU/IEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgc28sIHdoaWNoIG9uZXMuIFRoaXMgY291bGQgaW5mbHVlbmNlIG15IGRlY2lzaW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2OTA9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzIxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyMjpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFpSQU0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCB0aWVkIHRvIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgaXQmIzM5O3MganVzdCBkZWFsaW5nIHdpdGggYFpSQU1gIGRpcmVjdGx5LiBSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBjb21wX3BhcmFtc19zdG9yZWAsIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYW5kIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYC4gSSBuZWVkIHRvIGFkZCB0aG9zZSB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBzbyBJJiMzOTtsbCBpbmNsdWRlOgoKKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYAoqICAgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYAoqICAgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgCiogICBgZGlza3NpemVfc3RvcmVgCiogICBgemNvbXBfY3JlYXRlYAoKSG1tLCBoYW5nIG9uLiBgemNvbXBfY3JlYXRlYCAqbWlnaHQqIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IGl0IGxvb2tzIGxpa2UgYGRpc2tzaXplX3N0b3JlYCBjYWxscyBpdC4gT2theSwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFdoYXQgYWJvdXQgdGhvc2UgYHNldHVwX3BhcmFtc184NDJgIHR5cGUgZnVuY3Rpb25zPyBUaGV5JiMzOTtyZSBkZWZpbmVkIGFzIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCB0aGUgZnV6emVyIGNvdWxkIHBvdGVudGlhbGx5IHJlYWNoIHRocm91Z2ggYHpjb21wX2NyZWF0ZWAuIEdvb2QsIHNvIEkmIzM5O2xsIGFkZCBgemNvbXBfY3JlYXRlYCBhbmQgYGRpc2tzaXplX3N0b3JlYCBhcyBteSBpbml0aWFsIHRhcmdldCBzeW1ib2xzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgWlJBTWAgbW9kdWxlLCBpZiBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzIEkgbWlnaHQgaGF2ZToKCioqWlJBTSBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIGNsZWFyIG9uIHRoZSBgWlJBTWAgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSB3YW50IHRvIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb21wb25lbnRzLiAgT2theSwgSSBzZWUgaXQgcmVsaWVzIG9uIGBCTE9DS2AsIGBTWVNGU2AsIGBaU01BTExPQ2AsIGFuZCBgQ1JZUFRPYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiBicm9hZCBzdHJva2VzLCBidXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGl04oCZcyBhbHdheXMgYmV0dGVyIHRvIHJlYWQgdGhlIGBjb25maWcgWlJBTWAgYmxvY2sgZGlyZWN0bHkuIE5lZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIGFsbCB0aGUgZmluZXIgbnVhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgWlJBTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAgIDU6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXG4gICA4Olx0XHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcbiAgIDk6XHRcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xuICAxMDpcdFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcbiAgMTM6XHRcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAyMDpcdFx0c2VsZWN0IExaNF9DT01QUkVTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2NQoJCQkJCQkJb3V0cHV0OiAyNTEKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWlJBTSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGEgZnV6emluZyBzdHJhdGVneS4gRmlyc3QsIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBmb3IgYFpSQU1gIGl0c2VsZiBhcmUgc3RhbmRhcmQ6IGBCTE9DS2AsIGBTWVNGU2AsIGFuZCBgTU1VYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIG9idmlvdXNseSwgYW5kIHRoZW4gYWxsIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kcyB0aGF0IHdlcmUgYWRkZWQ6IGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYFpSQU1fQkFDS0VORF9MWk9gLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuIFRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgYEVuYWJsZUNvbmZpZ3NgLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgaW4gYHpyYW1fZHJ2LmNgLiBJIHNlZSBgY29tcF9hbGdvcml0aG1fc2V0YCwgYGNvbXBfcGFyYW1zX3Jlc2V0YCwgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGNvbXBfcGFyYW1zX3N0b3JlYC4gU2luY2UgdGhlIHRhc2sgaXMgZnV6emluZywgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpjb21wX2NyZWF0ZWAgdG8gYEZvY3VzU3ltYm9sc2AuCgpIb2xkIG9uIGEgc2VjLi4uIGBjb21wX3BhcmFtc19zdG9yZWAgaXMgc3RhdGljLCBidXQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgICpjYWxscyogaXQuIEdvb2QgY2F0Y2guIEkmIzM5O2xsIHN0aWNrIHdpdGggbXkgaW5pdGlhbCBsaXN0IG9mIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpjb21wX2NyZWF0ZWAgaW4gYEZvY3VzU3ltYm9sc2AuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY29uZmlybSBgemNvbXBfY3JlYXRlYCBpcyBhY3R1YWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuIEFoLCB5ZXMsIGBkaXNrc2l6ZV9zdG9yZWAgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBmb3IgYC9zeXMvYmxvY2svenJhbVgvZGlza3NpemVgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFdoZW4geW91IHdyaXRlIHRvIGBkaXNrc2l6ZWAsIGl0IGNhbGxzIGB6Y29tcF9jcmVhdGVgLCB3aGljaCB0aGVuIGNhbGxzIGB6Y29tcF9pbml0YCBhbmQgZXZlbnR1YWxseSBgc2V0dXBfcGFyYW1zYCBmb3IgdGhlIHNlbGVjdGVkIGJhY2tlbmQuIEFuZCAqaW1wb3J0YW50bHkqLCB0aG9zZSBwYXJhbWV0ZXJzIGFyZSBzZXQgKmJlZm9yZSogYGRpc2tzaXplYCBpcyB3cml0dGVuLCB2aWEgdGhlIGBjb21wX2FsZ29yaXRobWAgYW5kIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgIHN5c2ZzIGZpbGVzLgoKU28sIHRoZSBmdXp6aW5nIHNlcXVlbmNlIGlzIGNsZWFyOiB3cml0ZSB0byBgY29tcF9hbGdvcml0aG1gLCB3cml0ZSB0byBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCwgYW5kIHRoZW4gd3JpdGUgdG8gYGRpc2tzaXplYC4gUGVyZmVjdC4gVGhhdCYjMzk7cyBlbnRpcmVseSBmdXp6YWJsZSB2aWEgc3lzZnMuIFRoaXMgaXMgd2hlcmUgSSB3YW50IHRoZSBmdXp6ZXIgdG8gZm9jdXMgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGFkZGVkIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcy4KClRoZXJlZm9yZSwgdGhlIGZpbmFsIHNldHVwIGZvciB0aGUgZnV6emVyIHdpbGwgYmU6CgoqICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgCiogICAqKkZvY3VzU3ltYm9scyoqOiBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYGRpc2tzaXplX3N0b3JlYCwgYHpjb21wX2NyZWF0ZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWlJBTWAsIGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYFpSQU1fQkFDS0VORF9MWk9gLCBgWlJBTV9NVUxUSV9DT01QYAoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcywgYW5kIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgYW5kIHZhbGlkYXRlZCB2aWEgc3lzZnMuIFRoZXJlZm9yZSwgZnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgLCBhbmQgYGRpc2tzaXplYCwgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0SEMmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX1pTVEQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EXzg0MiYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFpPJiMzNDssCiAgICAmIzM0O1pSQU1fTVVMVElfQ09NUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7Y29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gdmFyaW91cyB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzICg4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCB6c3RkKS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCB2aWEgc3lzZnMgKGUuZy4sIGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgKSBhbmQgdmFsaWRhdGVkIHdoZW4gdGhlIGNvbXByZXNzaW9uIGJhY2tlbmQgaXMgaW5pdGlhbGl6ZWQgKGUuZy4sIHdoZW4gc2V0dGluZyBgZGlza3NpemVgKS4gRnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcyBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjIzLjc0Mjk4Njk3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1OTAwMTc4OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRIQ1wiLFxuICAgIFwiWlJBTV9CQUNLRU5EX1pTVERcIixcbiAgICBcIlpSQU1fQkFDS0VORF9ERUZMQVRFXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfODQyXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFpPXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGdvcml0aG1fcGFyYW1zX3N0b3JlXCIsXG4gICAgXCJjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwicmVjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjIzLjc0Mjk5MjY2NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2Mjg3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDQwMDVmYjdhZDFkOWVjMzBkNDk0YmQxZjkxYjIzOGZlNjU4NWM3MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjMzOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5pbmRleCAxMGQ5ZDVjNjBmNTMxLi4zODQ2YTA0YzY5ZDcxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIjg0MjogXFxcIiBmbXRcXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3ODQyLmhcXHUwMDNlXFxuQEAgLTEzLDYgKzE1LDE0IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcbiBzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWRpY3Rfc3opIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImNvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xcbmluZGV4IGIzZjdkMDhiNDlkOTMuLmY3MWIxMWJjYWM3ODggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXFxuQEAgLTEsNSArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuIFxcbisjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJkZWZsYXRlOiBcXFwiIGZtdFxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbkBAIC0yMiwxNSArMjQsMjYgQEAgc3RhdGljIHZvaWQgZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcbiBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VkaWN0X3N6KSB7XFxuK1xcdFxcdHByX2VycihcXFwiZGljdGlvbmFyeSBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XFxuK1xcdH0gZWxzZSBpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCBcXHUwMDNjIFpfREVGQVVMVF9DT01QUkVTU0lPTiB8fFxcbitcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWxldmVsIFxcdTAwM2UgWl9CRVNUX0NPTVBSRVNTSU9OKSB7XFxuK1xcdFxcdHByX2VycihcXFwiaW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcXFxuXFxcIiwgcGFyYW1zLVxcdTAwM2VsZXZlbCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHMzMiB3YiA9IHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzO1xcbiBcXG4gXFx0XFx0aWYgKCh3YiBcXHUwMDNjIC0xNSB8fCB3YiBcXHUwMDNlIC05KSBcXHUwMDI2XFx1MDAyNiAod2IgXFx1MDAzYyA5IHx8IHdiIFxcdTAwM2UgMTUpKSB7XFxuLVxcdFxcdFxcdHByX2VycihcXFwiaW52YWxpZCBkZWZsYXRlIHdpbmJpdHM6ICVkXFxcXG5cXFwiLCB3Yik7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiaW52YWxpZCB3aW5iaXRzICVkXFxcXG5cXFwiLCB3Yik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xcbmluZGV4IGM0NDlkNTExYmE4NmYuLjFlMjgxMDRhZDk2NDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xcbkBAIC0xLDMgKzEsNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwibHo0OiBcXFwiIGZtdFxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHo0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuQEAgLTI4LDggKzMyLDEyIEBAIHN0YXRpYyBpbnQgbHo0X3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcdExaNF9zdHJlYW1fdCAqZGljdF9zdHJlYW07XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBMWjRfQUNDRUxFUkFUSU9OX0RFRkFVTFQ7XFxuK1xcdH0gZWxzZSBpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCBcXHUwMDNjIExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXFxcblxcXCIsIHBhcmFtcy1cXHUwMDNlbGV2ZWwpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKCFwYXJhbXMtXFx1MDAzZWRpY3QgfHwgIXBhcmFtcy1cXHUwMDNlZGljdF9zeilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jXFxuaW5kZXggZjZhMzM2YWNmZTIwMi4uZDhhYTAxYmIyNThmZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xcbkBAIC0xLDMgKzEsNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwibHo0aGM6IFxcXCIgZm10XFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sejQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtMTgsOCArMjIsMTggQEAgc3RhdGljIHZvaWQgbHo0aGNfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiBcXG4gc3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuLVxcdGlmIChwYXJhbXMtXFx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VsZXZlbCA9IExaNEhDX0RFRkFVTFRfQ0xFVkVMO1xcbitcXHR9IGVsc2UgaWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzYyAxIHx8IHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzZSBMWjRIQ19NQVhfQ0xFVkVMKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVzZSBcXHUwMDNjIDEgcmF0aGVyIHRoYW4gXFx1MDAzYyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZVxcbitcXHRcXHQgKiBMWjRIQ19jb21wcmVzc19nZW5lcmljKCkgb25seSBjbGFtcHMgbGV2ZWxzIGJlbG93IDFcXG4rXFx0XFx0ICogKGxldmVscyAxIGFuZCAyIGFyZSB2YWxpZCkuIExaNEhDX01JTl9DTEVWRUwgKDMpIGlzXFxuK1xcdFxcdCAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXFxcblxcXCIsIHBhcmFtcy1cXHUwMDNlbGV2ZWwpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xcbmluZGV4IDRjOTA2YmVhYWU2YjMuLmQ4M2Y5MmNmNzU3Y2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xcbkBAIC0xLDUgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiBcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwibHpvOiBcXFwiIGZtdFxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHpvLmhcXHUwMDNlXFxuQEAgLTEyLDYgKzE0LDE0IEBAIHN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcbiBzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWRpY3Rfc3opIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImNvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5pbmRleCAxMDY0MGM5NmNiZmNhLi4xYjEyMGQwNjJjOTI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImx6by1ybGU6IFxcXCIgZm10XFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sem8uaFxcdTAwM2VcXG5AQCAtMTIsNiArMTQsMTQgQEAgc3RhdGljIHZvaWQgbHpvcmxlX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4gXFxuIHN0YXRpYyBpbnQgbHpvcmxlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlZGljdF9zeikge1xcbitcXHRcXHRwcl9lcnIoXFxcImRpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuK1xcdFxcdHByX2VycihcXFwiY29tcHJlc3Npb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXFxuaW5kZXggZDAwYjU0ODA1NmRjMi4uMDhkYTM4MTBjZmZkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcInpzdGQ6IFxcXCIgZm10XFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTU4LDggKzYwLDEzIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHBhcmFtcy1cXHUwMDNlZHJ2X2RhdGEgPSB6cDtcXG4tXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0genN0ZF9kZWZhdWx0X2NsZXZlbCgpO1xcbitcXHR9IGVsc2UgaWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzYyB6c3RkX21pbl9jbGV2ZWwoKSB8fFxcbitcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWxldmVsIFxcdTAwM2UgenN0ZF9tYXhfY2xldmVsKCkpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxcXG5cXFwiLCBwYXJhbXMtXFx1MDAzZWxldmVsKTtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0fVxcbiBcXG4gXFx0enAtXFx1MDAzZWNwcm0gPSB6c3RkX2dldF9wYXJhbXMocGFyYW1zLVxcdTAwM2VsZXZlbCwgUEFHRV9TSVpFKTtcXG4gXFxuQEAgLTg1LDcgKzkyLDYgQEAgc3RhdGljIGludCB6c3RkX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyb3I6XFxuLVxcdHpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTtcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuQEAgLTE2MSw3ICsxNjcsNiBAQCBzdGF0aWMgaW50IHpzdGRfY3JlYXRlKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycm9yOlxcbi1cXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XFxuIFxcdHpzdGRfZGVzdHJveShjdHgpO1xcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuaW5kZXggY2ZhOTg4NDZhYzQ4NC4uNTYxODNjODI3ZTFiMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuQEAgLTE2NTIsNiArMTY1MiwxNyBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXFxuIFxcdHpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb107XFxuK1xcbitcXHR2ZnJlZShwYXJhbXMtXFx1MDAzZWRpY3QpO1xcbitcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG4rXFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbitcXHRwYXJhbXMtXFx1MDAzZWRpY3Rfc3ogPSAwO1xcbitcXHRwYXJhbXMtXFx1MDAzZWRpY3QgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqYWxnO1xcbkBAIC0xNjcyLDIwICsxNjgzLDEwIEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4gXFx0fVxcbiBcXG4gXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XFxuK1xcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxcbi17XFxuLVxcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb107XFxuLVxcbi1cXHR2ZnJlZShwYXJhbXMtXFx1MDAzZWRpY3QpO1xcbi1cXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG4tXFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbi1cXHRwYXJhbXMtXFx1MDAzZWRpY3Rfc3ogPSAwO1xcbi1cXHRwYXJhbXMtXFx1MDAzZWRpY3QgPSBOVUxMO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgKmRlZmxhdGVfcGFyYW1zKVxcbkBAIC0xNzAwLDggKzE3MDEsMTYgQEAgc3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0SU5UX01BWCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0UkVBRElOR19QT0xJQ1kpO1xcbi1cXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbitcXHRcXHRpZiAoc3ogXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBkaWN0X3BhdGgsIHN6KTtcXG4rXFx0XFx0XFx0cmV0dXJuIHN6O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChzeiA9PSAwKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZW1wdHkgZmlsZSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBkaWN0X3BhdGgpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHR6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10uZGljdF9zeiA9IHN6O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzoyNC4xNjAwMDYyMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NTQ4MzE1MDcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0XCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0SENcIixcbiAgICBcIlpSQU1fQkFDS0VORF9aU1REXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EXzg0MlwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaT1wiLFxuICAgIFwiWlJBTV9NVUxUSV9DT01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwiY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcInJlY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJ6Y29tcF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyB0byB2YXJpb3VzIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMgKDg0MiwgZGVmbGF0ZSwgbHo0LCBsejRoYywgbHpvLCBsem9ybGUsIHpzdGQpLiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkIHZpYSBzeXNmcyAoZS5nLiwgYGNvbXBfYWxnb3JpdGhtYCwgYGNvbXBfYWxnb3JpdGhtX3BhcmFtc2ApIGFuZCB2YWxpZGF0ZWQgd2hlbiB0aGUgY29tcHJlc3Npb24gYmFja2VuZCBpcyBpbml0aWFsaXplZCAoZS5nLiwgd2hlbiBzZXR0aW5nIGBkaXNrc2l6ZWApLiBGdXp6aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2VzIGlzIHJlcXVpcmVkIHRvIHRlc3QgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDAwNWZiN2FkMWQ5ZWMzMGQ0OTRiZDFmOTFiMjM4ZmU2NTg1YzcyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMDozMzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbmluZGV4IDEwZDlkNWM2MGY1MzEuLjM4NDZhMDRjNjlkNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcIjg0MjogXCIgZm10XG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdzg0Mi5oXHUwMDNlXG5AQCAtMTMsNiArMTUsMTQgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcbiBzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbitcdGlmIChwYXJhbXMtXHUwMDNlZGljdF9zeikge1xuK1x0XHRwcl9lcnIoXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuK1x0XHRwcl9lcnIoXCJjb21wcmVzc2lvbiBsZXZlbCBpcyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG5pbmRleCBiM2Y3ZDA4YjQ5ZDkzLi5mNzFiMTFiY2FjNzg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImRlZmxhdGU6IFwiIGZtdFxuK1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMjIsMTUgKzI0LDI2IEBAIHN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbitcdGlmIChwYXJhbXMtXHUwMDNlZGljdF9zeikge1xuK1x0XHRwcl9lcnIoXCJkaWN0aW9uYXJ5IGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XG4rXHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgWl9ERUZBVUxUX0NPTVBSRVNTSU9OIHx8XG4rXHRcdCAgIHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2UgWl9CRVNUX0NPTVBSRVNTSU9OKSB7XG4rXHRcdHByX2VycihcImludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXG5cIiwgcGFyYW1zLVx1MDAzZWxldmVsKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAocGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBERUZMQVRFX0RFRl9XSU5CSVRTO1xuIFx0fSBlbHNlIHtcbiBcdFx0czMyIHdiID0gcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cztcbiBcbiBcdFx0aWYgKCh3YiBcdTAwM2MgLTE1IHx8IHdiIFx1MDAzZSAtOSkgXHUwMDI2XHUwMDI2ICh3YiBcdTAwM2MgOSB8fCB3YiBcdTAwM2UgMTUpKSB7XG4tXHRcdFx0cHJfZXJyKFwiaW52YWxpZCBkZWZsYXRlIHdpbmJpdHM6ICVkXFxuXCIsIHdiKTtcbitcdFx0XHRwcl9lcnIoXCJpbnZhbGlkIHdpbmJpdHMgJWRcXG5cIiwgd2IpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uMWUyODEwNGFkOTY0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTEsMyArMSw3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwibHo0OiBcIiBmbXRcbitcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2x6NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMjgsOCArMzIsMTIgQEAgc3RhdGljIGludCBsejRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdExaNF9zdHJlYW1fdCAqZGljdF9zdHJlYW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxuK1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVDtcbitcdH0gZWxzZSBpZiAocGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzYyBMWjRfQUNDRUxFUkFUSU9OX0RFRkFVTFQpIHtcbitcdFx0cHJfZXJyKFwiaW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcblwiLCBwYXJhbXMtXHUwMDNlbGV2ZWwpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdGlmICghcGFyYW1zLVx1MDAzZWRpY3QgfHwgIXBhcmFtcy1cdTAwM2VkaWN0X3N6KVxuIFx0XHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uZDhhYTAxYmIyNThmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xLDMgKzEsNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImx6NGhjOiBcIiBmbXRcbitcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2x6NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTgsOCArMjIsMTggQEAgc3RhdGljIHZvaWQgbHo0aGNfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgbHo0aGNfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4tXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4rXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0gTFo0SENfREVGQVVMVF9DTEVWRUw7XG4rXHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgMSB8fCBwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNlIExaNEhDX01BWF9DTEVWRUwpIHtcbitcdFx0LypcbitcdFx0ICogVXNlIFx1MDAzYyAxIHJhdGhlciB0aGFuIFx1MDAzYyBMWjRIQ19NSU5fQ0xFVkVMIGhlcmUgYmVjYXVzZVxuK1x0XHQgKiBMWjRIQ19jb21wcmVzc19nZW5lcmljKCkgb25seSBjbGFtcHMgbGV2ZWxzIGJlbG93IDFcbitcdFx0ICogKGxldmVscyAxIGFuZCAyIGFyZSB2YWxpZCkuIExaNEhDX01JTl9DTEVWRUwgKDMpIGlzXG4rXHRcdCAqIGFkdmlzb3J5IGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGxpYnJhcnkuXG4rXHRcdCAqL1xuK1x0XHRwcl9lcnIoXCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCIsIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLmQ4M2Y5MmNmNzU3Y2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImx6bzogXCIgZm10XG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sem8uaFx1MDAzZVxuQEAgLTEyLDYgKzE0LDE0IEBAIHN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4gXG4gc3RhdGljIGludCBsem9fc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4rXHRpZiAocGFyYW1zLVx1MDAzZWRpY3Rfc3opIHtcbitcdFx0cHJfZXJyKFwiZGljdGlvbmFyeSBpcyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbitcdFx0cHJfZXJyKFwiY29tcHJlc3Npb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbmluZGV4IDEwNjQwYzk2Y2JmY2EuLjFiMTIwZDA2MmM5MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImx6by1ybGU6IFwiIGZtdFxuK1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHpvLmhcdTAwM2VcbkBAIC0xMiw2ICsxNCwxNCBAQCBzdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFxuIHN0YXRpYyBpbnQgbHpvcmxlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4ge1xuK1x0aWYgKHBhcmFtcy1cdTAwM2VkaWN0X3N6KSB7XG4rXHRcdHByX2VycihcImRpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1x0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCAhPSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG4rXHRcdHByX2VycihcImNvbXByZXNzaW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjA4ZGEzODEwY2ZmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xuQEAgLTEsNSArMSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiBcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwienN0ZDogXCIgZm10XG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbkBAIC01OCw4ICs2MCwxMyBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRwYXJhbXMtXHUwMDNlZHJ2X2RhdGEgPSB6cDtcbi1cdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbitcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XG4rXHR9IGVsc2UgaWYgKHBhcmFtcy1cdTAwM2VsZXZlbCBcdTAwM2MgenN0ZF9taW5fY2xldmVsKCkgfHxcbitcdFx0ICAgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xuK1x0XHRwcl9lcnIoXCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCIsIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4rXHRcdGdvdG8gZXJyb3I7XG4rXHR9XG4gXG4gXHR6cC1cdTAwM2VjcHJtID0genN0ZF9nZXRfcGFyYW1zKHBhcmFtcy1cdTAwM2VsZXZlbCwgUEFHRV9TSVpFKTtcbiBcbkBAIC04NSw3ICs5Miw2IEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG5AQCAtMTYxLDcgKzE2Nyw2IEBAIHN0YXRpYyBpbnQgenN0ZF9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJvcjpcbi1cdHpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTtcbiBcdHpzdGRfZGVzdHJveShjdHgpO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGNmYTk4ODQ2YWM0ODQuLjU2MTgzYzgyN2UxYjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0xNjUyLDYgKzE2NTIsMTcgQEAgc3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxuIFx0enJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBhbGc7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbit7XG4rXHRzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMgPSBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXTtcbitcbitcdHZmcmVlKHBhcmFtcy1cdTAwM2VkaWN0KTtcbitcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG4rXHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbitcdHBhcmFtcy1cdTAwM2VkaWN0X3N6ID0gMDtcbitcdHBhcmFtcy1cdTAwM2VkaWN0ID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmFsZztcbkBAIC0xNjcyLDIwICsxNjgzLDEwIEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbiBcdH1cbiBcbiBcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuK1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuLXtcbi1cdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dO1xuLVxuLVx0dmZyZWUocGFyYW1zLVx1MDAzZWRpY3QpO1xuLVx0cGFyYW1zLVx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbi1cdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3Rfc3ogPSAwO1xuLVx0cGFyYW1zLVx1MDAzZWRpY3QgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqZGljdF9wYXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGRlZmxhdGVfcGFyYW1zICpkZWZsYXRlX3BhcmFtcylcbkBAIC0xNzAwLDggKzE3MDEsMTYgQEAgc3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbiBcdFx0XHRcdFx0XHRJTlRfTUFYLFxuIFx0XHRcdFx0XHRcdE5VTEwsXG4gXHRcdFx0XHRcdFx0UkVBRElOR19QT0xJQ1kpO1xuLVx0XHRpZiAoc3ogXHUwMDNjIDApXG4rXHRcdGlmIChzeiBcdTAwM2MgMCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVycj0lemQpXFxuXCIsXG4rXHRcdFx0ICAgICAgIGRpY3RfcGF0aCwgc3opO1xuK1x0XHRcdHJldHVybiBzejtcbitcdFx0fVxuK1x0XHRpZiAoc3ogPT0gMCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVtcHR5IGZpbGUpXFxuXCIsXG4rXHRcdFx0ICAgICAgIGRpY3RfcGF0aCk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dLmRpY3Rfc3ogPSBzejtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjI0LjE2MDAwNzUwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTQyODE0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaUkFNIENvbXByZXNzaW9uIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIHpyYW0gYmFja2VuZCBjb21wcmVzc2lvbiBkcml2ZXJzLiBJdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IOKAkyA4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCBhbmQgenN0ZCDigJMgYW5kIGFsc28gYHpyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFkZGluZyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIGBzZXR1cF9wYXJhbXNgIGZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBJIHNlZSB0aGV5J3JlIGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhpbmdzIGxpa2UgYGRpY3Rfc3pgLCBgbGV2ZWxgLCBhbmQgZXZlbiBgd2luYml0c2AgZm9yIGRlZmxhdGUsIHJldHVybmluZyBlcnJvcnMgbGlrZSBgLUVPUE5PVFNVUFBgIG9yIGAtRUlOVkFMYCB3aGVuIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuIFRoaXMgaXMgYSBnb29kIHRoaW5nIOKAkyByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgYWx3YXlzIGNydWNpYWwsIGVzcGVjaWFsbHkgZm9yIGEgYmxvY2sgZGV2aWNlIGRyaXZlci4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBiYWQgcGFyYW1ldGVycyBtaWdodCBoYXZlIGJlZW4gaWdub3JlZCBvciBjb3VsZCBoYXZlIGxlYWQgdG8gYSBjcmFzaC5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBUaGlzIHZhbGlkYXRpb24gaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciwgYnV0IGZvciB0aGUgYmV0dGVyLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBiZWNhdXNlIHRoZXNlIHpyYW0gcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCBmcm9tIHVzZXIgc3BhY2UsIHZpYSBzeXNmcy4gV2FpdCwgaXQgaXMgY29uZmlndXJlZCB2aWEgc3lzZnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucy5cblxuUmlnaHQsIHNvIGB6cmFtX2Rydi5jYCBpcyBnb2luZyB0byBiZSBrZXkgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgc2V0dXBfcGFyYW1zYCB3aXRoaW4gdGhhdCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHpyYW0gaW5pdGlhbGl6YXRpb24gYW5kIHBhcmFtZXRlciBzZXR0aW5nLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aG9zZSBzeXNmcyBoYW5kbGVycyDigJMgdGhlIG9uZXMgYWNjZXNzaWJsZSB0aHJvdWdoIHBhdGhzIGxpa2UgYC9zeXMvYmxvY2svenJhbTAvY29tcF9hbGdvcml0aG1gLCBgL3N5cy9ibG9jay96cmFtMC9jb21wX2FsZ29yaXRobV9wYXJhbXNgLCBvciBzaW1pbGFyLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IGFuZCB2YWxpZGF0ZWQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgY29tcF9wYXJhbXNfcmVzZXRgIGhhcyBiZWVuIG1vdmVkIHRvIGV4ZWN1dGUgYmVmb3JlIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgd2hpY2ggbWVhbnMgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYXJlIHJlc2V0IGJlZm9yZSB0aGUgbmV3IGFsZ29yaXRobSBpcyBhc3NpZ25lZC4gSXQgYWxzbyBhZGRzIGVycm9yIGxvZ2dpbmcgZm9yIGRpY3Rpb25hcnkgbG9hZGluZy4gT2theSwgdGhhdCdzIHdoYXQgSSBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozMS40NzQyOTUwNDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NTA5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcF9wYXJhbXNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MDpzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTEtXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpkaWN0X3BhdGgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTc5Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzk3OlxcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFxcdTAwMjZkZWZsYXRlX3BhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTc5OC1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozMS41MTY3NTA5MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTc0NzI5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgWlJBTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGlzIHRoZSBzeXNmcyBmdW5jdGlvbiBmb3IgdGhlIHBhcmFtZXRlcnMgc3RvcmUuIEdvdCBpdC4gTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24ga25vYnMgYXJlIHdlIGdvaW5nIHRvIG5lZWQgZm9yIHpyYW0/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBlc3NlbnRpYWwgcGFyYW1ldGVycyDigJMgY29tcHJlc3Npb24gYWxnb3JpdGhtIGNob2ljZXMsIG1lbW9yeSBsaW1pdHMsIGNodW5rIHNpemVzLCBhbmQgcHJvYmFibHkgc29tZSB0dW5pbmcgcGFyYW1ldGVycyBmb3IgcGVyZm9ybWFuY2UgYmFzZWQgb24gdHlwaWNhbCB3b3JrbG9hZHMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgb3B0aW1pemF0aW9ucyBhbmQgaG93IHRvIG1ha2UgdGhlIGNvbmZpZ3VyYXRpb25zIGludHVpdGl2ZSBmb3IgdGhlIHVzZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozNy42OTE0ODMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg0OTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzozNy43MzMzMzgxODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI5ODk4MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpSQU0gQ29uZmlndXJhdGlvbiBJbXBsZW1lbnRhdGlvbiBQbGFuKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaW1wbGVtZW50aW5nIHRoZSBaUkFNIGNvbXByZXNzaW9uIGFsZ29yaXRobSBjb25maWd1cmF0aW9ucy4gTXkgcGxhbiBpcyB0byBhZGQgdGhlIHZhcmlvdXMgYmFja2VuZCBvcHRpb25zIEkgc2VlIGhlcmXigJRgWlJBTWAsIGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYW5kIGBaUkFNX0JBQ0tFTkRfTFpPYOKAlGludG8gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgY29tcF9wYXJhbXNfc3RvcmVgLCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCwgaW1wb3J0YW50bHksIGNoZWNrIGlmIGBjb21wX2FsZ29yaXRobV9zdG9yZWAgZXZlbiBleGlzdHMgaW4gdGhpcyBjb250ZXh0LiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBzZXR1cCBmdW5jdGlvbnMgZm9yIGVhY2ggYWxnb3JpdGhtOiBgc2V0dXBfcGFyYW1zXzg0MmAsIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AsIGBsejRfc2V0dXBfcGFyYW1zYCwgYGx6NGhjX3NldHVwX3BhcmFtc2AsIGBsem9fc2V0dXBfcGFyYW1zYCwgYGx6b3JsZV9zZXR1cF9wYXJhbXNgLCBhbmQgYHpzdGRfc2V0dXBfcGFyYW1zYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5J3JlIGFsbCBmdW5jdGlvbmluZyBjb3JyZWN0bHkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgIChpZiBwcmVzZW50KSBhcmUgaW5kZWVkIHRoZSBhcHByb3ByaWF0ZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgdGhhdCBJIHRoaW5rIHRoZXkgYXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGV5J3JlIGRvaW5nIHdoYXQgSSBleHBlY3QuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjQyLjY2MzIzOTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTA3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjkwPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzIxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MjI6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyMy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzM6NDIuNzA0NzUyNzk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MzQwOTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBIZXJlIHdlIGdvLi4uXG5cbioqRXhwbG9yaW5nIEF2YWlsYWJsZSBGdW5jdGlvbmFsaXR5KipcblxuSG1tLCBub3cgdGhhdCBJJ3ZlIGdvdHRlbiB0aGlzIGZhciwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBkZWZpbml0ZSBhY3Rpb24sIGl0J3MgcHJvYmFibHkgYmVzdCB0byBqdXN0IHBhdXNlIGFuZCB0YWtlIGEgYnJpZWYgbG9vayBhcm91bmQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBXaGF0IG90aGVyIG9wdGlvbnMgYXJlIGF0IG15IGRpc3Bvc2FsPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciB1dGlsaXRpZXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGU/IEl04oCZcyBub3QgYSBxdWVzdGlvbiBvZiBhc3N1bWluZyBJIGhhdmUgZXZlcnl0aGluZyBJIG5lZWQsIGJ1dCByYXRoZXIsIGFzIGEgcHJvZmVzc2lvbmFsLCBpdCdzIGEgbWF0dGVyIG9mIGR1ZSBkaWxpZ2VuY2UsIG9mIG1ha2luZyBzdXJlIEknbSBmdWxseSBhd2FyZSBvZiBteSB0b29sa2l0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBteSBjdXJyZW50IGZ1bmN0aW9uYWxpdHksIGJlZm9yZSBJIGNvbW1pdCB0byBhIHBhcnRpY3VsYXIgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzM6NDUuODc4MTY0ODgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjI0Njg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTU9c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY2OnN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MDE9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODEyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MTM6c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlxcdHJldCA9IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGJ1Zik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMi1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgyNj1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODQ1OnN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODgxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4ODI6XFx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBwcmlvLCBhbGcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODMtXFx0cmV0dXJuIHJldCA/IHJldCA6IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzM6NDUuOTIwNDIwODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4OTY3ODk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpDb21wIEJhY2tlbmQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc3lzZnMgc3RvcmUgZnVuY3Rpb25zOiBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYmFja2VuZCBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgc2V0IHVwLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIHRoZSBiYWNrZW5kIHNldHVwIGZ1bmN0aW9ucyBhcmUgYHNldHVwX3BhcmFtc184NDJgLCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBgbHo0X3NldHVwX3BhcmFtc2AsIGBsejRoY19zZXR1cF9wYXJhbXNgLCBgbHpvX3NldHVwX3BhcmFtc2AsIGBsem9ybGVfc2V0dXBfcGFyYW1zYCwgYW5kIGB6c3RkX3NldHVwX3BhcmFtc2AuXG5cblRoZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgZnVuY3Rpb25zIEknbSByZXZpZXdpbmcgYWxpZ24gd2l0aCB0aGUgZ3VpZGFuY2UgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvbid0IHJlcHJlc2VudCB0aGUgc3RhdGljIGlubGluZWQga2luZC5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgc2V0dXBfcGFyYW1zXzg0MmAuIFRoZSBjb2RlIGNsZWFybHkgaW5kaWNhdGVzIGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgYW5kIGl0IHJlc2lkZXMgaW4gYGJhY2tlbmRfODQyLmNgLiBIbW0sIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBnaXZlbiB0aGUgcnVsZSBhYm91dCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHdhaXQuLi4gYXJlIHRoZXkgYWN0dWFsbHkgdXNlZCBhcyBwYXJ0IG9mIGEgZnVuY3Rpb24gcG9pbnRlcj8gQmVjYXVzZSBpbiBzb21lIHNjZW5hcmlvcywgc3RhdGljIGZ1bmN0aW9ucyBpbiBzZXBhcmF0ZSBmaWxlcyBiZWNvbWUgbW9yZSBsaWtlIFwicHVibGljXCIgbWV0aG9kcyB3aGVuIGFzc2lnbmVkIGludG8gc3RydWN0dXJlcy4gR29pbmcgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIHRoZSBgc3RydWN0IHpjb21wX2JhY2tlbmRgLCBhcyB0aGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgc2hvdWxkIGNoZWNrIGBiYWNrZW5kXzg0Mi5jYCBhbmQgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjUxLjExMDEwMjI4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNzc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfcGFyYW1zXzg0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTEyPXN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzoxNjpzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTYzPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF84NDIgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02Ny1cXHQuZGVzdHJveV9jdHhcXHQ9IGRlc3Ryb3lfODQyLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjY4OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IHNldHVwX3BhcmFtc184NDIsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNjktXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSByZWxlYXNlX3BhcmFtc184NDIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjUxLjE1MjI4NDQ5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQwMTU1MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFN0YXRpYyBGdW5jdGlvbiBQb2ludGVycyBpbiB6cmFtX2Rydi5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgYmVjYXVzZSB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5J2xsIGVhY2ggaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBmaW5lLCBJIGV4cGVjdGVkIHRoYXQuIFRoZSBjYXRjaCBpcyB0aGF0IHRoZXkncmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRob3NlIG90aGVyIGBzdGF0aWNgIHZhcmlhYmxlcyBpbiBgenJhbV9kcnYuY2AsIHNwZWNpZmljYWxseSBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAuIFRob3NlIGFyZSBjbGVhcmx5IHN5c2ZzIGVudHJ5IHBvaW50cy4gQW5kIHRoZW4gaXQgaGl0cyBtZTsgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSB0aG9zZSBpbiBteSBhbmFseXNpcyBhcyB3ZWxsLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpbmNsdWRlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYW5kIGFsc28gdGhhdCB1bmRlcnNjb3JlLXByZWZpeGVkIG9uZTogYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJIHNob3VsZCBjb3ZlciBhbGwgdGhlIGJhc2VzIGhlcmUuXG5cbkFuZCwganVzdCBpbiBjYXNlLCBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBgemNvbXBfc2V0dXBfcGFyYW1zYC4gVGhhdCB0aGluZyAqcHJvYmFibHkqIGNhbGxzIHRoZSBiYWNrZW5kJ3MgYHNldHVwX3BhcmFtc2AgZnVuY3Rpb24sIGFuZCB0aGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGluY2x1ZGUgaW4gbXkgc2NvcGUgYXMgd2VsbC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjMzOjU2LjQ5MjQ0OTE5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTc3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9MTI9c3RhdGljIHZvaWQgcmVsZWFzZV9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTE1LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jOjE2OnN0YXRpYyBpbnQgc2V0dXBfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM9NjM9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTY3LVxcdC5kZXN0cm95X2N0eFxcdD0gZGVzdHJveV84NDIsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6Njg6XFx0LnNldHVwX3BhcmFtc1xcdD0gc2V0dXBfcGFyYW1zXzg0MixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy02OS1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHJlbGVhc2VfcGFyYW1zXzg0MixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0yMT1zdGF0aWMgdm9pZCBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0yNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MjU6c3RhdGljIGludCBkZWZsYXRlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0xNjE9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTY1LVxcdC5kZXN0cm95X2N0eFxcdD0gZGVmbGF0ZV9kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoxNjY6XFx0LnNldHVwX3BhcmFtc1xcdD0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE2Ny1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYz0xOT1zdGF0aWMgdm9pZCBsejRfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMjktXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM6MzA6c3RhdGljIGludCBsejRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0zMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYz0xNTA9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1NC1cXHQuZGVzdHJveV9jdHhcXHQ9IGx6NF9kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjE1NTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsejRfc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE1Ni1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6NF9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM9MTk9c3RhdGljIHZvaWQgbHo0aGNfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjIzOnN0YXRpYyBpbnQgbHo0aGNfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTI0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM9MTM0PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejRoYyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMTM4LVxcdC5kZXN0cm95X2N0eFxcdD0gbHo0aGNfZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjEzOTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsejRoY19zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xNDAtXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSBsejRoY19yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jPTExPXN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzoxNTpzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jLTE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jPTYxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy02NS1cXHQuZGVzdHJveV9jdHhcXHQ9IGx6b19kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjY2OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6b19zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNjctXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSBsem9fcmVsZWFzZV9wYXJhbXMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz0xMT1zdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTQtXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM6MTU6c3RhdGljIGludCBsem9ybGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYy0xNi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz02MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNjUtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9ybGVfZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo2NjpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTY3LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHpvcmxlX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTQwPXN0YXRpYyB2b2lkIHpzdGRfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzo1MzpzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtNTQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTIxND1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfenN0ZCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTgtXFx0LmRlc3Ryb3lfY3R4XFx0PSB6c3RkX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxOTpcXHQuc2V0dXBfcGFyYW1zXFx0PSB6c3RkX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjIwLVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE5Nz1zdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXFx0Y29tcC1cXHUwMDNlcGFyYW1zID0gcGFyYW1zO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcXHRyZXQgPSBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVxcdTAwM2VwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIwNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NTc9c3RydWN0IHpjb21wX29wcyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo2NjpcXHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjctXFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozMzo1Ni41MzUzMTIzOTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5MDczOTkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29tcHJlc3Npb24gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgemNvbXBfaW5pdGAgbm93LiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJk4oCUaXQncyBjYWxsaW5nIGBjb21wLVx1MDAzZW9wcy1cdTAwM2VzZXR1cF9wYXJhbXNgLiBUaGF0J3MgdGhlIGtleSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCB3aGVyZSBgemNvbXBfaW5pdGAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBOZWVkIHRvIHRyYWNlIHRoYXQgcGF0aCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyBzZWUuLi4gd2hlcmUgZG9lcyB0aGlzIGd1eSBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MDAuOTI2MDU1MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTc1OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xODY9aW50IHpjb21wX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTk2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE5NzpzdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTk4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIzMz1zdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyNTY6XFx0ZXJyb3IgPSB6Y29tcF9pbml0KGNvbXAsIHBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjU3LVxcdGlmIChlcnJvcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDowMC45Njg2MzYxNzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjY1NDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFpSQU0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGB6Y29tcF9jcmVhdGVgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGB6cmFtX2Rydi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciBhIFpSQU0gZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMg4oCTIHdoZXJlIHRoZSBjb21wcmVzc2lvbiBlbmdpbmUgZ2V0cyBzZXQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYW5kIGV4YWN0bHkgaG93IHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkLiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgY2FsbCBpbXBhY3RzIHRoZSBkZXZpY2UgY3JlYXRpb24uIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcywgaWYgYW55LCBhcmUgYmVpbmcgdGFrZW4/IEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgaW5pdGlhbCBkZXZpY2Ugc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjg4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MDQuODQ1MjkyNzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAzNDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yMjU9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzM6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTgzPWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg2LXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg2MD1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg3OlxcdFxcdGNvbXAgPSB6Y29tcF9jcmVhdGUoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODgtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDowNC44ODczMzI5MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1NzAzMDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBDb21wcmVzc2lvbiBCYWNrZW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGhvdyBjb21wcmVzc2lvbiBiYWNrZW5kcyBhcmUgc2V0IHVwIGluIHRoaXMgc3lzdGVtLiBJdCBsb29rcyBsaWtlIGBkaXNrc2l6ZV9zdG9yZWAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCwgYXMgaXQncyB0aGUgb25lIHRoYXQgY2FsbHMgYHpjb21wX2NyZWF0ZWAuIFRoYXQgdGVsbHMgbWUgd2hlbiB0aGUgZGlzayBzaXplIGlzIGNvbmZpZ3VyZWQsIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kcyBnZXQgaW5pdGlhbGl6ZWQsIGFuZCBpbXBvcnRhbnRseSwgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkYXRlZC5cblxuVGhlIGNvcmUgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSB0aGlzIGFyZSBzZXQgdmlhIHRoZXNlIGZ1bmN0aW9uczogYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aG9zZSwgYXMgd2VsbCBhcyBgZGlza3NpemVfc3RvcmVgIGFuZCBgemNvbXBfY3JlYXRlYCwgb2J2aW91c2x5LiBBbHNvIHRoZXNlIG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9uczogYGNvbXBfcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLlxuXG5XYWl0IGEgbWludXRlLi4uIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJ20gbm90IHN1cmUgaWYgaXQgaXMgaW5saW5lZCBvciBub3QuIEFuZCBgY29tcF9wYXJhbXNfc3RvcmVgIGlzIGFsc28gc3RhdGljLiBIb3dldmVyLCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgaXMgZGVmaW5pdGVseSBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBzbyBpdCdzIG5vdCBpbmxpbmVkLiBTYW1lIHdpdGggYGRpc2tzaXplX3N0b3JlYCAtIGl0J3MgYSBzeXNmcyBmdW5jdGlvbi4gQW5kIGB6Y29tcF9jcmVhdGVgIGlzIGVpdGhlciBleHBvcnRlZCBvciBub3Qgc3RhdGljLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCBsZXQncyB2ZXJpZnkgYHpjb21wX2NyZWF0ZWAncyB2aXNpYmlsaXR5LiBZZXMsIGl0J3MgZGVmaW5lZCBpbiBgemNvbXAuY2AgYW5kIGRlY2xhcmVkIGluIGB6Y29tcC5oYCwgY29uZmlybWluZyBpdCdzIGF2YWlsYWJsZS5cblxuTm93LCBsZXQncyBsaXN0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGlzIHdob2xlIHByb2Nlc3M6IGBaUkFNYCwgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBgWlJBTV9CQUNLRU5EX0xaT2AgYW5kLCBzaW5jZSBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAgaXMgcmVsYXRlZCB0byBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zLCBgWlJBTV9NVUxUSV9DT01QYC5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHdoZXRoZXIgYFpSQU1fTVVMVElfQ09NUGAgaXMgYWN0dWFsbHkgbmVlZGVkLCBzaW5jZSBpdCBpbmZsdWVuY2VzIGhvdyB3ZSByZS1jb21wcmVzcyBkYXRhLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTIuMDQ0MzY1NzM4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5MjEyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MjY9c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg0NTpzdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODQ2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDoxMi4xODEyOTE1MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDcxMTA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb246IEEgUm91dGluZSBEaWFnbm9zdGljKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlIGBDT05GSUdfWlJBTV9NVUxUSV9DT01QYCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBjaGVjaywgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSXQncyB0aGUgZmlyc3QgdGhpbmcgSSB3b3VsZCBkbyB3aGVuIGFuYWx5emluZyB6cmFtIGNvZGUsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG11bHRpLWNvbXByZXNzaW9uIGFsZ29yaXRobXMuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCByZWZsZXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTUuNzAyMDA1NzQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyMDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlJBTV9NVUxUSV9DT01QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYXJ0aWFsX2lvKHN0cnVjdCBiaW9fdmVjICpidmVjKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMzojaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0sgfHwgZGVmaW5lZCBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgxMz1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODI0LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MjU6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODI2LXN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzU1PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjItXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM2MzojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjQtI2RlZmluZSBSRUNPTVBSRVNTX0lETEVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk4Nj1zdGF0aWMgREVWSUNFX0FUVFJfUlcoY29tcHJlc3NlZF93cml0ZWJhY2spO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5ODctI2VuZGlmXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4ODojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5ODktc3RhdGljIERFVklDRV9BVFRSX1JXKHJlY29tcF9hbGdvcml0aG0pO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk5ND1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqenJhbV9kaXNrX2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDE0LVxcdFxcdTAwMjZkZXZfYXR0cl9kZWJ1Z19zdGF0LmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAxNTojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTYtXFx0XFx1MDAyNmRldl9hdHRyX3JlY29tcF9hbGdvcml0aG0uYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTc5PXN0cnVjdCB6cmFtX3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjk3OiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtOTgtI2RlZmluZSBaUkFNX1BSSU1BUllfQ09NUFxcdDBVXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjM0OjE1Ljc0NjczMjYyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxNDMyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgc28gYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgICppcyogaW5kZWVkIG5lc3RsZWQgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGF04oCZcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgYFpSQU1fTVVMVElfQ09NUGAgdG8gbXkgRW5hYmxlQ29uZmlncy4gU2ltcGxlLlxuXG5Ob3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIGlz4oCmIHdoZXJlIGRvZXMgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIHNpdCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlPyBJIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgc28sIHdoaWNoIG9uZXMuIFRoaXMgY291bGQgaW5mbHVlbmNlIG15IGRlY2lzaW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTkuMTM4MTY4MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTY5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjkwPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzIxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MjI6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyMy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MTkuMTgxNzQyNDE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDUxNDE0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFpSQU0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgdGllZCB0byBhbnkgcGFydGljdWxhciBjb25maWd1cmF0aW9uIHNldHRpbmcsIGl0J3MganVzdCBkZWFsaW5nIHdpdGggYFpSQU1gIGRpcmVjdGx5LiBSaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLCBhbmQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgdG8gYWRkIHRob3NlIHRvIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHNvIEknbGwgaW5jbHVkZTpcblxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYFxuKiAgIGBjb21wX2FsZ29yaXRobV9zdG9yZWBcbiogICBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWBcbiogICBgZGlza3NpemVfc3RvcmVgXG4qICAgYHpjb21wX2NyZWF0ZWBcblxuSG1tLCBoYW5nIG9uLiBgemNvbXBfY3JlYXRlYCAqbWlnaHQqIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IGl0IGxvb2tzIGxpa2UgYGRpc2tzaXplX3N0b3JlYCBjYWxscyBpdC4gT2theSwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFdoYXQgYWJvdXQgdGhvc2UgYHNldHVwX3BhcmFtc184NDJgIHR5cGUgZnVuY3Rpb25zPyBUaGV5J3JlIGRlZmluZWQgYXMgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIHRoZSBmdXp6ZXIgY291bGQgcG90ZW50aWFsbHkgcmVhY2ggdGhyb3VnaCBgemNvbXBfY3JlYXRlYC4gR29vZCwgc28gSSdsbCBhZGQgYHpjb21wX2NyZWF0ZWAgYW5kIGBkaXNrc2l6ZV9zdG9yZWAgYXMgbXkgaW5pdGlhbCB0YXJnZXQgc3ltYm9scy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIGBaUkFNYCBtb2R1bGUsIGlmIGFueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MjQuNzI2ODg2NTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE4NzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDozNDoyNC43NjkwODE0MThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTIwMzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzIEkgbWlnaHQgaGF2ZTpcblxuKipaUkFNIERlcGVuZGVuY2llczogQSBRdWljayBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gdGhlIGBaUkFNYCBkZXBlbmRlbmNpZXMuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29tcG9uZW50cy4gIE9rYXksIEkgc2VlIGl0IHJlbGllcyBvbiBgQkxPQ0tgLCBgU1lTRlNgLCBgWlNNQUxMT0NgLCBhbmQgYENSWVBUT2AuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gYnJvYWQgc3Ryb2tlcywgYnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byByZWFkIHRoZSBgY29uZmlnIFpSQU1gIGJsb2NrIGRpcmVjdGx5LiBOZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBhbGwgdGhlIGZpbmVyIG51YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MjcuOTQ0Mjg3NzFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgWlJBTVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DSyBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gICA1OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXFxuICAgODpcXHRcXHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcXG4gICA5OlxcdFxcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xcbiAgMTA6XFx0XFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQgaGFzIHNldmVyYWwgdXNlIGNhc2VzLCBmb3IgZXhhbXBsZTogL3RtcCBzdG9yYWdlLCB1c2UgYXMgc3dhcFxcbiAgMTM6XFx0XFx0ICBkaXNrcyBhbmQgbWF5YmUgbWFueSBtb3JlLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDIwOlxcdFxcdHNlbGVjdCBMWjRfQ09NUFJFU1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MjcuOTQ0MzUwNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MTk3NTU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWlJBTSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBhIGZ1enppbmcgc3RyYXRlZ3kuIEZpcnN0LCB0aGUgY29yZSBkZXBlbmRlbmNpZXMgZm9yIGBaUkFNYCBpdHNlbGYgYXJlIHN0YW5kYXJkOiBgQkxPQ0tgLCBgU1lTRlNgLCBhbmQgYE1NVWAuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSdsbCBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIG9idmlvdXNseSwgYW5kIHRoZW4gYWxsIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kcyB0aGF0IHdlcmUgYWRkZWQ6IGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYFpSQU1fQkFDS0VORF9MWk9gLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuIFRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IGluIGB6cmFtX2Rydi5jYC4gSSBzZWUgYGNvbXBfYWxnb3JpdGhtX3NldGAsIGBjb21wX3BhcmFtc19yZXNldGAsIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYW5kIGBjb21wX3BhcmFtc19zdG9yZWAuIFNpbmNlIHRoZSB0YXNrIGlzIGZ1enppbmcsIEknbSBpbnRlcmVzdGVkIGluIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEknbSBnb2luZyB0byBhZGQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWAsIGBkaXNrc2l6ZV9zdG9yZWAsIGFuZCBgemNvbXBfY3JlYXRlYCB0byBgRm9jdXNTeW1ib2xzYC5cblxuSG9sZCBvbiBhIHNlYy4uLiBgY29tcF9wYXJhbXNfc3RvcmVgIGlzIHN0YXRpYywgYnV0IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAqY2FsbHMqIGl0LiBHb29kIGNhdGNoLiBJJ2xsIHN0aWNrIHdpdGggbXkgaW5pdGlhbCBsaXN0IG9mIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYGNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYHJlY29tcF9hbGdvcml0aG1fc3RvcmVgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpjb21wX2NyZWF0ZWAgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbkFscmlnaHQsIGxldCdzIGNvbmZpcm0gYHpjb21wX2NyZWF0ZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBBaCwgeWVzLCBgZGlza3NpemVfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gZm9yIGAvc3lzL2Jsb2NrL3pyYW1YL2Rpc2tzaXplYC4gVGhhdCdzIHRoZSBrZXkuIFdoZW4geW91IHdyaXRlIHRvIGBkaXNrc2l6ZWAsIGl0IGNhbGxzIGB6Y29tcF9jcmVhdGVgLCB3aGljaCB0aGVuIGNhbGxzIGB6Y29tcF9pbml0YCBhbmQgZXZlbnR1YWxseSBgc2V0dXBfcGFyYW1zYCBmb3IgdGhlIHNlbGVjdGVkIGJhY2tlbmQuIEFuZCAqaW1wb3J0YW50bHkqLCB0aG9zZSBwYXJhbWV0ZXJzIGFyZSBzZXQgKmJlZm9yZSogYGRpc2tzaXplYCBpcyB3cml0dGVuLCB2aWEgdGhlIGBjb21wX2FsZ29yaXRobWAgYW5kIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgIHN5c2ZzIGZpbGVzLlxuXG5TbywgdGhlIGZ1enppbmcgc2VxdWVuY2UgaXMgY2xlYXI6IHdyaXRlIHRvIGBjb21wX2FsZ29yaXRobWAsIHdyaXRlIHRvIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgLCBhbmQgdGhlbiB3cml0ZSB0byBgZGlza3NpemVgLiBQZXJmZWN0LiBUaGF0J3MgZW50aXJlbHkgZnV6emFibGUgdmlhIHN5c2ZzLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0aGUgZnV6emVyIHRvIGZvY3VzIHRvIHRlc3QgdGhlIG5ldyB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyBhZGRlZCB0byB2YXJpb3VzIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMuXG5cblRoZXJlZm9yZSwgdGhlIGZpbmFsIHNldHVwIGZvciB0aGUgZnV6emVyIHdpbGwgYmU6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYGRpc2tzaXplX3N0b3JlYCwgYHpjb21wX2NyZWF0ZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFpSQU1gLCBgWlJBTV9CQUNLRU5EX0xaNGAsIGBaUkFNX0JBQ0tFTkRfTFo0SENgLCBgWlJBTV9CQUNLRU5EX1pTVERgLCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgLCBgWlJBTV9CQUNLRU5EXzg0MmAsIGBaUkFNX0JBQ0tFTkRfTFpPYCwgYFpSQU1fTVVMVElfQ09NUGBcbiogICAqKlJlYXNvbmluZyoqOiBUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyB0byB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzLCBhbmQgdGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCBhbmQgdmFsaWRhdGVkIHZpYSBzeXNmcy4gVGhlcmVmb3JlLCBmdXp6aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgYGNvbXBfYWxnb3JpdGhtYCwgYGNvbXBfYWxnb3JpdGhtX3BhcmFtc2AsIGFuZCBgZGlza3NpemVgLCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NjUsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MzQ6MzkuNTY0MTA5MTQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNDQ3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWjRIQ1wiLFxuICAgIFwiWlJBTV9CQUNLRU5EX1pTVERcIixcbiAgICBcIlpSQU1fQkFDS0VORF9ERUZMQVRFXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfODQyXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFpPXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGdvcml0aG1fcGFyYW1zX3N0b3JlXCIsXG4gICAgXCJjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwicmVjb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRvIHZhcmlvdXMgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyAoODQyLCBkZWZsYXRlLCBsejQsIGx6NGhjLCBsem8sIGx6b3JsZSwgenN0ZCkuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChlLmcuLCBgY29tcF9hbGdvcml0aG1gLCBgY29tcF9hbGdvcml0aG1fcGFyYW1zYCkgYW5kIHZhbGlkYXRlZCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWNrZW5kIGlzIGluaXRpYWxpemVkIChlLmcuLCB3aGVuIHNldHRpbmcgYGRpc2tzaXplYCkuIEZ1enppbmcgdGhlIHN5c2ZzIGludGVyZmFjZXMgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNEhDXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfWlNURFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIixcbiAgICBcIlpSQU1fQkFDS0VORF84NDJcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWk9cIixcbiAgICBcIlpSQU1fTVVMVElfQ09NUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcImNvbXBfYWxnb3JpdGhtX3N0b3JlXCIsXG4gICAgXCJyZWNvbXBfYWxnb3JpdGhtX3N0b3JlXCIsXG4gICAgXCJkaXNrc2l6ZV9zdG9yZVwiLFxuICAgIFwiemNvbXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gdmFyaW91cyB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzICg4NDIsIGRlZmxhdGUsIGx6NCwgbHo0aGMsIGx6bywgbHpvcmxlLCB6c3RkKS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJlZCB2aWEgc3lzZnMgKGUuZy4sIGBjb21wX2FsZ29yaXRobWAsIGBjb21wX2FsZ29yaXRobV9wYXJhbXNgKSBhbmQgdmFsaWRhdGVkIHdoZW4gdGhlIGNvbXByZXNzaW9uIGJhY2tlbmQgaXMgaW5pdGlhbGl6ZWQgKGUuZy4sIHdoZW4gc2V0dGluZyBgZGlza3NpemVgKS4gRnV6emluZyB0aGUgc3lzZnMgaW50ZXJmYWNlcyBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6rml[1] Phase: Succeeded StartedAt: 2026-08-04 10:35:03 +0000 UTC FinishedAt: 2026-08-04 10:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 10:35:03 +0000 UTC FinishedAt: 2026-08-04 10:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2] Phase: Succeeded StartedAt: 2026-08-04 10:35:03 +0000 UTC FinishedAt: 2026-08-04 11:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-04 10:35:03 +0000 UTC FinishedAt: 2026-08-04 11:26:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 10:35:03 +0000 UTC FinishedAt: 2026-08-04 10:35:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 10:35:03 +0000 UTC FinishedAt: 2026-08-04 10:35:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq6rml/series-workflowq6rml-convert-artifact-3319756534/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 10:35:13 +0000 UTC FinishedAt: 2026-08-04 10:54:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 10:35:13 +0000 UTC FinishedAt: 2026-08-04 10:54:50 +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:*a86a5714-6083-494b-8260-b70385cd431f,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-workflowq6rml/series-workflowq6rml-convert-artifact-3319756534/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": "0b942c91-d0fb-4260-b332-b636c29f1c52", "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-workflowq6rml/series-workflowq6rml-build-action-4182086156/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 10:35:13 +0000 UTC FinishedAt: 2026-08-04 10:54:27 +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:*a86a5714-6083-494b-8260-b70385cd431f,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-workflowq6rml/series-workflowq6rml-convert-artifact-3319756534/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": "0b942c91-d0fb-4260-b332-b636c29f1c52", "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-workflowq6rml/series-workflowq6rml-build-action-4182086156/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 10:54:50 +0000 UTC FinishedAt: 2026-08-04 10:54:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 10:54:50 +0000 UTC FinishedAt: 2026-08-04 10:54:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 10:54:50 +0000 UTC FinishedAt: 2026-08-04 10:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 10:54:50 +0000 UTC FinishedAt: 2026-08-04 10:54:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq6rml/series-workflowq6rml-convert-artifact-2028798601/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 10:55:00 +0000 UTC FinishedAt: 2026-08-04 11:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 10:55:00 +0000 UTC FinishedAt: 2026-08-04 11:26:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0b942c91-d0fb-4260-b332-b636c29f1c52,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-workflowq6rml/series-workflowq6rml-build-action-4182086156/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": false },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-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-08-04 11:26:11 +0000 UTC FinishedAt: 2026-08-04 11:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6rml[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["algorithm_params_store","comp_algorithm_store","recomp_algorithm_store","disksize_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a4cdc958dd79fc6c3b20b51a10debec6ca09fec","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO","ZRAM_MULTI_COMP"],"series_id":"f3df2eb3-cbb0-4fc5-a436-c36d34ae47e0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-08-04 11:26:11 +0000 UTC FinishedAt: 2026-08-04 11:26:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}