Name: series-workflowzqrb6 Phase: Succeeded StartedAt: 2026-09-10 05:47:08 +0000 UTC FinishedAt: 2026-09-10 09:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[0] Phase: Succeeded StartedAt: 2026-09-10 05:47:08 +0000 UTC FinishedAt: 2026-09-10 05:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 05:47:08 +0000 UTC FinishedAt: 2026-09-10 05:50:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "64de2fe2-af70-439a-82a1-7f8a51935d8d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ext_migrate" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXG5cblRoZSBjaGFuZ2Ugb25seSBhZmZlY3RzIGxvY2FsIGludGVnZXIgcmV0dXJuIGNvZGUgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZXJyb3IgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gZXh0NF9leHRfbWlncmF0ZSgpIHdoZXJlIGFuIGVhcmxpZXIgZXJyb3IgcmV0dXJuIGNvZGUgd2FzIGFjY2lkZW50YWxseSBvdmVyd3JpdHRlbiBieSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKSwgY2F1c2luZyBmYWlsZWQgbWlncmF0aW9uIG9wZXJhdGlvbnMgdG8gaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3MuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEVYVDRfSU9DX01JR1JBVEUgYW5kIEVYVDRfSU9DX1NFVEZMQUdTIGlvY3RscyBvbiBleHQ0IGZpbGVzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2M1MjA1OTRlZWNhMTU2NDg0Nzg2Y2U4MTA3YmI2YWYxN2NhNWJiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA1OjQ5OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcbmluZGV4IDVkNjBlZjEwZmUxMTAuLjAyYmI3YzIwYTAwOGEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmNcbkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4tXHRpbnQgcmV0dmFsID0gMCwgaTtcbiYjNDM7XHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xuIFx0X19sZTMyICppX2RhdGE7XG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcbiBcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcbkBAIC01NjcsOSAmIzQzOzU2NywxMiBAQCBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogV2UgbWFyayB0aGUgdG1wX2lub2RlIGRpcnR5IHZpYSBleHQ0X2V4dF90cmVlX2luaXQuICovXG4tXHRyZXR2YWwgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoaGFuZGxlLCAxLCAwKTtcbi1cdGlmIChyZXR2YWwgXHUwMDNjIDApXG4mIzQzO1x0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKCFyZXR2YWwpXG4mIzQzO1x0XHRcdHJldHZhbCA9IGVycjtcbiBcdFx0Z290byBvdXRfc3RvcDtcbiYjNDM7XHR9XG4gXHQvKlxuIFx0ICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVyb1xuIFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXh0X21pZ3JhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGV4dDRfZXh0X21pZ3JhdGUoKSB3aGVyZSBhbiBlYXJsaWVyIGVycm9yIHJldHVybiBjb2RlIHdhcyBhY2NpZGVudGFsbHkgb3ZlcndyaXR0ZW4gYnkgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKCksIGNhdXNpbmcgZmFpbGVkIG1pZ3JhdGlvbiBvcGVyYXRpb25zIHRvIGluY29ycmVjdGx5IHJlcG9ydCBzdWNjZXNzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBFWFQ0X0lPQ19NSUdSQVRFIGFuZCBFWFQ0X0lPQ19TRVRGTEFHUyBpb2N0bHMgb24gZXh0NCBmaWxlc3lzdGVtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjNTIwNTk0ZWVjYTE1NjQ4NDc4NmNlODEwN2JiNmFmMTdjYTViYjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwNTo0OTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmMKaW5kZXggNWQ2MGVmMTBmZTExMC4uMDJiYjdjMjBhMDA4YSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmMKQEAgLTQxMCw3ICYjNDM7NDEwLDcgQEAgc3RhdGljIGludCBmcmVlX2V4dF9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAloYW5kbGVfdCAqaGFuZGxlOwotCWludCByZXR2YWwgPSAwLCBpOwomIzQzOwlpbnQgcmV0dmFsID0gMCwgZXJyLCBpOwogCV9fbGUzMiAqaV9kYXRhOwogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpOwogCXN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDsKQEAgLTU2Nyw5ICYjNDM7NTY3LDEyIEBAIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogV2UgbWFyayB0aGUgdG1wX2lub2RlIGRpcnR5IHZpYSBleHQ0X2V4dF90cmVlX2luaXQuICovCi0JcmV0dmFsID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7Ci0JaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CWVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJaWYgKCFyZXR2YWwpCiYjNDM7CQkJcmV0dmFsID0gZXJyOwogCQlnb3RvIG91dF9zdG9wOwomIzQzOwl9CiAJLyoKIAkgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvCiAJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBleHQ0IE1pZ3JhdGlvbiBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hhdCYjMzk7cyBjaGFuZ2luZy4gVGhlIGNoYW5nZWxvZyBwb2ludHMgbWUgZGlyZWN0bHkgdG8gYGZzL2V4dDQvbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9leHRfbWlncmF0ZSgpYCBmdW5jdGlvbi4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGluIHRoZWlyIHByb3BlciBzY29wZS4KCkkmIzM5O20gdGhpbmtpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0JiMzOTtzIGFyb3VuZCBpdCBpcyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGZzL2V4dDQvbWlncmF0ZS5jYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBjb2RlIHVzaW5nIHRoZSBsaW5lIG51bWJlcnMgbWVudGlvbmVkLiBJIHdpbGwgZm9jdXMgb24gbGluZXMgNDEwIHRocm91Z2ggNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGVub3VnaCBjb250ZXh0LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHRpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDQxMTpcdHtcbiA0MTI6XHRcdGhhbmRsZV90ICpoYW5kbGU7XG4gNDEzOlx0XHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xuIDQxNDpcdFx0X19sZTMyICppX2RhdGE7XG4gNDE1Olx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcbiA0MTY6XHRcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcbiA0MTc6XHRcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCBsYjtcbiA0MTg6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X2VudHJpZXM7XG4gNDE5Olx0XHRfX3UzMiBnb2FsLCB0bXBfY3N1bV9zZWVkO1xuIDQyMDpcdFx0dWlkX3Qgb3duZXJbMl07XG4gNDIxOlx0XHRpbnQgYWxsb2NfY3R4O1xuIDQyMjpcdFxuIDQyMzpcdFx0LypcbiA0MjQ6XHRcdCAqIElmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW50cywgb3IgdGhlIGlub2RlXG4gNDI1Olx0XHQgKiBhbHJlYWR5IGlzIGV4dGVudC1iYXNlZCwgZXJyb3Igb3V0LlxuIDQyNjpcdFx0ICovXG4gNDI3Olx0XHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSB8fFxuIDQyODpcdFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpIHx8XG4gNDI5Olx0XHQgICAgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxuIDQzMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MzE6XHRcbiA0MzI6XHRcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfYmxvY2tzID09IDApXG4gNDMzOlx0XHRcdC8qXG4gNDM0Olx0XHRcdCAqIGRvbiYjMzk7dCBtaWdyYXRlIGZhc3Qgc3ltbGlua1xuIDQzNTpcdFx0XHQgKi9cbiA0MzY6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdGFsbG9jX2N0eCA9IGV4dDRfd3JpdGVwYWdlc19kb3duX3dyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIDQzOTpcdFxuIDQ0MDpcdFx0LypcbiA0NDE6XHRcdCAqIFdvcnN0IGNhc2Ugd2UgY2FuIHRvdWNoIHRoZSBhbGxvY2F0aW9uIGJpdG1hcHMgYW5kIGEgYmxvY2tcbiA0NDI6XHRcdCAqIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2suICBXZSBkbyBuZWVkIHRvIHdvcnJ5IGFib3V0XG4gNDQzOlx0XHQgKiBjcmVkaXRzIGZvciBtb2RpZnlpbmcgdGhlIHF1b3RhIGlub2RlLlxuIDQ0NDpcdFx0ICovXG4gNDQ1Olx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlHUkFURSxcbiA0NDY6XHRcdFx0MyAmIzQzOyBFWFQ0X01BWFFVT1RBU19UUkFOU19CTE9DS1MoaW5vZGUtXHUwMDNlaV9zYikpO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4gNDQ5Olx0XHRcdHJldHZhbCA9IFBUUl9FUlIoaGFuZGxlKTtcbiA0NTA6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDQ1MTpcdFx0fVxuIDQ1MjpcdFx0LypcbiA0NTM6XHRcdCAqIFRoaXMgb3BlcmF0aW9uIHJld3JpdGVzIHRoZSBpbm9kZSYjMzk7cyBibG9jayBtYXBwaW5nIGxheW91dFxuIDQ1NDpcdFx0ICogKGluZGlyZWN0IHRvIGV4dGVudHMpIGFuZCBpcyBub3QgdHJhY2tlZCBpbiB0aGUgZmFzdCBjb21taXRcbiA0NTU6XHRcdCAqIGxvZywgc28gZGlzYWJsZSBmYXN0IGNvbW1pdHMgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gNDU2Olx0XHQgKi9cbiA0NTc6XHRcdGV4dDRfZmNfbWFya19pbmVsaWdpYmxlKGlub2RlLVx1MDAzZWlfc2IsIEVYVDRfRkNfUkVBU09OX01JR1JBVEUsIGhhbmRsZSk7XG4gNDU4Olx0XHRnb2FsID0gKCgoKHUzMilpbm9kZS1cdTAwM2VpX2lubyAtIDEpIC8gRVhUNF9JTk9ERVNfUEVSX0dST1VQKGlub2RlLVx1MDAzZWlfc2IpKSAqXG4gNDU5Olx0XHRcdEVYVDRfSU5PREVTX1BFUl9HUk9VUChpbm9kZS1cdTAwM2VpX3NiKSkgJiM0MzsgMTtcbiA0NjA6XHRcdG93bmVyWzBdID0gaV91aWRfcmVhZChpbm9kZSk7XG4gNDYxOlx0XHRvd25lclsxXSA9IGlfZ2lkX3JlYWQoaW5vZGUpO1xuIDQ2MjpcdFx0dG1wX2lub2RlID0gZXh0NF9uZXdfaW5vZGUoaGFuZGxlLCBkX2lub2RlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19yb290KSxcbiA0NjM6XHRcdFx0XHRcdCAgIFNfSUZSRUcsIE5VTEwsIGdvYWwsIG93bmVyLCAwKTtcbiA0NjQ6XHRcdGlmIChJU19FUlIodG1wX2lub2RlKSkge1xuIDQ2NTpcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKHRtcF9pbm9kZSk7XG4gNDY2Olx0XHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gNDY3Olx0XHRcdHRtcF9pbm9kZSA9IE5VTEw7XG4gNDY4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA0Njk6XHRcdH1cbiA0NzA6XHRcdC8qXG4gNDcxOlx0XHQgKiBVc2UgdGhlIGNvcnJlY3Qgc2VlZCBmb3IgY2hlY2tzdW0gKGkuZS4gdGhlIHNlZWQgZnJvbSAmIzM5O2lub2RlJiMzOTspLiAgVGhpc1xuIDQ3MjpcdFx0ICogaXMgc28gdGhhdCB0aGUgbWV0YWRhdGEgYmxvY2tzIHdpbGwgaGF2ZSB0aGUgY29ycmVjdCBjaGVja3N1bSBhZnRlclxuIDQ3MzpcdFx0ICogdGhlIG1pZ3JhdGlvbi5cbiA0NzQ6XHRcdCAqL1xuIDQ3NTpcdFx0ZWkgPSBFWFQ0X0koaW5vZGUpO1xuIDQ3NjpcdFx0dG1wX2NzdW1fc2VlZCA9IEVYVDRfSSh0bXBfaW5vZGUpLVx1MDAzZWlfY3N1bV9zZWVkO1xuIDQ3NzpcdFx0RVhUNF9JKHRtcF9pbm9kZSktXHUwMDNlaV9jc3VtX3NlZWQgPSBlaS1cdTAwM2VpX2NzdW1fc2VlZDtcbiA0Nzg6XHRcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSk7XG4gNDc5Olx0XHQvKlxuIDQ4MDpcdFx0ICogU2V0IHRoZSBpX25saW5rIHRvIHplcm8gc28gaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyXG4gNDgxOlx0XHQgKiB3aGVuIHdlIGRyb3AgaW5vZGUgcmVmZXJlbmNlLlxuIDQ4MjpcdFx0ICovXG4gNDgzOlx0XHRjbGVhcl9ubGluayh0bXBfaW5vZGUpO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgdG1wX2lub2RlKTtcbiA0ODY6XHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gNDg3Olx0XG4gNDg4Olx0XHQvKlxuIDQ4OTpcdFx0ICogc3RhcnQgd2l0aCBvbmUgY3JlZGl0IGFjY291bnRlZCBmb3JcbiA0OTA6XHRcdCAqIHN1cGVyYmxvY2sgbW9kaWZpY2F0aW9uLlxuIDQ5MTpcdFx0ICpcbiA0OTI6XHRcdCAqIEZvciB0aGUgdG1wX2lub2RlIHdlIGFscmVhZHkgaGF2ZSBjb21taXR0ZWQgdGhlXG4gNDkzOlx0XHQgKiB0cmFuc2FjdGlvbiB0aGF0IGNyZWF0ZWQgdGhlIGlub2RlLiBMYXRlciBhcyBhbmRcbiA0OTQ6XHRcdCAqIHdoZW4gd2UgYWRkIGV4dGVudHMgd2UgZXh0ZW50IHRoZSBqb3VybmFsXG4gNDk1Olx0XHQgKi9cbiA0OTY6XHRcdC8qXG4gNDk3Olx0XHQgKiBFdmVuIHRob3VnaCB3ZSB0YWtlIGlfcndzZW0gd2UgY2FuIHN0aWxsIGNhdXNlIGJsb2NrXG4gNDk4Olx0XHQgKiBhbGxvY2F0aW9uIHZpYSBtbWFwIHdyaXRlIHRvIGhvbGVzLiBJZiB3ZSBoYXZlIGFsbG9jYXRlZFxuIDQ5OTpcdFx0ICogbmV3IGJsb2NrcyB3ZSBmYWlsIG1pZ3JhdGUuICBOZXcgYmxvY2sgYWxsb2NhdGlvbiB3aWxsXG4gNTAwOlx0XHQgKiBjbGVhciBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFIGZsYWcuICBUaGUgZmxhZyBpcyB1cGRhdGVkXG4gNTAxOlx0XHQgKiB3aXRoIGlfZGF0YV9zZW0gaGVsZCB0byBwcmV2ZW50IHJhY2luZyB3aXRoIGJsb2NrXG4gNTAyOlx0XHQgKiBhbGxvY2F0aW9uLlxuIDUwMzpcdFx0ICovXG4gNTA0Olx0XHRkb3duX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbiA1MDU6XHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFKTtcbiA1MDY6XHRcdHVwX3JlYWQoKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhX3NlbSkpO1xuIDUwNzpcdFxuIDUwODpcdFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01JR1JBVEUsIDEpO1xuIDUwOTpcdFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGV4dDRfZXh0X21pZ3JhdGUqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBleHQ0X2V4dF9taWdyYXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGJldHdlZW4gbGluZXMgNTEwIGFuZCA2MDAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgZXh0ZW50IHRyZWUuIEkgc3VzcGVjdCB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoIHRoZSBuaXR0eS1ncml0dHkgb2YgcmVtYXBwaW5nIGJsb2NrcywgaGFuZGxpbmcgcG9zc2libGUgZGF0YSBtb3ZlbWVudCwgYW5kIHBlcmhhcHMgc29tZSBtZXRhZGF0YSB1cGRhdGVzIGFzIHRoZSBmdW5jdGlvbiBhdHRlbXB0cyB0byB0cmFuc2Zvcm0gYW4gZXhpc3RpbmcgaW5vZGUmIzM5O3MgZXh0ZW50IHN0cnVjdHVyZS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlIHJlYWxsb2NhdGlvbiBhbmQgd2hhdCBraW5kIG9mIGNoZWNrcyB0aGV5IGFyZSBkb2luZyBoZXJlLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiBhbnkgb3B0aW1pemF0aW9uIGlzIGhhcHBlbmluZyBoZXJlIHRvIG1pbmltaXplIGZyYWdtZW50YXRpb24uIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBsb29raW5nIGZvciB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGFueSBibG9jayByZW1hcHBpbmcgb3IgYWxsb2NhdGlvbiByZXF1ZXN0cyB3aXRoaW4gdGhpcyBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKGhhbmRsZSk7XG4gNTExOlx0XHRcdGdvdG8gb3V0X3RtcF9pbm9kZTtcbiA1MTI6XHRcdH1cbiA1MTM6XHRcbiA1MTQ6XHRcdGlfZGF0YSA9IGVpLVx1MDAzZWlfZGF0YTtcbiA1MTU6XHRcdG1lbXNldChcdTAwMjZsYiwgMCwgc2l6ZW9mKGxiKSk7XG4gNTE2Olx0XG4gNTE3Olx0XHQvKiAzMiBiaXQgYmxvY2sgYWRkcmVzcyA0IGJ5dGVzICovXG4gNTE4Olx0XHRtYXhfZW50cmllcyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNlXHUwMDNlIDI7XG4gNTE5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBFWFQ0X05ESVJfQkxPQ0tTOyBpJiM0MzsmIzQzOykge1xuIDUyMDpcdFx0XHRpZiAoaV9kYXRhW2ldKSB7XG4gNTIxOlx0XHRcdFx0cmV0dmFsID0gdXBkYXRlX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1MjI6XHRcdFx0XHRcdFx0XHRsZTMyX3RvX2NwdShpX2RhdGFbaV0pLCBcdTAwMjZsYik7XG4gNTIzOlx0XHRcdFx0aWYgKHJldHZhbClcbiA1MjQ6XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1MjU6XHRcdFx0fSBlbHNlXG4gNTI2Olx0XHRcdFx0bGIuY3Vycl9ibG9jayYjNDM7JiM0Mzs7XG4gNTI3Olx0XHR9XG4gNTI4Olx0XHRpZiAoaV9kYXRhW0VYVDRfSU5EX0JMT0NLXSkge1xuIDUyOTpcdFx0XHRyZXR2YWwgPSB1cGRhdGVfaW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1MzA6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X0lORF9CTE9DS10pLCBcdTAwMjZsYik7XG4gNTMxOlx0XHRcdGlmIChyZXR2YWwpXG4gNTMyOlx0XHRcdFx0Z290byBlcnJfb3V0O1xuIDUzMzpcdFx0fSBlbHNlXG4gNTM0Olx0XHRcdGxiLmN1cnJfYmxvY2sgJiM0Mzs9IG1heF9lbnRyaWVzO1xuIDUzNTpcdFx0aWYgKGlfZGF0YVtFWFQ0X0RJTkRfQkxPQ0tdKSB7XG4gNTM2Olx0XHRcdHJldHZhbCA9IHVwZGF0ZV9kaW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1Mzc6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X0RJTkRfQkxPQ0tdKSwgXHUwMDI2bGIpO1xuIDUzODpcdFx0XHRpZiAocmV0dmFsKVxuIDUzOTpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1NDA6XHRcdH0gZWxzZVxuIDU0MTpcdFx0XHRsYi5jdXJyX2Jsb2NrICYjNDM7PSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xuIDU0MjpcdFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XG4gNTQzOlx0XHRcdHJldHZhbCA9IHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1NDQ6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSwgXHUwMDI2bGIpO1xuIDU0NTpcdFx0XHRpZiAocmV0dmFsKVxuIDU0NjpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1NDc6XHRcdH1cbiA1NDg6XHRcdC8qXG4gNTQ5Olx0XHQgKiBCdWlsZCB0aGUgbGFzdCBleHRlbnRcbiA1NTA6XHRcdCAqL1xuIDU1MTpcdFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLCBcdTAwMjZsYik7XG4gNTUyOlx0ZXJyX291dDpcbiA1NTM6XHRcdGlmIChyZXR2YWwpXG4gNTU0Olx0XHRcdC8qXG4gNTU1Olx0XHRcdCAqIEZhaWx1cmUgY2FzZSBkZWxldGUgdGhlIGV4dGVudCBpbmZvcm1hdGlvbiB3aXRoIHRoZVxuIDU1NjpcdFx0XHQgKiB0bXBfaW5vZGVcbiA1NTc6XHRcdFx0ICovXG4gNTU4Olx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1NTk6XHRcdGVsc2Uge1xuIDU2MDpcdFx0XHRyZXR2YWwgPSBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGEoaGFuZGxlLCBpbm9kZSwgdG1wX2lub2RlKTtcbiA1NjE6XHRcdFx0aWYgKHJldHZhbClcbiA1NjI6XHRcdFx0XHQvKlxuIDU2MzpcdFx0XHRcdCAqIGlmIHdlIGZhaWwgdG8gc3dhcCBpbm9kZSBkYXRhIGZyZWUgdGhlIGV4dGVudFxuIDU2NDpcdFx0XHRcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxuIDU2NTpcdFx0XHRcdCAqL1xuIDU2NjpcdFx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xuIDU3MDpcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4gNTcxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNTcyOlx0XHRcdGlmICghcmV0dmFsKVxuIDU3MzpcdFx0XHRcdHJldHZhbCA9IGVycjtcbiA1NzQ6XHRcdFx0Z290byBvdXRfc3RvcDtcbiA1NzU6XHRcdH1cbiA1NzY6XHRcdC8qXG4gNTc3Olx0XHQgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvXG4gNTc4Olx0XHQgKi9cbiA1Nzk6XHRcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIDApO1xuIDU4MDpcdFxuIDU4MTpcdFx0LypcbiA1ODI6XHRcdCAqIHNldCB0aGUgIGlfYmxvY2tzIGNvdW50IHRvIHplcm9cbiA1ODM6XHRcdCAqIHNvIHRoYXQgdGhlIGV4dDRfZXZpY3RfaW5vZGUoKSBkb2VzIHRoZVxuIDU4NDpcdFx0ICogcmlnaHQgam9iXG4gNTg1Olx0XHQgKlxuIDU4NjpcdFx0ICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcbiA1ODc6XHRcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxuIDU4ODpcdFx0ICovXG4gNTg5Olx0XHR0bXBfaW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuIDU5MDpcdFx0RVhUNF9JKHRtcF9pbm9kZSktXHUwMDNlaV9jc3VtX3NlZWQgPSB0bXBfY3N1bV9zZWVkO1xuIDU5MTpcdFxuIDU5MjpcdFx0LyogUmVzZXQgdGhlIGV4dGVudCBkZXRhaWxzICovXG4gNTkzOlx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpO1xuIDU5NDpcdG91dF9zdG9wOlxuIDU5NTpcdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiA1OTY6XHRvdXRfdG1wX2lub2RlOlxuIDU5NzpcdFx0dW5sb2NrX25ld19pbm9kZSh0bXBfaW5vZGUpO1xuIDU5ODpcdG91dF91bmxvY2s6XG4gNTk5Olx0XHRleHQ0X3dyaXRlcGFnZXNfdXBfd3JpdGUoaW5vZGUtXHUwMDNlaV9zYiwgYWxsb2NfY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjI1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEludm9jYXRpb24gb2YgYGV4dDRfZXh0X21pZ3JhdGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBleHQ0X2V4dF9taWdyYXRlYC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIGl0JiMzOTtzIHVzZWQgaXMga2V5LiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzaW1wbGUgYGdyZXBgIHRvIGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgZXh0NF9leHRfbWlncmF0ZWAgaXMgYWN0dWFsbHkgKmNhbGxlZCouIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cywgd2hpY2ggd2lsbCBiZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBmdW5jdGlvbnMgaW52b2tlIGl0IGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfbWlncmF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zMjU0PWludCBleHQ0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncyk7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMzI1Ni0vKiBtaWdyYXRlLmMgKi9cbmZzL2V4dDQvZXh0NC5oOjMyNTc6ZXh0ZXJuIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqKTtcbmZzL2V4dDQvZXh0NC5oLTMyNTgtZXh0ZXJuIGludCBleHQ0X2luZF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW9jdGwuYz01OTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldGZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTcwNS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0VYVEVOVFNfRkwpXG5mcy9leHQ0L2lvY3RsLmM6NzA2Olx0XHRcdGVyciA9IGV4dDRfZXh0X21pZ3JhdGUoaW5vZGUpO1xuZnMvZXh0NC9pb2N0bC5jLTcwNy1cdFx0ZWxzZVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0xNTM4PXN0YXRpYyBsb25nIF9fZXh0NF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE3MDEtXHRcdGlub2RlX2xvY2soKGlub2RlKSk7XG5mcy9leHQ0L2lvY3RsLmM6MTcwMjpcdFx0ZXJyID0gZXh0NF9leHRfbWlncmF0ZShpbm9kZSk7XG5mcy9leHQ0L2lvY3RsLmMtMTcwMy1cdFx0aW5vZGVfdW5sb2NrKChpbm9kZSkpO1xuLS1cbmZzL2V4dDQvbWlncmF0ZS5jPTM5MD1zdGF0aWMgaW50IGZyZWVfZXh0X2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtNDA5LVxuZnMvZXh0NC9taWdyYXRlLmM6NDEwOmludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L21pZ3JhdGUuYy00MTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIEJ1ZyBpbiBleHQ0IEV4dGVudCBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBleHQ0X2V4dF9taWdyYXRlYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRob3NlIGZhbWlsaWFyIGBFWFQ0X0lPQ19TRVRGTEFHU2AgYW5kIGBFWFQ0X0lPQ19NSUdSQVRFYCBpb2N0bHMg4oCTIHN0YW5kYXJkIHVzZXJzcGFjZSBmaWxlc3lzdGVtIGNhbGxzIGluIGV4dDQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHdoYXQgdnVsbmVyYWJpbGl0eSBpdCYjMzk7cyBhZGRyZXNzaW5nLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGFuIGlzc3VlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuCgpFc3NlbnRpYWxseSwgdGhlIHByZS1wYXRjaCBsb2dpYyB3YXMgZmxhd2VkLiBJZiB0aGUgY3J1Y2lhbCBgdXBkYXRlXypfZXh0ZW50X3JhbmdlYCBjYWxscyBmYWlsZWQsIHNldHRpbmcgYHJldHZhbGAgdG8gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUuIElmIHRoZSBqb3VybmFsIGNyZWRpdCBhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgYHJldHZhbGAgd2FzIHNpbGVudGx5IHNldCB0byB6ZXJvLCBldmVuIHRob3VnaCB0aGUgdW5kZXJseWluZyBtaWdyYXRpb24gcHJvY2VzcyBoYWQgZmFpbGVkLiBUaGlzIGxlZCB0byBhIGZhbHNlIHBvc2l0aXZlOiB0aGUgdXNlcnNwYWNlIG9yIGNhbGxpbmcgZnVuY3Rpb24gcmVjZWl2ZWQgYSBzdWNjZXNzIGluZGljYXRpb24gZGVzcGl0ZSB0aGUgYWN0dWFsIGZhaWx1cmUhIFRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gemVybyB0aGUgYHRtcF9pbm9kZWAgYW5kIGV4ZWN1dGUgYGV4dDRfZXh0X3RyZWVfaW5pdGAgd2hpY2ggbWFrZXMgaXQgYXBwZWFyIHN1Y2Nlc3NmdWwuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZSBpbml0aWFsIGVycm9yIChgcmV0dmFsYCkgaXMgcHJlc2VydmVkLiBUaGUgcGF0Y2hlZCBjb2RlIGluY2x1ZGVzIGFuIGludGVybWVkaWF0ZSBgZXJyYCB2YXJpYWJsZSBmb3IgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AuIENyaXRpY2FsbHksIGlmIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIGZhaWxzLCBpdHMgZXJyb3IgY29kZSBpcyBvbmx5IHVzZWQgaWYgYHJldHZhbGAgaXMgc3RpbGwgemVyby4gVGhpcyBwcm9wYWdhdGVzIHRoZSBvcmlnaW5hbCBlcnJvciBpZiBpdCBoYXBwZW5lZC4gVGhlIGBnb3RvIG91dF9zdG9wYCBlbnN1cmVzIHdlIGV4aXQgZ3JhY2VmdWxseSBhbmQgY29uc2lzdGVudGx5IHdpdGggdGhlIGNvcnJlY3QgZXJyb3Igc3RhdGUuCgpUaGlzIGlzIGNsZWFybHkgYSBidWcgZml4IHdpdGhpbiB0aGUgY29yZSBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBgZnMvZXh0NC9taWdyYXRlLmNgLiBJJiMzOTtsbCBub3cgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBlbHNlIHRoaXMgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVx0XHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlx0XHRpbmRpcmVjdC5vIGlubGluZS5vIGlub2RlLm8gaW9jdGwubyBtYmFsbG9jLm8gbWlncmF0ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTExLVx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgZXh0NCBNb2R1bGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgbWlncmF0ZS5vYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBleHQ0LXlgIGJ1aWxkIGNoYWluLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9uZSBvZiB0aGUgZmlsZXMgdGhhdCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGBleHQ0YCBtb2R1bGUsIGJ1dCBvbmx5IHdoZW4gYENPTkZJR19FWFQ0X0ZTYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGVudGlyZSBgZXh0NGAgZmlsZXN5c3RlbS4gVGltZSB0byBkaWcgaW50byBgZnMvZXh0NC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzAKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVYVDQgRmlsZXN5c3RlbSBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBkbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCBmb3IgdGhpcyBhbmFseXNpcz8gUmlnaHQsIGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzdWJzeXN0ZW0gZXZlbiB3b3J0aCBmdXp6aW5nPwoKWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY29yZSBzdWJzeXN0ZW0gaXMgdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIHRoZSBleHQ0IGZpbGVzeXN0ZW0gc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyB1c2VyLXJlYWNoYWJsZSwgd2hpY2ggaXMgYSBtYWpvciBwb2ludCBpbiBpdHMgZmF2b3IsIHZpYSBpb2N0bCBjYWxscyBsaWtlIGBFWFQ0X0lPQ19NSUdSQVRFYCBvciBgRlNfSU9DX1NFVEZMQUdTYCAvIGBFWFQ0X0lPQ19TRVRGTEFHU2AuIENydWNpYWxseSwgdGhpcyBwYXJ0aWN1bGFyIGFyZWEgZGlyZWN0bHkgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybiB2YWx1ZXMgd2l0aGluIGBleHQ0X2V4dF9taWdyYXRlKClgLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ3JlYXQgYXJlYSB0byB0YXJnZXQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIGBleHQ0X2V4dF9taWdyYXRlYCBpcyB0aGUgZGlyZWN0IGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLiBCdXQsIGxldCYjMzk7cyBzZWUgd2hhdCBjYWxscyBpbnRvIGl0LCBpcyBpdCBgZXh0NF9pb2N0bGAsIGBfX2V4dDRfaW9jdGxgLCBvciBgZXh0NF9pb2N0bF9zZXRmbGFnc2A/IEFoLCByaWdodC4gYGV4dDRfZXh0X21pZ3JhdGVgIHNlZW1zIHByZXR0eSBzcGVjaWZpYywgbm90IGEgZnVuY3Rpb24gdGhhdCYjMzk7cyB1YmlxdWl0b3VzIGFjcm9zcyB0aGUgY29kZS4KCkFscmlnaHQsIHdoYXQgYWJvdXQgdGhhdCBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24/IExldCYjMzk7cyBjaGVjayB0aGUgY29kZSBpdHNlbGYsIGluIGBmcy9leHQ0L21pZ3JhdGUuY2A6IGBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKWAuIEFuZCBnb29kLCBpdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiwgYW5kIHRoZSBzeW1ib2wgaXMgaW4gdm1saW51eCwgc28sIGVhc3kgdG8gdGFyZ2V0LgoKT2theSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nOiAmIzM0O1dvcnRoRnV6emluZzogdHJ1ZSYjMzQ7LCAmIzM0O0ZvY3VzU3ltYm9sczogW2BleHQ0X2V4dF9taWdyYXRlYF0mIzM0OywgJiMzNDtFbmFibGVDb25maWdzOiBbYEVYVDRfRlNgXSYjMzQ7LCBhbmQgdGhhdCBzdWNjaW5jdCByZWFzb25pbmcuIERvbmUhCgpOb3csIGxldCYjMzk7cyBtb3ZlIGZvcndhcmQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBleHQ0X2V4dF9taWdyYXRlKCkgd2hlcmUgYW4gZWFybGllciBlcnJvciByZXR1cm4gY29kZSB3YXMgYWNjaWRlbnRhbGx5IG92ZXJ3cml0dGVuIGJ5IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cygpLCBjYXVzaW5nIGZhaWxlZCBtaWdyYXRpb24gb3BlcmF0aW9ucyB0byBpbmNvcnJlY3RseSByZXBvcnQgc3VjY2Vzcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgRVhUNF9JT0NfTUlHUkFURSBhbmQgRVhUNF9JT0NfU0VURkxBR1MgaW9jdGxzIG9uIGV4dDQgZmlsZXN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBleHQ0X2V4dF9taWdyYXRlKCkgd2hlcmUgYW4gZWFybGllciBlcnJvciByZXR1cm4gY29kZSB3YXMgYWNjaWRlbnRhbGx5IG92ZXJ3cml0dGVuIGJ5IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cygpLCBjYXVzaW5nIGZhaWxlZCBtaWdyYXRpb24gb3BlcmF0aW9ucyB0byBpbmNvcnJlY3RseSByZXBvcnQgc3VjY2Vzcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgRVhUNF9JT0NfTUlHUkFURSBhbmQgRVhUNF9JT0NfU0VURkxBR1MgaW9jdGxzIG9uIGV4dDQgZmlsZXN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cblxuVGhlIGNoYW5nZSBvbmx5IGFmZmVjdHMgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZSBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IGZvciBlcnJvciBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzUyMDU5NGVlY2ExNTY0ODQ3ODZjZTgxMDdiYjZhZjE3Y2E1YmI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDU6NDk6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDVkNjBlZjEwZmUxMTAuLjAyYmI3YzIwYTAwOGEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSkKIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaGFuZGxlX3QgKmhhbmRsZTsKLQlpbnQgcmV0dmFsID0gMCwgaTsKJiM0MzsJaW50IHJldHZhbCA9IDAsIGVyciwgaTsKIAlfX2xlMzIgKmlfZGF0YTsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTsKIAlzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSA9IE5VTEw7CkBAIC01NjcsOSAmIzQzOzU2NywxMiBAQCBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX0KIAogCS8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqLwotCXJldHZhbCA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApOwotCWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoaGFuZGxlLCAxLCAwKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCWlmICghcmV0dmFsKQomIzQzOwkJCXJldHZhbCA9IGVycjsKIAkJZ290byBvdXRfc3RvcDsKJiM0MzsJfQogCS8qCiAJICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVybwogCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGV4dDQgTWlncmF0aW9uIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGluc3BlY3RpbmcgdGhlIGRpZmYsIGZvY3VzaW5nIG9uIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgZnMvZXh0NC9taWdyYXRlLmNgLiBJIGtub3cgdGhhdCYjMzk7cyB0aGUgcGxhY2UgdG8gYmUsIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoeS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGFueSBjb2RlIGNoYW5nZSDigJMgdGhlIGltbWVkaWF0ZSBjb250ZXh0IGlzIGNydWNpYWwuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UgYW5kIHVzZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24gd2l0aGluIHRoYXQgc2FtZSBmaWxlLiBTZWVpbmcgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgYmV5b25kIHRoZSBwYXRjaCBpdHNlbGYsIHdpbGwgcHJvdmlkZSB0aGUgcmVxdWlyZWQgYmFja2dyb3VuZC4gSSYjMzk7bSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2VzcyB3aXRoaW4gZXh0NC4gVW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBhbmQgKmhvdyogb2YgdGhlIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRcdH0gZWxzZVxuIDU0MTpcdFx0XHRsYi5jdXJyX2Jsb2NrICYjNDM7PSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xuIDU0MjpcdFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XG4gNTQzOlx0XHRcdHJldHZhbCA9IHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1NDQ6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSwgXHUwMDI2bGIpO1xuIDU0NTpcdFx0XHRpZiAocmV0dmFsKVxuIDU0NjpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1NDc6XHRcdH1cbiA1NDg6XHRcdC8qXG4gNTQ5Olx0XHQgKiBCdWlsZCB0aGUgbGFzdCBleHRlbnRcbiA1NTA6XHRcdCAqL1xuIDU1MTpcdFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLCBcdTAwMjZsYik7XG4gNTUyOlx0ZXJyX291dDpcbiA1NTM6XHRcdGlmIChyZXR2YWwpXG4gNTU0Olx0XHRcdC8qXG4gNTU1Olx0XHRcdCAqIEZhaWx1cmUgY2FzZSBkZWxldGUgdGhlIGV4dGVudCBpbmZvcm1hdGlvbiB3aXRoIHRoZVxuIDU1NjpcdFx0XHQgKiB0bXBfaW5vZGVcbiA1NTc6XHRcdFx0ICovXG4gNTU4Olx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1NTk6XHRcdGVsc2Uge1xuIDU2MDpcdFx0XHRyZXR2YWwgPSBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGEoaGFuZGxlLCBpbm9kZSwgdG1wX2lub2RlKTtcbiA1NjE6XHRcdFx0aWYgKHJldHZhbClcbiA1NjI6XHRcdFx0XHQvKlxuIDU2MzpcdFx0XHRcdCAqIGlmIHdlIGZhaWwgdG8gc3dhcCBpbm9kZSBkYXRhIGZyZWUgdGhlIGV4dGVudFxuIDU2NDpcdFx0XHRcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxuIDU2NTpcdFx0XHRcdCAqL1xuIDU2NjpcdFx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xuIDU3MDpcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4gNTcxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNTcyOlx0XHRcdGlmICghcmV0dmFsKVxuIDU3MzpcdFx0XHRcdHJldHZhbCA9IGVycjtcbiA1NzQ6XHRcdFx0Z290byBvdXRfc3RvcDtcbiA1NzU6XHRcdH1cbiA1NzY6XHRcdC8qXG4gNTc3Olx0XHQgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvXG4gNTc4Olx0XHQgKi9cbiA1Nzk6XHRcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIDApO1xuIDU4MDpcdFxuIDU4MTpcdFx0LypcbiA1ODI6XHRcdCAqIHNldCB0aGUgIGlfYmxvY2tzIGNvdW50IHRvIHplcm9cbiA1ODM6XHRcdCAqIHNvIHRoYXQgdGhlIGV4dDRfZXZpY3RfaW5vZGUoKSBkb2VzIHRoZVxuIDU4NDpcdFx0ICogcmlnaHQgam9iXG4gNTg1Olx0XHQgKlxuIDU4NjpcdFx0ICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcbiA1ODc6XHRcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxuIDU4ODpcdFx0ICovXG4gNTg5Olx0XHR0bXBfaW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuIDU5MDpcdFx0RVhUNF9JKHRtcF9pbm9kZSktXHUwMDNlaV9jc3VtX3NlZWQgPSB0bXBfY3N1bV9zZWVkO1xuIDU5MTpcdFxuIDU5MjpcdFx0LyogUmVzZXQgdGhlIGV4dGVudCBkZXRhaWxzICovXG4gNTkzOlx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpO1xuIDU5NDpcdG91dF9zdG9wOlxuIDU5NTpcdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiA1OTY6XHRvdXRfdG1wX2lub2RlOlxuIDU5NzpcdFx0dW5sb2NrX25ld19pbm9kZSh0bXBfaW5vZGUpO1xuIDU5ODpcdG91dF91bmxvY2s6XG4gNTk5Olx0XHRleHQ0X3dyaXRlcGFnZXNfdXBfd3JpdGUoaW5vZGUtXHUwMDNlaV9zYiwgYWxsb2NfY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA1MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnVnIEZpeCBpbiBleHQ0X2V4dF9taWdyYXRlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24sIHRoZXJlIHdhcyBhIGNyaXRpY2FsIGZsYXcuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBzdHJ1Y3R1cmVkIGxpa2UgdGhpczogaWYgYW4gZXJyb3Igb2NjdXJyZWQgaW4gYW4gZWFybGllciBzdGVwIChlLmcuLCBgdXBkYXRlX3RpbmRfZXh0ZW50X3JhbmdlYCwgYGZpbmlzaF9yYW5nZWAsIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSwgdGhlIGByZXR2YWxgIHZhcmlhYmxlIHdvdWxkIGhvbGQgdGhhdCBlcnJvciBjb2RlLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSBgcmV0dmFsYCwgZXZlbiBpZiB0aGF0IGNhbGwgc3VjY2VlZGVkLiBUaGlzIG1lYW50IHRoZSBmdW5jdGlvbiBjb3VsZCBlcnJvbmVvdXNseSByZXBvcnQgc3VjY2VzcyAocmV0dXJuIDApIGRlc3BpdGUgYSBwcmlvciBmYWlsdXJlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBlcnJvci1oYW5kbGluZyBidWchCgpUaGUgZml4IGlzIHNpbXBsZSBhbmQgZWxlZ2FudC4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlIGBlcnJgIHRvIGhvbGQgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzYC4gTm93LCBpZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzYCBmYWlscywgd2Ugb25seSB1cGRhdGUgYHJldHZhbGAgaWYgaXQgKndhc24mIzM5O3QqIGFscmVhZHkgc2V0IHRvIGFuIGVycm9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgb3JpZ2luYWwgZXJyb3IgY29kZSBmcm9tIHRoZSBlYXJsaWVyIGZhaWxpbmcgc3RlcCBpcyBwcmVzZXJ2ZWQgYW5kIHJldHVybmVkIGNvcnJlY3RseS4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYSBuZXcgcHJvYmxlbSwgZXNwZWNpYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTt2ZSBsb29rZWQgY2xvc2VseToKCiogICBgZXJyYCBpcyBhIGxvY2FsIHZhcmlhYmxlLCBwcm9wZXJseSBhc3NpZ25lZC4KKiAgIGByZXR2YWxgIGlzIGluaXRpYWxpemVkIGFuZCBjb25zaXN0ZW50bHkgYXNzaWduZWQgdGhyb3VnaG91dC4KKiAgIFRoZXJlJiMzOTtzIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IGludm9sdmVkLCBzbyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuCiogICBUaGVyZSYjMzk7cyBubyBtYW5pcHVsYXRpb24gb2Ygc3RydWN0IGZpZWxkcywgcG9pbnRlcnMsIG9yIGJ1ZmZlcnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLgoqICAgVGhlIGRhdGEgc2l6ZXMgcmVtYWluIHVuY2hhbmdlZC4KCkluIHNob3J0LCB0aGlzIGlzIHB1cmVseSBhIGNvcnJlY3Rpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gY3JlYXRlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBkYXRhIGNvcnJ1cHRpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgS0FTQU4sIEtNU0FOLCBhbmQgc3RhbmRhcmQgdGVzdGluZy4gU3RhbmRhcmQgYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcHBsaWVzLCBhcyBleHBlY3RlZC4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyL0xvY2tkZXApIGFyZSBub3QgYXBwbGljYWJsZSBoZXJlIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHNpZ25zIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcy4gSSB0aGluayB3ZSBjYW4gc2FmZWx5IGFwcGx5IGBzZXQtcmVzdWx0c2AgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXG5cblRoZSBjaGFuZ2Ugb25seSBhZmZlY3RzIGxvY2FsIGludGVnZXIgcmV0dXJuIGNvZGUgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZXJyb3IgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXG5cblRoZSBjaGFuZ2Ugb25seSBhZmZlY3RzIGxvY2FsIGludGVnZXIgcmV0dXJuIGNvZGUgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZXJyb3IgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTowOC41MjM5ODQ2OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA3MzQyMDYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfbWlncmF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXFxuXFxuVGhlIGNoYW5nZSBvbmx5IGFmZmVjdHMgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZSBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IGZvciBlcnJvciBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGV4dDRfZXh0X21pZ3JhdGUoKSB3aGVyZSBhbiBlYXJsaWVyIGVycm9yIHJldHVybiBjb2RlIHdhcyBhY2NpZGVudGFsbHkgb3ZlcndyaXR0ZW4gYnkgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKCksIGNhdXNpbmcgZmFpbGVkIG1pZ3JhdGlvbiBvcGVyYXRpb25zIHRvIGluY29ycmVjdGx5IHJlcG9ydCBzdWNjZXNzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBFWFQ0X0lPQ19NSUdSQVRFIGFuZCBFWFQ0X0lPQ19TRVRGTEFHUyBpb2N0bHMgb24gZXh0NCBmaWxlc3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MDguNTIzOTg4NjA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzOTM5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzUyMDU5NGVlY2ExNTY0ODQ3ODZjZTgxMDdiYjZhZjE3Y2E1YmI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA1OjQ5OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi4wMmJiN2MyMGEwMDhhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXFxuKysrIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5AQCAtNDEwLDcgKzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRoYW5kbGVfdCAqaGFuZGxlO1xcbi1cXHRpbnQgcmV0dmFsID0gMCwgaTtcXG4rXFx0aW50IHJldHZhbCA9IDAsIGVyciwgaTtcXG4gXFx0X19sZTMyICppX2RhdGE7XFxuIFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSA9IE5VTEw7XFxuQEAgLTU2Nyw5ICs1NjcsMTIgQEAgaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0fVxcbiBcXG4gXFx0LyogV2UgbWFyayB0aGUgdG1wX2lub2RlIGRpcnR5IHZpYSBleHQ0X2V4dF90cmVlX2luaXQuICovXFxuLVxcdHJldHZhbCA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApO1xcbi1cXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmICghcmV0dmFsKVxcbitcXHRcXHRcXHRyZXR2YWwgPSBlcnI7XFxuIFxcdFxcdGdvdG8gb3V0X3N0b3A7XFxuK1xcdH1cXG4gXFx0LypcXG4gXFx0ICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVyb1xcbiBcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MDkuMDA5OTk5Mjk3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjUwNDMwMDM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfbWlncmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBleHQ0X2V4dF9taWdyYXRlKCkgd2hlcmUgYW4gZWFybGllciBlcnJvciByZXR1cm4gY29kZSB3YXMgYWNjaWRlbnRhbGx5IG92ZXJ3cml0dGVuIGJ5IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cygpLCBjYXVzaW5nIGZhaWxlZCBtaWdyYXRpb24gb3BlcmF0aW9ucyB0byBpbmNvcnJlY3RseSByZXBvcnQgc3VjY2Vzcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgRVhUNF9JT0NfTUlHUkFURSBhbmQgRVhUNF9JT0NfU0VURkxBR1MgaW9jdGxzIG9uIGV4dDQgZmlsZXN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2M1MjA1OTRlZWNhMTU2NDg0Nzg2Y2U4MTA3YmI2YWYxN2NhNWJiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA1OjQ5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9taWdyYXRlLmMgYi9mcy9leHQ0L21pZ3JhdGUuY1xuaW5kZXggNWQ2MGVmMTBmZTExMC4uMDJiYjdjMjBhMDA4YSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXG4rKysgYi9mcy9leHQ0L21pZ3JhdGUuY1xuQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgaW50IGZyZWVfZXh0X2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRoYW5kbGVfdCAqaGFuZGxlO1xuLVx0aW50IHJldHZhbCA9IDAsIGk7XG4rXHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xuIFx0X19sZTMyICppX2RhdGE7XG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcbiBcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcbkBAIC01NjcsOSArNTY3LDEyIEBAIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBXZSBtYXJrIHRoZSB0bXBfaW5vZGUgZGlydHkgdmlhIGV4dDRfZXh0X3RyZWVfaW5pdC4gKi9cbi1cdHJldHZhbCA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApO1xuLVx0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRpZiAoIXJldHZhbClcbitcdFx0XHRyZXR2YWwgPSBlcnI7XG4gXHRcdGdvdG8gb3V0X3N0b3A7XG4rXHR9XG4gXHQvKlxuIFx0ICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVyb1xuIFx0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTowOS4wMTAwMDA5MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTk0NTE3OTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgZXh0NCBNaWdyYXRpb24gQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCB3aGF0J3MgY2hhbmdpbmcuIFRoZSBjaGFuZ2Vsb2cgcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBmcy9leHQ0L21pZ3JhdGUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfZXh0X21pZ3JhdGUoKWAgZnVuY3Rpb24uIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24gdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBpbiB0aGVpciBwcm9wZXIgc2NvcGUuXG5cbkknbSB0aGlua2luZyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCdzIGFyb3VuZCBpdCBpcyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGZzL2V4dDQvbWlncmF0ZS5jYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBjb2RlIHVzaW5nIHRoZSBsaW5lIG51bWJlcnMgbWVudGlvbmVkLiBJIHdpbGwgZm9jdXMgb24gbGluZXMgNDEwIHRocm91Z2ggNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGVub3VnaCBjb250ZXh0LiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGFzc2VzcyB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjQ5OjIwLjk1NTE4MzgwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTA6XFx0aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gNDExOlxcdHtcXG4gNDEyOlxcdFxcdGhhbmRsZV90ICpoYW5kbGU7XFxuIDQxMzpcXHRcXHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xcbiA0MTQ6XFx0XFx0X19sZTMyICppX2RhdGE7XFxuIDQxNTpcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcXG4gNDE2OlxcdFxcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcXG4gNDE3OlxcdFxcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCBsYjtcXG4gNDE4OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X2VudHJpZXM7XFxuIDQxOTpcXHRcXHRfX3UzMiBnb2FsLCB0bXBfY3N1bV9zZWVkO1xcbiA0MjA6XFx0XFx0dWlkX3Qgb3duZXJbMl07XFxuIDQyMTpcXHRcXHRpbnQgYWxsb2NfY3R4O1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHQvKlxcbiA0MjQ6XFx0XFx0ICogSWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBleHRlbnRzLCBvciB0aGUgaW5vZGVcXG4gNDI1OlxcdFxcdCAqIGFscmVhZHkgaXMgZXh0ZW50LWJhc2VkLCBlcnJvciBvdXQuXFxuIDQyNjpcXHRcXHQgKi9cXG4gNDI3OlxcdFxcdGlmICghZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVxcdTAwM2VpX3NiKSB8fFxcbiA0Mjg6XFx0XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpIHx8XFxuIDQyOTpcXHRcXHQgICAgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbiA0MzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdGlmIChTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IGlub2RlLVxcdTAwM2VpX2Jsb2NrcyA9PSAwKVxcbiA0MzM6XFx0XFx0XFx0LypcXG4gNDM0OlxcdFxcdFxcdCAqIGRvbid0IG1pZ3JhdGUgZmFzdCBzeW1saW5rXFxuIDQzNTpcXHRcXHRcXHQgKi9cXG4gNDM2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdGFsbG9jX2N0eCA9IGV4dDRfd3JpdGVwYWdlc19kb3duX3dyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0LypcXG4gNDQxOlxcdFxcdCAqIFdvcnN0IGNhc2Ugd2UgY2FuIHRvdWNoIHRoZSBhbGxvY2F0aW9uIGJpdG1hcHMgYW5kIGEgYmxvY2tcXG4gNDQyOlxcdFxcdCAqIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2suICBXZSBkbyBuZWVkIHRvIHdvcnJ5IGFib3V0XFxuIDQ0MzpcXHRcXHQgKiBjcmVkaXRzIGZvciBtb2RpZnlpbmcgdGhlIHF1b3RhIGlub2RlLlxcbiA0NDQ6XFx0XFx0ICovXFxuIDQ0NTpcXHRcXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlHUkFURSxcXG4gNDQ2OlxcdFxcdFxcdDMgKyBFWFQ0X01BWFFVT1RBU19UUkFOU19CTE9DS1MoaW5vZGUtXFx1MDAzZWlfc2IpKTtcXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuIDQ0OTpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKGhhbmRsZSk7XFxuIDQ1MDpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDQ1MTpcXHRcXHR9XFxuIDQ1MjpcXHRcXHQvKlxcbiA0NTM6XFx0XFx0ICogVGhpcyBvcGVyYXRpb24gcmV3cml0ZXMgdGhlIGlub2RlJ3MgYmxvY2sgbWFwcGluZyBsYXlvdXRcXG4gNDU0OlxcdFxcdCAqIChpbmRpcmVjdCB0byBleHRlbnRzKSBhbmQgaXMgbm90IHRyYWNrZWQgaW4gdGhlIGZhc3QgY29tbWl0XFxuIDQ1NTpcXHRcXHQgKiBsb2csIHNvIGRpc2FibGUgZmFzdCBjb21taXRzIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxcbiA0NTY6XFx0XFx0ICovXFxuIDQ1NzpcXHRcXHRleHQ0X2ZjX21hcmtfaW5lbGlnaWJsZShpbm9kZS1cXHUwMDNlaV9zYiwgRVhUNF9GQ19SRUFTT05fTUlHUkFURSwgaGFuZGxlKTtcXG4gNDU4OlxcdFxcdGdvYWwgPSAoKCgodTMyKWlub2RlLVxcdTAwM2VpX2lubyAtIDEpIC8gRVhUNF9JTk9ERVNfUEVSX0dST1VQKGlub2RlLVxcdTAwM2VpX3NiKSkgKlxcbiA0NTk6XFx0XFx0XFx0RVhUNF9JTk9ERVNfUEVSX0dST1VQKGlub2RlLVxcdTAwM2VpX3NiKSkgKyAxO1xcbiA0NjA6XFx0XFx0b3duZXJbMF0gPSBpX3VpZF9yZWFkKGlub2RlKTtcXG4gNDYxOlxcdFxcdG93bmVyWzFdID0gaV9naWRfcmVhZChpbm9kZSk7XFxuIDQ2MjpcXHRcXHR0bXBfaW5vZGUgPSBleHQ0X25ld19pbm9kZShoYW5kbGUsIGRfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfcm9vdCksXFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHQgICBTX0lGUkVHLCBOVUxMLCBnb2FsLCBvd25lciwgMCk7XFxuIDQ2NDpcXHRcXHRpZiAoSVNfRVJSKHRtcF9pbm9kZSkpIHtcXG4gNDY1OlxcdFxcdFxcdHJldHZhbCA9IFBUUl9FUlIodG1wX2lub2RlKTtcXG4gNDY2OlxcdFxcdFxcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIDQ2NzpcXHRcXHRcXHR0bXBfaW5vZGUgPSBOVUxMO1xcbiA0Njg6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA0Njk6XFx0XFx0fVxcbiA0NzA6XFx0XFx0LypcXG4gNDcxOlxcdFxcdCAqIFVzZSB0aGUgY29ycmVjdCBzZWVkIGZvciBjaGVja3N1bSAoaS5lLiB0aGUgc2VlZCBmcm9tICdpbm9kZScpLiAgVGhpc1xcbiA0NzI6XFx0XFx0ICogaXMgc28gdGhhdCB0aGUgbWV0YWRhdGEgYmxvY2tzIHdpbGwgaGF2ZSB0aGUgY29ycmVjdCBjaGVja3N1bSBhZnRlclxcbiA0NzM6XFx0XFx0ICogdGhlIG1pZ3JhdGlvbi5cXG4gNDc0OlxcdFxcdCAqL1xcbiA0NzU6XFx0XFx0ZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiA0NzY6XFx0XFx0dG1wX2NzdW1fc2VlZCA9IEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZDtcXG4gNDc3OlxcdFxcdEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZCA9IGVpLVxcdTAwM2VpX2NzdW1fc2VlZDtcXG4gNDc4OlxcdFxcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSk7XFxuIDQ3OTpcXHRcXHQvKlxcbiA0ODA6XFx0XFx0ICogU2V0IHRoZSBpX25saW5rIHRvIHplcm8gc28gaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyXFxuIDQ4MTpcXHRcXHQgKiB3aGVuIHdlIGRyb3AgaW5vZGUgcmVmZXJlbmNlLlxcbiA0ODI6XFx0XFx0ICovXFxuIDQ4MzpcXHRcXHRjbGVhcl9ubGluayh0bXBfaW5vZGUpO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpO1xcbiA0ODY6XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0LypcXG4gNDg5OlxcdFxcdCAqIHN0YXJ0IHdpdGggb25lIGNyZWRpdCBhY2NvdW50ZWQgZm9yXFxuIDQ5MDpcXHRcXHQgKiBzdXBlcmJsb2NrIG1vZGlmaWNhdGlvbi5cXG4gNDkxOlxcdFxcdCAqXFxuIDQ5MjpcXHRcXHQgKiBGb3IgdGhlIHRtcF9pbm9kZSB3ZSBhbHJlYWR5IGhhdmUgY29tbWl0dGVkIHRoZVxcbiA0OTM6XFx0XFx0ICogdHJhbnNhY3Rpb24gdGhhdCBjcmVhdGVkIHRoZSBpbm9kZS4gTGF0ZXIgYXMgYW5kXFxuIDQ5NDpcXHRcXHQgKiB3aGVuIHdlIGFkZCBleHRlbnRzIHdlIGV4dGVudCB0aGUgam91cm5hbFxcbiA0OTU6XFx0XFx0ICovXFxuIDQ5NjpcXHRcXHQvKlxcbiA0OTc6XFx0XFx0ICogRXZlbiB0aG91Z2ggd2UgdGFrZSBpX3J3c2VtIHdlIGNhbiBzdGlsbCBjYXVzZSBibG9ja1xcbiA0OTg6XFx0XFx0ICogYWxsb2NhdGlvbiB2aWEgbW1hcCB3cml0ZSB0byBob2xlcy4gSWYgd2UgaGF2ZSBhbGxvY2F0ZWRcXG4gNDk5OlxcdFxcdCAqIG5ldyBibG9ja3Mgd2UgZmFpbCBtaWdyYXRlLiAgTmV3IGJsb2NrIGFsbG9jYXRpb24gd2lsbFxcbiA1MDA6XFx0XFx0ICogY2xlYXIgRVhUNF9TVEFURV9FWFRfTUlHUkFURSBmbGFnLiAgVGhlIGZsYWcgaXMgdXBkYXRlZFxcbiA1MDE6XFx0XFx0ICogd2l0aCBpX2RhdGFfc2VtIGhlbGQgdG8gcHJldmVudCByYWNpbmcgd2l0aCBibG9ja1xcbiA1MDI6XFx0XFx0ICogYWxsb2NhdGlvbi5cXG4gNTAzOlxcdFxcdCAqL1xcbiA1MDQ6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gNTA1OlxcdFxcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFKTtcXG4gNTA2OlxcdFxcdHVwX3JlYWQoKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKSk7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSUdSQVRFLCAxKTtcXG4gNTA5OlxcdFxcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyMC45NTUyNjgxNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU2NDcxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBleHQ0X2V4dF9taWdyYXRlKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgYGV4dDRfZXh0X21pZ3JhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiBsaW5lcyA1MTAgYW5kIDYwMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBleHRlbnQgdHJlZS4gSSBzdXNwZWN0IHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCB0aGUgbml0dHktZ3JpdHR5IG9mIHJlbWFwcGluZyBibG9ja3MsIGhhbmRsaW5nIHBvc3NpYmxlIGRhdGEgbW92ZW1lbnQsIGFuZCBwZXJoYXBzIHNvbWUgbWV0YWRhdGEgdXBkYXRlcyBhcyB0aGUgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gdHJhbnNmb3JtIGFuIGV4aXN0aW5nIGlub2RlJ3MgZXh0ZW50IHN0cnVjdHVyZS4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgcmVhbGxvY2F0aW9uIGFuZCB3aGF0IGtpbmQgb2YgY2hlY2tzIHRoZXkgYXJlIGRvaW5nIGhlcmUuIEknbSBhbHNvIGN1cmlvdXMgaWYgYW55IG9wdGltaXphdGlvbiBpcyBoYXBwZW5pbmcgaGVyZSB0byBtaW5pbWl6ZSBmcmFnbWVudGF0aW9uLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBsb29raW5nIGZvciB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGFueSBibG9jayByZW1hcHBpbmcgb3IgYWxsb2NhdGlvbiByZXF1ZXN0cyB3aXRoaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyMy4yMTE3NDE1NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21pZ3JhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0XFx0XFx0cmV0dmFsID0gUFRSX0VSUihoYW5kbGUpO1xcbiA1MTE6XFx0XFx0XFx0Z290byBvdXRfdG1wX2lub2RlO1xcbiA1MTI6XFx0XFx0fVxcbiA1MTM6XFx0XFxuIDUxNDpcXHRcXHRpX2RhdGEgPSBlaS1cXHUwMDNlaV9kYXRhO1xcbiA1MTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZsYiwgMCwgc2l6ZW9mKGxiKSk7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdC8qIDMyIGJpdCBibG9jayBhZGRyZXNzIDQgYnl0ZXMgKi9cXG4gNTE4OlxcdFxcdG1heF9lbnRyaWVzID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplIFxcdTAwM2VcXHUwMDNlIDI7XFxuIDUxOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRVhUNF9ORElSX0JMT0NLUzsgaSsrKSB7XFxuIDUyMDpcXHRcXHRcXHRpZiAoaV9kYXRhW2ldKSB7XFxuIDUyMTpcXHRcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLFxcbiA1MjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaV9kYXRhW2ldKSwgXFx1MDAyNmxiKTtcXG4gNTIzOlxcdFxcdFxcdFxcdGlmIChyZXR2YWwpXFxuIDUyNDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIDUyNTpcXHRcXHRcXHR9IGVsc2VcXG4gNTI2OlxcdFxcdFxcdFxcdGxiLmN1cnJfYmxvY2srKztcXG4gNTI3OlxcdFxcdH1cXG4gNTI4OlxcdFxcdGlmIChpX2RhdGFbRVhUNF9JTkRfQkxPQ0tdKSB7XFxuIDUyOTpcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfaW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcXG4gNTMwOlxcdFxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X0lORF9CTE9DS10pLCBcXHUwMDI2bGIpO1xcbiA1MzE6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTMyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gNTMzOlxcdFxcdH0gZWxzZVxcbiA1MzQ6XFx0XFx0XFx0bGIuY3Vycl9ibG9jayArPSBtYXhfZW50cmllcztcXG4gNTM1OlxcdFxcdGlmIChpX2RhdGFbRVhUNF9ESU5EX0JMT0NLXSkge1xcbiA1MzY6XFx0XFx0XFx0cmV0dmFsID0gdXBkYXRlX2RpbmRfZXh0ZW50X3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLFxcbiA1Mzc6XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaV9kYXRhW0VYVDRfRElORF9CTE9DS10pLCBcXHUwMDI2bGIpO1xcbiA1Mzg6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTM5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gNTQwOlxcdFxcdH0gZWxzZVxcbiA1NDE6XFx0XFx0XFx0bGIuY3Vycl9ibG9jayArPSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xcbiA1NDI6XFx0XFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XFxuIDU0MzpcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsXFxuIDU0NDpcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpX2RhdGFbRVhUNF9USU5EX0JMT0NLXSksIFxcdTAwMjZsYik7XFxuIDU0NTpcXHRcXHRcXHRpZiAocmV0dmFsKVxcbiA1NDY6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA1NDc6XFx0XFx0fVxcbiA1NDg6XFx0XFx0LypcXG4gNTQ5OlxcdFxcdCAqIEJ1aWxkIHRoZSBsYXN0IGV4dGVudFxcbiA1NTA6XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsIFxcdTAwMjZsYik7XFxuIDU1MjpcXHRlcnJfb3V0OlxcbiA1NTM6XFx0XFx0aWYgKHJldHZhbClcXG4gNTU0OlxcdFxcdFxcdC8qXFxuIDU1NTpcXHRcXHRcXHQgKiBGYWlsdXJlIGNhc2UgZGVsZXRlIHRoZSBleHRlbnQgaW5mb3JtYXRpb24gd2l0aCB0aGVcXG4gNTU2OlxcdFxcdFxcdCAqIHRtcF9pbm9kZVxcbiA1NTc6XFx0XFx0XFx0ICovXFxuIDU1ODpcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU1OTpcXHRcXHRlbHNlIHtcXG4gNTYwOlxcdFxcdFxcdHJldHZhbCA9IGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YShoYW5kbGUsIGlub2RlLCB0bXBfaW5vZGUpO1xcbiA1NjE6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTYyOlxcdFxcdFxcdFxcdC8qXFxuIDU2MzpcXHRcXHRcXHRcXHQgKiBpZiB3ZSBmYWlsIHRvIHN3YXAgaW5vZGUgZGF0YSBmcmVlIHRoZSBleHRlbnRcXG4gNTY0OlxcdFxcdFxcdFxcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxcbiA1NjU6XFx0XFx0XFx0XFx0ICovXFxuIDU2NjpcXHRcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU2NzpcXHRcXHR9XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xcbiA1NzA6XFx0XFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XFxuIDU3MTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiA1NzI6XFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuIDU3MzpcXHRcXHRcXHRcXHRyZXR2YWwgPSBlcnI7XFxuIDU3NDpcXHRcXHRcXHRnb3RvIG91dF9zdG9wO1xcbiA1NzU6XFx0XFx0fVxcbiA1NzY6XFx0XFx0LypcXG4gNTc3OlxcdFxcdCAqIE1hcmsgdGhlIHRtcF9pbm9kZSBhcyBvZiBzaXplIHplcm9cXG4gNTc4OlxcdFxcdCAqL1xcbiA1Nzk6XFx0XFx0aV9zaXplX3dyaXRlKHRtcF9pbm9kZSwgMCk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qXFxuIDU4MjpcXHRcXHQgKiBzZXQgdGhlICBpX2Jsb2NrcyBjb3VudCB0byB6ZXJvXFxuIDU4MzpcXHRcXHQgKiBzbyB0aGF0IHRoZSBleHQ0X2V2aWN0X2lub2RlKCkgZG9lcyB0aGVcXG4gNTg0OlxcdFxcdCAqIHJpZ2h0IGpvYlxcbiA1ODU6XFx0XFx0ICpcXG4gNTg2OlxcdFxcdCAqIFdlIGRvbid0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcXG4gNTg3OlxcdFxcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxcbiA1ODg6XFx0XFx0ICovXFxuIDU4OTpcXHRcXHR0bXBfaW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gMDtcXG4gNTkwOlxcdFxcdEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZCA9IHRtcF9jc3VtX3NlZWQ7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdC8qIFJlc2V0IHRoZSBleHRlbnQgZGV0YWlscyAqL1xcbiA1OTM6XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgdG1wX2lub2RlKTtcXG4gNTk0OlxcdG91dF9zdG9wOlxcbiA1OTU6XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gNTk2OlxcdG91dF90bXBfaW5vZGU6XFxuIDU5NzpcXHRcXHR1bmxvY2tfbmV3X2lub2RlKHRtcF9pbm9kZSk7XFxuIDU5ODpcXHRvdXRfdW5sb2NrOlxcbiA1OTk6XFx0XFx0ZXh0NF93cml0ZXBhZ2VzX3VwX3dyaXRlKGlub2RlLVxcdTAwM2VpX3NiLCBhbGxvY19jdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyMy4yMTE4MjE4ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc5MjQxNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW52b2NhdGlvbiBvZiBgZXh0NF9leHRfbWlncmF0ZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IGZvciBgZXh0NF9leHRfbWlncmF0ZWAuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIGl0J3MgdXNlZCBpcyBrZXkuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzbyBsZXQncyBzdGFydCB3aXRoIGEgc2ltcGxlIGBncmVwYCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgd2hlcmUgYGV4dDRfZXh0X21pZ3JhdGVgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIHdoaWNoIHdpbGwgYmUgZXNzZW50aWFsIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBmdW5jdGlvbnMgaW52b2tlIGl0IGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MjUuMDkxMDY2MTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTQ4OTkzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfbWlncmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zMjU0PWludCBleHQ0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zMjU2LS8qIG1pZ3JhdGUuYyAqL1xcbmZzL2V4dDQvZXh0NC5oOjMyNTc6ZXh0ZXJuIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqKTtcXG5mcy9leHQ0L2V4dDQuaC0zMjU4LWV4dGVybiBpbnQgZXh0NF9pbmRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz01OTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldGZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtNzA1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfRVhURU5UU19GTClcXG5mcy9leHQ0L2lvY3RsLmM6NzA2OlxcdFxcdFxcdGVyciA9IGV4dDRfZXh0X21pZ3JhdGUoaW5vZGUpO1xcbmZzL2V4dDQvaW9jdGwuYy03MDctXFx0XFx0ZWxzZVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNzAxLVxcdFxcdGlub2RlX2xvY2soKGlub2RlKSk7XFxuZnMvZXh0NC9pb2N0bC5jOjE3MDI6XFx0XFx0ZXJyID0gZXh0NF9leHRfbWlncmF0ZShpbm9kZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE3MDMtXFx0XFx0aW5vZGVfdW5sb2NrKChpbm9kZSkpO1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9MzkwPXN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTQwOS1cXG5mcy9leHQ0L21pZ3JhdGUuYzo0MTA6aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L21pZ3JhdGUuYy00MTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyNi43ODU5Njk4ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTE2OTY3MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBCdWcgaW4gZXh0NCBFeHRlbnQgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGV4dDRfZXh0X21pZ3JhdGVgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgdGhvc2UgZmFtaWxpYXIgYEVYVDRfSU9DX1NFVEZMQUdTYCBhbmQgYEVYVDRfSU9DX01JR1JBVEVgIGlvY3RscyDigJMgc3RhbmRhcmQgdXNlcnNwYWNlIGZpbGVzeXN0ZW0gY2FsbHMgaW4gZXh0NC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hhdCB2dWxuZXJhYmlsaXR5IGl0J3MgYWRkcmVzc2luZy4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhbiBpc3N1ZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLlxuXG5Fc3NlbnRpYWxseSwgdGhlIHByZS1wYXRjaCBsb2dpYyB3YXMgZmxhd2VkLiBJZiB0aGUgY3J1Y2lhbCBgdXBkYXRlXypfZXh0ZW50X3JhbmdlYCBjYWxscyBmYWlsZWQsIHNldHRpbmcgYHJldHZhbGAgdG8gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUuIElmIHRoZSBqb3VybmFsIGNyZWRpdCBhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgYHJldHZhbGAgd2FzIHNpbGVudGx5IHNldCB0byB6ZXJvLCBldmVuIHRob3VnaCB0aGUgdW5kZXJseWluZyBtaWdyYXRpb24gcHJvY2VzcyBoYWQgZmFpbGVkLiBUaGlzIGxlZCB0byBhIGZhbHNlIHBvc2l0aXZlOiB0aGUgdXNlcnNwYWNlIG9yIGNhbGxpbmcgZnVuY3Rpb24gcmVjZWl2ZWQgYSBzdWNjZXNzIGluZGljYXRpb24gZGVzcGl0ZSB0aGUgYWN0dWFsIGZhaWx1cmUhIFRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gemVybyB0aGUgYHRtcF9pbm9kZWAgYW5kIGV4ZWN1dGUgYGV4dDRfZXh0X3RyZWVfaW5pdGAgd2hpY2ggbWFrZXMgaXQgYXBwZWFyIHN1Y2Nlc3NmdWwuXG5cblRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGluaXRpYWwgZXJyb3IgKGByZXR2YWxgKSBpcyBwcmVzZXJ2ZWQuIFRoZSBwYXRjaGVkIGNvZGUgaW5jbHVkZXMgYW4gaW50ZXJtZWRpYXRlIGBlcnJgIHZhcmlhYmxlIGZvciBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzYC4gQ3JpdGljYWxseSwgaWYgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AgZmFpbHMsIGl0cyBlcnJvciBjb2RlIGlzIG9ubHkgdXNlZCBpZiBgcmV0dmFsYCBpcyBzdGlsbCB6ZXJvLiBUaGlzIHByb3BhZ2F0ZXMgdGhlIG9yaWdpbmFsIGVycm9yIGlmIGl0IGhhcHBlbmVkLiBUaGUgYGdvdG8gb3V0X3N0b3BgIGVuc3VyZXMgd2UgZXhpdCBncmFjZWZ1bGx5IGFuZCBjb25zaXN0ZW50bHkgd2l0aCB0aGUgY29ycmVjdCBlcnJvciBzdGF0ZS5cblxuVGhpcyBpcyBjbGVhcmx5IGEgYnVnIGZpeCB3aXRoaW4gdGhlIGNvcmUgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL2V4dDQvbWlncmF0ZS5jYC4gSSdsbCBub3cgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBlbHNlIHRoaXMgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MzIuNzAyOTM5NDEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIyODQ0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTozMy4wMzUyMjk3MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE3OTgzNTI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIGV4dDQgTW9kdWxlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZS5vYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBleHQ0LXlgIGJ1aWxkIGNoYWluLiBUaGF0IG1lYW5zIGl0J3Mgb25lIG9mIHRoZSBmaWxlcyB0aGF0IGdldHMgY29tcGlsZWQgaW50byB0aGUgYGV4dDRgIG1vZHVsZSwgYnV0IG9ubHkgd2hlbiBgQ09ORklHX0VYVDRfRlNgIGlzIHNldC4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCdzIGNvbnRyb2xsaW5nIHRoZSBlbmFibGVtZW50IG9mIHRoZSBlbnRpcmUgYGV4dDRgIGZpbGVzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjgzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MzcuMjE1MDY3MzU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEVYVDRfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDU6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXFxuICAxNDpcXHRcXHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcXG4gIDE1OlxcdFxcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxcbiAgMTY6XFx0XFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcXG4gIDE3OlxcdFxcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXFxuICAxODpcXHRcXHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxcbiAgMTk6XFx0XFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XFxuICAyMDpcXHRcXHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcXG4gIDIzOlxcdFxcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxcbiAgMjQ6XFx0XFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxcbiAgMjU6XFx0XFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XFxuICAyNjpcXHRcXHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xcbiAgMjc6XFx0XFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxcbiAgMjg6XFx0XFx0ICBjb21wYXRpYmxlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcXG4gIDMxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuICAzNjpcXHRcXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuICAzOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MzcuMjE1MTI2MTk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMTk5Mzc2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVhUNCBGaWxlc3lzdGVtIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3Mgc2VlLCBkbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCBmb3IgdGhpcyBhbmFseXNpcz8gUmlnaHQsIGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHN1YnN5c3RlbSBldmVuIHdvcnRoIGZ1enppbmc/XG5cblllcywgYWJzb2x1dGVseS4gVGhlIGNvcmUgc3Vic3lzdGVtIGlzIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIGFuZCB0aGUgZXh0NCBmaWxlc3lzdGVtIHNwZWNpZmljYWxseS4gSXQncyB1c2VyLXJlYWNoYWJsZSwgd2hpY2ggaXMgYSBtYWpvciBwb2ludCBpbiBpdHMgZmF2b3IsIHZpYSBpb2N0bCBjYWxscyBsaWtlIGBFWFQ0X0lPQ19NSUdSQVRFYCBvciBgRlNfSU9DX1NFVEZMQUdTYCAvIGBFWFQ0X0lPQ19TRVRGTEFHU2AuIENydWNpYWxseSwgdGhpcyBwYXJ0aWN1bGFyIGFyZWEgZGlyZWN0bHkgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybiB2YWx1ZXMgd2l0aGluIGBleHQ0X2V4dF9taWdyYXRlKClgLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ3JlYXQgYXJlYSB0byB0YXJnZXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBgZXh0NF9leHRfbWlncmF0ZWAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluLiBCdXQsIGxldCdzIHNlZSB3aGF0IGNhbGxzIGludG8gaXQsIGlzIGl0IGBleHQ0X2lvY3RsYCwgYF9fZXh0NF9pb2N0bGAsIG9yIGBleHQ0X2lvY3RsX3NldGZsYWdzYD8gQWgsIHJpZ2h0LiBgZXh0NF9leHRfbWlncmF0ZWAgc2VlbXMgcHJldHR5IHNwZWNpZmljLCBub3QgYSBmdW5jdGlvbiB0aGF0J3MgdWJpcXVpdG91cyBhY3Jvc3MgdGhlIGNvZGUuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgdGhhdCBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24/IExldCdzIGNoZWNrIHRoZSBjb2RlIGl0c2VsZiwgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYDogYGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpYC4gQW5kIGdvb2QsIGl0J3MgYSBnbG9iYWwgZnVuY3Rpb24sIGFuZCB0aGUgc3ltYm9sIGlzIGluIHZtbGludXgsIHNvLCBlYXN5IHRvIHRhcmdldC5cblxuT2theSwgbGV0J3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6IFwiV29ydGhGdXp6aW5nOiB0cnVlXCIsIFwiRm9jdXNTeW1ib2xzOiBbYGV4dDRfZXh0X21pZ3JhdGVgXVwiLCBcIkVuYWJsZUNvbmZpZ3M6IFtgRVhUNF9GU2BdXCIsIGFuZCB0aGF0IHN1Y2NpbmN0IHJlYXNvbmluZy4gRG9uZSFcblxuTm93LCBsZXQncyBtb3ZlIGZvcndhcmQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA3MCwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTo0MS40MzUwNjY3NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTIyOTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X21pZ3JhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gZXh0NF9leHRfbWlncmF0ZSgpIHdoZXJlIGFuIGVhcmxpZXIgZXJyb3IgcmV0dXJuIGNvZGUgd2FzIGFjY2lkZW50YWxseSBvdmVyd3JpdHRlbiBieSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKSwgY2F1c2luZyBmYWlsZWQgbWlncmF0aW9uIG9wZXJhdGlvbnMgdG8gaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3MuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEVYVDRfSU9DX01JR1JBVEUgYW5kIEVYVDRfSU9DX1NFVEZMQUdTIGlvY3RscyBvbiBleHQ0IGZpbGVzeXN0ZW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9taWdyYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGV4dDRfZXh0X21pZ3JhdGUoKSB3aGVyZSBhbiBlYXJsaWVyIGVycm9yIHJldHVybiBjb2RlIHdhcyBhY2NpZGVudGFsbHkgb3ZlcndyaXR0ZW4gYnkgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKCksIGNhdXNpbmcgZmFpbGVkIG1pZ3JhdGlvbiBvcGVyYXRpb25zIHRvIGluY29ycmVjdGx5IHJlcG9ydCBzdWNjZXNzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBFWFQ0X0lPQ19NSUdSQVRFIGFuZCBFWFQ0X0lPQ19TRVRGTEFHUyBpb2N0bHMgb24gZXh0NCBmaWxlc3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6NDEuNTE0MzAzOTMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA4MzA5MTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjQ5OjQxLjUxNDgyMzk5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MDgyNTY2MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cXG5cXG5UaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIGVycm9yIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzUyMDU5NGVlY2ExNTY0ODQ3ODZjZTgxMDdiYjZhZjE3Y2E1YmI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDU6NDk6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi4wMmJiN2MyMGEwMDhhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9taWdyYXRlLmNcbisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5AQCAtNDEwLDcgKzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4tXHRpbnQgcmV0dmFsID0gMCwgaTtcbitcdGludCByZXR2YWwgPSAwLCBlcnIsIGk7XG4gXHRfX2xlMzIgKmlfZGF0YTtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpO1xuIFx0c3RydWN0IGlub2RlICp0bXBfaW5vZGUgPSBOVUxMO1xuQEAgLTU2Nyw5ICs1NjcsMTIgQEAgaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xuLVx0cmV0dmFsID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4tXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdGlmICghcmV0dmFsKVxuK1x0XHRcdHJldHZhbCA9IGVycjtcbiBcdFx0Z290byBvdXRfc3RvcDtcbitcdH1cbiBcdC8qXG4gXHQgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvXG4gXHQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjQ5OjQxLjUxNDgyNTM0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMzNDA4MzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgZXh0NCBNaWdyYXRpb24gQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNoYW5nZXMuIExldCdzIHN0YXJ0IGJ5IGluc3BlY3RpbmcgdGhlIGRpZmYsIGZvY3VzaW5nIG9uIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgZnMvZXh0NC9taWdyYXRlLmNgLiBJIGtub3cgdGhhdCdzIHRoZSBwbGFjZSB0byBiZSwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGFueSBjb2RlIGNoYW5nZSDigJMgdGhlIGltbWVkaWF0ZSBjb250ZXh0IGlzIGNydWNpYWwuXG5cblRoZW4sIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgYGV4dDRfZXh0X21pZ3JhdGVgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHNhbWUgZmlsZS4gU2VlaW5nIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGJleW9uZCB0aGUgcGF0Y2ggaXRzZWxmLCB3aWxsIHByb3ZpZGUgdGhlIHJlcXVpcmVkIGJhY2tncm91bmQuIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2VzcyB3aXRoaW4gZXh0NC4gVW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBhbmQgKmhvdyogb2YgdGhlIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo1MDowNC44NDg5MTEzODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9taWdyYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdH0gZWxzZVxcbiA1NDE6XFx0XFx0XFx0bGIuY3Vycl9ibG9jayArPSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xcbiA1NDI6XFx0XFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XFxuIDU0MzpcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsXFxuIDU0NDpcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpX2RhdGFbRVhUNF9USU5EX0JMT0NLXSksIFxcdTAwMjZsYik7XFxuIDU0NTpcXHRcXHRcXHRpZiAocmV0dmFsKVxcbiA1NDY6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA1NDc6XFx0XFx0fVxcbiA1NDg6XFx0XFx0LypcXG4gNTQ5OlxcdFxcdCAqIEJ1aWxkIHRoZSBsYXN0IGV4dGVudFxcbiA1NTA6XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsIFxcdTAwMjZsYik7XFxuIDU1MjpcXHRlcnJfb3V0OlxcbiA1NTM6XFx0XFx0aWYgKHJldHZhbClcXG4gNTU0OlxcdFxcdFxcdC8qXFxuIDU1NTpcXHRcXHRcXHQgKiBGYWlsdXJlIGNhc2UgZGVsZXRlIHRoZSBleHRlbnQgaW5mb3JtYXRpb24gd2l0aCB0aGVcXG4gNTU2OlxcdFxcdFxcdCAqIHRtcF9pbm9kZVxcbiA1NTc6XFx0XFx0XFx0ICovXFxuIDU1ODpcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU1OTpcXHRcXHRlbHNlIHtcXG4gNTYwOlxcdFxcdFxcdHJldHZhbCA9IGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YShoYW5kbGUsIGlub2RlLCB0bXBfaW5vZGUpO1xcbiA1NjE6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTYyOlxcdFxcdFxcdFxcdC8qXFxuIDU2MzpcXHRcXHRcXHRcXHQgKiBpZiB3ZSBmYWlsIHRvIHN3YXAgaW5vZGUgZGF0YSBmcmVlIHRoZSBleHRlbnRcXG4gNTY0OlxcdFxcdFxcdFxcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxcbiA1NjU6XFx0XFx0XFx0XFx0ICovXFxuIDU2NjpcXHRcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU2NzpcXHRcXHR9XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xcbiA1NzA6XFx0XFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XFxuIDU3MTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiA1NzI6XFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuIDU3MzpcXHRcXHRcXHRcXHRyZXR2YWwgPSBlcnI7XFxuIDU3NDpcXHRcXHRcXHRnb3RvIG91dF9zdG9wO1xcbiA1NzU6XFx0XFx0fVxcbiA1NzY6XFx0XFx0LypcXG4gNTc3OlxcdFxcdCAqIE1hcmsgdGhlIHRtcF9pbm9kZSBhcyBvZiBzaXplIHplcm9cXG4gNTc4OlxcdFxcdCAqL1xcbiA1Nzk6XFx0XFx0aV9zaXplX3dyaXRlKHRtcF9pbm9kZSwgMCk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qXFxuIDU4MjpcXHRcXHQgKiBzZXQgdGhlICBpX2Jsb2NrcyBjb3VudCB0byB6ZXJvXFxuIDU4MzpcXHRcXHQgKiBzbyB0aGF0IHRoZSBleHQ0X2V2aWN0X2lub2RlKCkgZG9lcyB0aGVcXG4gNTg0OlxcdFxcdCAqIHJpZ2h0IGpvYlxcbiA1ODU6XFx0XFx0ICpcXG4gNTg2OlxcdFxcdCAqIFdlIGRvbid0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcXG4gNTg3OlxcdFxcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxcbiA1ODg6XFx0XFx0ICovXFxuIDU4OTpcXHRcXHR0bXBfaW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gMDtcXG4gNTkwOlxcdFxcdEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZCA9IHRtcF9jc3VtX3NlZWQ7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdC8qIFJlc2V0IHRoZSBleHRlbnQgZGV0YWlscyAqL1xcbiA1OTM6XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgdG1wX2lub2RlKTtcXG4gNTk0OlxcdG91dF9zdG9wOlxcbiA1OTU6XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gNTk2OlxcdG91dF90bXBfaW5vZGU6XFxuIDU5NzpcXHRcXHR1bmxvY2tfbmV3X2lub2RlKHRtcF9pbm9kZSk7XFxuIDU5ODpcXHRvdXRfdW5sb2NrOlxcbiA1OTk6XFx0XFx0ZXh0NF93cml0ZXBhZ2VzX3VwX3dyaXRlKGlub2RlLVxcdTAwM2VpX3NiLCBhbGxvY19jdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo1MDowNC44NDg5OTAxODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0ODM4MDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCdWcgRml4IGluIGV4dDRfZXh0X21pZ3JhdGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24sIHRoZXJlIHdhcyBhIGNyaXRpY2FsIGZsYXcuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBzdHJ1Y3R1cmVkIGxpa2UgdGhpczogaWYgYW4gZXJyb3Igb2NjdXJyZWQgaW4gYW4gZWFybGllciBzdGVwIChlLmcuLCBgdXBkYXRlX3RpbmRfZXh0ZW50X3JhbmdlYCwgYGZpbmlzaF9yYW5nZWAsIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSwgdGhlIGByZXR2YWxgIHZhcmlhYmxlIHdvdWxkIGhvbGQgdGhhdCBlcnJvciBjb2RlLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSBgcmV0dmFsYCwgZXZlbiBpZiB0aGF0IGNhbGwgc3VjY2VlZGVkLiBUaGlzIG1lYW50IHRoZSBmdW5jdGlvbiBjb3VsZCBlcnJvbmVvdXNseSByZXBvcnQgc3VjY2VzcyAocmV0dXJuIDApIGRlc3BpdGUgYSBwcmlvciBmYWlsdXJlLiBUaGF0J3MgYSBjbGFzc2ljIGVycm9yLWhhbmRsaW5nIGJ1ZyFcblxuVGhlIGZpeCBpcyBzaW1wbGUgYW5kIGVsZWdhbnQuIEl0IGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgZXJyYCB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUgb2YgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AuIE5vdywgaWYgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AgZmFpbHMsIHdlIG9ubHkgdXBkYXRlIGByZXR2YWxgIGlmIGl0ICp3YXNuJ3QqIGFscmVhZHkgc2V0IHRvIGFuIGVycm9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgb3JpZ2luYWwgZXJyb3IgY29kZSBmcm9tIHRoZSBlYXJsaWVyIGZhaWxpbmcgc3RlcCBpcyBwcmVzZXJ2ZWQgYW5kIHJldHVybmVkIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYSBuZXcgcHJvYmxlbSwgZXNwZWNpYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJ3ZlIGxvb2tlZCBjbG9zZWx5OlxuXG4qICAgYGVycmAgaXMgYSBsb2NhbCB2YXJpYWJsZSwgcHJvcGVybHkgYXNzaWduZWQuXG4qICAgYHJldHZhbGAgaXMgaW5pdGlhbGl6ZWQgYW5kIGNvbnNpc3RlbnRseSBhc3NpZ25lZCB0aHJvdWdob3V0LlxuKiAgIFRoZXJlJ3Mgbm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgaW52b2x2ZWQsIHNvIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS5cbiogICBUaGVyZSdzIG5vIG1hbmlwdWxhdGlvbiBvZiBzdHJ1Y3QgZmllbGRzLCBwb2ludGVycywgb3IgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuXG4qICAgVGhlIGRhdGEgc2l6ZXMgcmVtYWluIHVuY2hhbmdlZC5cblxuSW4gc2hvcnQsIHRoaXMgaXMgcHVyZWx5IGEgY29ycmVjdGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGNyZWF0ZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZGF0YSBjb3JydXB0aW9uLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgS0FTQU4sIEtNU0FOLCBhbmQgc3RhbmRhcmQgdGVzdGluZy4gU3RhbmRhcmQgYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcHBsaWVzLCBhcyBleHBlY3RlZC4gSSdtIHNhdGlzZmllZCB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIvTG9ja2RlcCkgYXJlIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gc2lnbnMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzLiBJIHRoaW5rIHdlIGNhbiBzYWZlbHkgYXBwbHkgYHNldC1yZXN1bHRzYCBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI3LCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjUwOjEwLjU5NzM3NDA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cXG5cXG5UaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIGVycm9yIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cXG5cXG5UaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIGVycm9yIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzqrb6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 05:47:08 +0000 UTC FinishedAt: 2026-09-10 05:50:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "64de2fe2-af70-439a-82a1-7f8a51935d8d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ext_migrate" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXG5cblRoZSBjaGFuZ2Ugb25seSBhZmZlY3RzIGxvY2FsIGludGVnZXIgcmV0dXJuIGNvZGUgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZXJyb3IgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gZXh0NF9leHRfbWlncmF0ZSgpIHdoZXJlIGFuIGVhcmxpZXIgZXJyb3IgcmV0dXJuIGNvZGUgd2FzIGFjY2lkZW50YWxseSBvdmVyd3JpdHRlbiBieSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKSwgY2F1c2luZyBmYWlsZWQgbWlncmF0aW9uIG9wZXJhdGlvbnMgdG8gaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3MuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEVYVDRfSU9DX01JR1JBVEUgYW5kIEVYVDRfSU9DX1NFVEZMQUdTIGlvY3RscyBvbiBleHQ0IGZpbGVzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2M1MjA1OTRlZWNhMTU2NDg0Nzg2Y2U4MTA3YmI2YWYxN2NhNWJiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA1OjQ5OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcbmluZGV4IDVkNjBlZjEwZmUxMTAuLjAyYmI3YzIwYTAwOGEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmNcbkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4tXHRpbnQgcmV0dmFsID0gMCwgaTtcbiYjNDM7XHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xuIFx0X19sZTMyICppX2RhdGE7XG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcbiBcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcbkBAIC01NjcsOSAmIzQzOzU2NywxMiBAQCBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogV2UgbWFyayB0aGUgdG1wX2lub2RlIGRpcnR5IHZpYSBleHQ0X2V4dF90cmVlX2luaXQuICovXG4tXHRyZXR2YWwgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoaGFuZGxlLCAxLCAwKTtcbi1cdGlmIChyZXR2YWwgXHUwMDNjIDApXG4mIzQzO1x0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKCFyZXR2YWwpXG4mIzQzO1x0XHRcdHJldHZhbCA9IGVycjtcbiBcdFx0Z290byBvdXRfc3RvcDtcbiYjNDM7XHR9XG4gXHQvKlxuIFx0ICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVyb1xuIFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXh0X21pZ3JhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGV4dDRfZXh0X21pZ3JhdGUoKSB3aGVyZSBhbiBlYXJsaWVyIGVycm9yIHJldHVybiBjb2RlIHdhcyBhY2NpZGVudGFsbHkgb3ZlcndyaXR0ZW4gYnkgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKCksIGNhdXNpbmcgZmFpbGVkIG1pZ3JhdGlvbiBvcGVyYXRpb25zIHRvIGluY29ycmVjdGx5IHJlcG9ydCBzdWNjZXNzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBFWFQ0X0lPQ19NSUdSQVRFIGFuZCBFWFQ0X0lPQ19TRVRGTEFHUyBpb2N0bHMgb24gZXh0NCBmaWxlc3lzdGVtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjNTIwNTk0ZWVjYTE1NjQ4NDc4NmNlODEwN2JiNmFmMTdjYTViYjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwNTo0OTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmMKaW5kZXggNWQ2MGVmMTBmZTExMC4uMDJiYjdjMjBhMDA4YSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmMKQEAgLTQxMCw3ICYjNDM7NDEwLDcgQEAgc3RhdGljIGludCBmcmVlX2V4dF9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAloYW5kbGVfdCAqaGFuZGxlOwotCWludCByZXR2YWwgPSAwLCBpOwomIzQzOwlpbnQgcmV0dmFsID0gMCwgZXJyLCBpOwogCV9fbGUzMiAqaV9kYXRhOwogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpOwogCXN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDsKQEAgLTU2Nyw5ICYjNDM7NTY3LDEyIEBAIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogV2UgbWFyayB0aGUgdG1wX2lub2RlIGRpcnR5IHZpYSBleHQ0X2V4dF90cmVlX2luaXQuICovCi0JcmV0dmFsID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7Ci0JaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CWVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJaWYgKCFyZXR2YWwpCiYjNDM7CQkJcmV0dmFsID0gZXJyOwogCQlnb3RvIG91dF9zdG9wOwomIzQzOwl9CiAJLyoKIAkgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvCiAJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBleHQ0IE1pZ3JhdGlvbiBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hhdCYjMzk7cyBjaGFuZ2luZy4gVGhlIGNoYW5nZWxvZyBwb2ludHMgbWUgZGlyZWN0bHkgdG8gYGZzL2V4dDQvbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9leHRfbWlncmF0ZSgpYCBmdW5jdGlvbi4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGluIHRoZWlyIHByb3BlciBzY29wZS4KCkkmIzM5O20gdGhpbmtpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0JiMzOTtzIGFyb3VuZCBpdCBpcyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGZzL2V4dDQvbWlncmF0ZS5jYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBjb2RlIHVzaW5nIHRoZSBsaW5lIG51bWJlcnMgbWVudGlvbmVkLiBJIHdpbGwgZm9jdXMgb24gbGluZXMgNDEwIHRocm91Z2ggNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGVub3VnaCBjb250ZXh0LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHRpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDQxMTpcdHtcbiA0MTI6XHRcdGhhbmRsZV90ICpoYW5kbGU7XG4gNDEzOlx0XHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xuIDQxNDpcdFx0X19sZTMyICppX2RhdGE7XG4gNDE1Olx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcbiA0MTY6XHRcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcbiA0MTc6XHRcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCBsYjtcbiA0MTg6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X2VudHJpZXM7XG4gNDE5Olx0XHRfX3UzMiBnb2FsLCB0bXBfY3N1bV9zZWVkO1xuIDQyMDpcdFx0dWlkX3Qgb3duZXJbMl07XG4gNDIxOlx0XHRpbnQgYWxsb2NfY3R4O1xuIDQyMjpcdFxuIDQyMzpcdFx0LypcbiA0MjQ6XHRcdCAqIElmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW50cywgb3IgdGhlIGlub2RlXG4gNDI1Olx0XHQgKiBhbHJlYWR5IGlzIGV4dGVudC1iYXNlZCwgZXJyb3Igb3V0LlxuIDQyNjpcdFx0ICovXG4gNDI3Olx0XHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSB8fFxuIDQyODpcdFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpIHx8XG4gNDI5Olx0XHQgICAgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxuIDQzMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MzE6XHRcbiA0MzI6XHRcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfYmxvY2tzID09IDApXG4gNDMzOlx0XHRcdC8qXG4gNDM0Olx0XHRcdCAqIGRvbiYjMzk7dCBtaWdyYXRlIGZhc3Qgc3ltbGlua1xuIDQzNTpcdFx0XHQgKi9cbiA0MzY6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdGFsbG9jX2N0eCA9IGV4dDRfd3JpdGVwYWdlc19kb3duX3dyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIDQzOTpcdFxuIDQ0MDpcdFx0LypcbiA0NDE6XHRcdCAqIFdvcnN0IGNhc2Ugd2UgY2FuIHRvdWNoIHRoZSBhbGxvY2F0aW9uIGJpdG1hcHMgYW5kIGEgYmxvY2tcbiA0NDI6XHRcdCAqIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2suICBXZSBkbyBuZWVkIHRvIHdvcnJ5IGFib3V0XG4gNDQzOlx0XHQgKiBjcmVkaXRzIGZvciBtb2RpZnlpbmcgdGhlIHF1b3RhIGlub2RlLlxuIDQ0NDpcdFx0ICovXG4gNDQ1Olx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlHUkFURSxcbiA0NDY6XHRcdFx0MyAmIzQzOyBFWFQ0X01BWFFVT1RBU19UUkFOU19CTE9DS1MoaW5vZGUtXHUwMDNlaV9zYikpO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4gNDQ5Olx0XHRcdHJldHZhbCA9IFBUUl9FUlIoaGFuZGxlKTtcbiA0NTA6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDQ1MTpcdFx0fVxuIDQ1MjpcdFx0LypcbiA0NTM6XHRcdCAqIFRoaXMgb3BlcmF0aW9uIHJld3JpdGVzIHRoZSBpbm9kZSYjMzk7cyBibG9jayBtYXBwaW5nIGxheW91dFxuIDQ1NDpcdFx0ICogKGluZGlyZWN0IHRvIGV4dGVudHMpIGFuZCBpcyBub3QgdHJhY2tlZCBpbiB0aGUgZmFzdCBjb21taXRcbiA0NTU6XHRcdCAqIGxvZywgc28gZGlzYWJsZSBmYXN0IGNvbW1pdHMgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gNDU2Olx0XHQgKi9cbiA0NTc6XHRcdGV4dDRfZmNfbWFya19pbmVsaWdpYmxlKGlub2RlLVx1MDAzZWlfc2IsIEVYVDRfRkNfUkVBU09OX01JR1JBVEUsIGhhbmRsZSk7XG4gNDU4Olx0XHRnb2FsID0gKCgoKHUzMilpbm9kZS1cdTAwM2VpX2lubyAtIDEpIC8gRVhUNF9JTk9ERVNfUEVSX0dST1VQKGlub2RlLVx1MDAzZWlfc2IpKSAqXG4gNDU5Olx0XHRcdEVYVDRfSU5PREVTX1BFUl9HUk9VUChpbm9kZS1cdTAwM2VpX3NiKSkgJiM0MzsgMTtcbiA0NjA6XHRcdG93bmVyWzBdID0gaV91aWRfcmVhZChpbm9kZSk7XG4gNDYxOlx0XHRvd25lclsxXSA9IGlfZ2lkX3JlYWQoaW5vZGUpO1xuIDQ2MjpcdFx0dG1wX2lub2RlID0gZXh0NF9uZXdfaW5vZGUoaGFuZGxlLCBkX2lub2RlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19yb290KSxcbiA0NjM6XHRcdFx0XHRcdCAgIFNfSUZSRUcsIE5VTEwsIGdvYWwsIG93bmVyLCAwKTtcbiA0NjQ6XHRcdGlmIChJU19FUlIodG1wX2lub2RlKSkge1xuIDQ2NTpcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKHRtcF9pbm9kZSk7XG4gNDY2Olx0XHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gNDY3Olx0XHRcdHRtcF9pbm9kZSA9IE5VTEw7XG4gNDY4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA0Njk6XHRcdH1cbiA0NzA6XHRcdC8qXG4gNDcxOlx0XHQgKiBVc2UgdGhlIGNvcnJlY3Qgc2VlZCBmb3IgY2hlY2tzdW0gKGkuZS4gdGhlIHNlZWQgZnJvbSAmIzM5O2lub2RlJiMzOTspLiAgVGhpc1xuIDQ3MjpcdFx0ICogaXMgc28gdGhhdCB0aGUgbWV0YWRhdGEgYmxvY2tzIHdpbGwgaGF2ZSB0aGUgY29ycmVjdCBjaGVja3N1bSBhZnRlclxuIDQ3MzpcdFx0ICogdGhlIG1pZ3JhdGlvbi5cbiA0NzQ6XHRcdCAqL1xuIDQ3NTpcdFx0ZWkgPSBFWFQ0X0koaW5vZGUpO1xuIDQ3NjpcdFx0dG1wX2NzdW1fc2VlZCA9IEVYVDRfSSh0bXBfaW5vZGUpLVx1MDAzZWlfY3N1bV9zZWVkO1xuIDQ3NzpcdFx0RVhUNF9JKHRtcF9pbm9kZSktXHUwMDNlaV9jc3VtX3NlZWQgPSBlaS1cdTAwM2VpX2NzdW1fc2VlZDtcbiA0Nzg6XHRcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSk7XG4gNDc5Olx0XHQvKlxuIDQ4MDpcdFx0ICogU2V0IHRoZSBpX25saW5rIHRvIHplcm8gc28gaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyXG4gNDgxOlx0XHQgKiB3aGVuIHdlIGRyb3AgaW5vZGUgcmVmZXJlbmNlLlxuIDQ4MjpcdFx0ICovXG4gNDgzOlx0XHRjbGVhcl9ubGluayh0bXBfaW5vZGUpO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgdG1wX2lub2RlKTtcbiA0ODY6XHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gNDg3Olx0XG4gNDg4Olx0XHQvKlxuIDQ4OTpcdFx0ICogc3RhcnQgd2l0aCBvbmUgY3JlZGl0IGFjY291bnRlZCBmb3JcbiA0OTA6XHRcdCAqIHN1cGVyYmxvY2sgbW9kaWZpY2F0aW9uLlxuIDQ5MTpcdFx0ICpcbiA0OTI6XHRcdCAqIEZvciB0aGUgdG1wX2lub2RlIHdlIGFscmVhZHkgaGF2ZSBjb21taXR0ZWQgdGhlXG4gNDkzOlx0XHQgKiB0cmFuc2FjdGlvbiB0aGF0IGNyZWF0ZWQgdGhlIGlub2RlLiBMYXRlciBhcyBhbmRcbiA0OTQ6XHRcdCAqIHdoZW4gd2UgYWRkIGV4dGVudHMgd2UgZXh0ZW50IHRoZSBqb3VybmFsXG4gNDk1Olx0XHQgKi9cbiA0OTY6XHRcdC8qXG4gNDk3Olx0XHQgKiBFdmVuIHRob3VnaCB3ZSB0YWtlIGlfcndzZW0gd2UgY2FuIHN0aWxsIGNhdXNlIGJsb2NrXG4gNDk4Olx0XHQgKiBhbGxvY2F0aW9uIHZpYSBtbWFwIHdyaXRlIHRvIGhvbGVzLiBJZiB3ZSBoYXZlIGFsbG9jYXRlZFxuIDQ5OTpcdFx0ICogbmV3IGJsb2NrcyB3ZSBmYWlsIG1pZ3JhdGUuICBOZXcgYmxvY2sgYWxsb2NhdGlvbiB3aWxsXG4gNTAwOlx0XHQgKiBjbGVhciBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFIGZsYWcuICBUaGUgZmxhZyBpcyB1cGRhdGVkXG4gNTAxOlx0XHQgKiB3aXRoIGlfZGF0YV9zZW0gaGVsZCB0byBwcmV2ZW50IHJhY2luZyB3aXRoIGJsb2NrXG4gNTAyOlx0XHQgKiBhbGxvY2F0aW9uLlxuIDUwMzpcdFx0ICovXG4gNTA0Olx0XHRkb3duX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbiA1MDU6XHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFKTtcbiA1MDY6XHRcdHVwX3JlYWQoKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhX3NlbSkpO1xuIDUwNzpcdFxuIDUwODpcdFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01JR1JBVEUsIDEpO1xuIDUwOTpcdFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGV4dDRfZXh0X21pZ3JhdGUqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBleHQ0X2V4dF9taWdyYXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGJldHdlZW4gbGluZXMgNTEwIGFuZCA2MDAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgZXh0ZW50IHRyZWUuIEkgc3VzcGVjdCB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoIHRoZSBuaXR0eS1ncml0dHkgb2YgcmVtYXBwaW5nIGJsb2NrcywgaGFuZGxpbmcgcG9zc2libGUgZGF0YSBtb3ZlbWVudCwgYW5kIHBlcmhhcHMgc29tZSBtZXRhZGF0YSB1cGRhdGVzIGFzIHRoZSBmdW5jdGlvbiBhdHRlbXB0cyB0byB0cmFuc2Zvcm0gYW4gZXhpc3RpbmcgaW5vZGUmIzM5O3MgZXh0ZW50IHN0cnVjdHVyZS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlIHJlYWxsb2NhdGlvbiBhbmQgd2hhdCBraW5kIG9mIGNoZWNrcyB0aGV5IGFyZSBkb2luZyBoZXJlLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiBhbnkgb3B0aW1pemF0aW9uIGlzIGhhcHBlbmluZyBoZXJlIHRvIG1pbmltaXplIGZyYWdtZW50YXRpb24uIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBsb29raW5nIGZvciB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGFueSBibG9jayByZW1hcHBpbmcgb3IgYWxsb2NhdGlvbiByZXF1ZXN0cyB3aXRoaW4gdGhpcyBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKGhhbmRsZSk7XG4gNTExOlx0XHRcdGdvdG8gb3V0X3RtcF9pbm9kZTtcbiA1MTI6XHRcdH1cbiA1MTM6XHRcbiA1MTQ6XHRcdGlfZGF0YSA9IGVpLVx1MDAzZWlfZGF0YTtcbiA1MTU6XHRcdG1lbXNldChcdTAwMjZsYiwgMCwgc2l6ZW9mKGxiKSk7XG4gNTE2Olx0XG4gNTE3Olx0XHQvKiAzMiBiaXQgYmxvY2sgYWRkcmVzcyA0IGJ5dGVzICovXG4gNTE4Olx0XHRtYXhfZW50cmllcyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNlXHUwMDNlIDI7XG4gNTE5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBFWFQ0X05ESVJfQkxPQ0tTOyBpJiM0MzsmIzQzOykge1xuIDUyMDpcdFx0XHRpZiAoaV9kYXRhW2ldKSB7XG4gNTIxOlx0XHRcdFx0cmV0dmFsID0gdXBkYXRlX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1MjI6XHRcdFx0XHRcdFx0XHRsZTMyX3RvX2NwdShpX2RhdGFbaV0pLCBcdTAwMjZsYik7XG4gNTIzOlx0XHRcdFx0aWYgKHJldHZhbClcbiA1MjQ6XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1MjU6XHRcdFx0fSBlbHNlXG4gNTI2Olx0XHRcdFx0bGIuY3Vycl9ibG9jayYjNDM7JiM0Mzs7XG4gNTI3Olx0XHR9XG4gNTI4Olx0XHRpZiAoaV9kYXRhW0VYVDRfSU5EX0JMT0NLXSkge1xuIDUyOTpcdFx0XHRyZXR2YWwgPSB1cGRhdGVfaW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1MzA6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X0lORF9CTE9DS10pLCBcdTAwMjZsYik7XG4gNTMxOlx0XHRcdGlmIChyZXR2YWwpXG4gNTMyOlx0XHRcdFx0Z290byBlcnJfb3V0O1xuIDUzMzpcdFx0fSBlbHNlXG4gNTM0Olx0XHRcdGxiLmN1cnJfYmxvY2sgJiM0Mzs9IG1heF9lbnRyaWVzO1xuIDUzNTpcdFx0aWYgKGlfZGF0YVtFWFQ0X0RJTkRfQkxPQ0tdKSB7XG4gNTM2Olx0XHRcdHJldHZhbCA9IHVwZGF0ZV9kaW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1Mzc6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X0RJTkRfQkxPQ0tdKSwgXHUwMDI2bGIpO1xuIDUzODpcdFx0XHRpZiAocmV0dmFsKVxuIDUzOTpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1NDA6XHRcdH0gZWxzZVxuIDU0MTpcdFx0XHRsYi5jdXJyX2Jsb2NrICYjNDM7PSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xuIDU0MjpcdFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XG4gNTQzOlx0XHRcdHJldHZhbCA9IHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1NDQ6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSwgXHUwMDI2bGIpO1xuIDU0NTpcdFx0XHRpZiAocmV0dmFsKVxuIDU0NjpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1NDc6XHRcdH1cbiA1NDg6XHRcdC8qXG4gNTQ5Olx0XHQgKiBCdWlsZCB0aGUgbGFzdCBleHRlbnRcbiA1NTA6XHRcdCAqL1xuIDU1MTpcdFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLCBcdTAwMjZsYik7XG4gNTUyOlx0ZXJyX291dDpcbiA1NTM6XHRcdGlmIChyZXR2YWwpXG4gNTU0Olx0XHRcdC8qXG4gNTU1Olx0XHRcdCAqIEZhaWx1cmUgY2FzZSBkZWxldGUgdGhlIGV4dGVudCBpbmZvcm1hdGlvbiB3aXRoIHRoZVxuIDU1NjpcdFx0XHQgKiB0bXBfaW5vZGVcbiA1NTc6XHRcdFx0ICovXG4gNTU4Olx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1NTk6XHRcdGVsc2Uge1xuIDU2MDpcdFx0XHRyZXR2YWwgPSBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGEoaGFuZGxlLCBpbm9kZSwgdG1wX2lub2RlKTtcbiA1NjE6XHRcdFx0aWYgKHJldHZhbClcbiA1NjI6XHRcdFx0XHQvKlxuIDU2MzpcdFx0XHRcdCAqIGlmIHdlIGZhaWwgdG8gc3dhcCBpbm9kZSBkYXRhIGZyZWUgdGhlIGV4dGVudFxuIDU2NDpcdFx0XHRcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxuIDU2NTpcdFx0XHRcdCAqL1xuIDU2NjpcdFx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xuIDU3MDpcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4gNTcxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNTcyOlx0XHRcdGlmICghcmV0dmFsKVxuIDU3MzpcdFx0XHRcdHJldHZhbCA9IGVycjtcbiA1NzQ6XHRcdFx0Z290byBvdXRfc3RvcDtcbiA1NzU6XHRcdH1cbiA1NzY6XHRcdC8qXG4gNTc3Olx0XHQgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvXG4gNTc4Olx0XHQgKi9cbiA1Nzk6XHRcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIDApO1xuIDU4MDpcdFxuIDU4MTpcdFx0LypcbiA1ODI6XHRcdCAqIHNldCB0aGUgIGlfYmxvY2tzIGNvdW50IHRvIHplcm9cbiA1ODM6XHRcdCAqIHNvIHRoYXQgdGhlIGV4dDRfZXZpY3RfaW5vZGUoKSBkb2VzIHRoZVxuIDU4NDpcdFx0ICogcmlnaHQgam9iXG4gNTg1Olx0XHQgKlxuIDU4NjpcdFx0ICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcbiA1ODc6XHRcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxuIDU4ODpcdFx0ICovXG4gNTg5Olx0XHR0bXBfaW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuIDU5MDpcdFx0RVhUNF9JKHRtcF9pbm9kZSktXHUwMDNlaV9jc3VtX3NlZWQgPSB0bXBfY3N1bV9zZWVkO1xuIDU5MTpcdFxuIDU5MjpcdFx0LyogUmVzZXQgdGhlIGV4dGVudCBkZXRhaWxzICovXG4gNTkzOlx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpO1xuIDU5NDpcdG91dF9zdG9wOlxuIDU5NTpcdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiA1OTY6XHRvdXRfdG1wX2lub2RlOlxuIDU5NzpcdFx0dW5sb2NrX25ld19pbm9kZSh0bXBfaW5vZGUpO1xuIDU5ODpcdG91dF91bmxvY2s6XG4gNTk5Olx0XHRleHQ0X3dyaXRlcGFnZXNfdXBfd3JpdGUoaW5vZGUtXHUwMDNlaV9zYiwgYWxsb2NfY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjI1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEludm9jYXRpb24gb2YgYGV4dDRfZXh0X21pZ3JhdGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBleHQ0X2V4dF9taWdyYXRlYC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIGl0JiMzOTtzIHVzZWQgaXMga2V5LiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzaW1wbGUgYGdyZXBgIHRvIGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgZXh0NF9leHRfbWlncmF0ZWAgaXMgYWN0dWFsbHkgKmNhbGxlZCouIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cywgd2hpY2ggd2lsbCBiZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBmdW5jdGlvbnMgaW52b2tlIGl0IGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfbWlncmF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zMjU0PWludCBleHQ0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncyk7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMzI1Ni0vKiBtaWdyYXRlLmMgKi9cbmZzL2V4dDQvZXh0NC5oOjMyNTc6ZXh0ZXJuIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqKTtcbmZzL2V4dDQvZXh0NC5oLTMyNTgtZXh0ZXJuIGludCBleHQ0X2luZF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW9jdGwuYz01OTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldGZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTcwNS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0VYVEVOVFNfRkwpXG5mcy9leHQ0L2lvY3RsLmM6NzA2Olx0XHRcdGVyciA9IGV4dDRfZXh0X21pZ3JhdGUoaW5vZGUpO1xuZnMvZXh0NC9pb2N0bC5jLTcwNy1cdFx0ZWxzZVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0xNTM4PXN0YXRpYyBsb25nIF9fZXh0NF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE3MDEtXHRcdGlub2RlX2xvY2soKGlub2RlKSk7XG5mcy9leHQ0L2lvY3RsLmM6MTcwMjpcdFx0ZXJyID0gZXh0NF9leHRfbWlncmF0ZShpbm9kZSk7XG5mcy9leHQ0L2lvY3RsLmMtMTcwMy1cdFx0aW5vZGVfdW5sb2NrKChpbm9kZSkpO1xuLS1cbmZzL2V4dDQvbWlncmF0ZS5jPTM5MD1zdGF0aWMgaW50IGZyZWVfZXh0X2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtNDA5LVxuZnMvZXh0NC9taWdyYXRlLmM6NDEwOmludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L21pZ3JhdGUuYy00MTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIEJ1ZyBpbiBleHQ0IEV4dGVudCBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBleHQ0X2V4dF9taWdyYXRlYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRob3NlIGZhbWlsaWFyIGBFWFQ0X0lPQ19TRVRGTEFHU2AgYW5kIGBFWFQ0X0lPQ19NSUdSQVRFYCBpb2N0bHMg4oCTIHN0YW5kYXJkIHVzZXJzcGFjZSBmaWxlc3lzdGVtIGNhbGxzIGluIGV4dDQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHdoYXQgdnVsbmVyYWJpbGl0eSBpdCYjMzk7cyBhZGRyZXNzaW5nLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGFuIGlzc3VlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuCgpFc3NlbnRpYWxseSwgdGhlIHByZS1wYXRjaCBsb2dpYyB3YXMgZmxhd2VkLiBJZiB0aGUgY3J1Y2lhbCBgdXBkYXRlXypfZXh0ZW50X3JhbmdlYCBjYWxscyBmYWlsZWQsIHNldHRpbmcgYHJldHZhbGAgdG8gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUuIElmIHRoZSBqb3VybmFsIGNyZWRpdCBhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgYHJldHZhbGAgd2FzIHNpbGVudGx5IHNldCB0byB6ZXJvLCBldmVuIHRob3VnaCB0aGUgdW5kZXJseWluZyBtaWdyYXRpb24gcHJvY2VzcyBoYWQgZmFpbGVkLiBUaGlzIGxlZCB0byBhIGZhbHNlIHBvc2l0aXZlOiB0aGUgdXNlcnNwYWNlIG9yIGNhbGxpbmcgZnVuY3Rpb24gcmVjZWl2ZWQgYSBzdWNjZXNzIGluZGljYXRpb24gZGVzcGl0ZSB0aGUgYWN0dWFsIGZhaWx1cmUhIFRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gemVybyB0aGUgYHRtcF9pbm9kZWAgYW5kIGV4ZWN1dGUgYGV4dDRfZXh0X3RyZWVfaW5pdGAgd2hpY2ggbWFrZXMgaXQgYXBwZWFyIHN1Y2Nlc3NmdWwuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZSBpbml0aWFsIGVycm9yIChgcmV0dmFsYCkgaXMgcHJlc2VydmVkLiBUaGUgcGF0Y2hlZCBjb2RlIGluY2x1ZGVzIGFuIGludGVybWVkaWF0ZSBgZXJyYCB2YXJpYWJsZSBmb3IgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AuIENyaXRpY2FsbHksIGlmIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIGZhaWxzLCBpdHMgZXJyb3IgY29kZSBpcyBvbmx5IHVzZWQgaWYgYHJldHZhbGAgaXMgc3RpbGwgemVyby4gVGhpcyBwcm9wYWdhdGVzIHRoZSBvcmlnaW5hbCBlcnJvciBpZiBpdCBoYXBwZW5lZC4gVGhlIGBnb3RvIG91dF9zdG9wYCBlbnN1cmVzIHdlIGV4aXQgZ3JhY2VmdWxseSBhbmQgY29uc2lzdGVudGx5IHdpdGggdGhlIGNvcnJlY3QgZXJyb3Igc3RhdGUuCgpUaGlzIGlzIGNsZWFybHkgYSBidWcgZml4IHdpdGhpbiB0aGUgY29yZSBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBgZnMvZXh0NC9taWdyYXRlLmNgLiBJJiMzOTtsbCBub3cgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBlbHNlIHRoaXMgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVx0XHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlx0XHRpbmRpcmVjdC5vIGlubGluZS5vIGlub2RlLm8gaW9jdGwubyBtYmFsbG9jLm8gbWlncmF0ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTExLVx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgZXh0NCBNb2R1bGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgbWlncmF0ZS5vYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBleHQ0LXlgIGJ1aWxkIGNoYWluLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9uZSBvZiB0aGUgZmlsZXMgdGhhdCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGBleHQ0YCBtb2R1bGUsIGJ1dCBvbmx5IHdoZW4gYENPTkZJR19FWFQ0X0ZTYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGVudGlyZSBgZXh0NGAgZmlsZXN5c3RlbS4gVGltZSB0byBkaWcgaW50byBgZnMvZXh0NC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzAKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVYVDQgRmlsZXN5c3RlbSBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBkbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCBmb3IgdGhpcyBhbmFseXNpcz8gUmlnaHQsIGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzdWJzeXN0ZW0gZXZlbiB3b3J0aCBmdXp6aW5nPwoKWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY29yZSBzdWJzeXN0ZW0gaXMgdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIHRoZSBleHQ0IGZpbGVzeXN0ZW0gc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyB1c2VyLXJlYWNoYWJsZSwgd2hpY2ggaXMgYSBtYWpvciBwb2ludCBpbiBpdHMgZmF2b3IsIHZpYSBpb2N0bCBjYWxscyBsaWtlIGBFWFQ0X0lPQ19NSUdSQVRFYCBvciBgRlNfSU9DX1NFVEZMQUdTYCAvIGBFWFQ0X0lPQ19TRVRGTEFHU2AuIENydWNpYWxseSwgdGhpcyBwYXJ0aWN1bGFyIGFyZWEgZGlyZWN0bHkgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybiB2YWx1ZXMgd2l0aGluIGBleHQ0X2V4dF9taWdyYXRlKClgLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ3JlYXQgYXJlYSB0byB0YXJnZXQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIGBleHQ0X2V4dF9taWdyYXRlYCBpcyB0aGUgZGlyZWN0IGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLiBCdXQsIGxldCYjMzk7cyBzZWUgd2hhdCBjYWxscyBpbnRvIGl0LCBpcyBpdCBgZXh0NF9pb2N0bGAsIGBfX2V4dDRfaW9jdGxgLCBvciBgZXh0NF9pb2N0bF9zZXRmbGFnc2A/IEFoLCByaWdodC4gYGV4dDRfZXh0X21pZ3JhdGVgIHNlZW1zIHByZXR0eSBzcGVjaWZpYywgbm90IGEgZnVuY3Rpb24gdGhhdCYjMzk7cyB1YmlxdWl0b3VzIGFjcm9zcyB0aGUgY29kZS4KCkFscmlnaHQsIHdoYXQgYWJvdXQgdGhhdCBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24/IExldCYjMzk7cyBjaGVjayB0aGUgY29kZSBpdHNlbGYsIGluIGBmcy9leHQ0L21pZ3JhdGUuY2A6IGBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKWAuIEFuZCBnb29kLCBpdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiwgYW5kIHRoZSBzeW1ib2wgaXMgaW4gdm1saW51eCwgc28sIGVhc3kgdG8gdGFyZ2V0LgoKT2theSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nOiAmIzM0O1dvcnRoRnV6emluZzogdHJ1ZSYjMzQ7LCAmIzM0O0ZvY3VzU3ltYm9sczogW2BleHQ0X2V4dF9taWdyYXRlYF0mIzM0OywgJiMzNDtFbmFibGVDb25maWdzOiBbYEVYVDRfRlNgXSYjMzQ7LCBhbmQgdGhhdCBzdWNjaW5jdCByZWFzb25pbmcuIERvbmUhCgpOb3csIGxldCYjMzk7cyBtb3ZlIGZvcndhcmQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBleHQ0X2V4dF9taWdyYXRlKCkgd2hlcmUgYW4gZWFybGllciBlcnJvciByZXR1cm4gY29kZSB3YXMgYWNjaWRlbnRhbGx5IG92ZXJ3cml0dGVuIGJ5IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cygpLCBjYXVzaW5nIGZhaWxlZCBtaWdyYXRpb24gb3BlcmF0aW9ucyB0byBpbmNvcnJlY3RseSByZXBvcnQgc3VjY2Vzcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgRVhUNF9JT0NfTUlHUkFURSBhbmQgRVhUNF9JT0NfU0VURkxBR1MgaW9jdGxzIG9uIGV4dDQgZmlsZXN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBleHQ0X2V4dF9taWdyYXRlKCkgd2hlcmUgYW4gZWFybGllciBlcnJvciByZXR1cm4gY29kZSB3YXMgYWNjaWRlbnRhbGx5IG92ZXJ3cml0dGVuIGJ5IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cygpLCBjYXVzaW5nIGZhaWxlZCBtaWdyYXRpb24gb3BlcmF0aW9ucyB0byBpbmNvcnJlY3RseSByZXBvcnQgc3VjY2Vzcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgRVhUNF9JT0NfTUlHUkFURSBhbmQgRVhUNF9JT0NfU0VURkxBR1MgaW9jdGxzIG9uIGV4dDQgZmlsZXN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA1OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cblxuVGhlIGNoYW5nZSBvbmx5IGFmZmVjdHMgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZSBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IGZvciBlcnJvciBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzUyMDU5NGVlY2ExNTY0ODQ3ODZjZTgxMDdiYjZhZjE3Y2E1YmI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDU6NDk6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDVkNjBlZjEwZmUxMTAuLjAyYmI3YzIwYTAwOGEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSkKIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaGFuZGxlX3QgKmhhbmRsZTsKLQlpbnQgcmV0dmFsID0gMCwgaTsKJiM0MzsJaW50IHJldHZhbCA9IDAsIGVyciwgaTsKIAlfX2xlMzIgKmlfZGF0YTsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTsKIAlzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSA9IE5VTEw7CkBAIC01NjcsOSAmIzQzOzU2NywxMiBAQCBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX0KIAogCS8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqLwotCXJldHZhbCA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApOwotCWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoaGFuZGxlLCAxLCAwKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCWlmICghcmV0dmFsKQomIzQzOwkJCXJldHZhbCA9IGVycjsKIAkJZ290byBvdXRfc3RvcDsKJiM0MzsJfQogCS8qCiAJICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVybwogCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGV4dDQgTWlncmF0aW9uIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGluc3BlY3RpbmcgdGhlIGRpZmYsIGZvY3VzaW5nIG9uIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgZnMvZXh0NC9taWdyYXRlLmNgLiBJIGtub3cgdGhhdCYjMzk7cyB0aGUgcGxhY2UgdG8gYmUsIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoeS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGFueSBjb2RlIGNoYW5nZSDigJMgdGhlIGltbWVkaWF0ZSBjb250ZXh0IGlzIGNydWNpYWwuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UgYW5kIHVzZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24gd2l0aGluIHRoYXQgc2FtZSBmaWxlLiBTZWVpbmcgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgYmV5b25kIHRoZSBwYXRjaCBpdHNlbGYsIHdpbGwgcHJvdmlkZSB0aGUgcmVxdWlyZWQgYmFja2dyb3VuZC4gSSYjMzk7bSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2VzcyB3aXRoaW4gZXh0NC4gVW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBhbmQgKmhvdyogb2YgdGhlIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRcdH0gZWxzZVxuIDU0MTpcdFx0XHRsYi5jdXJyX2Jsb2NrICYjNDM7PSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xuIDU0MjpcdFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XG4gNTQzOlx0XHRcdHJldHZhbCA9IHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcbiA1NDQ6XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSwgXHUwMDI2bGIpO1xuIDU0NTpcdFx0XHRpZiAocmV0dmFsKVxuIDU0NjpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiA1NDc6XHRcdH1cbiA1NDg6XHRcdC8qXG4gNTQ5Olx0XHQgKiBCdWlsZCB0aGUgbGFzdCBleHRlbnRcbiA1NTA6XHRcdCAqL1xuIDU1MTpcdFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLCBcdTAwMjZsYik7XG4gNTUyOlx0ZXJyX291dDpcbiA1NTM6XHRcdGlmIChyZXR2YWwpXG4gNTU0Olx0XHRcdC8qXG4gNTU1Olx0XHRcdCAqIEZhaWx1cmUgY2FzZSBkZWxldGUgdGhlIGV4dGVudCBpbmZvcm1hdGlvbiB3aXRoIHRoZVxuIDU1NjpcdFx0XHQgKiB0bXBfaW5vZGVcbiA1NTc6XHRcdFx0ICovXG4gNTU4Olx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1NTk6XHRcdGVsc2Uge1xuIDU2MDpcdFx0XHRyZXR2YWwgPSBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGEoaGFuZGxlLCBpbm9kZSwgdG1wX2lub2RlKTtcbiA1NjE6XHRcdFx0aWYgKHJldHZhbClcbiA1NjI6XHRcdFx0XHQvKlxuIDU2MzpcdFx0XHRcdCAqIGlmIHdlIGZhaWwgdG8gc3dhcCBpbm9kZSBkYXRhIGZyZWUgdGhlIGV4dGVudFxuIDU2NDpcdFx0XHRcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxuIDU2NTpcdFx0XHRcdCAqL1xuIDU2NjpcdFx0XHRcdGZyZWVfZXh0X2Jsb2NrKGhhbmRsZSwgdG1wX2lub2RlKTtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xuIDU3MDpcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4gNTcxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNTcyOlx0XHRcdGlmICghcmV0dmFsKVxuIDU3MzpcdFx0XHRcdHJldHZhbCA9IGVycjtcbiA1NzQ6XHRcdFx0Z290byBvdXRfc3RvcDtcbiA1NzU6XHRcdH1cbiA1NzY6XHRcdC8qXG4gNTc3Olx0XHQgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvXG4gNTc4Olx0XHQgKi9cbiA1Nzk6XHRcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIDApO1xuIDU4MDpcdFxuIDU4MTpcdFx0LypcbiA1ODI6XHRcdCAqIHNldCB0aGUgIGlfYmxvY2tzIGNvdW50IHRvIHplcm9cbiA1ODM6XHRcdCAqIHNvIHRoYXQgdGhlIGV4dDRfZXZpY3RfaW5vZGUoKSBkb2VzIHRoZVxuIDU4NDpcdFx0ICogcmlnaHQgam9iXG4gNTg1Olx0XHQgKlxuIDU4NjpcdFx0ICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcbiA1ODc6XHRcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxuIDU4ODpcdFx0ICovXG4gNTg5Olx0XHR0bXBfaW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuIDU5MDpcdFx0RVhUNF9JKHRtcF9pbm9kZSktXHUwMDNlaV9jc3VtX3NlZWQgPSB0bXBfY3N1bV9zZWVkO1xuIDU5MTpcdFxuIDU5MjpcdFx0LyogUmVzZXQgdGhlIGV4dGVudCBkZXRhaWxzICovXG4gNTkzOlx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpO1xuIDU5NDpcdG91dF9zdG9wOlxuIDU5NTpcdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiA1OTY6XHRvdXRfdG1wX2lub2RlOlxuIDU5NzpcdFx0dW5sb2NrX25ld19pbm9kZSh0bXBfaW5vZGUpO1xuIDU5ODpcdG91dF91bmxvY2s6XG4gNTk5Olx0XHRleHQ0X3dyaXRlcGFnZXNfdXBfd3JpdGUoaW5vZGUtXHUwMDNlaV9zYiwgYWxsb2NfY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA1MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnVnIEZpeCBpbiBleHQ0X2V4dF9taWdyYXRlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24sIHRoZXJlIHdhcyBhIGNyaXRpY2FsIGZsYXcuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBzdHJ1Y3R1cmVkIGxpa2UgdGhpczogaWYgYW4gZXJyb3Igb2NjdXJyZWQgaW4gYW4gZWFybGllciBzdGVwIChlLmcuLCBgdXBkYXRlX3RpbmRfZXh0ZW50X3JhbmdlYCwgYGZpbmlzaF9yYW5nZWAsIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSwgdGhlIGByZXR2YWxgIHZhcmlhYmxlIHdvdWxkIGhvbGQgdGhhdCBlcnJvciBjb2RlLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSBgcmV0dmFsYCwgZXZlbiBpZiB0aGF0IGNhbGwgc3VjY2VlZGVkLiBUaGlzIG1lYW50IHRoZSBmdW5jdGlvbiBjb3VsZCBlcnJvbmVvdXNseSByZXBvcnQgc3VjY2VzcyAocmV0dXJuIDApIGRlc3BpdGUgYSBwcmlvciBmYWlsdXJlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBlcnJvci1oYW5kbGluZyBidWchCgpUaGUgZml4IGlzIHNpbXBsZSBhbmQgZWxlZ2FudC4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlIGBlcnJgIHRvIGhvbGQgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzYC4gTm93LCBpZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzYCBmYWlscywgd2Ugb25seSB1cGRhdGUgYHJldHZhbGAgaWYgaXQgKndhc24mIzM5O3QqIGFscmVhZHkgc2V0IHRvIGFuIGVycm9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgb3JpZ2luYWwgZXJyb3IgY29kZSBmcm9tIHRoZSBlYXJsaWVyIGZhaWxpbmcgc3RlcCBpcyBwcmVzZXJ2ZWQgYW5kIHJldHVybmVkIGNvcnJlY3RseS4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYSBuZXcgcHJvYmxlbSwgZXNwZWNpYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTt2ZSBsb29rZWQgY2xvc2VseToKCiogICBgZXJyYCBpcyBhIGxvY2FsIHZhcmlhYmxlLCBwcm9wZXJseSBhc3NpZ25lZC4KKiAgIGByZXR2YWxgIGlzIGluaXRpYWxpemVkIGFuZCBjb25zaXN0ZW50bHkgYXNzaWduZWQgdGhyb3VnaG91dC4KKiAgIFRoZXJlJiMzOTtzIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IGludm9sdmVkLCBzbyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuCiogICBUaGVyZSYjMzk7cyBubyBtYW5pcHVsYXRpb24gb2Ygc3RydWN0IGZpZWxkcywgcG9pbnRlcnMsIG9yIGJ1ZmZlcnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLgoqICAgVGhlIGRhdGEgc2l6ZXMgcmVtYWluIHVuY2hhbmdlZC4KCkluIHNob3J0LCB0aGlzIGlzIHB1cmVseSBhIGNvcnJlY3Rpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gY3JlYXRlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBkYXRhIGNvcnJ1cHRpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgS0FTQU4sIEtNU0FOLCBhbmQgc3RhbmRhcmQgdGVzdGluZy4gU3RhbmRhcmQgYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcHBsaWVzLCBhcyBleHBlY3RlZC4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyL0xvY2tkZXApIGFyZSBub3QgYXBwbGljYWJsZSBoZXJlIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHNpZ25zIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcy4gSSB0aGluayB3ZSBjYW4gc2FmZWx5IGFwcGx5IGBzZXQtcmVzdWx0c2AgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXG5cblRoZSBjaGFuZ2Ugb25seSBhZmZlY3RzIGxvY2FsIGludGVnZXIgcmV0dXJuIGNvZGUgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZXJyb3IgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXG5cblRoZSBjaGFuZ2Ugb25seSBhZmZlY3RzIGxvY2FsIGludGVnZXIgcmV0dXJuIGNvZGUgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZXJyb3IgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTowOC41MjM5ODQ2OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA3MzQyMDYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfbWlncmF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGV4dDRfZXh0X21pZ3JhdGUoKWAgd2hlcmUgYHJldHZhbGAgKHdoaWNoIG1heSBob2xkIGFuIGVycm9yIGNvZGUgZnJvbSBwcmlvciBtaWdyYXRpb24gb3BlcmF0aW9ucyBsaWtlIGB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2VgIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSB3YXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKClgLiBCeSBpbnRyb2R1Y2luZyBhIHNlcGFyYXRlIGBlcnJgIHZhcmlhYmxlLCBwcmV2aW91cyBlcnJvcnMgYXJlIGNvcnJlY3RseSBwcmVzZXJ2ZWQgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uXFxuXFxuVGhlIGNoYW5nZSBvbmx5IGFmZmVjdHMgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZSBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IGZvciBlcnJvciBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGV4dDRfZXh0X21pZ3JhdGUoKSB3aGVyZSBhbiBlYXJsaWVyIGVycm9yIHJldHVybiBjb2RlIHdhcyBhY2NpZGVudGFsbHkgb3ZlcndyaXR0ZW4gYnkgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKCksIGNhdXNpbmcgZmFpbGVkIG1pZ3JhdGlvbiBvcGVyYXRpb25zIHRvIGluY29ycmVjdGx5IHJlcG9ydCBzdWNjZXNzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBFWFQ0X0lPQ19NSUdSQVRFIGFuZCBFWFQ0X0lPQ19TRVRGTEFHUyBpb2N0bHMgb24gZXh0NCBmaWxlc3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MDguNTIzOTg4NjA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzOTM5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzUyMDU5NGVlY2ExNTY0ODQ3ODZjZTgxMDdiYjZhZjE3Y2E1YmI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA1OjQ5OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi4wMmJiN2MyMGEwMDhhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXFxuKysrIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5AQCAtNDEwLDcgKzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRoYW5kbGVfdCAqaGFuZGxlO1xcbi1cXHRpbnQgcmV0dmFsID0gMCwgaTtcXG4rXFx0aW50IHJldHZhbCA9IDAsIGVyciwgaTtcXG4gXFx0X19sZTMyICppX2RhdGE7XFxuIFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSA9IE5VTEw7XFxuQEAgLTU2Nyw5ICs1NjcsMTIgQEAgaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0fVxcbiBcXG4gXFx0LyogV2UgbWFyayB0aGUgdG1wX2lub2RlIGRpcnR5IHZpYSBleHQ0X2V4dF90cmVlX2luaXQuICovXFxuLVxcdHJldHZhbCA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApO1xcbi1cXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmICghcmV0dmFsKVxcbitcXHRcXHRcXHRyZXR2YWwgPSBlcnI7XFxuIFxcdFxcdGdvdG8gb3V0X3N0b3A7XFxuK1xcdH1cXG4gXFx0LypcXG4gXFx0ICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVyb1xcbiBcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MDkuMDA5OTk5Mjk3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjUwNDMwMDM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfbWlncmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBleHQ0X2V4dF9taWdyYXRlKCkgd2hlcmUgYW4gZWFybGllciBlcnJvciByZXR1cm4gY29kZSB3YXMgYWNjaWRlbnRhbGx5IG92ZXJ3cml0dGVuIGJ5IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cygpLCBjYXVzaW5nIGZhaWxlZCBtaWdyYXRpb24gb3BlcmF0aW9ucyB0byBpbmNvcnJlY3RseSByZXBvcnQgc3VjY2Vzcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgRVhUNF9JT0NfTUlHUkFURSBhbmQgRVhUNF9JT0NfU0VURkxBR1MgaW9jdGxzIG9uIGV4dDQgZmlsZXN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2M1MjA1OTRlZWNhMTU2NDg0Nzg2Y2U4MTA3YmI2YWYxN2NhNWJiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA1OjQ5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9taWdyYXRlLmMgYi9mcy9leHQ0L21pZ3JhdGUuY1xuaW5kZXggNWQ2MGVmMTBmZTExMC4uMDJiYjdjMjBhMDA4YSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXG4rKysgYi9mcy9leHQ0L21pZ3JhdGUuY1xuQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgaW50IGZyZWVfZXh0X2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRoYW5kbGVfdCAqaGFuZGxlO1xuLVx0aW50IHJldHZhbCA9IDAsIGk7XG4rXHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xuIFx0X19sZTMyICppX2RhdGE7XG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcbiBcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcbkBAIC01NjcsOSArNTY3LDEyIEBAIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBXZSBtYXJrIHRoZSB0bXBfaW5vZGUgZGlydHkgdmlhIGV4dDRfZXh0X3RyZWVfaW5pdC4gKi9cbi1cdHJldHZhbCA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApO1xuLVx0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIDEsIDApO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRpZiAoIXJldHZhbClcbitcdFx0XHRyZXR2YWwgPSBlcnI7XG4gXHRcdGdvdG8gb3V0X3N0b3A7XG4rXHR9XG4gXHQvKlxuIFx0ICogTWFyayB0aGUgdG1wX2lub2RlIGFzIG9mIHNpemUgemVyb1xuIFx0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTowOS4wMTAwMDA5MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTk0NTE3OTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgZXh0NCBNaWdyYXRpb24gQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCB3aGF0J3MgY2hhbmdpbmcuIFRoZSBjaGFuZ2Vsb2cgcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBmcy9leHQ0L21pZ3JhdGUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfZXh0X21pZ3JhdGUoKWAgZnVuY3Rpb24uIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24gdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBpbiB0aGVpciBwcm9wZXIgc2NvcGUuXG5cbkknbSB0aGlua2luZyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCdzIGFyb3VuZCBpdCBpcyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGZzL2V4dDQvbWlncmF0ZS5jYCBhbmQgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBjb2RlIHVzaW5nIHRoZSBsaW5lIG51bWJlcnMgbWVudGlvbmVkLiBJIHdpbGwgZm9jdXMgb24gbGluZXMgNDEwIHRocm91Z2ggNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGVub3VnaCBjb250ZXh0LiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGFzc2VzcyB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjQ5OjIwLjk1NTE4MzgwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTA6XFx0aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gNDExOlxcdHtcXG4gNDEyOlxcdFxcdGhhbmRsZV90ICpoYW5kbGU7XFxuIDQxMzpcXHRcXHRpbnQgcmV0dmFsID0gMCwgZXJyLCBpO1xcbiA0MTQ6XFx0XFx0X19sZTMyICppX2RhdGE7XFxuIDQxNTpcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTtcXG4gNDE2OlxcdFxcdHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlID0gTlVMTDtcXG4gNDE3OlxcdFxcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCBsYjtcXG4gNDE4OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X2VudHJpZXM7XFxuIDQxOTpcXHRcXHRfX3UzMiBnb2FsLCB0bXBfY3N1bV9zZWVkO1xcbiA0MjA6XFx0XFx0dWlkX3Qgb3duZXJbMl07XFxuIDQyMTpcXHRcXHRpbnQgYWxsb2NfY3R4O1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHQvKlxcbiA0MjQ6XFx0XFx0ICogSWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBleHRlbnRzLCBvciB0aGUgaW5vZGVcXG4gNDI1OlxcdFxcdCAqIGFscmVhZHkgaXMgZXh0ZW50LWJhc2VkLCBlcnJvciBvdXQuXFxuIDQyNjpcXHRcXHQgKi9cXG4gNDI3OlxcdFxcdGlmICghZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVxcdTAwM2VpX3NiKSB8fFxcbiA0Mjg6XFx0XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpIHx8XFxuIDQyOTpcXHRcXHQgICAgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbiA0MzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdGlmIChTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IGlub2RlLVxcdTAwM2VpX2Jsb2NrcyA9PSAwKVxcbiA0MzM6XFx0XFx0XFx0LypcXG4gNDM0OlxcdFxcdFxcdCAqIGRvbid0IG1pZ3JhdGUgZmFzdCBzeW1saW5rXFxuIDQzNTpcXHRcXHRcXHQgKi9cXG4gNDM2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdGFsbG9jX2N0eCA9IGV4dDRfd3JpdGVwYWdlc19kb3duX3dyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0LypcXG4gNDQxOlxcdFxcdCAqIFdvcnN0IGNhc2Ugd2UgY2FuIHRvdWNoIHRoZSBhbGxvY2F0aW9uIGJpdG1hcHMgYW5kIGEgYmxvY2tcXG4gNDQyOlxcdFxcdCAqIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2suICBXZSBkbyBuZWVkIHRvIHdvcnJ5IGFib3V0XFxuIDQ0MzpcXHRcXHQgKiBjcmVkaXRzIGZvciBtb2RpZnlpbmcgdGhlIHF1b3RhIGlub2RlLlxcbiA0NDQ6XFx0XFx0ICovXFxuIDQ0NTpcXHRcXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlHUkFURSxcXG4gNDQ2OlxcdFxcdFxcdDMgKyBFWFQ0X01BWFFVT1RBU19UUkFOU19CTE9DS1MoaW5vZGUtXFx1MDAzZWlfc2IpKTtcXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuIDQ0OTpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKGhhbmRsZSk7XFxuIDQ1MDpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDQ1MTpcXHRcXHR9XFxuIDQ1MjpcXHRcXHQvKlxcbiA0NTM6XFx0XFx0ICogVGhpcyBvcGVyYXRpb24gcmV3cml0ZXMgdGhlIGlub2RlJ3MgYmxvY2sgbWFwcGluZyBsYXlvdXRcXG4gNDU0OlxcdFxcdCAqIChpbmRpcmVjdCB0byBleHRlbnRzKSBhbmQgaXMgbm90IHRyYWNrZWQgaW4gdGhlIGZhc3QgY29tbWl0XFxuIDQ1NTpcXHRcXHQgKiBsb2csIHNvIGRpc2FibGUgZmFzdCBjb21taXRzIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxcbiA0NTY6XFx0XFx0ICovXFxuIDQ1NzpcXHRcXHRleHQ0X2ZjX21hcmtfaW5lbGlnaWJsZShpbm9kZS1cXHUwMDNlaV9zYiwgRVhUNF9GQ19SRUFTT05fTUlHUkFURSwgaGFuZGxlKTtcXG4gNDU4OlxcdFxcdGdvYWwgPSAoKCgodTMyKWlub2RlLVxcdTAwM2VpX2lubyAtIDEpIC8gRVhUNF9JTk9ERVNfUEVSX0dST1VQKGlub2RlLVxcdTAwM2VpX3NiKSkgKlxcbiA0NTk6XFx0XFx0XFx0RVhUNF9JTk9ERVNfUEVSX0dST1VQKGlub2RlLVxcdTAwM2VpX3NiKSkgKyAxO1xcbiA0NjA6XFx0XFx0b3duZXJbMF0gPSBpX3VpZF9yZWFkKGlub2RlKTtcXG4gNDYxOlxcdFxcdG93bmVyWzFdID0gaV9naWRfcmVhZChpbm9kZSk7XFxuIDQ2MjpcXHRcXHR0bXBfaW5vZGUgPSBleHQ0X25ld19pbm9kZShoYW5kbGUsIGRfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfcm9vdCksXFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHQgICBTX0lGUkVHLCBOVUxMLCBnb2FsLCBvd25lciwgMCk7XFxuIDQ2NDpcXHRcXHRpZiAoSVNfRVJSKHRtcF9pbm9kZSkpIHtcXG4gNDY1OlxcdFxcdFxcdHJldHZhbCA9IFBUUl9FUlIodG1wX2lub2RlKTtcXG4gNDY2OlxcdFxcdFxcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIDQ2NzpcXHRcXHRcXHR0bXBfaW5vZGUgPSBOVUxMO1xcbiA0Njg6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA0Njk6XFx0XFx0fVxcbiA0NzA6XFx0XFx0LypcXG4gNDcxOlxcdFxcdCAqIFVzZSB0aGUgY29ycmVjdCBzZWVkIGZvciBjaGVja3N1bSAoaS5lLiB0aGUgc2VlZCBmcm9tICdpbm9kZScpLiAgVGhpc1xcbiA0NzI6XFx0XFx0ICogaXMgc28gdGhhdCB0aGUgbWV0YWRhdGEgYmxvY2tzIHdpbGwgaGF2ZSB0aGUgY29ycmVjdCBjaGVja3N1bSBhZnRlclxcbiA0NzM6XFx0XFx0ICogdGhlIG1pZ3JhdGlvbi5cXG4gNDc0OlxcdFxcdCAqL1xcbiA0NzU6XFx0XFx0ZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiA0NzY6XFx0XFx0dG1wX2NzdW1fc2VlZCA9IEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZDtcXG4gNDc3OlxcdFxcdEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZCA9IGVpLVxcdTAwM2VpX2NzdW1fc2VlZDtcXG4gNDc4OlxcdFxcdGlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSk7XFxuIDQ3OTpcXHRcXHQvKlxcbiA0ODA6XFx0XFx0ICogU2V0IHRoZSBpX25saW5rIHRvIHplcm8gc28gaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyXFxuIDQ4MTpcXHRcXHQgKiB3aGVuIHdlIGRyb3AgaW5vZGUgcmVmZXJlbmNlLlxcbiA0ODI6XFx0XFx0ICovXFxuIDQ4MzpcXHRcXHRjbGVhcl9ubGluayh0bXBfaW5vZGUpO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpO1xcbiA0ODY6XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0LypcXG4gNDg5OlxcdFxcdCAqIHN0YXJ0IHdpdGggb25lIGNyZWRpdCBhY2NvdW50ZWQgZm9yXFxuIDQ5MDpcXHRcXHQgKiBzdXBlcmJsb2NrIG1vZGlmaWNhdGlvbi5cXG4gNDkxOlxcdFxcdCAqXFxuIDQ5MjpcXHRcXHQgKiBGb3IgdGhlIHRtcF9pbm9kZSB3ZSBhbHJlYWR5IGhhdmUgY29tbWl0dGVkIHRoZVxcbiA0OTM6XFx0XFx0ICogdHJhbnNhY3Rpb24gdGhhdCBjcmVhdGVkIHRoZSBpbm9kZS4gTGF0ZXIgYXMgYW5kXFxuIDQ5NDpcXHRcXHQgKiB3aGVuIHdlIGFkZCBleHRlbnRzIHdlIGV4dGVudCB0aGUgam91cm5hbFxcbiA0OTU6XFx0XFx0ICovXFxuIDQ5NjpcXHRcXHQvKlxcbiA0OTc6XFx0XFx0ICogRXZlbiB0aG91Z2ggd2UgdGFrZSBpX3J3c2VtIHdlIGNhbiBzdGlsbCBjYXVzZSBibG9ja1xcbiA0OTg6XFx0XFx0ICogYWxsb2NhdGlvbiB2aWEgbW1hcCB3cml0ZSB0byBob2xlcy4gSWYgd2UgaGF2ZSBhbGxvY2F0ZWRcXG4gNDk5OlxcdFxcdCAqIG5ldyBibG9ja3Mgd2UgZmFpbCBtaWdyYXRlLiAgTmV3IGJsb2NrIGFsbG9jYXRpb24gd2lsbFxcbiA1MDA6XFx0XFx0ICogY2xlYXIgRVhUNF9TVEFURV9FWFRfTUlHUkFURSBmbGFnLiAgVGhlIGZsYWcgaXMgdXBkYXRlZFxcbiA1MDE6XFx0XFx0ICogd2l0aCBpX2RhdGFfc2VtIGhlbGQgdG8gcHJldmVudCByYWNpbmcgd2l0aCBibG9ja1xcbiA1MDI6XFx0XFx0ICogYWxsb2NhdGlvbi5cXG4gNTAzOlxcdFxcdCAqL1xcbiA1MDQ6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gNTA1OlxcdFxcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFKTtcXG4gNTA2OlxcdFxcdHVwX3JlYWQoKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKSk7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSUdSQVRFLCAxKTtcXG4gNTA5OlxcdFxcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyMC45NTUyNjgxNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU2NDcxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBleHQ0X2V4dF9taWdyYXRlKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgYGV4dDRfZXh0X21pZ3JhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiBsaW5lcyA1MTAgYW5kIDYwMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBleHRlbnQgdHJlZS4gSSBzdXNwZWN0IHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCB0aGUgbml0dHktZ3JpdHR5IG9mIHJlbWFwcGluZyBibG9ja3MsIGhhbmRsaW5nIHBvc3NpYmxlIGRhdGEgbW92ZW1lbnQsIGFuZCBwZXJoYXBzIHNvbWUgbWV0YWRhdGEgdXBkYXRlcyBhcyB0aGUgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gdHJhbnNmb3JtIGFuIGV4aXN0aW5nIGlub2RlJ3MgZXh0ZW50IHN0cnVjdHVyZS4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgcmVhbGxvY2F0aW9uIGFuZCB3aGF0IGtpbmQgb2YgY2hlY2tzIHRoZXkgYXJlIGRvaW5nIGhlcmUuIEknbSBhbHNvIGN1cmlvdXMgaWYgYW55IG9wdGltaXphdGlvbiBpcyBoYXBwZW5pbmcgaGVyZSB0byBtaW5pbWl6ZSBmcmFnbWVudGF0aW9uLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBsb29raW5nIGZvciB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGFueSBibG9jayByZW1hcHBpbmcgb3IgYWxsb2NhdGlvbiByZXF1ZXN0cyB3aXRoaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyMy4yMTE3NDE1NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21pZ3JhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0XFx0XFx0cmV0dmFsID0gUFRSX0VSUihoYW5kbGUpO1xcbiA1MTE6XFx0XFx0XFx0Z290byBvdXRfdG1wX2lub2RlO1xcbiA1MTI6XFx0XFx0fVxcbiA1MTM6XFx0XFxuIDUxNDpcXHRcXHRpX2RhdGEgPSBlaS1cXHUwMDNlaV9kYXRhO1xcbiA1MTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZsYiwgMCwgc2l6ZW9mKGxiKSk7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdC8qIDMyIGJpdCBibG9jayBhZGRyZXNzIDQgYnl0ZXMgKi9cXG4gNTE4OlxcdFxcdG1heF9lbnRyaWVzID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplIFxcdTAwM2VcXHUwMDNlIDI7XFxuIDUxOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRVhUNF9ORElSX0JMT0NLUzsgaSsrKSB7XFxuIDUyMDpcXHRcXHRcXHRpZiAoaV9kYXRhW2ldKSB7XFxuIDUyMTpcXHRcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLFxcbiA1MjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaV9kYXRhW2ldKSwgXFx1MDAyNmxiKTtcXG4gNTIzOlxcdFxcdFxcdFxcdGlmIChyZXR2YWwpXFxuIDUyNDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIDUyNTpcXHRcXHRcXHR9IGVsc2VcXG4gNTI2OlxcdFxcdFxcdFxcdGxiLmN1cnJfYmxvY2srKztcXG4gNTI3OlxcdFxcdH1cXG4gNTI4OlxcdFxcdGlmIChpX2RhdGFbRVhUNF9JTkRfQkxPQ0tdKSB7XFxuIDUyOTpcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfaW5kX2V4dGVudF9yYW5nZShoYW5kbGUsIHRtcF9pbm9kZSxcXG4gNTMwOlxcdFxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGlfZGF0YVtFWFQ0X0lORF9CTE9DS10pLCBcXHUwMDI2bGIpO1xcbiA1MzE6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTMyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gNTMzOlxcdFxcdH0gZWxzZVxcbiA1MzQ6XFx0XFx0XFx0bGIuY3Vycl9ibG9jayArPSBtYXhfZW50cmllcztcXG4gNTM1OlxcdFxcdGlmIChpX2RhdGFbRVhUNF9ESU5EX0JMT0NLXSkge1xcbiA1MzY6XFx0XFx0XFx0cmV0dmFsID0gdXBkYXRlX2RpbmRfZXh0ZW50X3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLFxcbiA1Mzc6XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaV9kYXRhW0VYVDRfRElORF9CTE9DS10pLCBcXHUwMDI2bGIpO1xcbiA1Mzg6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTM5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gNTQwOlxcdFxcdH0gZWxzZVxcbiA1NDE6XFx0XFx0XFx0bGIuY3Vycl9ibG9jayArPSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xcbiA1NDI6XFx0XFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XFxuIDU0MzpcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsXFxuIDU0NDpcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpX2RhdGFbRVhUNF9USU5EX0JMT0NLXSksIFxcdTAwMjZsYik7XFxuIDU0NTpcXHRcXHRcXHRpZiAocmV0dmFsKVxcbiA1NDY6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA1NDc6XFx0XFx0fVxcbiA1NDg6XFx0XFx0LypcXG4gNTQ5OlxcdFxcdCAqIEJ1aWxkIHRoZSBsYXN0IGV4dGVudFxcbiA1NTA6XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsIFxcdTAwMjZsYik7XFxuIDU1MjpcXHRlcnJfb3V0OlxcbiA1NTM6XFx0XFx0aWYgKHJldHZhbClcXG4gNTU0OlxcdFxcdFxcdC8qXFxuIDU1NTpcXHRcXHRcXHQgKiBGYWlsdXJlIGNhc2UgZGVsZXRlIHRoZSBleHRlbnQgaW5mb3JtYXRpb24gd2l0aCB0aGVcXG4gNTU2OlxcdFxcdFxcdCAqIHRtcF9pbm9kZVxcbiA1NTc6XFx0XFx0XFx0ICovXFxuIDU1ODpcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU1OTpcXHRcXHRlbHNlIHtcXG4gNTYwOlxcdFxcdFxcdHJldHZhbCA9IGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YShoYW5kbGUsIGlub2RlLCB0bXBfaW5vZGUpO1xcbiA1NjE6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTYyOlxcdFxcdFxcdFxcdC8qXFxuIDU2MzpcXHRcXHRcXHRcXHQgKiBpZiB3ZSBmYWlsIHRvIHN3YXAgaW5vZGUgZGF0YSBmcmVlIHRoZSBleHRlbnRcXG4gNTY0OlxcdFxcdFxcdFxcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxcbiA1NjU6XFx0XFx0XFx0XFx0ICovXFxuIDU2NjpcXHRcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU2NzpcXHRcXHR9XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xcbiA1NzA6XFx0XFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XFxuIDU3MTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiA1NzI6XFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuIDU3MzpcXHRcXHRcXHRcXHRyZXR2YWwgPSBlcnI7XFxuIDU3NDpcXHRcXHRcXHRnb3RvIG91dF9zdG9wO1xcbiA1NzU6XFx0XFx0fVxcbiA1NzY6XFx0XFx0LypcXG4gNTc3OlxcdFxcdCAqIE1hcmsgdGhlIHRtcF9pbm9kZSBhcyBvZiBzaXplIHplcm9cXG4gNTc4OlxcdFxcdCAqL1xcbiA1Nzk6XFx0XFx0aV9zaXplX3dyaXRlKHRtcF9pbm9kZSwgMCk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qXFxuIDU4MjpcXHRcXHQgKiBzZXQgdGhlICBpX2Jsb2NrcyBjb3VudCB0byB6ZXJvXFxuIDU4MzpcXHRcXHQgKiBzbyB0aGF0IHRoZSBleHQ0X2V2aWN0X2lub2RlKCkgZG9lcyB0aGVcXG4gNTg0OlxcdFxcdCAqIHJpZ2h0IGpvYlxcbiA1ODU6XFx0XFx0ICpcXG4gNTg2OlxcdFxcdCAqIFdlIGRvbid0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcXG4gNTg3OlxcdFxcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxcbiA1ODg6XFx0XFx0ICovXFxuIDU4OTpcXHRcXHR0bXBfaW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gMDtcXG4gNTkwOlxcdFxcdEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZCA9IHRtcF9jc3VtX3NlZWQ7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdC8qIFJlc2V0IHRoZSBleHRlbnQgZGV0YWlscyAqL1xcbiA1OTM6XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgdG1wX2lub2RlKTtcXG4gNTk0OlxcdG91dF9zdG9wOlxcbiA1OTU6XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gNTk2OlxcdG91dF90bXBfaW5vZGU6XFxuIDU5NzpcXHRcXHR1bmxvY2tfbmV3X2lub2RlKHRtcF9pbm9kZSk7XFxuIDU5ODpcXHRvdXRfdW5sb2NrOlxcbiA1OTk6XFx0XFx0ZXh0NF93cml0ZXBhZ2VzX3VwX3dyaXRlKGlub2RlLVxcdTAwM2VpX3NiLCBhbGxvY19jdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyMy4yMTE4MjE4ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc5MjQxNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW52b2NhdGlvbiBvZiBgZXh0NF9leHRfbWlncmF0ZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IGZvciBgZXh0NF9leHRfbWlncmF0ZWAuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIGl0J3MgdXNlZCBpcyBrZXkuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzbyBsZXQncyBzdGFydCB3aXRoIGEgc2ltcGxlIGBncmVwYCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgd2hlcmUgYGV4dDRfZXh0X21pZ3JhdGVgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIHdoaWNoIHdpbGwgYmUgZXNzZW50aWFsIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBmdW5jdGlvbnMgaW52b2tlIGl0IGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MjUuMDkxMDY2MTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTQ4OTkzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfbWlncmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zMjU0PWludCBleHQ0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zMjU2LS8qIG1pZ3JhdGUuYyAqL1xcbmZzL2V4dDQvZXh0NC5oOjMyNTc6ZXh0ZXJuIGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqKTtcXG5mcy9leHQ0L2V4dDQuaC0zMjU4LWV4dGVybiBpbnQgZXh0NF9pbmRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz01OTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldGZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtNzA1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfRVhURU5UU19GTClcXG5mcy9leHQ0L2lvY3RsLmM6NzA2OlxcdFxcdFxcdGVyciA9IGV4dDRfZXh0X21pZ3JhdGUoaW5vZGUpO1xcbmZzL2V4dDQvaW9jdGwuYy03MDctXFx0XFx0ZWxzZVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNzAxLVxcdFxcdGlub2RlX2xvY2soKGlub2RlKSk7XFxuZnMvZXh0NC9pb2N0bC5jOjE3MDI6XFx0XFx0ZXJyID0gZXh0NF9leHRfbWlncmF0ZShpbm9kZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE3MDMtXFx0XFx0aW5vZGVfdW5sb2NrKChpbm9kZSkpO1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9MzkwPXN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTQwOS1cXG5mcy9leHQ0L21pZ3JhdGUuYzo0MTA6aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L21pZ3JhdGUuYy00MTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OToyNi43ODU5Njk4ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTE2OTY3MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBCdWcgaW4gZXh0NCBFeHRlbnQgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGV4dDRfZXh0X21pZ3JhdGVgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgdGhvc2UgZmFtaWxpYXIgYEVYVDRfSU9DX1NFVEZMQUdTYCBhbmQgYEVYVDRfSU9DX01JR1JBVEVgIGlvY3RscyDigJMgc3RhbmRhcmQgdXNlcnNwYWNlIGZpbGVzeXN0ZW0gY2FsbHMgaW4gZXh0NC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgd2hhdCB2dWxuZXJhYmlsaXR5IGl0J3MgYWRkcmVzc2luZy4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhbiBpc3N1ZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLlxuXG5Fc3NlbnRpYWxseSwgdGhlIHByZS1wYXRjaCBsb2dpYyB3YXMgZmxhd2VkLiBJZiB0aGUgY3J1Y2lhbCBgdXBkYXRlXypfZXh0ZW50X3JhbmdlYCBjYWxscyBmYWlsZWQsIHNldHRpbmcgYHJldHZhbGAgdG8gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUuIElmIHRoZSBqb3VybmFsIGNyZWRpdCBhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgYHJldHZhbGAgd2FzIHNpbGVudGx5IHNldCB0byB6ZXJvLCBldmVuIHRob3VnaCB0aGUgdW5kZXJseWluZyBtaWdyYXRpb24gcHJvY2VzcyBoYWQgZmFpbGVkLiBUaGlzIGxlZCB0byBhIGZhbHNlIHBvc2l0aXZlOiB0aGUgdXNlcnNwYWNlIG9yIGNhbGxpbmcgZnVuY3Rpb24gcmVjZWl2ZWQgYSBzdWNjZXNzIGluZGljYXRpb24gZGVzcGl0ZSB0aGUgYWN0dWFsIGZhaWx1cmUhIFRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gemVybyB0aGUgYHRtcF9pbm9kZWAgYW5kIGV4ZWN1dGUgYGV4dDRfZXh0X3RyZWVfaW5pdGAgd2hpY2ggbWFrZXMgaXQgYXBwZWFyIHN1Y2Nlc3NmdWwuXG5cblRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGluaXRpYWwgZXJyb3IgKGByZXR2YWxgKSBpcyBwcmVzZXJ2ZWQuIFRoZSBwYXRjaGVkIGNvZGUgaW5jbHVkZXMgYW4gaW50ZXJtZWRpYXRlIGBlcnJgIHZhcmlhYmxlIGZvciBgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzYC4gQ3JpdGljYWxseSwgaWYgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AgZmFpbHMsIGl0cyBlcnJvciBjb2RlIGlzIG9ubHkgdXNlZCBpZiBgcmV0dmFsYCBpcyBzdGlsbCB6ZXJvLiBUaGlzIHByb3BhZ2F0ZXMgdGhlIG9yaWdpbmFsIGVycm9yIGlmIGl0IGhhcHBlbmVkLiBUaGUgYGdvdG8gb3V0X3N0b3BgIGVuc3VyZXMgd2UgZXhpdCBncmFjZWZ1bGx5IGFuZCBjb25zaXN0ZW50bHkgd2l0aCB0aGUgY29ycmVjdCBlcnJvciBzdGF0ZS5cblxuVGhpcyBpcyBjbGVhcmx5IGEgYnVnIGZpeCB3aXRoaW4gdGhlIGNvcmUgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL2V4dDQvbWlncmF0ZS5jYC4gSSdsbCBub3cgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBlbHNlIHRoaXMgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MzIuNzAyOTM5NDEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIyODQ0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTozMy4wMzUyMjk3MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE3OTgzNTI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIGV4dDQgTW9kdWxlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZS5vYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBleHQ0LXlgIGJ1aWxkIGNoYWluLiBUaGF0IG1lYW5zIGl0J3Mgb25lIG9mIHRoZSBmaWxlcyB0aGF0IGdldHMgY29tcGlsZWQgaW50byB0aGUgYGV4dDRgIG1vZHVsZSwgYnV0IG9ubHkgd2hlbiBgQ09ORklHX0VYVDRfRlNgIGlzIHNldC4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCdzIGNvbnRyb2xsaW5nIHRoZSBlbmFibGVtZW50IG9mIHRoZSBlbnRpcmUgYGV4dDRgIGZpbGVzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjgzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MzcuMjE1MDY3MzU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEVYVDRfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDU6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXFxuICAxNDpcXHRcXHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcXG4gIDE1OlxcdFxcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxcbiAgMTY6XFx0XFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcXG4gIDE3OlxcdFxcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXFxuICAxODpcXHRcXHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxcbiAgMTk6XFx0XFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XFxuICAyMDpcXHRcXHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcXG4gIDIzOlxcdFxcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxcbiAgMjQ6XFx0XFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxcbiAgMjU6XFx0XFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XFxuICAyNjpcXHRcXHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xcbiAgMjc6XFx0XFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxcbiAgMjg6XFx0XFx0ICBjb21wYXRpYmxlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcXG4gIDMxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuICAzNjpcXHRcXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuICAzOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6MzcuMjE1MTI2MTk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMTk5Mzc2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVhUNCBGaWxlc3lzdGVtIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3Mgc2VlLCBkbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCBmb3IgdGhpcyBhbmFseXNpcz8gUmlnaHQsIGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHN1YnN5c3RlbSBldmVuIHdvcnRoIGZ1enppbmc/XG5cblllcywgYWJzb2x1dGVseS4gVGhlIGNvcmUgc3Vic3lzdGVtIGlzIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIGFuZCB0aGUgZXh0NCBmaWxlc3lzdGVtIHNwZWNpZmljYWxseS4gSXQncyB1c2VyLXJlYWNoYWJsZSwgd2hpY2ggaXMgYSBtYWpvciBwb2ludCBpbiBpdHMgZmF2b3IsIHZpYSBpb2N0bCBjYWxscyBsaWtlIGBFWFQ0X0lPQ19NSUdSQVRFYCBvciBgRlNfSU9DX1NFVEZMQUdTYCAvIGBFWFQ0X0lPQ19TRVRGTEFHU2AuIENydWNpYWxseSwgdGhpcyBwYXJ0aWN1bGFyIGFyZWEgZGlyZWN0bHkgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybiB2YWx1ZXMgd2l0aGluIGBleHQ0X2V4dF9taWdyYXRlKClgLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ3JlYXQgYXJlYSB0byB0YXJnZXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBgZXh0NF9leHRfbWlncmF0ZWAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluLiBCdXQsIGxldCdzIHNlZSB3aGF0IGNhbGxzIGludG8gaXQsIGlzIGl0IGBleHQ0X2lvY3RsYCwgYF9fZXh0NF9pb2N0bGAsIG9yIGBleHQ0X2lvY3RsX3NldGZsYWdzYD8gQWgsIHJpZ2h0LiBgZXh0NF9leHRfbWlncmF0ZWAgc2VlbXMgcHJldHR5IHNwZWNpZmljLCBub3QgYSBmdW5jdGlvbiB0aGF0J3MgdWJpcXVpdG91cyBhY3Jvc3MgdGhlIGNvZGUuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgdGhhdCBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24/IExldCdzIGNoZWNrIHRoZSBjb2RlIGl0c2VsZiwgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYDogYGludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpYC4gQW5kIGdvb2QsIGl0J3MgYSBnbG9iYWwgZnVuY3Rpb24sIGFuZCB0aGUgc3ltYm9sIGlzIGluIHZtbGludXgsIHNvLCBlYXN5IHRvIHRhcmdldC5cblxuT2theSwgbGV0J3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6IFwiV29ydGhGdXp6aW5nOiB0cnVlXCIsIFwiRm9jdXNTeW1ib2xzOiBbYGV4dDRfZXh0X21pZ3JhdGVgXVwiLCBcIkVuYWJsZUNvbmZpZ3M6IFtgRVhUNF9GU2BdXCIsIGFuZCB0aGF0IHN1Y2NpbmN0IHJlYXNvbmluZy4gRG9uZSFcblxuTm93LCBsZXQncyBtb3ZlIGZvcndhcmQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA3MCwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo0OTo0MS40MzUwNjY3NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTIyOTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X21pZ3JhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gZXh0NF9leHRfbWlncmF0ZSgpIHdoZXJlIGFuIGVhcmxpZXIgZXJyb3IgcmV0dXJuIGNvZGUgd2FzIGFjY2lkZW50YWxseSBvdmVyd3JpdHRlbiBieSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKSwgY2F1c2luZyBmYWlsZWQgbWlncmF0aW9uIG9wZXJhdGlvbnMgdG8gaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3MuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEVYVDRfSU9DX01JR1JBVEUgYW5kIEVYVDRfSU9DX1NFVEZMQUdTIGlvY3RscyBvbiBleHQ0IGZpbGVzeXN0ZW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9taWdyYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGV4dDRfZXh0X21pZ3JhdGUoKSB3aGVyZSBhbiBlYXJsaWVyIGVycm9yIHJldHVybiBjb2RlIHdhcyBhY2NpZGVudGFsbHkgb3ZlcndyaXR0ZW4gYnkgZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKCksIGNhdXNpbmcgZmFpbGVkIG1pZ3JhdGlvbiBvcGVyYXRpb25zIHRvIGluY29ycmVjdGx5IHJlcG9ydCBzdWNjZXNzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBFWFQ0X0lPQ19NSUdSQVRFIGFuZCBFWFQ0X0lPQ19TRVRGTEFHUyBpb2N0bHMgb24gZXh0NCBmaWxlc3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDU6NDk6NDEuNTE0MzAzOTMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA4MzA5MTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjQ5OjQxLjUxNDgyMzk5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MDgyNTY2MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cXG5cXG5UaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIGVycm9yIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzUyMDU5NGVlY2ExNTY0ODQ3ODZjZTgxMDdiYjZhZjE3Y2E1YmI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDU6NDk6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi4wMmJiN2MyMGEwMDhhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9taWdyYXRlLmNcbisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5AQCAtNDEwLDcgKzQxMCw3IEBAIHN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4tXHRpbnQgcmV0dmFsID0gMCwgaTtcbitcdGludCByZXR2YWwgPSAwLCBlcnIsIGk7XG4gXHRfX2xlMzIgKmlfZGF0YTtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpO1xuIFx0c3RydWN0IGlub2RlICp0bXBfaW5vZGUgPSBOVUxMO1xuQEAgLTU2Nyw5ICs1NjcsMTIgQEAgaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xuLVx0cmV0dmFsID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4tXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdGlmICghcmV0dmFsKVxuK1x0XHRcdHJldHZhbCA9IGVycjtcbiBcdFx0Z290byBvdXRfc3RvcDtcbitcdH1cbiBcdC8qXG4gXHQgKiBNYXJrIHRoZSB0bXBfaW5vZGUgYXMgb2Ygc2l6ZSB6ZXJvXG4gXHQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjQ5OjQxLjUxNDgyNTM0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMzNDA4MzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgZXh0NCBNaWdyYXRpb24gQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNoYW5nZXMuIExldCdzIHN0YXJ0IGJ5IGluc3BlY3RpbmcgdGhlIGRpZmYsIGZvY3VzaW5nIG9uIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgZnMvZXh0NC9taWdyYXRlLmNgLiBJIGtub3cgdGhhdCdzIHRoZSBwbGFjZSB0byBiZSwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGFueSBjb2RlIGNoYW5nZSDigJMgdGhlIGltbWVkaWF0ZSBjb250ZXh0IGlzIGNydWNpYWwuXG5cblRoZW4sIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgYGV4dDRfZXh0X21pZ3JhdGVgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHNhbWUgZmlsZS4gU2VlaW5nIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGJleW9uZCB0aGUgcGF0Y2ggaXRzZWxmLCB3aWxsIHByb3ZpZGUgdGhlIHJlcXVpcmVkIGJhY2tncm91bmQuIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2VzcyB3aXRoaW4gZXh0NC4gVW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBhbmQgKmhvdyogb2YgdGhlIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo1MDowNC44NDg5MTEzODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9taWdyYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdH0gZWxzZVxcbiA1NDE6XFx0XFx0XFx0bGIuY3Vycl9ibG9jayArPSBtYXhfZW50cmllcyAqIG1heF9lbnRyaWVzO1xcbiA1NDI6XFx0XFx0aWYgKGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdKSB7XFxuIDU0MzpcXHRcXHRcXHRyZXR2YWwgPSB1cGRhdGVfdGluZF9leHRlbnRfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsXFxuIDU0NDpcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpX2RhdGFbRVhUNF9USU5EX0JMT0NLXSksIFxcdTAwMjZsYik7XFxuIDU0NTpcXHRcXHRcXHRpZiAocmV0dmFsKVxcbiA1NDY6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA1NDc6XFx0XFx0fVxcbiA1NDg6XFx0XFx0LypcXG4gNTQ5OlxcdFxcdCAqIEJ1aWxkIHRoZSBsYXN0IGV4dGVudFxcbiA1NTA6XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsIFxcdTAwMjZsYik7XFxuIDU1MjpcXHRlcnJfb3V0OlxcbiA1NTM6XFx0XFx0aWYgKHJldHZhbClcXG4gNTU0OlxcdFxcdFxcdC8qXFxuIDU1NTpcXHRcXHRcXHQgKiBGYWlsdXJlIGNhc2UgZGVsZXRlIHRoZSBleHRlbnQgaW5mb3JtYXRpb24gd2l0aCB0aGVcXG4gNTU2OlxcdFxcdFxcdCAqIHRtcF9pbm9kZVxcbiA1NTc6XFx0XFx0XFx0ICovXFxuIDU1ODpcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU1OTpcXHRcXHRlbHNlIHtcXG4gNTYwOlxcdFxcdFxcdHJldHZhbCA9IGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YShoYW5kbGUsIGlub2RlLCB0bXBfaW5vZGUpO1xcbiA1NjE6XFx0XFx0XFx0aWYgKHJldHZhbClcXG4gNTYyOlxcdFxcdFxcdFxcdC8qXFxuIDU2MzpcXHRcXHRcXHRcXHQgKiBpZiB3ZSBmYWlsIHRvIHN3YXAgaW5vZGUgZGF0YSBmcmVlIHRoZSBleHRlbnRcXG4gNTY0OlxcdFxcdFxcdFxcdCAqIGRldGFpbHMgb2YgdGhlIHRtcCBpbm9kZVxcbiA1NjU6XFx0XFx0XFx0XFx0ICovXFxuIDU2NjpcXHRcXHRcXHRcXHRmcmVlX2V4dF9ibG9jayhoYW5kbGUsIHRtcF9pbm9kZSk7XFxuIDU2NzpcXHRcXHR9XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdC8qIFdlIG1hcmsgdGhlIHRtcF9pbm9kZSBkaXJ0eSB2aWEgZXh0NF9leHRfdHJlZV9pbml0LiAqL1xcbiA1NzA6XFx0XFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgMSwgMCk7XFxuIDU3MTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiA1NzI6XFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuIDU3MzpcXHRcXHRcXHRcXHRyZXR2YWwgPSBlcnI7XFxuIDU3NDpcXHRcXHRcXHRnb3RvIG91dF9zdG9wO1xcbiA1NzU6XFx0XFx0fVxcbiA1NzY6XFx0XFx0LypcXG4gNTc3OlxcdFxcdCAqIE1hcmsgdGhlIHRtcF9pbm9kZSBhcyBvZiBzaXplIHplcm9cXG4gNTc4OlxcdFxcdCAqL1xcbiA1Nzk6XFx0XFx0aV9zaXplX3dyaXRlKHRtcF9pbm9kZSwgMCk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qXFxuIDU4MjpcXHRcXHQgKiBzZXQgdGhlICBpX2Jsb2NrcyBjb3VudCB0byB6ZXJvXFxuIDU4MzpcXHRcXHQgKiBzbyB0aGF0IHRoZSBleHQ0X2V2aWN0X2lub2RlKCkgZG9lcyB0aGVcXG4gNTg0OlxcdFxcdCAqIHJpZ2h0IGpvYlxcbiA1ODU6XFx0XFx0ICpcXG4gNTg2OlxcdFxcdCAqIFdlIGRvbid0IG5lZWQgdG8gdGFrZSB0aGUgaV9sb2NrIGJlY2F1c2VcXG4gNTg3OlxcdFxcdCAqIHRoZSBpbm9kZSBpcyBub3QgdmlzaWJsZSB0byB1c2VyIHNwYWNlLlxcbiA1ODg6XFx0XFx0ICovXFxuIDU4OTpcXHRcXHR0bXBfaW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gMDtcXG4gNTkwOlxcdFxcdEVYVDRfSSh0bXBfaW5vZGUpLVxcdTAwM2VpX2NzdW1fc2VlZCA9IHRtcF9jc3VtX3NlZWQ7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdC8qIFJlc2V0IHRoZSBleHRlbnQgZGV0YWlscyAqL1xcbiA1OTM6XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgdG1wX2lub2RlKTtcXG4gNTk0OlxcdG91dF9zdG9wOlxcbiA1OTU6XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gNTk2OlxcdG91dF90bXBfaW5vZGU6XFxuIDU5NzpcXHRcXHR1bmxvY2tfbmV3X2lub2RlKHRtcF9pbm9kZSk7XFxuIDU5ODpcXHRvdXRfdW5sb2NrOlxcbiA1OTk6XFx0XFx0ZXh0NF93cml0ZXBhZ2VzX3VwX3dyaXRlKGlub2RlLVxcdTAwM2VpX3NiLCBhbGxvY19jdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNTo1MDowNC44NDg5OTAxODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0ODM4MDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCdWcgRml4IGluIGV4dDRfZXh0X21pZ3JhdGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgZXh0NF9leHRfbWlncmF0ZWAgZnVuY3Rpb24sIHRoZXJlIHdhcyBhIGNyaXRpY2FsIGZsYXcuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBzdHJ1Y3R1cmVkIGxpa2UgdGhpczogaWYgYW4gZXJyb3Igb2NjdXJyZWQgaW4gYW4gZWFybGllciBzdGVwIChlLmcuLCBgdXBkYXRlX3RpbmRfZXh0ZW50X3JhbmdlYCwgYGZpbmlzaF9yYW5nZWAsIG9yIGBleHQ0X2V4dF9zd2FwX2lub2RlX2RhdGFgKSwgdGhlIGByZXR2YWxgIHZhcmlhYmxlIHdvdWxkIGhvbGQgdGhhdCBlcnJvciBjb2RlLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNgIHdvdWxkIG92ZXJ3cml0ZSBgcmV0dmFsYCwgZXZlbiBpZiB0aGF0IGNhbGwgc3VjY2VlZGVkLiBUaGlzIG1lYW50IHRoZSBmdW5jdGlvbiBjb3VsZCBlcnJvbmVvdXNseSByZXBvcnQgc3VjY2VzcyAocmV0dXJuIDApIGRlc3BpdGUgYSBwcmlvciBmYWlsdXJlLiBUaGF0J3MgYSBjbGFzc2ljIGVycm9yLWhhbmRsaW5nIGJ1ZyFcblxuVGhlIGZpeCBpcyBzaW1wbGUgYW5kIGVsZWdhbnQuIEl0IGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgZXJyYCB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUgb2YgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AuIE5vdywgaWYgYGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c2AgZmFpbHMsIHdlIG9ubHkgdXBkYXRlIGByZXR2YWxgIGlmIGl0ICp3YXNuJ3QqIGFscmVhZHkgc2V0IHRvIGFuIGVycm9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgb3JpZ2luYWwgZXJyb3IgY29kZSBmcm9tIHRoZSBlYXJsaWVyIGZhaWxpbmcgc3RlcCBpcyBwcmVzZXJ2ZWQgYW5kIHJldHVybmVkIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYSBuZXcgcHJvYmxlbSwgZXNwZWNpYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJ3ZlIGxvb2tlZCBjbG9zZWx5OlxuXG4qICAgYGVycmAgaXMgYSBsb2NhbCB2YXJpYWJsZSwgcHJvcGVybHkgYXNzaWduZWQuXG4qICAgYHJldHZhbGAgaXMgaW5pdGlhbGl6ZWQgYW5kIGNvbnNpc3RlbnRseSBhc3NpZ25lZCB0aHJvdWdob3V0LlxuKiAgIFRoZXJlJ3Mgbm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgaW52b2x2ZWQsIHNvIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS5cbiogICBUaGVyZSdzIG5vIG1hbmlwdWxhdGlvbiBvZiBzdHJ1Y3QgZmllbGRzLCBwb2ludGVycywgb3IgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuXG4qICAgVGhlIGRhdGEgc2l6ZXMgcmVtYWluIHVuY2hhbmdlZC5cblxuSW4gc2hvcnQsIHRoaXMgaXMgcHVyZWx5IGEgY29ycmVjdGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGNyZWF0ZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZGF0YSBjb3JydXB0aW9uLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgS0FTQU4sIEtNU0FOLCBhbmQgc3RhbmRhcmQgdGVzdGluZy4gU3RhbmRhcmQgYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcHBsaWVzLCBhcyBleHBlY3RlZC4gSSdtIHNhdGlzZmllZCB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIvTG9ja2RlcCkgYXJlIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gc2lnbnMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzLiBJIHRoaW5rIHdlIGNhbiBzYWZlbHkgYXBwbHkgYHNldC1yZXN1bHRzYCBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI3LCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA1OjUwOjEwLjU5NzM3NDA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cXG5cXG5UaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIGVycm9yIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgZXh0NF9leHRfbWlncmF0ZSgpYCB3aGVyZSBgcmV0dmFsYCAod2hpY2ggbWF5IGhvbGQgYW4gZXJyb3IgY29kZSBmcm9tIHByaW9yIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGxpa2UgYHVwZGF0ZV90aW5kX2V4dGVudF9yYW5nZWAgb3IgYGV4dDRfZXh0X3N3YXBfaW5vZGVfZGF0YWApIHdhcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHMoKWAuIEJ5IGludHJvZHVjaW5nIGEgc2VwYXJhdGUgYGVycmAgdmFyaWFibGUsIHByZXZpb3VzIGVycm9ycyBhcmUgY29ycmVjdGx5IHByZXNlcnZlZCB1cG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi5cXG5cXG5UaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIGVycm9yIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzqrb6[1] Phase: Succeeded StartedAt: 2026-09-10 05:50:22 +0000 UTC FinishedAt: 2026-09-10 05:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 05:50:22 +0000 UTC FinishedAt: 2026-09-10 05:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2] Phase: Succeeded StartedAt: 2026-09-10 05:50:22 +0000 UTC FinishedAt: 2026-09-10 09:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 05:50:22 +0000 UTC FinishedAt: 2026-09-10 09:29:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 05:50:22 +0000 UTC FinishedAt: 2026-09-10 05:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 05:50:22 +0000 UTC FinishedAt: 2026-09-10 05:50:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-convert-artifact-2863457034/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 05:50:32 +0000 UTC FinishedAt: 2026-09-10 06:06:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 05:50:32 +0000 UTC FinishedAt: 2026-09-10 06:06:49 +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:*ade1b1be-6873-4bea-b4e4-658551dfd93f,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-workflowzqrb6/series-workflowzqrb6-convert-artifact-2863457034/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": "0e1a4aaf-f2cd-4140-a3c6-4bd2fc46f71e", "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-workflowzqrb6/series-workflowzqrb6-build-action-3564998136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 05:50:32 +0000 UTC FinishedAt: 2026-09-10 06:06:39 +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:*ade1b1be-6873-4bea-b4e4-658551dfd93f,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-workflowzqrb6/series-workflowzqrb6-convert-artifact-2863457034/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": "0e1a4aaf-f2cd-4140-a3c6-4bd2fc46f71e", "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-workflowzqrb6/series-workflowzqrb6-build-action-3564998136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 06:06:49 +0000 UTC FinishedAt: 2026-09-10 06:06:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 06:06:49 +0000 UTC FinishedAt: 2026-09-10 06:06:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 06:06:49 +0000 UTC FinishedAt: 2026-09-10 06:06:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 06:06:49 +0000 UTC FinishedAt: 2026-09-10 06:06:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-convert-artifact-733140901/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 06:06:59 +0000 UTC FinishedAt: 2026-09-10 06:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 06:06:59 +0000 UTC FinishedAt: 2026-09-10 06:08:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e1a4aaf-f2cd-4140-a3c6-4bd2fc46f71e,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-workflowzqrb6/series-workflowzqrb6-build-action-3564998136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 06:08:52 +0000 UTC FinishedAt: 2026-09-10 06:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 06:08:52 +0000 UTC FinishedAt: 2026-09-10 06:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 06:08:52 +0000 UTC FinishedAt: 2026-09-10 06:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 06:08:52 +0000 UTC FinishedAt: 2026-09-10 06:25:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ade1b1be-6873-4bea-b4e4-658551dfd93f,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-workflowzqrb6/series-workflowzqrb6-convert-artifact-733140901/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": "ed68765c-c1c1-4ff3-a2f2-6b4420103b23", "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-workflowzqrb6/series-workflowzqrb6-build-action-3270250481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 06:08:52 +0000 UTC FinishedAt: 2026-09-10 06:24:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ade1b1be-6873-4bea-b4e4-658551dfd93f,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-workflowzqrb6/series-workflowzqrb6-convert-artifact-733140901/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": "ed68765c-c1c1-4ff3-a2f2-6b4420103b23", "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-workflowzqrb6/series-workflowzqrb6-build-action-3270250481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 06:25:02 +0000 UTC FinishedAt: 2026-09-10 06:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 06:25:02 +0000 UTC FinishedAt: 2026-09-10 06:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 06:25:02 +0000 UTC FinishedAt: 2026-09-10 06:26:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 06:25:02 +0000 UTC FinishedAt: 2026-09-10 06:26:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed68765c-c1c1-4ff3-a2f2-6b4420103b23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-build-action-3270250481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 06:26:58 +0000 UTC FinishedAt: 2026-09-10 09:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 06:26:58 +0000 UTC FinishedAt: 2026-09-10 09:29:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0e1a4aaf-f2cd-4140-a3c6-4bd2fc46f71e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed68765c-c1c1-4ff3-a2f2-6b4420103b23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-build-action-3564998136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-build-action-3270250481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 06:26:58 +0000 UTC FinishedAt: 2026-09-10 06:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 06:26:58 +0000 UTC FinishedAt: 2026-09-10 06:27:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-convert-artifact-1724966186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 06:26:58 +0000 UTC FinishedAt: 2026-09-10 06:26:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 06:26:58 +0000 UTC FinishedAt: 2026-09-10 06:26:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 06:26:58 +0000 UTC FinishedAt: 2026-09-10 06:26:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 06:27:08 +0000 UTC FinishedAt: 2026-09-10 09:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqrb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"64de2fe2-af70-439a-82a1-7f8a51935d8d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 06:27:08 +0000 UTC FinishedAt: 2026-09-10 09:29:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e1a4aaf-f2cd-4140-a3c6-4bd2fc46f71e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed68765c-c1c1-4ff3-a2f2-6b4420103b23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-build-action-3564998136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-build-action-3270250481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqrb6/series-workflowzqrb6-convert-artifact-1724966186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}