Name: series-workflowql9bf Phase: Succeeded StartedAt: 2026-09-10 12:22:39 +0000 UTC FinishedAt: 2026-09-10 16:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[0] Phase: Succeeded StartedAt: 2026-09-10 12:22:39 +0000 UTC FinishedAt: 2026-09-10 12:25:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 12:22:39 +0000 UTC FinishedAt: 2026-09-10 12:25:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "446369a5-0dc4-4b44-8961-3dfc2c3e2759" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_mq_free_rqs", "blk_mq_sched_free_rqs", "blk_mq_free_map_and_rqs" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX2ZyZWVfcnFzJiMzNDssCiAgICAmIzM0O2Jsa19tcV9zY2hlZF9mcmVlX3JxcyYjMzQ7LAogICAgJiMzNDtibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXHUwMDNlbnJfaHdfcXVldWVzIChlLmcuIEJMS19NUV9OT19IQ1RYX0lEWCkuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBxdWV1ZS9lbGV2YXRvciB0ZWFyZG93biBsb2dpYyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIChzdWNoIGFzIGVsZXZhdG9yIHN3aXRjaGluZyBvciBxdWV1ZSBjbGVhbnVwKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiODM3ZjdhMTYzOWRjMTliNzk0OTIzZDY5NDVlZGRiNjRkZGZkODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMjoyNDozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuYyBiL2Jsb2NrL2Jsay1tcS5jXG5pbmRleCAyYzg1MDMzMGEzMmJjLi44ZTY3MjZiMzdjNjUxIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tcS5jXG5AQCAtMzQ3Myw4ICYjNDM7MzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuIFxuIFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbi1cdGVsc2VcbiYjNDM7XHRlbHNlIGlmIChoY3R4X2lkeCBcdTAwM2Mgc2V0LVx1MDAzZW5yX2h3X3F1ZXVlcylcbiBcdFx0ZHJ2X3RhZ3MgPSBzZXQtXHUwMDNldGFnc1toY3R4X2lkeF07XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuIFxuIFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbiBcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTI6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfZnJlZV9ycXMmIzM0OywKICAgICYjMzQ7YmxrX21xX3NjaGVkX2ZyZWVfcnFzJiMzNDssCiAgICAmIzM0O2Jsa19tcV9mcmVlX21hcF9hbmRfcnFzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYmxrX21xX2ZyZWVfcnFzKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFycmF5IGluZGV4aW5nIG9uIHNldC1cdTAwM2V0YWdzIHdoZW4gaGN0eF9pZHggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHNldC1cdTAwM2Vucl9od19xdWV1ZXMgKGUuZy4gQkxLX01RX05PX0hDVFhfSURYKS4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHF1ZXVlL2VsZXZhdG9yIHRlYXJkb3duIGxvZ2ljIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgZWxldmF0b3Igc3dpdGNoaW5nIG9yIHF1ZXVlIGNsZWFudXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCAyYzg1MDMzMGEzMmJjLi44ZTY3MjZiMzdjNjUxIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuYwpAQCAtMzQ3Myw4ICYjNDM7MzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLAogCiAJaWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtJmd0O2ZsYWdzKSkKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3NoYXJlZF90YWdzOwotCWVsc2UKJiM0MzsJZWxzZSBpZiAoaGN0eF9pZHggJmx0OyBzZXQtJmd0O25yX2h3X3F1ZXVlcykKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3RhZ3NbaGN0eF9pZHhdOwomIzQzOwllbHNlCiYjNDM7CQlkcnZfdGFncyA9IE5VTEw7CiAKIAlpZiAodGFncy0mZ3Q7c3RhdGljX3JxcyAmYW1wOyZhbXA7IHNldC0mZ3Q7b3BzLSZndDtleGl0X3JlcXVlc3QpIHsKIAkJaW50IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjaGFuZ2U6CgoqKkFuYWx5emluZyB0aGUgQ29tbWl0IGFuZCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNvbW1pdCB0aGF0IHRvdWNoZXMgYGJsb2NrL2Jsay1tcS5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgYmxrX21xX2ZyZWVfcnFzYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBwYXJ0IG9mIHRoZSBibG9jayBsYXllciBpcyBjcml0aWNhbCwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAzNDczIGluIGBibG9jay9ibGstbXEuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhpcyBmdW5jdGlvbiBsaXZlcywgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaWtlbHkgY2VudGVyZWQuIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSByYXcgc291cmNlLiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDY1Olx0XG4zNDY2Olx0dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcbjM0Njc6XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXG4zNDY4Olx0e1xuMzQ2OTpcdFx0c3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncztcbjM0NzA6XHRcbjM0NzE6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnRhZ3MtXHUwMDNlcGFnZV9saXN0KSlcbjM0NzI6XHRcdFx0cmV0dXJuO1xuMzQ3MzpcdFxuMzQ3NDpcdFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuMzQ3NTpcdFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbjM0NzY6XHRcdGVsc2UgaWYgKGhjdHhfaWR4IFx1MDAzYyBzZXQtXHUwMDNlbnJfaHdfcXVldWVzKVxuMzQ3NzpcdFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XTtcbjM0Nzg6XHRcdGVsc2VcbjM0Nzk6XHRcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuMzQ4MDpcdFxuMzQ4MTpcdFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbjM0ODI6XHRcdFx0aW50IGk7XG4zNDgzOlx0XG4zNDg0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhZ3MtXHUwMDNlbnJfdGFnczsgaSYjNDM7JiM0MzspIHtcbjM0ODU6XHRcdFx0XHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSB0YWdzLVx1MDAzZXN0YXRpY19ycXNbaV07XG4zNDg2Olx0XG4zNDg3Olx0XHRcdFx0aWYgKCFycSlcbjM0ODg6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzQ4OTpcdFx0XHRcdHNldC1cdTAwM2VvcHMtXHUwMDNlZXhpdF9yZXF1ZXN0KHNldCwgcnEsIGhjdHhfaWR4KTtcbjM0OTA6XHRcdFx0XHR0YWdzLVx1MDAzZXN0YXRpY19ycXNbaV0gPSBOVUxMO1xuMzQ5MTpcdFx0XHR9XG4zNDkyOlx0XHR9XG4zNDkzOlx0XG4zNDk0Olx0XHRibGtfbXFfY2xlYXJfcnFfbWFwcGluZyhkcnZfdGFncywgdGFncyk7XG4zNDk1Olx0XHQvKlxuMzQ5NjpcdFx0ICogRnJlZSByZXF1ZXN0IHBhZ2VzIGluIFNSQ1UgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBmcm9tXG4zNDk3Olx0XHQgKiBibGtfbXFfZnJlZV90YWdzKCkuXG4zNDk4Olx0XHQgKi9cbjM0OTk6XHR9XG4zNTAwOlx0XG4zNTAxOlx0dm9pZCBibGtfbXFfZnJlZV9ycV9tYXAoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncylcbjM1MDI6XHR7XG4zNTAzOlx0XHRrZnJlZSh0YWdzLVx1MDAzZXJxcyk7XG4zNTA0Olx0XHR0YWdzLVx1MDAzZXJxcyA9IE5VTEw7XG4zNTA1Olx0XHRrZnJlZSh0YWdzLVx1MDAzZXN0YXRpY19ycXMpO1xuMzUwNjpcdFx0dGFncy1cdTAwM2VzdGF0aWNfcnFzID0gTlVMTDtcbjM1MDc6XHRcbjM1MDg6XHRcdGJsa19tcV9mcmVlX3RhZ3Moc2V0LCB0YWdzKTtcbjM1MDk6XHR9XG4zNTEwOlx0XG4zNTExOlx0c3RhdGljIGVudW0gaGN0eF90eXBlIGhjdHhfaWR4X3RvX3R5cGUoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXG4zNTEyOlx0XHRcdHVuc2lnbmVkIGludCBoY3R4X2lkeClcbjM1MTM6XHR7XG4zNTE0Olx0XHRpbnQgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTczCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGJsa19tcV9mcmVlX3Jxc2AgQ2FsbHNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgYmxrX21xX2ZyZWVfcnFzYC4gVGltZSB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGV4ZWN1dGlvbiBwYXRocyB0aGF0IGxlYWQgdG8gYGJsa19tcV9mcmVlX3Jxc2AgYmVpbmcgY2FsbGVkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IFdoYXQgbG9ja3MgYXJlIGhlbGQsIGlmIGFueSwgdXBvbiBlbnRyeT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmN1cnJlbmN5IGNvbmNlcm5zPyBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGhlcmU6IHdoZW4gYW5kIHdoeSBhcmUgcmVxdWVzdCBxdWV1ZXMgYmVpbmcgcmVsZWFzZWQ/IFRoaXMgaXMgcHJvYmFibHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYmxvY2sgbGF5ZXImIzM5O3MgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBjcm9zcy1yZWZlcmVuY2VzIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9mcmVlX3JxcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEtc2NoZWQuYz02NzA9dm9pZCBibGtfbXFfc2NoZWRfZnJlZV9ycXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjc1LVx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVx1MDAzZXRhZ19zZXQtXHUwMDNlZmxhZ3MpKSB7XG5ibG9jay9ibGstbXEtc2NoZWQuYzo2NzY6XHRcdGJsa19tcV9mcmVlX3JxcyhxLVx1MDAzZXRhZ19zZXQsIHEtXHUwMDNlc2NoZWRfc2hhcmVkX3RhZ3MsXG5ibG9jay9ibGstbXEtc2NoZWQuYy02NzctXHRcdFx0XHRCTEtfTVFfTk9fSENUWF9JRFgpO1xuLS1cbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY4MC1cdFx0XHRpZiAoaGN0eC1cdTAwM2VzY2hlZF90YWdzKVxuYmxvY2svYmxrLW1xLXNjaGVkLmM6NjgxOlx0XHRcdFx0YmxrX21xX2ZyZWVfcnFzKHEtXHUwMDNldGFnX3NldCxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY4Mi1cdFx0XHRcdFx0XHRoY3R4LVx1MDAzZXNjaGVkX3RhZ3MsIGkpO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTM0Mzc9c3RhdGljIHZvaWQgYmxrX21xX2NsZWFyX3JxX21hcHBpbmcoc3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncyxcbi0tXG5ibG9jay9ibGstbXEuYy0zNDY1LVxuYmxvY2svYmxrLW1xLmM6MzQ2Njp2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuYmxvY2svYmxrLW1xLmMtMzQ2Ny1cdFx0ICAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXG4tLVxuYmxvY2svYmxrLW1xLmM9MzU4OT1zdGF0aWMgaW50IGJsa19tcV9hbGxvY19ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXG4tLVxuYmxvY2svYmxrLW1xLmMtMzY1OS1mYWlsOlxuYmxvY2svYmxrLW1xLmM6MzY2MDpcdGJsa19tcV9mcmVlX3JxcyhzZXQsIHRhZ3MsIGhjdHhfaWR4KTtcbmJsb2NrL2Jsay1tcS5jLTM2NjEtXHRyZXR1cm4gLUVOT01FTTtcbi0tXG5ibG9jay9ibGstbXEuYz00MTQ1PXZvaWQgYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXG4tLVxuYmxvY2svYmxrLW1xLmMtNDE0OS1cdGlmICh0YWdzKSB7XG5ibG9jay9ibGstbXEuYzo0MTUwOlx0XHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XG5ibG9jay9ibGstbXEuYy00MTUxLVx0XHRibGtfbXFfZnJlZV9ycV9tYXAoc2V0LCB0YWdzKTtcbi0tXG5ibG9jay9ibGstbXEuaD01OD12b2lkIGJsa19tcV9wdXRfcnFfcmVmKHN0cnVjdCByZXF1ZXN0ICpycSk7XG4tLVxuYmxvY2svYmxrLW1xLmgtNjItICovXG5ibG9jay9ibGstbXEuaDo2Mzp2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuYmxvY2svYmxrLW1xLmgtNjQtXHRcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTIyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBNUSBTY2hlZHVsaW5nIGFuZCBSZXNvdXJjZSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYmxvY2svYmxrLW1xLXNjaGVkLmM6Njc2YCBzbmlwcGV0LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHEtJmd0O3RhZ19zZXQtJmd0O2ZsYWdzKSlgLiAgSXQgYXBwZWFycyB3ZSYjMzk7cmUgZGVjaWRpbmcgd2hldGhlciB0byBjYWxsIGBibGtfbXFfZnJlZV9ycXNgIGJhc2VkIG9uIHNoYXJlZCB0YWcgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGRpcmVjdGx5IGZyZWVzIHJlcXVlc3Qgc3RydWN0dXJlcyAoYHJxc2ApIGlmIHRhZ3MgYXJlIHNoYXJlZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAmIzM0O1doZW4gZWxzZSBpcyBgYmxrX21xX2ZyZWVfcnFzYCBjYWxsZWQsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29udGV4dHM/JiMzNDsKClRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXMuIExldCBtZSBsb29rIGZvciBjYWxscyB0byBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCB3aGljaCBtaWdodCBwcm92aWRlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBDb250ZXh0dWFsbHksIEkmIzM5O2xsIHJldmlldyBhcm91bmQgbGluZSA2NzAgaW4gYGJsay1tcS1zY2hlZC5jYCBhbmQgYXJvdW5kIGxpbmUgMzQzNyBpbiBgYmxvY2svYmxrLW1xLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIHNjaGVkdWxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcmVxdWVzdCBzdHJ1Y3R1cmVzIGFuZCB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkIGluIGEgc2hhcmVkIHRhZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS1zY2hlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcdGJsa19tcV9zY2hlZF90YWdzX3RlYXJkb3duKHEsIGZsYWdzKTtcbiA2NjE6XHRcdGtvYmplY3RfcHV0KFx1MDAyNmVxLVx1MDAzZWtvYmopO1xuIDY2MjpcdFx0cS1cdTAwM2VlbGV2YXRvciA9IE5VTEw7XG4gNjYzOlx0XHRyZXR1cm4gcmV0O1xuIDY2NDpcdH1cbiA2NjU6XHRcbiA2NjY6XHQvKlxuIDY2NzpcdCAqIGNhbGxlZCBpbiBlaXRoZXIgYmxrX3F1ZXVlX2NsZWFudXAgb3IgZWxldmF0b3Jfc3dpdGNoLCB0YWdzZXRcbiA2Njg6XHQgKiBpcyByZXF1aXJlZCBmb3IgZnJlZWluZyByZXF1ZXN0c1xuIDY2OTpcdCAqL1xuIDY3MDpcdHZvaWQgYmxrX21xX3NjaGVkX2ZyZWVfcnFzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIDY3MTpcdHtcbiA2NzI6XHRcdHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4O1xuIDY3MzpcdFx0dW5zaWduZWQgbG9uZyBpO1xuIDY3NDpcdFxuIDY3NTpcdFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVx1MDAzZXRhZ19zZXQtXHUwMDNlZmxhZ3MpKSB7XG4gNjc2Olx0XHRcdGJsa19tcV9mcmVlX3JxcyhxLVx1MDAzZXRhZ19zZXQsIHEtXHUwMDNlc2NoZWRfc2hhcmVkX3RhZ3MsXG4gNjc3Olx0XHRcdFx0XHRCTEtfTVFfTk9fSENUWF9JRFgpO1xuIDY3ODpcdFx0fSBlbHNlIHtcbiA2Nzk6XHRcdFx0cXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpIHtcbiA2ODA6XHRcdFx0XHRpZiAoaGN0eC1cdTAwM2VzY2hlZF90YWdzKVxuIDY4MTpcdFx0XHRcdFx0YmxrX21xX2ZyZWVfcnFzKHEtXHUwMDNldGFnX3NldCxcbiA2ODI6XHRcdFx0XHRcdFx0XHRoY3R4LVx1MDAzZXNjaGVkX3RhZ3MsIGkpO1xuIDY4MzpcdFx0XHR9XG4gNjg0Olx0XHR9XG4gNjg1Olx0fVxuIDY4NjpcdFxuIDY4NzpcdHZvaWQgYmxrX21xX2V4aXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSlcbiA2ODg6XHR7XG4gNjg5Olx0XHRzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDtcbiA2OTA6XHRcdHVuc2lnbmVkIGxvbmcgaTtcbiA2OTE6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XG4gNjkyOlx0XG4gNjkzOlx0XHRxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkge1xuIDY5NDpcdFx0XHRpZiAoZS1cdTAwM2V0eXBlLVx1MDAzZW9wcy5leGl0X2hjdHggXHUwMDI2XHUwMDI2IGhjdHgtXHUwMDNlc2NoZWRfZGF0YSkge1xuIDY5NTpcdFx0XHRcdGUtXHUwMDNldHlwZS1cdTAwM2VvcHMuZXhpdF9oY3R4KGhjdHgsIGkpO1xuIDY5NjpcdFx0XHRcdGhjdHgtXHUwMDNlc2NoZWRfZGF0YSA9IE5VTEw7XG4gNjk3Olx0XHRcdH1cbiA2OTg6XHRcdFx0ZmxhZ3MgPSBoY3R4LVx1MDAzZWZsYWdzO1xuIDY5OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byBibGtfbXFfY2xlYXJfcnFfbWFwcGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgYmxrX21xX2NsZWFyX3JxX21hcHBpbmdgIGluIGBibG9jay9ibGstbXEuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYmxvY2sgbXVsdGktcXVldWUgSS9PIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgYmxvY2sgbGF5ZXIgaW50ZXJuYWxzIHRlbGxzIG1lIHRoaXMgbXVzdCBiZSBhYm91dCBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBhIHJlcXVlc3QgcXVldWUgZW50cnkgKGBycWApIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoZSBuYW1lIGltcGxpZXMgaXTigJlzIGEgY2xlYXJpbmcgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggZnJlZWluZyByZXNvdXJjZXMgb3IgcmVzZXR0aW5nIHBvaW50ZXJzLiBJIGV4cGVjdCBpdCYjMzk7cyBpbnZva2VkIHdoZW4gYW4gSS9PIHJlcXVlc3QgY29tcGxldGVzLCBpcyBjYW5jZWxsZWQsIG9yIHVuZGVyZ29lcyBzb21lIGZvcm0gb2YgcmVzY2hlZHVsaW5nIHdoZXJlIGl0cyBtYXBwaW5nIG5lZWRzIHRvIGJlIGludmFsaWRhdGVkLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVxdWVzdCBxdWV1ZSAoYGJsa19tcV9od19xdWV1ZWApIHN0cnVjdHVyZXMgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBzeW5jaHJvbml6YXRpb24gYXNwZWN0cyB0b28sIHRoZSBsb2NrcyBhbmQgbWVtb3J5IGJhcnJpZXJzLCBiZWNhdXNlIHRoaXMgaXMgYSBoaWdobHkgY29uY3VycmVudCBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgd2hhdCBsb2NrcyBpdCYjMzk7cyB1c2luZyB3aWxsIGJlIHZpdGFsLiBSaWdodCwgdGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDM1Olx0XG4zNDM2Olx0LyogY2FsbGVkIGJlZm9yZSBmcmVlaW5nIHJlcXVlc3QgcG9vbCBpbiBAdGFncyAqL1xuMzQzNzpcdHN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXG4zNDM4Olx0XHRcdFx0XHQgICAgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxuMzQzOTpcdHtcbjM0NDA6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMzQ0MTpcdFxuMzQ0MjpcdFx0LypcbjM0NDM6XHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2xlYXIgbWFwcGluZyBpZiBkcml2ZXIgdGFncyBpcyBub3QgaW5pdGlhbGl6ZWRcbjM0NDQ6XHRcdCAqIG9yIHRoZSBtYXBwaW5nIGJlbG9uZ3MgdG8gdGhlIGRyaXZlciB0YWdzLlxuMzQ0NTpcdFx0ICovXG4zNDQ2Olx0XHRpZiAoIWRydl90YWdzIHx8IGRydl90YWdzID09IHRhZ3MpXG4zNDQ3Olx0XHRcdHJldHVybjtcbjM0NDg6XHRcbjM0NDk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgXHUwMDI2dGFncy1cdTAwM2VwYWdlX2xpc3QsIGxydSkge1xuMzQ1MDpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpO1xuMzQ1MTpcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICYjNDM7IG9yZGVyX3RvX3NpemUocGFnZS1cdTAwM2Vwcml2YXRlKTtcbjM0NTI6XHRcdFx0aW50IGk7XG4zNDUzOlx0XG4zNDU0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRydl90YWdzLVx1MDAzZW5yX3RhZ3M7IGkmIzQzOyYjNDM7KSB7XG4zNDU1Olx0XHRcdFx0c3RydWN0IHJlcXVlc3QgKnJxID0gZHJ2X3RhZ3MtXHUwMDNlcnFzW2ldO1xuMzQ1NjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcnFfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJxO1xuMzQ1NzpcdFxuMzQ1ODpcdFx0XHRcdGlmIChycV9hZGRyIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IHJxX2FkZHIgXHUwMDNjIGVuZCkge1xuMzQ1OTpcdFx0XHRcdFx0V0FSTl9PTl9PTkNFKHJlcV9yZWZfcmVhZChycSkgIT0gMCk7XG4zNDYwOlx0XHRcdFx0XHRjbXB4Y2hnKFx1MDAyNmRydl90YWdzLVx1MDAzZXJxc1tpXSwgcnEsIE5VTEwpO1xuMzQ2MTpcdFx0XHRcdH1cbjM0NjI6XHRcdFx0fVxuMzQ2MzpcdFx0fVxuMzQ2NDpcdH1cbjM0NjU6XHRcbjM0NjY6XHR2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuMzQ2NzpcdFx0XHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeClcbjM0Njg6XHR7XG4zNDY5Olx0XHRzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzO1xuMzQ3MDpcdFxuMzQ3MTpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dGFncy1cdTAwM2VwYWdlX2xpc3QpKVxuMzQ3MjpcdFx0XHRyZXR1cm47XG4zNDczOlx0XG4zNDc0Olx0XHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cdTAwM2VmbGFncykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBCbG9jayBMYXllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBjaGFuZ2UgaW4gaG93IGBkcnZfdGFnc2AgaXMgYXNzaWduZWQ6IGl0IG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgaGN0eF9pZHhgIGJlaW5nIHdpdGhpbiBib3VuZHMgYmVmb3JlIGFjY2Vzc2luZyBgc2V0LSZndDt0YWdzW11gLiBUaGUgb3JpZ2luYWwgY29kZSwgYXBwYXJlbnRseSwgZGlkbiYjMzk7dCBkbyB0aGlzLCBhbmQgSSBpbW1lZGlhdGVseSBzZWUgdGhlIHZ1bG5lcmFiaWxpdHk6ICBpZiB0aGUgYGhjdHhfaWR4YCBpcyBvdXQgb2YgYm91bmRzLCBvciBgQkxLX01RX05PX0hDVFhfSURYYCwgd2hpY2ggaXMgLTEgY2FzdCBhcyBhbiB1bnNpZ25lZCBpbnQsIGl0JiMzOTtzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCEgVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIGNvbW1pdCBhZGRzIGEgY2hlY2s6CmlmIGAhYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC0mZ3Q7ZmxhZ3MpYCwgY2hlY2sgdGhhdCBgaGN0eF9pZHhgIGlzIHZhbGlkLCBhbmQgb25seSBzZXQgYGRydl90YWdzYCBpZiBpdCBpcy4gT3RoZXJ3aXNlLCBzZXQgaXQgdG8gYE5VTExgLgoKTm93LCBpcyB0aGlzIGltcG9ydGFudCBlbm91Z2ggdG8gcGF5IGF0dGVudGlvbiB0bz8gV2VsbCwgdGhpcyBjb2RlIGxpdmVzIGluIGBibG9jay9ibGstbXEuY2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlICpjb3JlKiBibG9jayBsYXllci4gQ29yZSBibG9jayBsYXllciBsb2dpYyBpcyBhIGRlZmluaXRlIHRhcmdldCBmb3IgdHJpYWdlIGFuZCByZXZpZXcuIFRoZSBndWlkZWxpbmVzIEkgZm9sbG93IHNheSB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gdGhlIGJsb2NrIGxheWVyLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgKGFuZCB0aGlzIGlzIG1lbW9yeSBhY2Nlc3MsIGVzc2VudGlhbGx5KSwgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGF0dGVudGlvbi4gIFJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXBzIGFsc28gYXBwbHkgaGVyZSwgZXNwZWNpYWxseSBpZiBpdCBpcyBtYWtpbmcgdGhlIGNvZGUgc2FmZXIuIFJ1bnRpbWUgYXNzZXJ0aW9ucyBhbmQgZGVmZW5zaXZlIGNoZWNrcyAobGlrZSB0aGUgb25lIGFkZGVkIGhlcmUpIGFyZSBhbHdheXMgZ29vZC4KCkZ1cnRoZXJtb3JlLCBgYmxrLW1xYCBpcyBmb3VuZGF0aW9uYWwuIEl0JiMzOTtzIHVzZWQgYnkgZXZlcnl0aGluZyBmcm9tIGxvb3AgZGV2aWNlcyBhbmQgbnVsbCBibG9jayBkZXZpY2VzIHRvIHZpcnRpb19ibGssIE5WTWUsIGFuZCBTQ1NJIOKAkyBwcmV0dHkgbXVjaCBldmVyeSBibG9jayBkZXZpY2UgaW4gYSBMaW51eCBzeXN0ZW0uIFRoaXMgaXMgY29tcGxldGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgbWVhbmluZyBpdCYjMzk7cyBlYXN5IHRvIHRlc3Qgd2l0aCBRRU1VLCBzeXprYWxsZXIsIG9yIGJ5IHNpbXBseSBjcmVhdGluZy9kZXN0cm95aW5nIGxvb3AgZGV2aWNlcywgY2hhbmdpbmcgc2NoZWR1bGVycywgb3IgbWFuaXB1bGF0aW5nIHRhZ3NldCBvcGVyYXRpb25zLgoKU28sIGlzIGl0IFdvcnRoRnV6emluZz8gQWJzb2x1dGVseS4gYFdvcnRoRnV6emluZzogdHJ1ZWAuICBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgcG90ZW50aWFsbHkgZXhwb3NlZCB0byB1c2VyLXByb3ZpZGVkIGlucHV0IHRoYXQgY291bGQgY2F1c2UgYSBjcmFzaCBvciwgd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIGJsb2NrIGxheWVyLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgYGJsb2NrL01ha2VmaWxlYCBhbmQgYGJsb2NrL0tjb25maWdgIGZpbGVzIHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZXByb2R1Y2Ugb3IgdHJpZ2dlciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstbXEubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlPTg9b2JqLXlcdFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcbmJsb2NrL01ha2VmaWxlLTktXHRcdFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxuYmxvY2svTWFrZWZpbGU6MTA6XHRcdFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcbmJsb2NrL01ha2VmaWxlLTExLVx0XHRcdGJsay1tcS10YWcubyBibGstbXEtZG1hLm8gYmxrLXN0YXQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjU0CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBvYmoteWAgaW4gdGhlIEJsb2NrIE1ha2VmaWxlKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgb2JqLXlgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgYXMgYSBrZXJuZWwgZGV2LCBpcyB0aGF0IHRoaXMgaXMgaW5kaWNhdGluZyB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlIGBibG9ja2AgZGlyZWN0b3J5LiBNYWtlcyBzZW5zZS4gVGhlbiBJIHNlZSB0aGF0IGl0JiMzOTtzIHRpZWQgdG8gYENPTkZJR19CTE9DS2AuIE9rYXksIHRoYXQmIzM5O3MgdGhlIHBhcmVudCBjb25maWcgb3B0aW9uIGZvciBhbnl0aGluZyBpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBgQkxPQ0s9eWAgY29uZmlybXMgdGhhdCBpdCYjMzk7cyBlbmFibGVkLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgZm9yICp3aGljaCogcGFydHMgb2YgdGhlIGJsb2NrIGxheWVyIGdldCBjb21waWxlZCwgY29uc2lkZXJpbmcgaXQgaXMgYSBtb2R1bGUuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNoZWNraW5nIHdoZXRoZXIgYEJMS19NUWAgb3IgYEJMT0NLYCBhcmUgdGhlbXNlbHZlcyBjb25maWd1cmF0aW9ucywgYmVjYXVzZSBhdCBsZWFzdCBvbmUgc2hvdWxkIGJlIHByZXNlbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgZmlndXJlIG91dCB3aGljaCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGxvZ2ljIGlzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxPQ0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy00LSNcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbi0tXG5ibG9jay9LY29uZmlnPTI3PWlmIEJMT0NLXG5ibG9jay9LY29uZmlnLTI4LVxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG5ibG9jay9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cbi0tXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxuYmxvY2svS2NvbmZpZy0yMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjAKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJsb2NrIExheWVyIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYmxvY2sgbGF5ZXIgdGVzdGluZywgYW5kIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBzZWVtcyB0byBiZSBgQkxPQ0tgLiAgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MsIGxpa2UgYEJMS19ERVZfTE9PUGAgb3IgYEJMS19ERVZfTlVMTF9CTEtgLCBidXQgYEJMT0NLYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IG9uZS4gIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgc3BlY2lmaWMgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IGBibGtfbXFfZnJlZV9ycXNgLCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCwgYGJsa19tcV9mcmVlX21hcF9hbmRfcnFzYCwgYGJsa19tcV9hbGxvY19ycXNgLCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZG8sIHNwZWNpZmljYWxseSBgYmxrX21xX2ZyZWVfcnFzYC4KCkl0IHNlZW1zIGxpa2UgYGJsa19tcV9mcmVlX3Jxc2AgaXNuJiMzOTt0IGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIEl0JiMzOTtzIHVzZWQgd2hlbiBmcmVlaW5nIHRhZ3NldHMsIGR1cmluZyBlbGV2YXRvciBzd2l0Y2hlcyAod2l0aCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCksIG9yIGVycm9yIGhhbmRsaW5nIGluIGBibGtfbXFfYWxsb2NfcnFzYC4gIEl0JiMzOTtzIGEgc3BlY2lmaWMgYmxvY2sgbGF5ZXIgY2xlYW51cC9lbGV2YXRvciBzd2l0Y2ggZnVuY3Rpb24sIG5vdCBzb21ldGhpbmcgZ2VuZXJpYy4gYGJsa19tcV9zY2hlZF9mcmVlX3Jxc2AgaXMgY2FsbGVkIGR1cmluZyBlbGV2YXRvciBzd2l0Y2hlcyBvciBxdWV1ZSBjbGVhbnVwLiBgYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXNgIGlzIGNhbGxlZCBkdXJpbmcgdGFnc2V0IHRlYXJkb3duIG9yIHF1ZXVlIGNsZWFudXAuCgpOb3csIGxldCBtZSBjb25maXJtIGlmIGBibGtfbXFfY2xlYXJfcnFfbWFwcGluZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24gb3Igbm90LiBBaCwgaW4gYGJsb2NrL2Jsay1tcS5jYCwgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCBpcyBkZWZpbmVkIGFzIGEgYHN0YXRpYyB2b2lkYC4gVGhlIG90aGVycyBhcmUganVzdCBgdm9pZGAuIFRoaXMgaGVscHMgdG8gY29uZmlybSB0aGUgc2NvcGUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIHN0cmFpZ2h0OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSB0aGlzIGlzIGltcG9ydGFudC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWyYjMzQ7QkxPQ0smIzM0O11gIC0gR290IGl0LgoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O2Jsa19tcV9mcmVlX3JxcyYjMzQ7LCAmIzM0O2Jsa19tcV9zY2hlZF9mcmVlX3JxcyYjMzQ7LCAmIzM0O2Jsa19tcV9mcmVlX21hcF9hbmRfcnFzJiMzNDtdYCAtIENvbmZpcm1lZCwgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byB3YXRjaC4KKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgLSBJJiMzOTt2ZSBnb3QgYSBmb2N1c2VkIGV4cGxhbmF0aW9uLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9mcmVlX3JxcyYjMzQ7LAogICAgJiMzNDtibGtfbXFfc2NoZWRfZnJlZV9ycXMmIzM0OywKICAgICYjMzQ7YmxrX21xX2ZyZWVfbWFwX2FuZF9ycXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBibGtfbXFfZnJlZV9ycXMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYXJyYXkgaW5kZXhpbmcgb24gc2V0LVx1MDAzZXRhZ3Mgd2hlbiBoY3R4X2lkeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2V0LVx1MDAzZW5yX2h3X3F1ZXVlcyAoZS5nLiBCTEtfTVFfTk9fSENUWF9JRFgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcXVldWUvZWxldmF0b3IgdGVhcmRvd24gbG9naWMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucyAoc3VjaCBhcyBlbGV2YXRvciBzd2l0Y2hpbmcgb3IgcXVldWUgY2xlYW51cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX2ZyZWVfcnFzJiMzNDssCiAgICAmIzM0O2Jsa19tcV9zY2hlZF9mcmVlX3JxcyYjMzQ7LAogICAgJiMzNDtibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXHUwMDNlbnJfaHdfcXVldWVzIChlLmcuIEJMS19NUV9OT19IQ1RYX0lEWCkuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBxdWV1ZS9lbGV2YXRvciB0ZWFyZG93biBsb2dpYyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIChzdWNoIGFzIGVsZXZhdG9yIHN3aXRjaGluZyBvciBxdWV1ZSBjbGVhbnVwKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCAyYzg1MDMzMGEzMmJjLi44ZTY3MjZiMzdjNjUxIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuYwpAQCAtMzQ3Myw4ICYjNDM7MzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLAogCiAJaWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtJmd0O2ZsYWdzKSkKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3NoYXJlZF90YWdzOwotCWVsc2UKJiM0MzsJZWxzZSBpZiAoaGN0eF9pZHggJmx0OyBzZXQtJmd0O25yX2h3X3F1ZXVlcykKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3RhZ3NbaGN0eF9pZHhdOwomIzQzOwllbHNlCiYjNDM7CQlkcnZfdGFncyA9IE5VTEw7CiAKIAlpZiAodGFncy0mZ3Q7c3RhdGljX3JxcyAmYW1wOyZhbXA7IHNldC0mZ3Q7b3BzLSZndDtleGl0X3JlcXVlc3QpIHsKIAkJaW50IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIHRoaW5raW5nIGFzIGFuIGV4cGVyaWVuY2VkIHByb2Zlc3Npb25hbDoKCioqQW5hbHl6aW5nIHRoZSBCbG9jayBJL08gUXVldWVpbmcgQ29kZSoqCgpSaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgYmxvY2svYmxrLW1xLmNgLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYmxvY2sgbXVsdGktcXVldWUgY29kZSByZXNpZGVzLiBJIHdhbnQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzIGJlaW5nIG1hZGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scyDigJMgbGlrZWx5IGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9mIHRoZSBzb3VyY2UgY29kZSwgYnV0IGBncmVwcGVyYCBpcyBhbHNvIGFuIG9wdGlvbiwgcGFydGljdWxhcmx5IGlmIEkgbmVlZCB0byBmaW5kIHNwZWNpZmljIGluc3RhbmNlcyBvZiBhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGFjcm9zcyB0aGUgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbiBgYmxrX21xX2ZyZWVfcnFzYC4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgY3VycmVudGx5IGltcGxlbWVudGVkLCBhbmQgdGhlbiBob3cgdGhpcyBwYXRjaCBtb2RpZmllcyBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDYwOlx0XHRcdFx0XHRjbXB4Y2hnKFx1MDAyNmRydl90YWdzLVx1MDAzZXJxc1tpXSwgcnEsIE5VTEwpO1xuMzQ2MTpcdFx0XHRcdH1cbjM0NjI6XHRcdFx0fVxuMzQ2MzpcdFx0fVxuMzQ2NDpcdH1cbjM0NjU6XHRcbjM0NjY6XHR2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuMzQ2NzpcdFx0XHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeClcbjM0Njg6XHR7XG4zNDY5Olx0XHRzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzO1xuMzQ3MDpcdFxuMzQ3MTpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dGFncy1cdTAwM2VwYWdlX2xpc3QpKVxuMzQ3MjpcdFx0XHRyZXR1cm47XG4zNDczOlx0XG4zNDc0Olx0XHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cdTAwM2VmbGFncykpXG4zNDc1Olx0XHRcdGRydl90YWdzID0gc2V0LVx1MDAzZXNoYXJlZF90YWdzO1xuMzQ3NjpcdFx0ZWxzZSBpZiAoaGN0eF9pZHggXHUwMDNjIHNldC1cdTAwM2Vucl9od19xdWV1ZXMpXG4zNDc3Olx0XHRcdGRydl90YWdzID0gc2V0LVx1MDAzZXRhZ3NbaGN0eF9pZHhdO1xuMzQ3ODpcdFx0ZWxzZVxuMzQ3OTpcdFx0XHRkcnZfdGFncyA9IE5VTEw7XG4zNDgwOlx0XG4zNDgxOlx0XHRpZiAodGFncy1cdTAwM2VzdGF0aWNfcnFzIFx1MDAyNlx1MDAyNiBzZXQtXHUwMDNlb3BzLVx1MDAzZWV4aXRfcmVxdWVzdCkge1xuMzQ4MjpcdFx0XHRpbnQgaTtcbjM0ODM6XHRcbjM0ODQ6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFncy1cdTAwM2Vucl90YWdzOyBpJiM0MzsmIzQzOykge1xuMzQ4NTpcdFx0XHRcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHRhZ3MtXHUwMDNlc3RhdGljX3Jxc1tpXTtcbjM0ODY6XHRcbjM0ODc6XHRcdFx0XHRpZiAoIXJxKVxuMzQ4ODpcdFx0XHRcdFx0Y29udGludWU7XG4zNDg5Olx0XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3Qoc2V0LCBycSwgaGN0eF9pZHgpO1xuMzQ5MDpcdFx0XHRcdHRhZ3MtXHUwMDNlc3RhdGljX3Jxc1tpXSA9IE5VTEw7XG4zNDkxOlx0XHRcdH1cbjM0OTI6XHRcdH1cbjM0OTM6XHRcbjM0OTQ6XHRcdGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKGRydl90YWdzLCB0YWdzKTtcbjM0OTU6XHRcdC8qXG4zNDk2Olx0XHQgKiBGcmVlIHJlcXVlc3QgcGFnZXMgaW4gU1JDVSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGZyb21cbjM0OTc6XHRcdCAqIGJsa19tcV9mcmVlX3RhZ3MoKS5cbjM0OTg6XHRcdCAqL1xuMzQ5OTpcdH1cbjM1MDA6XHRcbjM1MDE6XHR2b2lkIGJsa19tcV9mcmVlX3JxX21hcChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxuMzUwMjpcdHtcbjM1MDM6XHRcdGtmcmVlKHRhZ3MtXHUwMDNlcnFzKTtcbjM1MDQ6XHRcdHRhZ3MtXHUwMDNlcnFzID0gTlVMTDtcbjM1MDU6XHRcdGtmcmVlKHRhZ3MtXHUwMDNlc3RhdGljX3Jxcyk7XG4zNTA2Olx0XHR0YWdzLVx1MDAzZXN0YXRpY19ycXMgPSBOVUxMO1xuMzUwNzpcdFxuMzUwODpcdFx0YmxrX21xX2ZyZWVfdGFncyhzZXQsIHRhZ3MpO1xuMzUwOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgYmxrX21xX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGJsa19tcV9mcmVlX3Jxc2AgYW5kIGBibGtfbXFfY2xlYXJfcnFfbWFwcGluZ2AuIFdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgdXNlZCBpbiByZWxhdGlvbiB0byBlYWNoIG90aGVyPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHNvbWUgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRob3NlIGZ1bmN0aW9uIGNhbGxzLiBMaW5lcyAzNDMwIHRvIDM0NjUgc291bmQgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIHN1cnJvdW5kaW5nIGNvZGUgdG8gY2xhcmlmeSB0aGUgc2l0dWF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhleSYjMzk7cmUgY2FsbGVkLCBhbmQgd2hhdCBkYXRhIHRoZXkmIzM5O3JlIG1hbmlwdWxhdGluZy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgY29uY2lzZSBzdW1tYXJ5IG9mIHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MzA6XHRcbjM0MzE6XHRzdGF0aWMgc2l6ZV90IG9yZGVyX3RvX3NpemUodW5zaWduZWQgaW50IG9yZGVyKVxuMzQzMjpcdHtcbjM0MzM6XHRcdHJldHVybiAoc2l6ZV90KVBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4zNDM0Olx0fVxuMzQzNTpcdFxuMzQzNjpcdC8qIGNhbGxlZCBiZWZvcmUgZnJlZWluZyByZXF1ZXN0IHBvb2wgaW4gQHRhZ3MgKi9cbjM0Mzc6XHRzdGF0aWMgdm9pZCBibGtfbXFfY2xlYXJfcnFfbWFwcGluZyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzLFxuMzQzODpcdFx0XHRcdFx0ICAgIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncylcbjM0Mzk6XHR7XG4zNDQwOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjM0NDE6XHRcbjM0NDI6XHRcdC8qXG4zNDQzOlx0XHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIGNsZWFyIG1hcHBpbmcgaWYgZHJpdmVyIHRhZ3MgaXMgbm90IGluaXRpYWxpemVkXG4zNDQ0Olx0XHQgKiBvciB0aGUgbWFwcGluZyBiZWxvbmdzIHRvIHRoZSBkcml2ZXIgdGFncy5cbjM0NDU6XHRcdCAqL1xuMzQ0NjpcdFx0aWYgKCFkcnZfdGFncyB8fCBkcnZfdGFncyA9PSB0YWdzKVxuMzQ0NzpcdFx0XHRyZXR1cm47XG4zNDQ4Olx0XG4zNDQ5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIFx1MDAyNnRhZ3MtXHUwMDNlcGFnZV9saXN0LCBscnUpIHtcbjM0NTA6XHRcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTtcbjM0NTE6XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCAmIzQzOyBvcmRlcl90b19zaXplKHBhZ2UtXHUwMDNlcHJpdmF0ZSk7XG4zNDUyOlx0XHRcdGludCBpO1xuMzQ1MzpcdFxuMzQ1NDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcnZfdGFncy1cdTAwM2Vucl90YWdzOyBpJiM0MzsmIzQzOykge1xuMzQ1NTpcdFx0XHRcdHN0cnVjdCByZXF1ZXN0ICpycSA9IGRydl90YWdzLVx1MDAzZXJxc1tpXTtcbjM0NTY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJxX2FkZHIgPSAodW5zaWduZWQgbG9uZylycTtcbjM0NTc6XHRcbjM0NTg6XHRcdFx0XHRpZiAocnFfYWRkciBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBycV9hZGRyIFx1MDAzYyBlbmQpIHtcbjM0NTk6XHRcdFx0XHRcdFdBUk5fT05fT05DRShyZXFfcmVmX3JlYWQocnEpICE9IDApO1xuMzQ2MDpcdFx0XHRcdFx0Y21weGNoZyhcdTAwMjZkcnZfdGFncy1cdTAwM2VycXNbaV0sIHJxLCBOVUxMKTtcbjM0NjE6XHRcdFx0XHR9XG4zNDYyOlx0XHRcdH1cbjM0NjM6XHRcdH1cbjM0NjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYmxrX21xX2ZyZWVfcnFzYCBDYWxsZXJzIGFuZCBgaGN0eF9pZHhgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGJsa19tcV9mcmVlX3Jxc2Agbm93LiBUaGUgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIHNwZWNpZmljYWxseSwgaG93IGBoY3R4X2lkeGAgaXMgaGFuZGxlZCBhY3Jvc3MgaXRzIGNhbGwgc2l0ZXMuIE15IHRoaW5raW5nIGlzIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UsIGNvbmNlbnRyYXRpbmcgb24gdGhlIGNvbnRleHQgcGFzc2VkLCBwYXJ0aWN1bGFybHkgdGhlIHZhbHVlIGFzc2lnbmVkIHRvIGBoY3R4X2lkeGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcGF0dGVybnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdoZXJlIHRoZSBpbmRleCBtaWdodCBiZSBjYWxjdWxhdGVkLCBwYXNzZWQsIG9yIHV0aWxpemVkIGluIGEgbm9uLW9idmlvdXMgd2F5LiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVidWdnaW5nIG9yIHJlZmFjdG9yaW5nIHRoaXMga2luZCBvZiBjb3JlIGZ1bmN0aW9uLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgaW5kZXggYWZmZWN0cyB0aGUgb3ZlcmFsbCBsb2dpYy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgc291cmNlcyBvZiBlcnJvcnMgcmVsYXRlZCB0byBgaGN0eF9pZHhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfZnJlZV9ycXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLXNjaGVkLmM9NjcwPXZvaWQgYmxrX21xX3NjaGVkX2ZyZWVfcnFzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY3NS1cdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3MocS1cdTAwM2V0YWdfc2V0LVx1MDAzZWZsYWdzKSkge1xuYmxvY2svYmxrLW1xLXNjaGVkLmM6Njc2Olx0XHRibGtfbXFfZnJlZV9ycXMocS1cdTAwM2V0YWdfc2V0LCBxLVx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjc3LVx0XHRcdFx0QkxLX01RX05PX0hDVFhfSURYKTtcbi0tXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODAtXHRcdFx0aWYgKGhjdHgtXHUwMDNlc2NoZWRfdGFncylcbmJsb2NrL2Jsay1tcS1zY2hlZC5jOjY4MTpcdFx0XHRcdGJsa19tcV9mcmVlX3JxcyhxLVx1MDAzZXRhZ19zZXQsXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODItXHRcdFx0XHRcdFx0aGN0eC1cdTAwM2VzY2hlZF90YWdzLCBpKTtcbi0tXG5ibG9jay9ibGstbXEuYz0zNDM3PXN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXG4tLVxuYmxvY2svYmxrLW1xLmMtMzQ2NS1cbmJsb2NrL2Jsay1tcS5jOjM0NjY6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcbmJsb2NrL2Jsay1tcS5jLTM0NjctXHRcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxuLS1cbmJsb2NrL2Jsay1tcS5jPTM1ODk9c3RhdGljIGludCBibGtfbXFfYWxsb2NfcnFzKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmJsb2NrL2Jsay1tcS5jLTM2NTktZmFpbDpcbmJsb2NrL2Jsay1tcS5jOjM2NjA6XHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XG5ibG9jay9ibGstbXEuYy0zNjYxLVx0cmV0dXJuIC1FTk9NRU07XG4tLVxuYmxvY2svYmxrLW1xLmM9NDE0NT12b2lkIGJsa19tcV9mcmVlX21hcF9hbmRfcnFzKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmJsb2NrL2Jsay1tcS5jLTQxNDktXHRpZiAodGFncykge1xuYmxvY2svYmxrLW1xLmM6NDE1MDpcdFx0YmxrX21xX2ZyZWVfcnFzKHNldCwgdGFncywgaGN0eF9pZHgpO1xuYmxvY2svYmxrLW1xLmMtNDE1MS1cdFx0YmxrX21xX2ZyZWVfcnFfbWFwKHNldCwgdGFncyk7XG4tLVxuYmxvY2svYmxrLW1xLmg9NTg9dm9pZCBibGtfbXFfcHV0X3JxX3JlZihzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xuLS1cbmJsb2NrL2Jsay1tcS5oLTYyLSAqL1xuYmxvY2svYmxrLW1xLmg6NjM6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcbmJsb2NrL2Jsay1tcS5oLTY0LVx0XHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjUKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJsb2NrIEkvTyBTY2hlZHVsZXIgVGFnIEZyZWVpbmcgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBibGtfbXFfc2NoZWRfZnJlZV9ycXNgIGFuZCBvdGhlciBjYWxsZXJzIGNhbiBwYXNzIGludmFsaWQgYGhjdHhfaWR4YCB2YWx1ZXMsIHNwZWNpZmljYWxseSBgQkxLX01RX05PX0hDVFhfSURYYCBvciBhbiBvdXQtb2YtYm91bmRzIGluZGV4LCB3aGVuIGZyZWVpbmcgc2NoZWR1bGVyIHRhZ3MsIHBvdGVudGlhbGx5IGR1cmluZyBlcnJvciBoYW5kbGluZy4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIG5haXZlbHkgYWNjZXNzZWQgYHNldC0mZ3Q7dGFnc1toY3R4X2lkeF1gIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZy4gSWYgdGhlIHRhZ3Mgd2VyZW4mIzM5O3Qgc2hhcmVkIGFuZCBgaGN0eF9pZHhgIHdhcyBpbnZhbGlkIChsaWtlIC0xKSwgd2UmIzM5O2QgaGF2ZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQuCgpUaGlzIHBhdGNoIGZpeGVzIHRoYXQgYnkgYWRkaW5nIGEgY2hlY2s6IGlmIHRoZSBpbmRleCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlIChgaGN0eF9pZHggJmx0OyBzZXQtJmd0O25yX2h3X3F1ZXVlc2ApLCB3ZSBhY2Nlc3MgdGhlIGFycmF5OyBvdGhlcndpc2UsIHdlIHNldCBgZHJ2X3RhZ3NgIHRvIGBOVUxMYC4gU2ltcGxlIGJvdW5kcyBjaGVja2luZywgZ29vZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgZm9yIEtBU0FOIGFuZCBLTVNBTi4KCjEuICAqKlRoZSBidWc/KiogIE91dC1vZi1ib3VuZHMgYWNjZXNzLiBXZSYjMzk7cmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBzZXQtJmd0O3RhZ3NgIGFycmF5IHdoZW4gYGhjdHhfaWR4YCBpcyBpbnZhbGlkLgoyLiAgKipLQVNBTiBkZXRlY3Rpb24/KiogIEFic29sdXRlbHkuICBgc2V0LSZndDt0YWdzYCBpcyBhbGxvY2F0ZWQsIGFuZCBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIG9uIHNsYWIva21hbGxvYyBhbGxvY2F0aW9ucy4KMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/KiogIExldCYjMzk7cyBzZWU6CgogICAgKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuCiAgICAqICAgTm8gc3RydWN0dXJlIGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLgogICAgKiAgIE5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBpbnRyb2R1Y2VkLiBgaGN0eF9pZHhgIGFuZCBgc2V0LSZndDtucl9od19xdWV1ZXNgIGFyZSBpbml0aWFsaXplZCBpbnRlZ2VyIHZhbHVlcy4KICAgICogICBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYWZmZWN0ZWQuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSBydWxlcy4uLiAmIzM0O1RIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sIExPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuJiMzNDsgVGhpcyBmaXggKnByaW1hcmlseSogYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBLQVNBTiBjb3ZlcnMuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAmIzM0O1NldCBOZWVkc0tNU0FOPWZhbHNlIElGOiAtIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuLi4mIzM0Oy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEl0IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZC4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGBoY3R4X2lkeGAgYWdhaW5zdCBgc2V0LVx1MDAzZW5yX2h3X3F1ZXVlc2AgaW4gYGJsa19tcV9mcmVlX3JxcygpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGBzZXQtXHUwMDNldGFnc1toY3R4X2lkeF1gIHdoZW4gYGhjdHhfaWR4YCBleGNlZWRzIGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCAoZS5nLiwgYEJMS19NUV9OT19IQ1RYX0lEWGApLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBpbmRleGluZyBidWcsIHdoaWNoIGZhbGxzIGRpcmVjdGx5IHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOIChLZXJuZWxBZGRyZXNzU2FuaXRpemVyKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDozOS42NDM2OTQ4MDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODkxODkwNTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsXG4gICAgXCJibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBvbiBgaGN0eF9pZHhgIGFnYWluc3QgYHNldC1cXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cXHUwMDNldGFnc1toY3R4X2lkeF1gIHdoZW4gYGhjdHhfaWR4YCBleGNlZWRzIGBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlc2AgKGUuZy4sIGBCTEtfTVFfTk9fSENUWF9JRFhgKS5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBpbmRleGluZyBidWcsIHdoaWNoIGZhbGxzIGRpcmVjdGx5IHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOIChLZXJuZWxBZGRyZXNzU2FuaXRpemVyKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXFx1MDAzZXRhZ3Mgd2hlbiBoY3R4X2lkeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2V0LVxcdTAwM2Vucl9od19xdWV1ZXMgKGUuZy4gQkxLX01RX05PX0hDVFhfSURYKS4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHF1ZXVlL2VsZXZhdG9yIHRlYXJkb3duIGxvZ2ljIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgZWxldmF0b3Igc3dpdGNoaW5nIG9yIHF1ZXVlIGNsZWFudXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDozOS42NDM3MDAxMDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjc2Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiODM3ZjdhMTYzOWRjMTliNzk0OTIzZDY5NDVlZGRiNjRkZGZkODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTI6MjQ6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xcbmluZGV4IDJjODUwMzMwYTMyYmMuLjhlNjcyNmIzN2M2NTEgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1xLmNcXG4rKysgYi9ibG9jay9ibGstbXEuY1xcbkBAIC0zNDczLDggKzM0NzMsMTAgQEAgdm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG4gXFxuIFxcdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3Moc2V0LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdGRydl90YWdzID0gc2V0LVxcdTAwM2VzaGFyZWRfdGFncztcXG4tXFx0ZWxzZVxcbitcXHRlbHNlIGlmIChoY3R4X2lkeCBcXHUwMDNjIHNldC1cXHUwMDNlbnJfaHdfcXVldWVzKVxcbiBcXHRcXHRkcnZfdGFncyA9IHNldC1cXHUwMDNldGFnc1toY3R4X2lkeF07XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZHJ2X3RhZ3MgPSBOVUxMO1xcbiBcXG4gXFx0aWYgKHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMgXFx1MDAyNlxcdTAwMjYgc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWV4aXRfcmVxdWVzdCkge1xcbiBcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjQ6NDAuMTc3MTY2NDc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODAzNjY5MTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsXG4gICAgXCJibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYmxrX21xX2ZyZWVfcnFzKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFycmF5IGluZGV4aW5nIG9uIHNldC1cXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcyAoZS5nLiBCTEtfTVFfTk9fSENUWF9JRFgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcXVldWUvZWxldmF0b3IgdGVhcmRvd24gbG9naWMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucyAoc3VjaCBhcyBlbGV2YXRvciBzd2l0Y2hpbmcgb3IgcXVldWUgY2xlYW51cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggMmM4NTAzMzBhMzJiYy4uOGU2NzI2YjM3YzY1MSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4rKysgYi9ibG9jay9ibGstbXEuY1xuQEAgLTM0NzMsOCArMzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuIFxuIFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbi1cdGVsc2VcbitcdGVsc2UgaWYgKGhjdHhfaWR4IFx1MDAzYyBzZXQtXHUwMDNlbnJfaHdfcXVldWVzKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XTtcbitcdGVsc2VcbitcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuIFxuIFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbiBcdFx0aW50IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo0MC4xNzcxNjc3NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA0MTQ5Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJldmlld2luZyB0aGlzIGNoYW5nZTpcblxuKipBbmFseXppbmcgdGhlIENvbW1pdCBhbmQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgY29tbWl0IHRoYXQgdG91Y2hlcyBgYmxvY2svYmxrLW1xLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBibGtfbXFfZnJlZV9ycXNgIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBUaGlzIHBhcnQgb2YgdGhlIGJsb2NrIGxheWVyIGlzIGNyaXRpY2FsLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cbkknbSB0aGlua2luZyBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzQ3MyBpbiBgYmxvY2svYmxrLW1xLmNgLiBUaGF0J3Mgd2hlcmUgdGhpcyBmdW5jdGlvbiBsaXZlcywgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaWtlbHkgY2VudGVyZWQuIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0J3Mgc3RhcnQgd2l0aCBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHJhdyBzb3VyY2UuIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo1Mi4yMTg2Njc1OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLW1xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ2NTpcXHRcXG4zNDY2OlxcdHZvaWQgYmxrX21xX2ZyZWVfcnFzKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsXFxuMzQ2NzpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeClcXG4zNDY4OlxcdHtcXG4zNDY5OlxcdFxcdHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3M7XFxuMzQ3MDpcXHRcXG4zNDcxOlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ0YWdzLVxcdTAwM2VwYWdlX2xpc3QpKVxcbjM0NzI6XFx0XFx0XFx0cmV0dXJuO1xcbjM0NzM6XFx0XFxuMzQ3NDpcXHRcXHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cXHUwMDNlZmxhZ3MpKVxcbjM0NzU6XFx0XFx0XFx0ZHJ2X3RhZ3MgPSBzZXQtXFx1MDAzZXNoYXJlZF90YWdzO1xcbjM0NzY6XFx0XFx0ZWxzZSBpZiAoaGN0eF9pZHggXFx1MDAzYyBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcylcXG4zNDc3OlxcdFxcdFxcdGRydl90YWdzID0gc2V0LVxcdTAwM2V0YWdzW2hjdHhfaWR4XTtcXG4zNDc4OlxcdFxcdGVsc2VcXG4zNDc5OlxcdFxcdFxcdGRydl90YWdzID0gTlVMTDtcXG4zNDgwOlxcdFxcbjM0ODE6XFx0XFx0aWYgKHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMgXFx1MDAyNlxcdTAwMjYgc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWV4aXRfcmVxdWVzdCkge1xcbjM0ODI6XFx0XFx0XFx0aW50IGk7XFxuMzQ4MzpcXHRcXG4zNDg0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWdzLVxcdTAwM2Vucl90YWdzOyBpKyspIHtcXG4zNDg1OlxcdFxcdFxcdFxcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHRhZ3MtXFx1MDAzZXN0YXRpY19ycXNbaV07XFxuMzQ4NjpcXHRcXG4zNDg3OlxcdFxcdFxcdFxcdGlmICghcnEpXFxuMzQ4ODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDg5OlxcdFxcdFxcdFxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VleGl0X3JlcXVlc3Qoc2V0LCBycSwgaGN0eF9pZHgpO1xcbjM0OTA6XFx0XFx0XFx0XFx0dGFncy1cXHUwMDNlc3RhdGljX3Jxc1tpXSA9IE5VTEw7XFxuMzQ5MTpcXHRcXHRcXHR9XFxuMzQ5MjpcXHRcXHR9XFxuMzQ5MzpcXHRcXG4zNDk0OlxcdFxcdGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKGRydl90YWdzLCB0YWdzKTtcXG4zNDk1OlxcdFxcdC8qXFxuMzQ5NjpcXHRcXHQgKiBGcmVlIHJlcXVlc3QgcGFnZXMgaW4gU1JDVSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGZyb21cXG4zNDk3OlxcdFxcdCAqIGJsa19tcV9mcmVlX3RhZ3MoKS5cXG4zNDk4OlxcdFxcdCAqL1xcbjM0OTk6XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHR2b2lkIGJsa19tcV9mcmVlX3JxX21hcChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxcbjM1MDI6XFx0e1xcbjM1MDM6XFx0XFx0a2ZyZWUodGFncy1cXHUwMDNlcnFzKTtcXG4zNTA0OlxcdFxcdHRhZ3MtXFx1MDAzZXJxcyA9IE5VTEw7XFxuMzUwNTpcXHRcXHRrZnJlZSh0YWdzLVxcdTAwM2VzdGF0aWNfcnFzKTtcXG4zNTA2OlxcdFxcdHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMgPSBOVUxMO1xcbjM1MDc6XFx0XFxuMzUwODpcXHRcXHRibGtfbXFfZnJlZV90YWdzKHNldCwgdGFncyk7XFxuMzUwOTpcXHR9XFxuMzUxMDpcXHRcXG4zNTExOlxcdHN0YXRpYyBlbnVtIGhjdHhfdHlwZSBoY3R4X2lkeF90b190eXBlKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxcbjM1MTI6XFx0XFx0XFx0dW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbjM1MTM6XFx0e1xcbjM1MTQ6XFx0XFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI0OjUyLjIxODg3MTk0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTMwOTYyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBibGtfbXFfZnJlZV9ycXNgIENhbGxzaXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgYmxrX21xX2ZyZWVfcnFzYC4gVGltZSB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGV4ZWN1dGlvbiBwYXRocyB0aGF0IGxlYWQgdG8gYGJsa19tcV9mcmVlX3Jxc2AgYmVpbmcgY2FsbGVkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IFdoYXQgbG9ja3MgYXJlIGhlbGQsIGlmIGFueSwgdXBvbiBlbnRyeT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmN1cnJlbmN5IGNvbmNlcm5zPyBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kgaGVyZTogd2hlbiBhbmQgd2h5IGFyZSByZXF1ZXN0IHF1ZXVlcyBiZWluZyByZWxlYXNlZD8gVGhpcyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBibG9jayBsYXllcidzIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEl0J3MgdGltZSB0byBkaWcgaW4uIExldCdzIHN0YXJ0IHdpdGggdGhlIGNyb3NzLXJlZmVyZW5jZXMgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI0OjU0LjI3MTk3MDg5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMxNzQ5MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9mcmVlX3Jxc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEtc2NoZWQuYz02NzA9dm9pZCBibGtfbXFfc2NoZWRfZnJlZV9ycXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9ibGstbXEtc2NoZWQuYy02NzUtXFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVxcdTAwM2V0YWdfc2V0LVxcdTAwM2VmbGFncykpIHtcXG5ibG9jay9ibGstbXEtc2NoZWQuYzo2NzY6XFx0XFx0YmxrX21xX2ZyZWVfcnFzKHEtXFx1MDAzZXRhZ19zZXQsIHEtXFx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY3Ny1cXHRcXHRcXHRcXHRCTEtfTVFfTk9fSENUWF9JRFgpO1xcbi0tXFxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjgwLVxcdFxcdFxcdGlmIChoY3R4LVxcdTAwM2VzY2hlZF90YWdzKVxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jOjY4MTpcXHRcXHRcXHRcXHRibGtfbXFfZnJlZV9ycXMocS1cXHUwMDNldGFnX3NldCxcXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODItXFx0XFx0XFx0XFx0XFx0XFx0aGN0eC1cXHUwMDNlc2NoZWRfdGFncywgaSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zNDM3PXN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNDY1LVxcbmJsb2NrL2Jsay1tcS5jOjM0NjY6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuYy0zNDY3LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzU4OT1zdGF0aWMgaW50IGJsa19tcV9hbGxvY19ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNjU5LWZhaWw6XFxuYmxvY2svYmxrLW1xLmM6MzY2MDpcXHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XFxuYmxvY2svYmxrLW1xLmMtMzY2MS1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTQxNDU9dm9pZCBibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQxNDktXFx0aWYgKHRhZ3MpIHtcXG5ibG9jay9ibGstbXEuYzo0MTUwOlxcdFxcdGJsa19tcV9mcmVlX3JxcyhzZXQsIHRhZ3MsIGhjdHhfaWR4KTtcXG5ibG9jay9ibGstbXEuYy00MTUxLVxcdFxcdGJsa19tcV9mcmVlX3JxX21hcChzZXQsIHRhZ3MpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmg9NTg9dm9pZCBibGtfbXFfcHV0X3JxX3JlZihzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmgtNjItICovXFxuYmxvY2svYmxrLW1xLmg6NjM6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuaC02NC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI0OjU2LjAwMzcyNTYyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NTI5OTY5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIE1RIFNjaGVkdWxpbmcgYW5kIFJlc291cmNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYmxvY2svYmxrLW1xLXNjaGVkLmM6Njc2YCBzbmlwcGV0LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHEtXHUwMDNldGFnX3NldC1cdTAwM2VmbGFncykpYC4gIEl0IGFwcGVhcnMgd2UncmUgZGVjaWRpbmcgd2hldGhlciB0byBjYWxsIGBibGtfbXFfZnJlZV9ycXNgIGJhc2VkIG9uIHNoYXJlZCB0YWcgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGRpcmVjdGx5IGZyZWVzIHJlcXVlc3Qgc3RydWN0dXJlcyAoYHJxc2ApIGlmIHRhZ3MgYXJlIHNoYXJlZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIldoZW4gZWxzZSBpcyBgYmxrX21xX2ZyZWVfcnFzYCBjYWxsZWQsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29udGV4dHM/XCJcblxuVG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcy4gTGV0IG1lIGxvb2sgZm9yIGNhbGxzIHRvIGBibGtfbXFfc2NoZWRfZnJlZV9ycXNgIGFuZCBgYmxrX21xX2NsZWFyX3JxX21hcHBpbmdgIHdoaWNoIG1pZ2h0IHByb3ZpZGUgcmVsZXZhbnQgaW5mb3JtYXRpb24uIENvbnRleHR1YWxseSwgSSdsbCByZXZpZXcgYXJvdW5kIGxpbmUgNjcwIGluIGBibGstbXEtc2NoZWQuY2AgYW5kIGFyb3VuZCBsaW5lIDM0MzcgaW4gYGJsb2NrL2Jsay1tcS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIHRoZSBibG9jayBsYXllcidzIHNjaGVkdWxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcmVxdWVzdCBzdHJ1Y3R1cmVzIGFuZCB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkIGluIGEgc2hhcmVkIHRhZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo1OC42NTY3MjU5NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEtc2NoZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFx0YmxrX21xX3NjaGVkX3RhZ3NfdGVhcmRvd24ocSwgZmxhZ3MpO1xcbiA2NjE6XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNmVxLVxcdTAwM2Vrb2JqKTtcXG4gNjYyOlxcdFxcdHEtXFx1MDAzZWVsZXZhdG9yID0gTlVMTDtcXG4gNjYzOlxcdFxcdHJldHVybiByZXQ7XFxuIDY2NDpcXHR9XFxuIDY2NTpcXHRcXG4gNjY2OlxcdC8qXFxuIDY2NzpcXHQgKiBjYWxsZWQgaW4gZWl0aGVyIGJsa19xdWV1ZV9jbGVhbnVwIG9yIGVsZXZhdG9yX3N3aXRjaCwgdGFnc2V0XFxuIDY2ODpcXHQgKiBpcyByZXF1aXJlZCBmb3IgZnJlZWluZyByZXF1ZXN0c1xcbiA2Njk6XFx0ICovXFxuIDY3MDpcXHR2b2lkIGJsa19tcV9zY2hlZF9mcmVlX3JxcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4O1xcbiA2NzM6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHEtXFx1MDAzZXRhZ19zZXQtXFx1MDAzZWZsYWdzKSkge1xcbiA2NzY6XFx0XFx0XFx0YmxrX21xX2ZyZWVfcnFzKHEtXFx1MDAzZXRhZ19zZXQsIHEtXFx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxcbiA2Nzc6XFx0XFx0XFx0XFx0XFx0QkxLX01RX05PX0hDVFhfSURYKTtcXG4gNjc4OlxcdFxcdH0gZWxzZSB7XFxuIDY3OTpcXHRcXHRcXHRxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkge1xcbiA2ODA6XFx0XFx0XFx0XFx0aWYgKGhjdHgtXFx1MDAzZXNjaGVkX3RhZ3MpXFxuIDY4MTpcXHRcXHRcXHRcXHRcXHRibGtfbXFfZnJlZV9ycXMocS1cXHUwMDNldGFnX3NldCxcXG4gNjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGhjdHgtXFx1MDAzZXNjaGVkX3RhZ3MsIGkpO1xcbiA2ODM6XFx0XFx0XFx0fVxcbiA2ODQ6XFx0XFx0fVxcbiA2ODU6XFx0fVxcbiA2ODY6XFx0XFxuIDY4NzpcXHR2b2lkIGJsa19tcV9leGl0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUpXFxuIDY4ODpcXHR7XFxuIDY4OTpcXHRcXHRzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDtcXG4gNjkwOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gNjkxOlxcdFxcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XFxuIDY5MjpcXHRcXG4gNjkzOlxcdFxcdHF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7XFxuIDY5NDpcXHRcXHRcXHRpZiAoZS1cXHUwMDNldHlwZS1cXHUwMDNlb3BzLmV4aXRfaGN0eCBcXHUwMDI2XFx1MDAyNiBoY3R4LVxcdTAwM2VzY2hlZF9kYXRhKSB7XFxuIDY5NTpcXHRcXHRcXHRcXHRlLVxcdTAwM2V0eXBlLVxcdTAwM2VvcHMuZXhpdF9oY3R4KGhjdHgsIGkpO1xcbiA2OTY6XFx0XFx0XFx0XFx0aGN0eC1cXHUwMDNlc2NoZWRfZGF0YSA9IE5VTEw7XFxuIDY5NzpcXHRcXHRcXHR9XFxuIDY5ODpcXHRcXHRcXHRmbGFncyA9IGhjdHgtXFx1MDAzZWZsYWdzO1xcbiA2OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo1OC42NTY4MTg2MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjYxNjI3MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRGlnZ2luZyBpbnRvIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCBpbiBgYmxvY2svYmxrLW1xLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYmxvY2sgbXVsdGktcXVldWUgSS9PIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgYmxvY2sgbGF5ZXIgaW50ZXJuYWxzIHRlbGxzIG1lIHRoaXMgbXVzdCBiZSBhYm91dCBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBhIHJlcXVlc3QgcXVldWUgZW50cnkgKGBycWApIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoZSBuYW1lIGltcGxpZXMgaXTigJlzIGEgY2xlYXJpbmcgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggZnJlZWluZyByZXNvdXJjZXMgb3IgcmVzZXR0aW5nIHBvaW50ZXJzLiBJIGV4cGVjdCBpdCdzIGludm9rZWQgd2hlbiBhbiBJL08gcmVxdWVzdCBjb21wbGV0ZXMsIGlzIGNhbmNlbGxlZCwgb3IgdW5kZXJnb2VzIHNvbWUgZm9ybSBvZiByZXNjaGVkdWxpbmcgd2hlcmUgaXRzIG1hcHBpbmcgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXF1ZXN0IHF1ZXVlIChgYmxrX21xX2h3X3F1ZXVlYCkgc3RydWN0dXJlcyBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIGFzcGVjdHMgdG9vLCB0aGUgbG9ja3MgYW5kIG1lbW9yeSBiYXJyaWVycywgYmVjYXVzZSB0aGlzIGlzIGEgaGlnaGx5IGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgYW5kIHdoYXQgbG9ja3MgaXQncyB1c2luZyB3aWxsIGJlIHZpdGFsLiBSaWdodCwgdGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDI4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNTowMS45MTg0NDg5OThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1tcS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MzU6XFx0XFxuMzQzNjpcXHQvKiBjYWxsZWQgYmVmb3JlIGZyZWVpbmcgcmVxdWVzdCBwb29sIGluIEB0YWdzICovXFxuMzQzNzpcXHRzdGF0aWMgdm9pZCBibGtfbXFfY2xlYXJfcnFfbWFwcGluZyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzLFxcbjM0Mzg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncylcXG4zNDM5OlxcdHtcXG4zNDQwOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjM0NDE6XFx0XFxuMzQ0MjpcXHRcXHQvKlxcbjM0NDM6XFx0XFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBjbGVhciBtYXBwaW5nIGlmIGRyaXZlciB0YWdzIGlzIG5vdCBpbml0aWFsaXplZFxcbjM0NDQ6XFx0XFx0ICogb3IgdGhlIG1hcHBpbmcgYmVsb25ncyB0byB0aGUgZHJpdmVyIHRhZ3MuXFxuMzQ0NTpcXHRcXHQgKi9cXG4zNDQ2OlxcdFxcdGlmICghZHJ2X3RhZ3MgfHwgZHJ2X3RhZ3MgPT0gdGFncylcXG4zNDQ3OlxcdFxcdFxcdHJldHVybjtcXG4zNDQ4OlxcdFxcbjM0NDk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBcXHUwMDI2dGFncy1cXHUwMDNlcGFnZV9saXN0LCBscnUpIHtcXG4zNDUwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7XFxuMzQ1MTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgb3JkZXJfdG9fc2l6ZShwYWdlLVxcdTAwM2Vwcml2YXRlKTtcXG4zNDUyOlxcdFxcdFxcdGludCBpO1xcbjM0NTM6XFx0XFxuMzQ1NDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZHJ2X3RhZ3MtXFx1MDAzZW5yX3RhZ3M7IGkrKykge1xcbjM0NTU6XFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxID0gZHJ2X3RhZ3MtXFx1MDAzZXJxc1tpXTtcXG4zNDU2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcnFfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJxO1xcbjM0NTc6XFx0XFxuMzQ1ODpcXHRcXHRcXHRcXHRpZiAocnFfYWRkciBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBycV9hZGRyIFxcdTAwM2MgZW5kKSB7XFxuMzQ1OTpcXHRcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UocmVxX3JlZl9yZWFkKHJxKSAhPSAwKTtcXG4zNDYwOlxcdFxcdFxcdFxcdFxcdGNtcHhjaGcoXFx1MDAyNmRydl90YWdzLVxcdTAwM2VycXNbaV0sIHJxLCBOVUxMKTtcXG4zNDYxOlxcdFxcdFxcdFxcdH1cXG4zNDYyOlxcdFxcdFxcdH1cXG4zNDYzOlxcdFxcdH1cXG4zNDY0OlxcdH1cXG4zNDY1OlxcdFxcbjM0NjY6XFx0dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG4zNDY3OlxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbjM0Njg6XFx0e1xcbjM0Njk6XFx0XFx0c3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncztcXG4zNDcwOlxcdFxcbjM0NzE6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnRhZ3MtXFx1MDAzZXBhZ2VfbGlzdCkpXFxuMzQ3MjpcXHRcXHRcXHRyZXR1cm47XFxuMzQ3MzpcXHRcXG4zNDc0OlxcdFxcdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3Moc2V0LVxcdTAwM2VmbGFncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjAxLjkxODY0ODc2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTQ2NzMyNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGNoYW5nZSBpbiBob3cgYGRydl90YWdzYCBpcyBhc3NpZ25lZDogaXQgbm93IGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBoY3R4X2lkeGAgYmVpbmcgd2l0aGluIGJvdW5kcyBiZWZvcmUgYWNjZXNzaW5nIGBzZXQtXHUwMDNldGFnc1tdYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGFwcGFyZW50bHksIGRpZG4ndCBkbyB0aGlzLCBhbmQgSSBpbW1lZGlhdGVseSBzZWUgdGhlIHZ1bG5lcmFiaWxpdHk6ICBpZiB0aGUgYGhjdHhfaWR4YCBpcyBvdXQgb2YgYm91bmRzLCBvciBgQkxLX01RX05PX0hDVFhfSURYYCwgd2hpY2ggaXMgLTEgY2FzdCBhcyBhbiB1bnNpZ25lZCBpbnQsIGl0J3MgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkISBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgY29tbWl0IGFkZHMgYSBjaGVjazpcbmlmIGAhYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cdTAwM2VmbGFncylgLCBjaGVjayB0aGF0IGBoY3R4X2lkeGAgaXMgdmFsaWQsIGFuZCBvbmx5IHNldCBgZHJ2X3RhZ3NgIGlmIGl0IGlzLiBPdGhlcndpc2UsIHNldCBpdCB0byBgTlVMTGAuXG5cbk5vdywgaXMgdGhpcyBpbXBvcnRhbnQgZW5vdWdoIHRvIHBheSBhdHRlbnRpb24gdG8/IFdlbGwsIHRoaXMgY29kZSBsaXZlcyBpbiBgYmxvY2svYmxrLW1xLmNgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSAqY29yZSogYmxvY2sgbGF5ZXIuIENvcmUgYmxvY2sgbGF5ZXIgbG9naWMgaXMgYSBkZWZpbml0ZSB0YXJnZXQgZm9yIHRyaWFnZSBhbmQgcmV2aWV3LiBUaGUgZ3VpZGVsaW5lcyBJIGZvbGxvdyBzYXkgdGhhdCBtb2RpZmljYXRpb25zIGluIHRoZSBibG9jayBsYXllciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IChhbmQgdGhpcyBpcyBtZW1vcnkgYWNjZXNzLCBlc3NlbnRpYWxseSksIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBhdHRlbnRpb24uICBSZWZhY3RvcmluZyBhbmQgY29kZSBjbGVhbnVwcyBhbHNvIGFwcGx5IGhlcmUsIGVzcGVjaWFsbHkgaWYgaXQgaXMgbWFraW5nIHRoZSBjb2RlIHNhZmVyLiBSdW50aW1lIGFzc2VydGlvbnMgYW5kIGRlZmVuc2l2ZSBjaGVja3MgKGxpa2UgdGhlIG9uZSBhZGRlZCBoZXJlKSBhcmUgYWx3YXlzIGdvb2QuXG5cbkZ1cnRoZXJtb3JlLCBgYmxrLW1xYCBpcyBmb3VuZGF0aW9uYWwuIEl0J3MgdXNlZCBieSBldmVyeXRoaW5nIGZyb20gbG9vcCBkZXZpY2VzIGFuZCBudWxsIGJsb2NrIGRldmljZXMgdG8gdmlydGlvX2JsaywgTlZNZSwgYW5kIFNDU0kg4oCTIHByZXR0eSBtdWNoIGV2ZXJ5IGJsb2NrIGRldmljZSBpbiBhIExpbnV4IHN5c3RlbS4gVGhpcyBpcyBjb21wbGV0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBtZWFuaW5nIGl0J3MgZWFzeSB0byB0ZXN0IHdpdGggUUVNVSwgc3l6a2FsbGVyLCBvciBieSBzaW1wbHkgY3JlYXRpbmcvZGVzdHJveWluZyBsb29wIGRldmljZXMsIGNoYW5naW5nIHNjaGVkdWxlcnMsIG9yIG1hbmlwdWxhdGluZyB0YWdzZXQgb3BlcmF0aW9ucy5cblxuU28sIGlzIGl0IFdvcnRoRnV6emluZz8gQWJzb2x1dGVseS4gYFdvcnRoRnV6emluZzogdHJ1ZWAuICBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgcG90ZW50aWFsbHkgZXhwb3NlZCB0byB1c2VyLXByb3ZpZGVkIGlucHV0IHRoYXQgY291bGQgY2F1c2UgYSBjcmFzaCBvciwgd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIGJsb2NrIGxheWVyLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCBgYmxvY2svS2NvbmZpZ2AgZmlsZXMgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIHJlcHJvZHVjZSBvciB0cmlnZ2VyIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNTowNy4wNjUzODM2NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODIyNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstbXEub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT04PW9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTktXFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuYmxvY2svTWFrZWZpbGU6MTA6XFx0XFx0XFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTExLVxcdFxcdFxcdGJsay1tcS10YWcubyBibGstbXEtZG1hLm8gYmxrLXN0YXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjA3LjQyMzYxNTMzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTU1NzI1NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG9iai15YCBpbiB0aGUgQmxvY2sgTWFrZWZpbGUqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgb2JqLXlgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgYXMgYSBrZXJuZWwgZGV2LCBpcyB0aGF0IHRoaXMgaXMgaW5kaWNhdGluZyB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlIGBibG9ja2AgZGlyZWN0b3J5LiBNYWtlcyBzZW5zZS4gVGhlbiBJIHNlZSB0aGF0IGl0J3MgdGllZCB0byBgQ09ORklHX0JMT0NLYC4gT2theSwgdGhhdCdzIHRoZSBwYXJlbnQgY29uZmlnIG9wdGlvbiBmb3IgYW55dGhpbmcgaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgYEJMT0NLPXlgIGNvbmZpcm1zIHRoYXQgaXQncyBlbmFibGVkLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgZm9yICp3aGljaCogcGFydHMgb2YgdGhlIGJsb2NrIGxheWVyIGdldCBjb21waWxlZCwgY29uc2lkZXJpbmcgaXQgaXMgYSBtb2R1bGUuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNoZWNraW5nIHdoZXRoZXIgYEJMS19NUWAgb3IgYEJMT0NLYCBhcmUgdGhlbXNlbHZlcyBjb25maWd1cmF0aW9ucywgYmVjYXVzZSBhdCBsZWFzdCBvbmUgc2hvdWxkIGJlIHByZXNlbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgZmlndXJlIG91dCB3aGljaCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hhdCB0aGUgbG9naWMgaXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTQsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToxMC4zNzkzNDMxMzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTg0Mjc5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWctNC0jXFxuYmxvY2svS2NvbmZpZzo1Om1lbnVjb25maWcgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXFxcIkVuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xcbmJsb2NrL0tjb25maWctMjgtXFxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuYmxvY2svS2NvbmZpZy0zMC1cXHRib29sIFxcXCJMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cXG4tLVxcbmJsb2NrL0tjb25maWctMjE3LSMgZG8gbm90IHVzZSBpbiBuZXcgY29kZVxcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxcbmJsb2NrL0tjb25maWctMjE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MTIuMTM3Nzc2MzE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5OTU5NDM3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQmxvY2sgTGF5ZXIgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYmxvY2sgbGF5ZXIgdGVzdGluZywgYW5kIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBzZWVtcyB0byBiZSBgQkxPQ0tgLiAgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MsIGxpa2UgYEJMS19ERVZfTE9PUGAgb3IgYEJMS19ERVZfTlVMTF9CTEtgLCBidXQgYEJMT0NLYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IG9uZS4gIEknbGwgc3RhcnQgdGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBsaXN0IG9mIFwiRm9jdXNTeW1ib2xzXCI6IGBibGtfbXFfZnJlZV9ycXNgLCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCwgYGJsa19tcV9mcmVlX21hcF9hbmRfcnFzYCwgYGJsa19tcV9hbGxvY19ycXNgLCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZG8sIHNwZWNpZmljYWxseSBgYmxrX21xX2ZyZWVfcnFzYC5cblxuSXQgc2VlbXMgbGlrZSBgYmxrX21xX2ZyZWVfcnFzYCBpc24ndCBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlLiBJdCdzIHVzZWQgd2hlbiBmcmVlaW5nIHRhZ3NldHMsIGR1cmluZyBlbGV2YXRvciBzd2l0Y2hlcyAod2l0aCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCksIG9yIGVycm9yIGhhbmRsaW5nIGluIGBibGtfbXFfYWxsb2NfcnFzYC4gIEl0J3MgYSBzcGVjaWZpYyBibG9jayBsYXllciBjbGVhbnVwL2VsZXZhdG9yIHN3aXRjaCBmdW5jdGlvbiwgbm90IHNvbWV0aGluZyBnZW5lcmljLiBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCBpcyBjYWxsZWQgZHVyaW5nIGVsZXZhdG9yIHN3aXRjaGVzIG9yIHF1ZXVlIGNsZWFudXAuIGBibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc2AgaXMgY2FsbGVkIGR1cmluZyB0YWdzZXQgdGVhcmRvd24gb3IgcXVldWUgY2xlYW51cC5cblxuTm93LCBsZXQgbWUgY29uZmlybSBpZiBgYmxrX21xX2NsZWFyX3JxX21hcHBpbmdgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIG5vdC4gQWgsIGluIGBibG9jay9ibGstbXEuY2AsIGBibGtfbXFfY2xlYXJfcnFfbWFwcGluZ2AgaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWMgdm9pZGAuIFRoZSBvdGhlcnMgYXJlIGp1c3QgYHZvaWRgLiBUaGlzIGhlbHBzIHRvIGNvbmZpcm0gdGhlIHNjb3BlLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBzdHJhaWdodDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSB0aGlzIGlzIGltcG9ydGFudC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkJMT0NLXCJdYCAtIEdvdCBpdC5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wiYmxrX21xX2ZyZWVfcnFzXCIsIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsIFwiYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXNcIl1gIC0gQ29uZmlybWVkLCB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIHdhdGNoLlxuKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgLSBJJ3ZlIGdvdCBhIGZvY3VzZWQgZXhwbGFuYXRpb24uXG5cbk9rYXksIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjAsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjE4LjEzMzcyNzI5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTI3NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsXG4gICAgXCJibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYmxrX21xX2ZyZWVfcnFzKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFycmF5IGluZGV4aW5nIG9uIHNldC1cXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcyAoZS5nLiBCTEtfTVFfTk9fSENUWF9JRFgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcXVldWUvZWxldmF0b3IgdGVhcmRvd24gbG9naWMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucyAoc3VjaCBhcyBlbGV2YXRvciBzd2l0Y2hpbmcgb3IgcXVldWUgY2xlYW51cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbXFfZnJlZV9ycXNcIixcbiAgICBcImJsa19tcV9zY2hlZF9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXFx1MDAzZXRhZ3Mgd2hlbiBoY3R4X2lkeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2V0LVxcdTAwM2Vucl9od19xdWV1ZXMgKGUuZy4gQkxLX01RX05PX0hDVFhfSURYKS4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHF1ZXVlL2VsZXZhdG9yIHRlYXJkb3duIGxvZ2ljIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgZWxldmF0b3Igc3dpdGNoaW5nIG9yIHF1ZXVlIGNsZWFudXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToxOC4yMTM4NjIxMjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQ4NzI5MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MTguMjE0NDA2MTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjAzNDgxODAwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlc2AgaW4gYGJsa19tcV9mcmVlX3JxcygpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGBzZXQtXFx1MDAzZXRhZ3NbaGN0eF9pZHhdYCB3aGVuIGBoY3R4X2lkeGAgZXhjZWVkcyBgc2V0LVxcdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgYnVnLCB3aGljaCBmYWxscyBkaXJlY3RseSB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggMmM4NTAzMzBhMzJiYy4uOGU2NzI2YjM3YzY1MSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4rKysgYi9ibG9jay9ibGstbXEuY1xuQEAgLTM0NzMsOCArMzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuIFxuIFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbi1cdGVsc2VcbitcdGVsc2UgaWYgKGhjdHhfaWR4IFx1MDAzYyBzZXQtXHUwMDNlbnJfaHdfcXVldWVzKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XTtcbitcdGVsc2VcbitcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuIFxuIFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbiBcdFx0aW50IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToxOC4yMTQ0MDcwMDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxMDUwMTA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgYXMgYW4gZXhwZXJpZW5jZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIFF1ZXVlaW5nIENvZGUqKlxuXG5SaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgYmxvY2svYmxrLW1xLmNgLCB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBibG9jayBtdWx0aS1xdWV1ZSBjb2RlIHJlc2lkZXMuIEkgd2FudCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMgYmVpbmcgbWFkZS4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbHMg4oCTIGxpa2VseSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlIGNvZGUsIGJ1dCBgZ3JlcHBlcmAgaXMgYWxzbyBhbiBvcHRpb24sIHBhcnRpY3VsYXJseSBpZiBJIG5lZWQgdG8gZmluZCBzcGVjaWZpYyBpbnN0YW5jZXMgb2YgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBhY3Jvc3MgdGhlIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIG1vc3QgaW50ZXJlc3RlZCBpbiBgYmxrX21xX2ZyZWVfcnFzYC4gSSBuZWVkIHRvIHNlZSBob3cgaXQncyBjdXJyZW50bHkgaW1wbGVtZW50ZWQsIGFuZCB0aGVuIGhvdyB0aGlzIHBhdGNoIG1vZGlmaWVzIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0LiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MjQuNDI0OTExMTg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDYwOlxcdFxcdFxcdFxcdFxcdGNtcHhjaGcoXFx1MDAyNmRydl90YWdzLVxcdTAwM2VycXNbaV0sIHJxLCBOVUxMKTtcXG4zNDYxOlxcdFxcdFxcdFxcdH1cXG4zNDYyOlxcdFxcdFxcdH1cXG4zNDYzOlxcdFxcdH1cXG4zNDY0OlxcdH1cXG4zNDY1OlxcdFxcbjM0NjY6XFx0dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG4zNDY3OlxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbjM0Njg6XFx0e1xcbjM0Njk6XFx0XFx0c3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncztcXG4zNDcwOlxcdFxcbjM0NzE6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnRhZ3MtXFx1MDAzZXBhZ2VfbGlzdCkpXFxuMzQ3MjpcXHRcXHRcXHRyZXR1cm47XFxuMzQ3MzpcXHRcXG4zNDc0OlxcdFxcdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3Moc2V0LVxcdTAwM2VmbGFncykpXFxuMzQ3NTpcXHRcXHRcXHRkcnZfdGFncyA9IHNldC1cXHUwMDNlc2hhcmVkX3RhZ3M7XFxuMzQ3NjpcXHRcXHRlbHNlIGlmIChoY3R4X2lkeCBcXHUwMDNjIHNldC1cXHUwMDNlbnJfaHdfcXVldWVzKVxcbjM0Nzc6XFx0XFx0XFx0ZHJ2X3RhZ3MgPSBzZXQtXFx1MDAzZXRhZ3NbaGN0eF9pZHhdO1xcbjM0Nzg6XFx0XFx0ZWxzZVxcbjM0Nzk6XFx0XFx0XFx0ZHJ2X3RhZ3MgPSBOVUxMO1xcbjM0ODA6XFx0XFxuMzQ4MTpcXHRcXHRpZiAodGFncy1cXHUwMDNlc3RhdGljX3JxcyBcXHUwMDI2XFx1MDAyNiBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZXhpdF9yZXF1ZXN0KSB7XFxuMzQ4MjpcXHRcXHRcXHRpbnQgaTtcXG4zNDgzOlxcdFxcbjM0ODQ6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRhZ3MtXFx1MDAzZW5yX3RhZ3M7IGkrKykge1xcbjM0ODU6XFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxID0gdGFncy1cXHUwMDNlc3RhdGljX3Jxc1tpXTtcXG4zNDg2OlxcdFxcbjM0ODc6XFx0XFx0XFx0XFx0aWYgKCFycSlcXG4zNDg4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0ODk6XFx0XFx0XFx0XFx0c2V0LVxcdTAwM2VvcHMtXFx1MDAzZWV4aXRfcmVxdWVzdChzZXQsIHJxLCBoY3R4X2lkeCk7XFxuMzQ5MDpcXHRcXHRcXHRcXHR0YWdzLVxcdTAwM2VzdGF0aWNfcnFzW2ldID0gTlVMTDtcXG4zNDkxOlxcdFxcdFxcdH1cXG4zNDkyOlxcdFxcdH1cXG4zNDkzOlxcdFxcbjM0OTQ6XFx0XFx0YmxrX21xX2NsZWFyX3JxX21hcHBpbmcoZHJ2X3RhZ3MsIHRhZ3MpO1xcbjM0OTU6XFx0XFx0LypcXG4zNDk2OlxcdFxcdCAqIEZyZWUgcmVxdWVzdCBwYWdlcyBpbiBTUkNVIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgZnJvbVxcbjM0OTc6XFx0XFx0ICogYmxrX21xX2ZyZWVfdGFncygpLlxcbjM0OTg6XFx0XFx0ICovXFxuMzQ5OTpcXHR9XFxuMzUwMDpcXHRcXG4zNTAxOlxcdHZvaWQgYmxrX21xX2ZyZWVfcnFfbWFwKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MpXFxuMzUwMjpcXHR7XFxuMzUwMzpcXHRcXHRrZnJlZSh0YWdzLVxcdTAwM2VycXMpO1xcbjM1MDQ6XFx0XFx0dGFncy1cXHUwMDNlcnFzID0gTlVMTDtcXG4zNTA1OlxcdFxcdGtmcmVlKHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMpO1xcbjM1MDY6XFx0XFx0dGFncy1cXHUwMDNlc3RhdGljX3JxcyA9IE5VTEw7XFxuMzUwNzpcXHRcXG4zNTA4OlxcdFxcdGJsa19tcV9mcmVlX3RhZ3Moc2V0LCB0YWdzKTtcXG4zNTA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MjQuNDI1MjUzNDMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjYzMDA2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYmxrX21xX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYmxrX21xX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYC4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyB1c2VkIGluIHJlbGF0aW9uIHRvIGVhY2ggb3RoZXI/IFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEknbGwgbmVlZCBzb21lIGNvbnRleHQuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRob3NlIGZ1bmN0aW9uIGNhbGxzLiBMaW5lcyAzNDMwIHRvIDM0NjUgc291bmQgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIHN1cnJvdW5kaW5nIGNvZGUgdG8gY2xhcmlmeSB0aGUgc2l0dWF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5J3JlIGNhbGxlZCwgYW5kIHdoYXQgZGF0YSB0aGV5J3JlIG1hbmlwdWxhdGluZy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgY29uY2lzZSBzdW1tYXJ5IG9mIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjI4LjU5MTU1NjY1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLW1xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQzMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQzMDpcXHRcXG4zNDMxOlxcdHN0YXRpYyBzaXplX3Qgb3JkZXJfdG9fc2l6ZSh1bnNpZ25lZCBpbnQgb3JkZXIpXFxuMzQzMjpcXHR7XFxuMzQzMzpcXHRcXHRyZXR1cm4gKHNpemVfdClQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuMzQzNDpcXHR9XFxuMzQzNTpcXHRcXG4zNDM2OlxcdC8qIGNhbGxlZCBiZWZvcmUgZnJlZWluZyByZXF1ZXN0IHBvb2wgaW4gQHRhZ3MgKi9cXG4zNDM3OlxcdHN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXFxuMzQzODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxcbjM0Mzk6XFx0e1xcbjM0NDA6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMzQ0MTpcXHRcXG4zNDQyOlxcdFxcdC8qXFxuMzQ0MzpcXHRcXHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIGNsZWFyIG1hcHBpbmcgaWYgZHJpdmVyIHRhZ3MgaXMgbm90IGluaXRpYWxpemVkXFxuMzQ0NDpcXHRcXHQgKiBvciB0aGUgbWFwcGluZyBiZWxvbmdzIHRvIHRoZSBkcml2ZXIgdGFncy5cXG4zNDQ1OlxcdFxcdCAqL1xcbjM0NDY6XFx0XFx0aWYgKCFkcnZfdGFncyB8fCBkcnZfdGFncyA9PSB0YWdzKVxcbjM0NDc6XFx0XFx0XFx0cmV0dXJuO1xcbjM0NDg6XFx0XFxuMzQ0OTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIFxcdTAwMjZ0YWdzLVxcdTAwM2VwYWdlX2xpc3QsIGxydSkge1xcbjM0NTA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTtcXG4zNDUxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBvcmRlcl90b19zaXplKHBhZ2UtXFx1MDAzZXByaXZhdGUpO1xcbjM0NTI6XFx0XFx0XFx0aW50IGk7XFxuMzQ1MzpcXHRcXG4zNDU0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkcnZfdGFncy1cXHUwMDNlbnJfdGFnczsgaSsrKSB7XFxuMzQ1NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcnZfdGFncy1cXHUwMDNlcnFzW2ldO1xcbjM0NTY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBycV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpcnE7XFxuMzQ1NzpcXHRcXG4zNDU4OlxcdFxcdFxcdFxcdGlmIChycV9hZGRyIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IHJxX2FkZHIgXFx1MDAzYyBlbmQpIHtcXG4zNDU5OlxcdFxcdFxcdFxcdFxcdFdBUk5fT05fT05DRShyZXFfcmVmX3JlYWQocnEpICE9IDApO1xcbjM0NjA6XFx0XFx0XFx0XFx0XFx0Y21weGNoZyhcXHUwMDI2ZHJ2X3RhZ3MtXFx1MDAzZXJxc1tpXSwgcnEsIE5VTEwpO1xcbjM0NjE6XFx0XFx0XFx0XFx0fVxcbjM0NjI6XFx0XFx0XFx0fVxcbjM0NjM6XFx0XFx0fVxcbjM0NjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToyOC41OTE4NjcyMzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyNzg1OTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGJsa19tcV9mcmVlX3Jxc2AgQ2FsbGVycyBhbmQgYGhjdHhfaWR4YCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgYmxrX21xX2ZyZWVfcnFzYCBub3cuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBgaGN0eF9pZHhgIGlzIGhhbmRsZWQgYWNyb3NzIGl0cyBjYWxsIHNpdGVzLiBNeSB0aGlua2luZyBpcyB0byBxdWlja2x5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uJ3MgdXNhZ2UsIGNvbmNlbnRyYXRpbmcgb24gdGhlIGNvbnRleHQgcGFzc2VkLCBwYXJ0aWN1bGFybHkgdGhlIHZhbHVlIGFzc2lnbmVkIHRvIGBoY3R4X2lkeGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcGF0dGVybnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdoZXJlIHRoZSBpbmRleCBtaWdodCBiZSBjYWxjdWxhdGVkLCBwYXNzZWQsIG9yIHV0aWxpemVkIGluIGEgbm9uLW9idmlvdXMgd2F5LiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVidWdnaW5nIG9yIHJlZmFjdG9yaW5nIHRoaXMga2luZCBvZiBjb3JlIGZ1bmN0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgdGhlIGRhdGEgZmxvdyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBpbmRleCBhZmZlY3RzIHRoZSBvdmVyYWxsIGxvZ2ljLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIHNvdXJjZXMgb2YgZXJyb3JzIHJlbGF0ZWQgdG8gYGhjdHhfaWR4YC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MzAuODE5NzI4ODk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzNDExOTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9mcmVlX3Jxc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEtc2NoZWQuYz02NzA9dm9pZCBibGtfbXFfc2NoZWRfZnJlZV9ycXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9ibGstbXEtc2NoZWQuYy02NzUtXFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVxcdTAwM2V0YWdfc2V0LVxcdTAwM2VmbGFncykpIHtcXG5ibG9jay9ibGstbXEtc2NoZWQuYzo2NzY6XFx0XFx0YmxrX21xX2ZyZWVfcnFzKHEtXFx1MDAzZXRhZ19zZXQsIHEtXFx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY3Ny1cXHRcXHRcXHRcXHRCTEtfTVFfTk9fSENUWF9JRFgpO1xcbi0tXFxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjgwLVxcdFxcdFxcdGlmIChoY3R4LVxcdTAwM2VzY2hlZF90YWdzKVxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jOjY4MTpcXHRcXHRcXHRcXHRibGtfbXFfZnJlZV9ycXMocS1cXHUwMDNldGFnX3NldCxcXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODItXFx0XFx0XFx0XFx0XFx0XFx0aGN0eC1cXHUwMDNlc2NoZWRfdGFncywgaSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zNDM3PXN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNDY1LVxcbmJsb2NrL2Jsay1tcS5jOjM0NjY6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuYy0zNDY3LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzU4OT1zdGF0aWMgaW50IGJsa19tcV9hbGxvY19ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNjU5LWZhaWw6XFxuYmxvY2svYmxrLW1xLmM6MzY2MDpcXHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XFxuYmxvY2svYmxrLW1xLmMtMzY2MS1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTQxNDU9dm9pZCBibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQxNDktXFx0aWYgKHRhZ3MpIHtcXG5ibG9jay9ibGstbXEuYzo0MTUwOlxcdFxcdGJsa19tcV9mcmVlX3JxcyhzZXQsIHRhZ3MsIGhjdHhfaWR4KTtcXG5ibG9jay9ibGstbXEuYy00MTUxLVxcdFxcdGJsa19tcV9mcmVlX3JxX21hcChzZXQsIHRhZ3MpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmg9NTg9dm9pZCBibGtfbXFfcHV0X3JxX3JlZihzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmgtNjItICovXFxuYmxvY2svYmxrLW1xLmg6NjM6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuaC02NC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjMyLjUzMzE0NjY4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDI5NDEyMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsb2NrIEkvTyBTY2hlZHVsZXIgVGFnIEZyZWVpbmcgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCBhbmQgb3RoZXIgY2FsbGVycyBjYW4gcGFzcyBpbnZhbGlkIGBoY3R4X2lkeGAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYEJMS19NUV9OT19IQ1RYX0lEWGAgb3IgYW4gb3V0LW9mLWJvdW5kcyBpbmRleCwgd2hlbiBmcmVlaW5nIHNjaGVkdWxlciB0YWdzLCBwb3RlbnRpYWxseSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSBuYWl2ZWx5IGFjY2Vzc2VkIGBzZXQtXHUwMDNldGFnc1toY3R4X2lkeF1gIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZy4gSWYgdGhlIHRhZ3Mgd2VyZW4ndCBzaGFyZWQgYW5kIGBoY3R4X2lkeGAgd2FzIGludmFsaWQgKGxpa2UgLTEpLCB3ZSdkIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlzIHBhdGNoIGZpeGVzIHRoYXQgYnkgYWRkaW5nIGEgY2hlY2s6IGlmIHRoZSBpbmRleCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlIChgaGN0eF9pZHggXHUwMDNjIHNldC1cdTAwM2Vucl9od19xdWV1ZXNgKSwgd2UgYWNjZXNzIHRoZSBhcnJheTsgb3RoZXJ3aXNlLCB3ZSBzZXQgYGRydl90YWdzYCB0byBgTlVMTGAuIFNpbXBsZSBib3VuZHMgY2hlY2tpbmcsIGdvb2QuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgS0FTQU4gYW5kIEtNU0FOLlxuXG4xLiAgKipUaGUgYnVnPyoqICBPdXQtb2YtYm91bmRzIGFjY2Vzcy4gV2UncmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBzZXQtXHUwMDNldGFnc2AgYXJyYXkgd2hlbiBgaGN0eF9pZHhgIGlzIGludmFsaWQuXG4yLiAgKipLQVNBTiBkZXRlY3Rpb24/KiogIEFic29sdXRlbHkuICBgc2V0LVx1MDAzZXRhZ3NgIGlzIGFsbG9jYXRlZCwgYW5kIEtBU0FOIHNob3VsZCBlYXNpbHkgY2F0Y2ggb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb24gc2xhYi9rbWFsbG9jIGFsbG9jYXRpb25zLlxuMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/KiogIExldCdzIHNlZTpcblxuICAgICogICBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuICAgICogICBObyBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuXG4gICAgKiAgIE5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBpbnRyb2R1Y2VkLiBgaGN0eF9pZHhgIGFuZCBgc2V0LVx1MDAzZW5yX2h3X3F1ZXVlc2AgYXJlIGluaXRpYWxpemVkIGludGVnZXIgdmFsdWVzLlxuICAgICogICBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYWZmZWN0ZWQuXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLi4uIFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBUaGlzIGZpeCAqcHJpbWFyaWx5KiBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIEtBU0FOIGNvdmVycy4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gXCJTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjogLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLi4uXCIuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEl0IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cblxuT2theSwgSSdtIHJlYWR5IHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyNSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MzguNTYyNTYyMDgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGBoY3R4X2lkeGAgYWdhaW5zdCBgc2V0LVxcdTAwM2Vucl9od19xdWV1ZXNgIGluIGBibGtfbXFfZnJlZV9ycXMoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBgc2V0LVxcdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cXHUwMDNlbnJfaHdfcXVldWVzYCAoZS5nLiwgYEJMS19NUV9OT19IQ1RYX0lEWGApLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlc2AgaW4gYGJsa19tcV9mcmVlX3JxcygpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGBzZXQtXFx1MDAzZXRhZ3NbaGN0eF9pZHhdYCB3aGVuIGBoY3R4X2lkeGAgZXhjZWVkcyBgc2V0LVxcdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgYnVnLCB3aGljaCBmYWxscyBkaXJlY3RseSB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 12:22:39 +0000 UTC FinishedAt: 2026-09-10 12:25:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "446369a5-0dc4-4b44-8961-3dfc2c3e2759" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_mq_free_rqs", "blk_mq_sched_free_rqs", "blk_mq_free_map_and_rqs" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX2ZyZWVfcnFzJiMzNDssCiAgICAmIzM0O2Jsa19tcV9zY2hlZF9mcmVlX3JxcyYjMzQ7LAogICAgJiMzNDtibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXHUwMDNlbnJfaHdfcXVldWVzIChlLmcuIEJMS19NUV9OT19IQ1RYX0lEWCkuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBxdWV1ZS9lbGV2YXRvciB0ZWFyZG93biBsb2dpYyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIChzdWNoIGFzIGVsZXZhdG9yIHN3aXRjaGluZyBvciBxdWV1ZSBjbGVhbnVwKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiODM3ZjdhMTYzOWRjMTliNzk0OTIzZDY5NDVlZGRiNjRkZGZkODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMjoyNDozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuYyBiL2Jsb2NrL2Jsay1tcS5jXG5pbmRleCAyYzg1MDMzMGEzMmJjLi44ZTY3MjZiMzdjNjUxIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tcS5jXG5AQCAtMzQ3Myw4ICYjNDM7MzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuIFxuIFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbi1cdGVsc2VcbiYjNDM7XHRlbHNlIGlmIChoY3R4X2lkeCBcdTAwM2Mgc2V0LVx1MDAzZW5yX2h3X3F1ZXVlcylcbiBcdFx0ZHJ2X3RhZ3MgPSBzZXQtXHUwMDNldGFnc1toY3R4X2lkeF07XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuIFxuIFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbiBcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTI6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfZnJlZV9ycXMmIzM0OywKICAgICYjMzQ7YmxrX21xX3NjaGVkX2ZyZWVfcnFzJiMzNDssCiAgICAmIzM0O2Jsa19tcV9mcmVlX21hcF9hbmRfcnFzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYmxrX21xX2ZyZWVfcnFzKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFycmF5IGluZGV4aW5nIG9uIHNldC1cdTAwM2V0YWdzIHdoZW4gaGN0eF9pZHggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHNldC1cdTAwM2Vucl9od19xdWV1ZXMgKGUuZy4gQkxLX01RX05PX0hDVFhfSURYKS4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHF1ZXVlL2VsZXZhdG9yIHRlYXJkb3duIGxvZ2ljIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgZWxldmF0b3Igc3dpdGNoaW5nIG9yIHF1ZXVlIGNsZWFudXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCAyYzg1MDMzMGEzMmJjLi44ZTY3MjZiMzdjNjUxIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuYwpAQCAtMzQ3Myw4ICYjNDM7MzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLAogCiAJaWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtJmd0O2ZsYWdzKSkKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3NoYXJlZF90YWdzOwotCWVsc2UKJiM0MzsJZWxzZSBpZiAoaGN0eF9pZHggJmx0OyBzZXQtJmd0O25yX2h3X3F1ZXVlcykKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3RhZ3NbaGN0eF9pZHhdOwomIzQzOwllbHNlCiYjNDM7CQlkcnZfdGFncyA9IE5VTEw7CiAKIAlpZiAodGFncy0mZ3Q7c3RhdGljX3JxcyAmYW1wOyZhbXA7IHNldC0mZ3Q7b3BzLSZndDtleGl0X3JlcXVlc3QpIHsKIAkJaW50IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjaGFuZ2U6CgoqKkFuYWx5emluZyB0aGUgQ29tbWl0IGFuZCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNvbW1pdCB0aGF0IHRvdWNoZXMgYGJsb2NrL2Jsay1tcS5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgYmxrX21xX2ZyZWVfcnFzYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBwYXJ0IG9mIHRoZSBibG9jayBsYXllciBpcyBjcml0aWNhbCwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAzNDczIGluIGBibG9jay9ibGstbXEuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhpcyBmdW5jdGlvbiBsaXZlcywgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaWtlbHkgY2VudGVyZWQuIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSByYXcgc291cmNlLiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDY1Olx0XG4zNDY2Olx0dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcbjM0Njc6XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXG4zNDY4Olx0e1xuMzQ2OTpcdFx0c3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncztcbjM0NzA6XHRcbjM0NzE6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnRhZ3MtXHUwMDNlcGFnZV9saXN0KSlcbjM0NzI6XHRcdFx0cmV0dXJuO1xuMzQ3MzpcdFxuMzQ3NDpcdFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuMzQ3NTpcdFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbjM0NzY6XHRcdGVsc2UgaWYgKGhjdHhfaWR4IFx1MDAzYyBzZXQtXHUwMDNlbnJfaHdfcXVldWVzKVxuMzQ3NzpcdFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XTtcbjM0Nzg6XHRcdGVsc2VcbjM0Nzk6XHRcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuMzQ4MDpcdFxuMzQ4MTpcdFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbjM0ODI6XHRcdFx0aW50IGk7XG4zNDgzOlx0XG4zNDg0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhZ3MtXHUwMDNlbnJfdGFnczsgaSYjNDM7JiM0MzspIHtcbjM0ODU6XHRcdFx0XHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSB0YWdzLVx1MDAzZXN0YXRpY19ycXNbaV07XG4zNDg2Olx0XG4zNDg3Olx0XHRcdFx0aWYgKCFycSlcbjM0ODg6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzQ4OTpcdFx0XHRcdHNldC1cdTAwM2VvcHMtXHUwMDNlZXhpdF9yZXF1ZXN0KHNldCwgcnEsIGhjdHhfaWR4KTtcbjM0OTA6XHRcdFx0XHR0YWdzLVx1MDAzZXN0YXRpY19ycXNbaV0gPSBOVUxMO1xuMzQ5MTpcdFx0XHR9XG4zNDkyOlx0XHR9XG4zNDkzOlx0XG4zNDk0Olx0XHRibGtfbXFfY2xlYXJfcnFfbWFwcGluZyhkcnZfdGFncywgdGFncyk7XG4zNDk1Olx0XHQvKlxuMzQ5NjpcdFx0ICogRnJlZSByZXF1ZXN0IHBhZ2VzIGluIFNSQ1UgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBmcm9tXG4zNDk3Olx0XHQgKiBibGtfbXFfZnJlZV90YWdzKCkuXG4zNDk4Olx0XHQgKi9cbjM0OTk6XHR9XG4zNTAwOlx0XG4zNTAxOlx0dm9pZCBibGtfbXFfZnJlZV9ycV9tYXAoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncylcbjM1MDI6XHR7XG4zNTAzOlx0XHRrZnJlZSh0YWdzLVx1MDAzZXJxcyk7XG4zNTA0Olx0XHR0YWdzLVx1MDAzZXJxcyA9IE5VTEw7XG4zNTA1Olx0XHRrZnJlZSh0YWdzLVx1MDAzZXN0YXRpY19ycXMpO1xuMzUwNjpcdFx0dGFncy1cdTAwM2VzdGF0aWNfcnFzID0gTlVMTDtcbjM1MDc6XHRcbjM1MDg6XHRcdGJsa19tcV9mcmVlX3RhZ3Moc2V0LCB0YWdzKTtcbjM1MDk6XHR9XG4zNTEwOlx0XG4zNTExOlx0c3RhdGljIGVudW0gaGN0eF90eXBlIGhjdHhfaWR4X3RvX3R5cGUoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXG4zNTEyOlx0XHRcdHVuc2lnbmVkIGludCBoY3R4X2lkeClcbjM1MTM6XHR7XG4zNTE0Olx0XHRpbnQgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTczCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGJsa19tcV9mcmVlX3Jxc2AgQ2FsbHNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgYmxrX21xX2ZyZWVfcnFzYC4gVGltZSB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGV4ZWN1dGlvbiBwYXRocyB0aGF0IGxlYWQgdG8gYGJsa19tcV9mcmVlX3Jxc2AgYmVpbmcgY2FsbGVkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IFdoYXQgbG9ja3MgYXJlIGhlbGQsIGlmIGFueSwgdXBvbiBlbnRyeT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmN1cnJlbmN5IGNvbmNlcm5zPyBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGhlcmU6IHdoZW4gYW5kIHdoeSBhcmUgcmVxdWVzdCBxdWV1ZXMgYmVpbmcgcmVsZWFzZWQ/IFRoaXMgaXMgcHJvYmFibHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYmxvY2sgbGF5ZXImIzM5O3MgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBjcm9zcy1yZWZlcmVuY2VzIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9mcmVlX3JxcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEtc2NoZWQuYz02NzA9dm9pZCBibGtfbXFfc2NoZWRfZnJlZV9ycXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjc1LVx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVx1MDAzZXRhZ19zZXQtXHUwMDNlZmxhZ3MpKSB7XG5ibG9jay9ibGstbXEtc2NoZWQuYzo2NzY6XHRcdGJsa19tcV9mcmVlX3JxcyhxLVx1MDAzZXRhZ19zZXQsIHEtXHUwMDNlc2NoZWRfc2hhcmVkX3RhZ3MsXG5ibG9jay9ibGstbXEtc2NoZWQuYy02NzctXHRcdFx0XHRCTEtfTVFfTk9fSENUWF9JRFgpO1xuLS1cbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY4MC1cdFx0XHRpZiAoaGN0eC1cdTAwM2VzY2hlZF90YWdzKVxuYmxvY2svYmxrLW1xLXNjaGVkLmM6NjgxOlx0XHRcdFx0YmxrX21xX2ZyZWVfcnFzKHEtXHUwMDNldGFnX3NldCxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY4Mi1cdFx0XHRcdFx0XHRoY3R4LVx1MDAzZXNjaGVkX3RhZ3MsIGkpO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTM0Mzc9c3RhdGljIHZvaWQgYmxrX21xX2NsZWFyX3JxX21hcHBpbmcoc3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncyxcbi0tXG5ibG9jay9ibGstbXEuYy0zNDY1LVxuYmxvY2svYmxrLW1xLmM6MzQ2Njp2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuYmxvY2svYmxrLW1xLmMtMzQ2Ny1cdFx0ICAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXG4tLVxuYmxvY2svYmxrLW1xLmM9MzU4OT1zdGF0aWMgaW50IGJsa19tcV9hbGxvY19ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXG4tLVxuYmxvY2svYmxrLW1xLmMtMzY1OS1mYWlsOlxuYmxvY2svYmxrLW1xLmM6MzY2MDpcdGJsa19tcV9mcmVlX3JxcyhzZXQsIHRhZ3MsIGhjdHhfaWR4KTtcbmJsb2NrL2Jsay1tcS5jLTM2NjEtXHRyZXR1cm4gLUVOT01FTTtcbi0tXG5ibG9jay9ibGstbXEuYz00MTQ1PXZvaWQgYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXG4tLVxuYmxvY2svYmxrLW1xLmMtNDE0OS1cdGlmICh0YWdzKSB7XG5ibG9jay9ibGstbXEuYzo0MTUwOlx0XHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XG5ibG9jay9ibGstbXEuYy00MTUxLVx0XHRibGtfbXFfZnJlZV9ycV9tYXAoc2V0LCB0YWdzKTtcbi0tXG5ibG9jay9ibGstbXEuaD01OD12b2lkIGJsa19tcV9wdXRfcnFfcmVmKHN0cnVjdCByZXF1ZXN0ICpycSk7XG4tLVxuYmxvY2svYmxrLW1xLmgtNjItICovXG5ibG9jay9ibGstbXEuaDo2Mzp2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuYmxvY2svYmxrLW1xLmgtNjQtXHRcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTIyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBNUSBTY2hlZHVsaW5nIGFuZCBSZXNvdXJjZSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYmxvY2svYmxrLW1xLXNjaGVkLmM6Njc2YCBzbmlwcGV0LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHEtJmd0O3RhZ19zZXQtJmd0O2ZsYWdzKSlgLiAgSXQgYXBwZWFycyB3ZSYjMzk7cmUgZGVjaWRpbmcgd2hldGhlciB0byBjYWxsIGBibGtfbXFfZnJlZV9ycXNgIGJhc2VkIG9uIHNoYXJlZCB0YWcgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGRpcmVjdGx5IGZyZWVzIHJlcXVlc3Qgc3RydWN0dXJlcyAoYHJxc2ApIGlmIHRhZ3MgYXJlIHNoYXJlZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAmIzM0O1doZW4gZWxzZSBpcyBgYmxrX21xX2ZyZWVfcnFzYCBjYWxsZWQsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29udGV4dHM/JiMzNDsKClRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXMuIExldCBtZSBsb29rIGZvciBjYWxscyB0byBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCB3aGljaCBtaWdodCBwcm92aWRlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBDb250ZXh0dWFsbHksIEkmIzM5O2xsIHJldmlldyBhcm91bmQgbGluZSA2NzAgaW4gYGJsay1tcS1zY2hlZC5jYCBhbmQgYXJvdW5kIGxpbmUgMzQzNyBpbiBgYmxvY2svYmxrLW1xLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIHNjaGVkdWxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcmVxdWVzdCBzdHJ1Y3R1cmVzIGFuZCB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkIGluIGEgc2hhcmVkIHRhZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS1zY2hlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcdGJsa19tcV9zY2hlZF90YWdzX3RlYXJkb3duKHEsIGZsYWdzKTtcbiA2NjE6XHRcdGtvYmplY3RfcHV0KFx1MDAyNmVxLVx1MDAzZWtvYmopO1xuIDY2MjpcdFx0cS1cdTAwM2VlbGV2YXRvciA9IE5VTEw7XG4gNjYzOlx0XHRyZXR1cm4gcmV0O1xuIDY2NDpcdH1cbiA2NjU6XHRcbiA2NjY6XHQvKlxuIDY2NzpcdCAqIGNhbGxlZCBpbiBlaXRoZXIgYmxrX3F1ZXVlX2NsZWFudXAgb3IgZWxldmF0b3Jfc3dpdGNoLCB0YWdzZXRcbiA2Njg6XHQgKiBpcyByZXF1aXJlZCBmb3IgZnJlZWluZyByZXF1ZXN0c1xuIDY2OTpcdCAqL1xuIDY3MDpcdHZvaWQgYmxrX21xX3NjaGVkX2ZyZWVfcnFzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIDY3MTpcdHtcbiA2NzI6XHRcdHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4O1xuIDY3MzpcdFx0dW5zaWduZWQgbG9uZyBpO1xuIDY3NDpcdFxuIDY3NTpcdFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVx1MDAzZXRhZ19zZXQtXHUwMDNlZmxhZ3MpKSB7XG4gNjc2Olx0XHRcdGJsa19tcV9mcmVlX3JxcyhxLVx1MDAzZXRhZ19zZXQsIHEtXHUwMDNlc2NoZWRfc2hhcmVkX3RhZ3MsXG4gNjc3Olx0XHRcdFx0XHRCTEtfTVFfTk9fSENUWF9JRFgpO1xuIDY3ODpcdFx0fSBlbHNlIHtcbiA2Nzk6XHRcdFx0cXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpIHtcbiA2ODA6XHRcdFx0XHRpZiAoaGN0eC1cdTAwM2VzY2hlZF90YWdzKVxuIDY4MTpcdFx0XHRcdFx0YmxrX21xX2ZyZWVfcnFzKHEtXHUwMDNldGFnX3NldCxcbiA2ODI6XHRcdFx0XHRcdFx0XHRoY3R4LVx1MDAzZXNjaGVkX3RhZ3MsIGkpO1xuIDY4MzpcdFx0XHR9XG4gNjg0Olx0XHR9XG4gNjg1Olx0fVxuIDY4NjpcdFxuIDY4NzpcdHZvaWQgYmxrX21xX2V4aXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSlcbiA2ODg6XHR7XG4gNjg5Olx0XHRzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDtcbiA2OTA6XHRcdHVuc2lnbmVkIGxvbmcgaTtcbiA2OTE6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XG4gNjkyOlx0XG4gNjkzOlx0XHRxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkge1xuIDY5NDpcdFx0XHRpZiAoZS1cdTAwM2V0eXBlLVx1MDAzZW9wcy5leGl0X2hjdHggXHUwMDI2XHUwMDI2IGhjdHgtXHUwMDNlc2NoZWRfZGF0YSkge1xuIDY5NTpcdFx0XHRcdGUtXHUwMDNldHlwZS1cdTAwM2VvcHMuZXhpdF9oY3R4KGhjdHgsIGkpO1xuIDY5NjpcdFx0XHRcdGhjdHgtXHUwMDNlc2NoZWRfZGF0YSA9IE5VTEw7XG4gNjk3Olx0XHRcdH1cbiA2OTg6XHRcdFx0ZmxhZ3MgPSBoY3R4LVx1MDAzZWZsYWdzO1xuIDY5OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byBibGtfbXFfY2xlYXJfcnFfbWFwcGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgYmxrX21xX2NsZWFyX3JxX21hcHBpbmdgIGluIGBibG9jay9ibGstbXEuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYmxvY2sgbXVsdGktcXVldWUgSS9PIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgYmxvY2sgbGF5ZXIgaW50ZXJuYWxzIHRlbGxzIG1lIHRoaXMgbXVzdCBiZSBhYm91dCBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBhIHJlcXVlc3QgcXVldWUgZW50cnkgKGBycWApIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoZSBuYW1lIGltcGxpZXMgaXTigJlzIGEgY2xlYXJpbmcgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggZnJlZWluZyByZXNvdXJjZXMgb3IgcmVzZXR0aW5nIHBvaW50ZXJzLiBJIGV4cGVjdCBpdCYjMzk7cyBpbnZva2VkIHdoZW4gYW4gSS9PIHJlcXVlc3QgY29tcGxldGVzLCBpcyBjYW5jZWxsZWQsIG9yIHVuZGVyZ29lcyBzb21lIGZvcm0gb2YgcmVzY2hlZHVsaW5nIHdoZXJlIGl0cyBtYXBwaW5nIG5lZWRzIHRvIGJlIGludmFsaWRhdGVkLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVxdWVzdCBxdWV1ZSAoYGJsa19tcV9od19xdWV1ZWApIHN0cnVjdHVyZXMgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBzeW5jaHJvbml6YXRpb24gYXNwZWN0cyB0b28sIHRoZSBsb2NrcyBhbmQgbWVtb3J5IGJhcnJpZXJzLCBiZWNhdXNlIHRoaXMgaXMgYSBoaWdobHkgY29uY3VycmVudCBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgd2hhdCBsb2NrcyBpdCYjMzk7cyB1c2luZyB3aWxsIGJlIHZpdGFsLiBSaWdodCwgdGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDM1Olx0XG4zNDM2Olx0LyogY2FsbGVkIGJlZm9yZSBmcmVlaW5nIHJlcXVlc3QgcG9vbCBpbiBAdGFncyAqL1xuMzQzNzpcdHN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXG4zNDM4Olx0XHRcdFx0XHQgICAgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxuMzQzOTpcdHtcbjM0NDA6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMzQ0MTpcdFxuMzQ0MjpcdFx0LypcbjM0NDM6XHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2xlYXIgbWFwcGluZyBpZiBkcml2ZXIgdGFncyBpcyBub3QgaW5pdGlhbGl6ZWRcbjM0NDQ6XHRcdCAqIG9yIHRoZSBtYXBwaW5nIGJlbG9uZ3MgdG8gdGhlIGRyaXZlciB0YWdzLlxuMzQ0NTpcdFx0ICovXG4zNDQ2Olx0XHRpZiAoIWRydl90YWdzIHx8IGRydl90YWdzID09IHRhZ3MpXG4zNDQ3Olx0XHRcdHJldHVybjtcbjM0NDg6XHRcbjM0NDk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgXHUwMDI2dGFncy1cdTAwM2VwYWdlX2xpc3QsIGxydSkge1xuMzQ1MDpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpO1xuMzQ1MTpcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICYjNDM7IG9yZGVyX3RvX3NpemUocGFnZS1cdTAwM2Vwcml2YXRlKTtcbjM0NTI6XHRcdFx0aW50IGk7XG4zNDUzOlx0XG4zNDU0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRydl90YWdzLVx1MDAzZW5yX3RhZ3M7IGkmIzQzOyYjNDM7KSB7XG4zNDU1Olx0XHRcdFx0c3RydWN0IHJlcXVlc3QgKnJxID0gZHJ2X3RhZ3MtXHUwMDNlcnFzW2ldO1xuMzQ1NjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcnFfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJxO1xuMzQ1NzpcdFxuMzQ1ODpcdFx0XHRcdGlmIChycV9hZGRyIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IHJxX2FkZHIgXHUwMDNjIGVuZCkge1xuMzQ1OTpcdFx0XHRcdFx0V0FSTl9PTl9PTkNFKHJlcV9yZWZfcmVhZChycSkgIT0gMCk7XG4zNDYwOlx0XHRcdFx0XHRjbXB4Y2hnKFx1MDAyNmRydl90YWdzLVx1MDAzZXJxc1tpXSwgcnEsIE5VTEwpO1xuMzQ2MTpcdFx0XHRcdH1cbjM0NjI6XHRcdFx0fVxuMzQ2MzpcdFx0fVxuMzQ2NDpcdH1cbjM0NjU6XHRcbjM0NjY6XHR2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuMzQ2NzpcdFx0XHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeClcbjM0Njg6XHR7XG4zNDY5Olx0XHRzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzO1xuMzQ3MDpcdFxuMzQ3MTpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dGFncy1cdTAwM2VwYWdlX2xpc3QpKVxuMzQ3MjpcdFx0XHRyZXR1cm47XG4zNDczOlx0XG4zNDc0Olx0XHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cdTAwM2VmbGFncykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBCbG9jayBMYXllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBjaGFuZ2UgaW4gaG93IGBkcnZfdGFnc2AgaXMgYXNzaWduZWQ6IGl0IG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgaGN0eF9pZHhgIGJlaW5nIHdpdGhpbiBib3VuZHMgYmVmb3JlIGFjY2Vzc2luZyBgc2V0LSZndDt0YWdzW11gLiBUaGUgb3JpZ2luYWwgY29kZSwgYXBwYXJlbnRseSwgZGlkbiYjMzk7dCBkbyB0aGlzLCBhbmQgSSBpbW1lZGlhdGVseSBzZWUgdGhlIHZ1bG5lcmFiaWxpdHk6ICBpZiB0aGUgYGhjdHhfaWR4YCBpcyBvdXQgb2YgYm91bmRzLCBvciBgQkxLX01RX05PX0hDVFhfSURYYCwgd2hpY2ggaXMgLTEgY2FzdCBhcyBhbiB1bnNpZ25lZCBpbnQsIGl0JiMzOTtzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCEgVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIGNvbW1pdCBhZGRzIGEgY2hlY2s6CmlmIGAhYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC0mZ3Q7ZmxhZ3MpYCwgY2hlY2sgdGhhdCBgaGN0eF9pZHhgIGlzIHZhbGlkLCBhbmQgb25seSBzZXQgYGRydl90YWdzYCBpZiBpdCBpcy4gT3RoZXJ3aXNlLCBzZXQgaXQgdG8gYE5VTExgLgoKTm93LCBpcyB0aGlzIGltcG9ydGFudCBlbm91Z2ggdG8gcGF5IGF0dGVudGlvbiB0bz8gV2VsbCwgdGhpcyBjb2RlIGxpdmVzIGluIGBibG9jay9ibGstbXEuY2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlICpjb3JlKiBibG9jayBsYXllci4gQ29yZSBibG9jayBsYXllciBsb2dpYyBpcyBhIGRlZmluaXRlIHRhcmdldCBmb3IgdHJpYWdlIGFuZCByZXZpZXcuIFRoZSBndWlkZWxpbmVzIEkgZm9sbG93IHNheSB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gdGhlIGJsb2NrIGxheWVyLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgKGFuZCB0aGlzIGlzIG1lbW9yeSBhY2Nlc3MsIGVzc2VudGlhbGx5KSwgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGF0dGVudGlvbi4gIFJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXBzIGFsc28gYXBwbHkgaGVyZSwgZXNwZWNpYWxseSBpZiBpdCBpcyBtYWtpbmcgdGhlIGNvZGUgc2FmZXIuIFJ1bnRpbWUgYXNzZXJ0aW9ucyBhbmQgZGVmZW5zaXZlIGNoZWNrcyAobGlrZSB0aGUgb25lIGFkZGVkIGhlcmUpIGFyZSBhbHdheXMgZ29vZC4KCkZ1cnRoZXJtb3JlLCBgYmxrLW1xYCBpcyBmb3VuZGF0aW9uYWwuIEl0JiMzOTtzIHVzZWQgYnkgZXZlcnl0aGluZyBmcm9tIGxvb3AgZGV2aWNlcyBhbmQgbnVsbCBibG9jayBkZXZpY2VzIHRvIHZpcnRpb19ibGssIE5WTWUsIGFuZCBTQ1NJIOKAkyBwcmV0dHkgbXVjaCBldmVyeSBibG9jayBkZXZpY2UgaW4gYSBMaW51eCBzeXN0ZW0uIFRoaXMgaXMgY29tcGxldGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgbWVhbmluZyBpdCYjMzk7cyBlYXN5IHRvIHRlc3Qgd2l0aCBRRU1VLCBzeXprYWxsZXIsIG9yIGJ5IHNpbXBseSBjcmVhdGluZy9kZXN0cm95aW5nIGxvb3AgZGV2aWNlcywgY2hhbmdpbmcgc2NoZWR1bGVycywgb3IgbWFuaXB1bGF0aW5nIHRhZ3NldCBvcGVyYXRpb25zLgoKU28sIGlzIGl0IFdvcnRoRnV6emluZz8gQWJzb2x1dGVseS4gYFdvcnRoRnV6emluZzogdHJ1ZWAuICBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgcG90ZW50aWFsbHkgZXhwb3NlZCB0byB1c2VyLXByb3ZpZGVkIGlucHV0IHRoYXQgY291bGQgY2F1c2UgYSBjcmFzaCBvciwgd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIGJsb2NrIGxheWVyLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgYGJsb2NrL01ha2VmaWxlYCBhbmQgYGJsb2NrL0tjb25maWdgIGZpbGVzIHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZXByb2R1Y2Ugb3IgdHJpZ2dlciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstbXEubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlPTg9b2JqLXlcdFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcbmJsb2NrL01ha2VmaWxlLTktXHRcdFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxuYmxvY2svTWFrZWZpbGU6MTA6XHRcdFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcbmJsb2NrL01ha2VmaWxlLTExLVx0XHRcdGJsay1tcS10YWcubyBibGstbXEtZG1hLm8gYmxrLXN0YXQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjU0CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBvYmoteWAgaW4gdGhlIEJsb2NrIE1ha2VmaWxlKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgb2JqLXlgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgYXMgYSBrZXJuZWwgZGV2LCBpcyB0aGF0IHRoaXMgaXMgaW5kaWNhdGluZyB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlIGBibG9ja2AgZGlyZWN0b3J5LiBNYWtlcyBzZW5zZS4gVGhlbiBJIHNlZSB0aGF0IGl0JiMzOTtzIHRpZWQgdG8gYENPTkZJR19CTE9DS2AuIE9rYXksIHRoYXQmIzM5O3MgdGhlIHBhcmVudCBjb25maWcgb3B0aW9uIGZvciBhbnl0aGluZyBpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBgQkxPQ0s9eWAgY29uZmlybXMgdGhhdCBpdCYjMzk7cyBlbmFibGVkLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgZm9yICp3aGljaCogcGFydHMgb2YgdGhlIGJsb2NrIGxheWVyIGdldCBjb21waWxlZCwgY29uc2lkZXJpbmcgaXQgaXMgYSBtb2R1bGUuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNoZWNraW5nIHdoZXRoZXIgYEJMS19NUWAgb3IgYEJMT0NLYCBhcmUgdGhlbXNlbHZlcyBjb25maWd1cmF0aW9ucywgYmVjYXVzZSBhdCBsZWFzdCBvbmUgc2hvdWxkIGJlIHByZXNlbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgZmlndXJlIG91dCB3aGljaCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGxvZ2ljIGlzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxPQ0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy00LSNcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbi0tXG5ibG9jay9LY29uZmlnPTI3PWlmIEJMT0NLXG5ibG9jay9LY29uZmlnLTI4LVxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG5ibG9jay9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cbi0tXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxuYmxvY2svS2NvbmZpZy0yMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjAKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJsb2NrIExheWVyIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYmxvY2sgbGF5ZXIgdGVzdGluZywgYW5kIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBzZWVtcyB0byBiZSBgQkxPQ0tgLiAgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MsIGxpa2UgYEJMS19ERVZfTE9PUGAgb3IgYEJMS19ERVZfTlVMTF9CTEtgLCBidXQgYEJMT0NLYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IG9uZS4gIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgc3BlY2lmaWMgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IGBibGtfbXFfZnJlZV9ycXNgLCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCwgYGJsa19tcV9mcmVlX21hcF9hbmRfcnFzYCwgYGJsa19tcV9hbGxvY19ycXNgLCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZG8sIHNwZWNpZmljYWxseSBgYmxrX21xX2ZyZWVfcnFzYC4KCkl0IHNlZW1zIGxpa2UgYGJsa19tcV9mcmVlX3Jxc2AgaXNuJiMzOTt0IGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIEl0JiMzOTtzIHVzZWQgd2hlbiBmcmVlaW5nIHRhZ3NldHMsIGR1cmluZyBlbGV2YXRvciBzd2l0Y2hlcyAod2l0aCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCksIG9yIGVycm9yIGhhbmRsaW5nIGluIGBibGtfbXFfYWxsb2NfcnFzYC4gIEl0JiMzOTtzIGEgc3BlY2lmaWMgYmxvY2sgbGF5ZXIgY2xlYW51cC9lbGV2YXRvciBzd2l0Y2ggZnVuY3Rpb24sIG5vdCBzb21ldGhpbmcgZ2VuZXJpYy4gYGJsa19tcV9zY2hlZF9mcmVlX3Jxc2AgaXMgY2FsbGVkIGR1cmluZyBlbGV2YXRvciBzd2l0Y2hlcyBvciBxdWV1ZSBjbGVhbnVwLiBgYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXNgIGlzIGNhbGxlZCBkdXJpbmcgdGFnc2V0IHRlYXJkb3duIG9yIHF1ZXVlIGNsZWFudXAuCgpOb3csIGxldCBtZSBjb25maXJtIGlmIGBibGtfbXFfY2xlYXJfcnFfbWFwcGluZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24gb3Igbm90LiBBaCwgaW4gYGJsb2NrL2Jsay1tcS5jYCwgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCBpcyBkZWZpbmVkIGFzIGEgYHN0YXRpYyB2b2lkYC4gVGhlIG90aGVycyBhcmUganVzdCBgdm9pZGAuIFRoaXMgaGVscHMgdG8gY29uZmlybSB0aGUgc2NvcGUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIHN0cmFpZ2h0OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSB0aGlzIGlzIGltcG9ydGFudC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWyYjMzQ7QkxPQ0smIzM0O11gIC0gR290IGl0LgoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O2Jsa19tcV9mcmVlX3JxcyYjMzQ7LCAmIzM0O2Jsa19tcV9zY2hlZF9mcmVlX3JxcyYjMzQ7LCAmIzM0O2Jsa19tcV9mcmVlX21hcF9hbmRfcnFzJiMzNDtdYCAtIENvbmZpcm1lZCwgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byB3YXRjaC4KKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgLSBJJiMzOTt2ZSBnb3QgYSBmb2N1c2VkIGV4cGxhbmF0aW9uLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9mcmVlX3JxcyYjMzQ7LAogICAgJiMzNDtibGtfbXFfc2NoZWRfZnJlZV9ycXMmIzM0OywKICAgICYjMzQ7YmxrX21xX2ZyZWVfbWFwX2FuZF9ycXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBibGtfbXFfZnJlZV9ycXMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYXJyYXkgaW5kZXhpbmcgb24gc2V0LVx1MDAzZXRhZ3Mgd2hlbiBoY3R4X2lkeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2V0LVx1MDAzZW5yX2h3X3F1ZXVlcyAoZS5nLiBCTEtfTVFfTk9fSENUWF9JRFgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcXVldWUvZWxldmF0b3IgdGVhcmRvd24gbG9naWMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucyAoc3VjaCBhcyBlbGV2YXRvciBzd2l0Y2hpbmcgb3IgcXVldWUgY2xlYW51cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX2ZyZWVfcnFzJiMzNDssCiAgICAmIzM0O2Jsa19tcV9zY2hlZF9mcmVlX3JxcyYjMzQ7LAogICAgJiMzNDtibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXHUwMDNlbnJfaHdfcXVldWVzIChlLmcuIEJMS19NUV9OT19IQ1RYX0lEWCkuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBxdWV1ZS9lbGV2YXRvciB0ZWFyZG93biBsb2dpYyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIChzdWNoIGFzIGVsZXZhdG9yIHN3aXRjaGluZyBvciBxdWV1ZSBjbGVhbnVwKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCAyYzg1MDMzMGEzMmJjLi44ZTY3MjZiMzdjNjUxIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEuYwpAQCAtMzQ3Myw4ICYjNDM7MzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLAogCiAJaWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtJmd0O2ZsYWdzKSkKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3NoYXJlZF90YWdzOwotCWVsc2UKJiM0MzsJZWxzZSBpZiAoaGN0eF9pZHggJmx0OyBzZXQtJmd0O25yX2h3X3F1ZXVlcykKIAkJZHJ2X3RhZ3MgPSBzZXQtJmd0O3RhZ3NbaGN0eF9pZHhdOwomIzQzOwllbHNlCiYjNDM7CQlkcnZfdGFncyA9IE5VTEw7CiAKIAlpZiAodGFncy0mZ3Q7c3RhdGljX3JxcyAmYW1wOyZhbXA7IHNldC0mZ3Q7b3BzLSZndDtleGl0X3JlcXVlc3QpIHsKIAkJaW50IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIHRoaW5raW5nIGFzIGFuIGV4cGVyaWVuY2VkIHByb2Zlc3Npb25hbDoKCioqQW5hbHl6aW5nIHRoZSBCbG9jayBJL08gUXVldWVpbmcgQ29kZSoqCgpSaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgYmxvY2svYmxrLW1xLmNgLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYmxvY2sgbXVsdGktcXVldWUgY29kZSByZXNpZGVzLiBJIHdhbnQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzIGJlaW5nIG1hZGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scyDigJMgbGlrZWx5IGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9mIHRoZSBzb3VyY2UgY29kZSwgYnV0IGBncmVwcGVyYCBpcyBhbHNvIGFuIG9wdGlvbiwgcGFydGljdWxhcmx5IGlmIEkgbmVlZCB0byBmaW5kIHNwZWNpZmljIGluc3RhbmNlcyBvZiBhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGFjcm9zcyB0aGUgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbiBgYmxrX21xX2ZyZWVfcnFzYC4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgY3VycmVudGx5IGltcGxlbWVudGVkLCBhbmQgdGhlbiBob3cgdGhpcyBwYXRjaCBtb2RpZmllcyBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDYwOlx0XHRcdFx0XHRjbXB4Y2hnKFx1MDAyNmRydl90YWdzLVx1MDAzZXJxc1tpXSwgcnEsIE5VTEwpO1xuMzQ2MTpcdFx0XHRcdH1cbjM0NjI6XHRcdFx0fVxuMzQ2MzpcdFx0fVxuMzQ2NDpcdH1cbjM0NjU6XHRcbjM0NjY6XHR2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuMzQ2NzpcdFx0XHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeClcbjM0Njg6XHR7XG4zNDY5Olx0XHRzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzO1xuMzQ3MDpcdFxuMzQ3MTpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dGFncy1cdTAwM2VwYWdlX2xpc3QpKVxuMzQ3MjpcdFx0XHRyZXR1cm47XG4zNDczOlx0XG4zNDc0Olx0XHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cdTAwM2VmbGFncykpXG4zNDc1Olx0XHRcdGRydl90YWdzID0gc2V0LVx1MDAzZXNoYXJlZF90YWdzO1xuMzQ3NjpcdFx0ZWxzZSBpZiAoaGN0eF9pZHggXHUwMDNjIHNldC1cdTAwM2Vucl9od19xdWV1ZXMpXG4zNDc3Olx0XHRcdGRydl90YWdzID0gc2V0LVx1MDAzZXRhZ3NbaGN0eF9pZHhdO1xuMzQ3ODpcdFx0ZWxzZVxuMzQ3OTpcdFx0XHRkcnZfdGFncyA9IE5VTEw7XG4zNDgwOlx0XG4zNDgxOlx0XHRpZiAodGFncy1cdTAwM2VzdGF0aWNfcnFzIFx1MDAyNlx1MDAyNiBzZXQtXHUwMDNlb3BzLVx1MDAzZWV4aXRfcmVxdWVzdCkge1xuMzQ4MjpcdFx0XHRpbnQgaTtcbjM0ODM6XHRcbjM0ODQ6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFncy1cdTAwM2Vucl90YWdzOyBpJiM0MzsmIzQzOykge1xuMzQ4NTpcdFx0XHRcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHRhZ3MtXHUwMDNlc3RhdGljX3Jxc1tpXTtcbjM0ODY6XHRcbjM0ODc6XHRcdFx0XHRpZiAoIXJxKVxuMzQ4ODpcdFx0XHRcdFx0Y29udGludWU7XG4zNDg5Olx0XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3Qoc2V0LCBycSwgaGN0eF9pZHgpO1xuMzQ5MDpcdFx0XHRcdHRhZ3MtXHUwMDNlc3RhdGljX3Jxc1tpXSA9IE5VTEw7XG4zNDkxOlx0XHRcdH1cbjM0OTI6XHRcdH1cbjM0OTM6XHRcbjM0OTQ6XHRcdGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKGRydl90YWdzLCB0YWdzKTtcbjM0OTU6XHRcdC8qXG4zNDk2Olx0XHQgKiBGcmVlIHJlcXVlc3QgcGFnZXMgaW4gU1JDVSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGZyb21cbjM0OTc6XHRcdCAqIGJsa19tcV9mcmVlX3RhZ3MoKS5cbjM0OTg6XHRcdCAqL1xuMzQ5OTpcdH1cbjM1MDA6XHRcbjM1MDE6XHR2b2lkIGJsa19tcV9mcmVlX3JxX21hcChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxuMzUwMjpcdHtcbjM1MDM6XHRcdGtmcmVlKHRhZ3MtXHUwMDNlcnFzKTtcbjM1MDQ6XHRcdHRhZ3MtXHUwMDNlcnFzID0gTlVMTDtcbjM1MDU6XHRcdGtmcmVlKHRhZ3MtXHUwMDNlc3RhdGljX3Jxcyk7XG4zNTA2Olx0XHR0YWdzLVx1MDAzZXN0YXRpY19ycXMgPSBOVUxMO1xuMzUwNzpcdFxuMzUwODpcdFx0YmxrX21xX2ZyZWVfdGFncyhzZXQsIHRhZ3MpO1xuMzUwOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgYmxrX21xX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGJsa19tcV9mcmVlX3Jxc2AgYW5kIGBibGtfbXFfY2xlYXJfcnFfbWFwcGluZ2AuIFdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgdXNlZCBpbiByZWxhdGlvbiB0byBlYWNoIG90aGVyPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHNvbWUgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRob3NlIGZ1bmN0aW9uIGNhbGxzLiBMaW5lcyAzNDMwIHRvIDM0NjUgc291bmQgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIHN1cnJvdW5kaW5nIGNvZGUgdG8gY2xhcmlmeSB0aGUgc2l0dWF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhleSYjMzk7cmUgY2FsbGVkLCBhbmQgd2hhdCBkYXRhIHRoZXkmIzM5O3JlIG1hbmlwdWxhdGluZy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgY29uY2lzZSBzdW1tYXJ5IG9mIHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MzA6XHRcbjM0MzE6XHRzdGF0aWMgc2l6ZV90IG9yZGVyX3RvX3NpemUodW5zaWduZWQgaW50IG9yZGVyKVxuMzQzMjpcdHtcbjM0MzM6XHRcdHJldHVybiAoc2l6ZV90KVBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4zNDM0Olx0fVxuMzQzNTpcdFxuMzQzNjpcdC8qIGNhbGxlZCBiZWZvcmUgZnJlZWluZyByZXF1ZXN0IHBvb2wgaW4gQHRhZ3MgKi9cbjM0Mzc6XHRzdGF0aWMgdm9pZCBibGtfbXFfY2xlYXJfcnFfbWFwcGluZyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzLFxuMzQzODpcdFx0XHRcdFx0ICAgIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncylcbjM0Mzk6XHR7XG4zNDQwOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjM0NDE6XHRcbjM0NDI6XHRcdC8qXG4zNDQzOlx0XHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIGNsZWFyIG1hcHBpbmcgaWYgZHJpdmVyIHRhZ3MgaXMgbm90IGluaXRpYWxpemVkXG4zNDQ0Olx0XHQgKiBvciB0aGUgbWFwcGluZyBiZWxvbmdzIHRvIHRoZSBkcml2ZXIgdGFncy5cbjM0NDU6XHRcdCAqL1xuMzQ0NjpcdFx0aWYgKCFkcnZfdGFncyB8fCBkcnZfdGFncyA9PSB0YWdzKVxuMzQ0NzpcdFx0XHRyZXR1cm47XG4zNDQ4Olx0XG4zNDQ5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIFx1MDAyNnRhZ3MtXHUwMDNlcGFnZV9saXN0LCBscnUpIHtcbjM0NTA6XHRcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTtcbjM0NTE6XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCAmIzQzOyBvcmRlcl90b19zaXplKHBhZ2UtXHUwMDNlcHJpdmF0ZSk7XG4zNDUyOlx0XHRcdGludCBpO1xuMzQ1MzpcdFxuMzQ1NDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcnZfdGFncy1cdTAwM2Vucl90YWdzOyBpJiM0MzsmIzQzOykge1xuMzQ1NTpcdFx0XHRcdHN0cnVjdCByZXF1ZXN0ICpycSA9IGRydl90YWdzLVx1MDAzZXJxc1tpXTtcbjM0NTY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJxX2FkZHIgPSAodW5zaWduZWQgbG9uZylycTtcbjM0NTc6XHRcbjM0NTg6XHRcdFx0XHRpZiAocnFfYWRkciBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBycV9hZGRyIFx1MDAzYyBlbmQpIHtcbjM0NTk6XHRcdFx0XHRcdFdBUk5fT05fT05DRShyZXFfcmVmX3JlYWQocnEpICE9IDApO1xuMzQ2MDpcdFx0XHRcdFx0Y21weGNoZyhcdTAwMjZkcnZfdGFncy1cdTAwM2VycXNbaV0sIHJxLCBOVUxMKTtcbjM0NjE6XHRcdFx0XHR9XG4zNDYyOlx0XHRcdH1cbjM0NjM6XHRcdH1cbjM0NjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYmxrX21xX2ZyZWVfcnFzYCBDYWxsZXJzIGFuZCBgaGN0eF9pZHhgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGJsa19tcV9mcmVlX3Jxc2Agbm93LiBUaGUgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIHNwZWNpZmljYWxseSwgaG93IGBoY3R4X2lkeGAgaXMgaGFuZGxlZCBhY3Jvc3MgaXRzIGNhbGwgc2l0ZXMuIE15IHRoaW5raW5nIGlzIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UsIGNvbmNlbnRyYXRpbmcgb24gdGhlIGNvbnRleHQgcGFzc2VkLCBwYXJ0aWN1bGFybHkgdGhlIHZhbHVlIGFzc2lnbmVkIHRvIGBoY3R4X2lkeGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcGF0dGVybnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdoZXJlIHRoZSBpbmRleCBtaWdodCBiZSBjYWxjdWxhdGVkLCBwYXNzZWQsIG9yIHV0aWxpemVkIGluIGEgbm9uLW9idmlvdXMgd2F5LiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVidWdnaW5nIG9yIHJlZmFjdG9yaW5nIHRoaXMga2luZCBvZiBjb3JlIGZ1bmN0aW9uLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgaW5kZXggYWZmZWN0cyB0aGUgb3ZlcmFsbCBsb2dpYy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgc291cmNlcyBvZiBlcnJvcnMgcmVsYXRlZCB0byBgaGN0eF9pZHhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfZnJlZV9ycXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLXNjaGVkLmM9NjcwPXZvaWQgYmxrX21xX3NjaGVkX2ZyZWVfcnFzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY3NS1cdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3MocS1cdTAwM2V0YWdfc2V0LVx1MDAzZWZsYWdzKSkge1xuYmxvY2svYmxrLW1xLXNjaGVkLmM6Njc2Olx0XHRibGtfbXFfZnJlZV9ycXMocS1cdTAwM2V0YWdfc2V0LCBxLVx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjc3LVx0XHRcdFx0QkxLX01RX05PX0hDVFhfSURYKTtcbi0tXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODAtXHRcdFx0aWYgKGhjdHgtXHUwMDNlc2NoZWRfdGFncylcbmJsb2NrL2Jsay1tcS1zY2hlZC5jOjY4MTpcdFx0XHRcdGJsa19tcV9mcmVlX3JxcyhxLVx1MDAzZXRhZ19zZXQsXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODItXHRcdFx0XHRcdFx0aGN0eC1cdTAwM2VzY2hlZF90YWdzLCBpKTtcbi0tXG5ibG9jay9ibGstbXEuYz0zNDM3PXN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXG4tLVxuYmxvY2svYmxrLW1xLmMtMzQ2NS1cbmJsb2NrL2Jsay1tcS5jOjM0NjY6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcbmJsb2NrL2Jsay1tcS5jLTM0NjctXHRcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxuLS1cbmJsb2NrL2Jsay1tcS5jPTM1ODk9c3RhdGljIGludCBibGtfbXFfYWxsb2NfcnFzKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmJsb2NrL2Jsay1tcS5jLTM2NTktZmFpbDpcbmJsb2NrL2Jsay1tcS5jOjM2NjA6XHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XG5ibG9jay9ibGstbXEuYy0zNjYxLVx0cmV0dXJuIC1FTk9NRU07XG4tLVxuYmxvY2svYmxrLW1xLmM9NDE0NT12b2lkIGJsa19tcV9mcmVlX21hcF9hbmRfcnFzKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmJsb2NrL2Jsay1tcS5jLTQxNDktXHRpZiAodGFncykge1xuYmxvY2svYmxrLW1xLmM6NDE1MDpcdFx0YmxrX21xX2ZyZWVfcnFzKHNldCwgdGFncywgaGN0eF9pZHgpO1xuYmxvY2svYmxrLW1xLmMtNDE1MS1cdFx0YmxrX21xX2ZyZWVfcnFfbWFwKHNldCwgdGFncyk7XG4tLVxuYmxvY2svYmxrLW1xLmg9NTg9dm9pZCBibGtfbXFfcHV0X3JxX3JlZihzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xuLS1cbmJsb2NrL2Jsay1tcS5oLTYyLSAqL1xuYmxvY2svYmxrLW1xLmg6NjM6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcbmJsb2NrL2Jsay1tcS5oLTY0LVx0XHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjUKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJsb2NrIEkvTyBTY2hlZHVsZXIgVGFnIEZyZWVpbmcgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBibGtfbXFfc2NoZWRfZnJlZV9ycXNgIGFuZCBvdGhlciBjYWxsZXJzIGNhbiBwYXNzIGludmFsaWQgYGhjdHhfaWR4YCB2YWx1ZXMsIHNwZWNpZmljYWxseSBgQkxLX01RX05PX0hDVFhfSURYYCBvciBhbiBvdXQtb2YtYm91bmRzIGluZGV4LCB3aGVuIGZyZWVpbmcgc2NoZWR1bGVyIHRhZ3MsIHBvdGVudGlhbGx5IGR1cmluZyBlcnJvciBoYW5kbGluZy4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIG5haXZlbHkgYWNjZXNzZWQgYHNldC0mZ3Q7dGFnc1toY3R4X2lkeF1gIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZy4gSWYgdGhlIHRhZ3Mgd2VyZW4mIzM5O3Qgc2hhcmVkIGFuZCBgaGN0eF9pZHhgIHdhcyBpbnZhbGlkIChsaWtlIC0xKSwgd2UmIzM5O2QgaGF2ZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQuCgpUaGlzIHBhdGNoIGZpeGVzIHRoYXQgYnkgYWRkaW5nIGEgY2hlY2s6IGlmIHRoZSBpbmRleCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlIChgaGN0eF9pZHggJmx0OyBzZXQtJmd0O25yX2h3X3F1ZXVlc2ApLCB3ZSBhY2Nlc3MgdGhlIGFycmF5OyBvdGhlcndpc2UsIHdlIHNldCBgZHJ2X3RhZ3NgIHRvIGBOVUxMYC4gU2ltcGxlIGJvdW5kcyBjaGVja2luZywgZ29vZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgZm9yIEtBU0FOIGFuZCBLTVNBTi4KCjEuICAqKlRoZSBidWc/KiogIE91dC1vZi1ib3VuZHMgYWNjZXNzLiBXZSYjMzk7cmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBzZXQtJmd0O3RhZ3NgIGFycmF5IHdoZW4gYGhjdHhfaWR4YCBpcyBpbnZhbGlkLgoyLiAgKipLQVNBTiBkZXRlY3Rpb24/KiogIEFic29sdXRlbHkuICBgc2V0LSZndDt0YWdzYCBpcyBhbGxvY2F0ZWQsIGFuZCBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIG9uIHNsYWIva21hbGxvYyBhbGxvY2F0aW9ucy4KMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/KiogIExldCYjMzk7cyBzZWU6CgogICAgKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuCiAgICAqICAgTm8gc3RydWN0dXJlIGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLgogICAgKiAgIE5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBpbnRyb2R1Y2VkLiBgaGN0eF9pZHhgIGFuZCBgc2V0LSZndDtucl9od19xdWV1ZXNgIGFyZSBpbml0aWFsaXplZCBpbnRlZ2VyIHZhbHVlcy4KICAgICogICBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYWZmZWN0ZWQuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSBydWxlcy4uLiAmIzM0O1RIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sIExPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuJiMzNDsgVGhpcyBmaXggKnByaW1hcmlseSogYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBLQVNBTiBjb3ZlcnMuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAmIzM0O1NldCBOZWVkc0tNU0FOPWZhbHNlIElGOiAtIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuLi4mIzM0Oy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEl0IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZC4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGBoY3R4X2lkeGAgYWdhaW5zdCBgc2V0LVx1MDAzZW5yX2h3X3F1ZXVlc2AgaW4gYGJsa19tcV9mcmVlX3JxcygpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGBzZXQtXHUwMDNldGFnc1toY3R4X2lkeF1gIHdoZW4gYGhjdHhfaWR4YCBleGNlZWRzIGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCAoZS5nLiwgYEJMS19NUV9OT19IQ1RYX0lEWGApLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBpbmRleGluZyBidWcsIHdoaWNoIGZhbGxzIGRpcmVjdGx5IHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOIChLZXJuZWxBZGRyZXNzU2FuaXRpemVyKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDozOS42NDM2OTQ4MDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODkxODkwNTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsXG4gICAgXCJibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBvbiBgaGN0eF9pZHhgIGFnYWluc3QgYHNldC1cXHUwMDNlbnJfaHdfcXVldWVzYCBpbiBgYmxrX21xX2ZyZWVfcnFzKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYHNldC1cXHUwMDNldGFnc1toY3R4X2lkeF1gIHdoZW4gYGhjdHhfaWR4YCBleGNlZWRzIGBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlc2AgKGUuZy4sIGBCTEtfTVFfTk9fSENUWF9JRFhgKS5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBpbmRleGluZyBidWcsIHdoaWNoIGZhbGxzIGRpcmVjdGx5IHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOIChLZXJuZWxBZGRyZXNzU2FuaXRpemVyKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXFx1MDAzZXRhZ3Mgd2hlbiBoY3R4X2lkeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2V0LVxcdTAwM2Vucl9od19xdWV1ZXMgKGUuZy4gQkxLX01RX05PX0hDVFhfSURYKS4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHF1ZXVlL2VsZXZhdG9yIHRlYXJkb3duIGxvZ2ljIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgZWxldmF0b3Igc3dpdGNoaW5nIG9yIHF1ZXVlIGNsZWFudXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDozOS42NDM3MDAxMDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjc2Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiODM3ZjdhMTYzOWRjMTliNzk0OTIzZDY5NDVlZGRiNjRkZGZkODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTI6MjQ6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xcbmluZGV4IDJjODUwMzMwYTMyYmMuLjhlNjcyNmIzN2M2NTEgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1xLmNcXG4rKysgYi9ibG9jay9ibGstbXEuY1xcbkBAIC0zNDczLDggKzM0NzMsMTAgQEAgdm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG4gXFxuIFxcdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3Moc2V0LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdGRydl90YWdzID0gc2V0LVxcdTAwM2VzaGFyZWRfdGFncztcXG4tXFx0ZWxzZVxcbitcXHRlbHNlIGlmIChoY3R4X2lkeCBcXHUwMDNjIHNldC1cXHUwMDNlbnJfaHdfcXVldWVzKVxcbiBcXHRcXHRkcnZfdGFncyA9IHNldC1cXHUwMDNldGFnc1toY3R4X2lkeF07XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZHJ2X3RhZ3MgPSBOVUxMO1xcbiBcXG4gXFx0aWYgKHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMgXFx1MDAyNlxcdTAwMjYgc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWV4aXRfcmVxdWVzdCkge1xcbiBcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjQ6NDAuMTc3MTY2NDc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODAzNjY5MTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsXG4gICAgXCJibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYmxrX21xX2ZyZWVfcnFzKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFycmF5IGluZGV4aW5nIG9uIHNldC1cXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcyAoZS5nLiBCTEtfTVFfTk9fSENUWF9JRFgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcXVldWUvZWxldmF0b3IgdGVhcmRvd24gbG9naWMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucyAoc3VjaCBhcyBlbGV2YXRvciBzd2l0Y2hpbmcgb3IgcXVldWUgY2xlYW51cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggMmM4NTAzMzBhMzJiYy4uOGU2NzI2YjM3YzY1MSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4rKysgYi9ibG9jay9ibGstbXEuY1xuQEAgLTM0NzMsOCArMzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuIFxuIFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbi1cdGVsc2VcbitcdGVsc2UgaWYgKGhjdHhfaWR4IFx1MDAzYyBzZXQtXHUwMDNlbnJfaHdfcXVldWVzKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XTtcbitcdGVsc2VcbitcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuIFxuIFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbiBcdFx0aW50IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo0MC4xNzcxNjc3NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA0MTQ5Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJldmlld2luZyB0aGlzIGNoYW5nZTpcblxuKipBbmFseXppbmcgdGhlIENvbW1pdCBhbmQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgY29tbWl0IHRoYXQgdG91Y2hlcyBgYmxvY2svYmxrLW1xLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBibGtfbXFfZnJlZV9ycXNgIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBUaGlzIHBhcnQgb2YgdGhlIGJsb2NrIGxheWVyIGlzIGNyaXRpY2FsLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cbkknbSB0aGlua2luZyBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzQ3MyBpbiBgYmxvY2svYmxrLW1xLmNgLiBUaGF0J3Mgd2hlcmUgdGhpcyBmdW5jdGlvbiBsaXZlcywgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaWtlbHkgY2VudGVyZWQuIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0J3Mgc3RhcnQgd2l0aCBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHJhdyBzb3VyY2UuIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo1Mi4yMTg2Njc1OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLW1xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ2NTpcXHRcXG4zNDY2OlxcdHZvaWQgYmxrX21xX2ZyZWVfcnFzKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsXFxuMzQ2NzpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeClcXG4zNDY4OlxcdHtcXG4zNDY5OlxcdFxcdHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3M7XFxuMzQ3MDpcXHRcXG4zNDcxOlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ0YWdzLVxcdTAwM2VwYWdlX2xpc3QpKVxcbjM0NzI6XFx0XFx0XFx0cmV0dXJuO1xcbjM0NzM6XFx0XFxuMzQ3NDpcXHRcXHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cXHUwMDNlZmxhZ3MpKVxcbjM0NzU6XFx0XFx0XFx0ZHJ2X3RhZ3MgPSBzZXQtXFx1MDAzZXNoYXJlZF90YWdzO1xcbjM0NzY6XFx0XFx0ZWxzZSBpZiAoaGN0eF9pZHggXFx1MDAzYyBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcylcXG4zNDc3OlxcdFxcdFxcdGRydl90YWdzID0gc2V0LVxcdTAwM2V0YWdzW2hjdHhfaWR4XTtcXG4zNDc4OlxcdFxcdGVsc2VcXG4zNDc5OlxcdFxcdFxcdGRydl90YWdzID0gTlVMTDtcXG4zNDgwOlxcdFxcbjM0ODE6XFx0XFx0aWYgKHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMgXFx1MDAyNlxcdTAwMjYgc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWV4aXRfcmVxdWVzdCkge1xcbjM0ODI6XFx0XFx0XFx0aW50IGk7XFxuMzQ4MzpcXHRcXG4zNDg0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWdzLVxcdTAwM2Vucl90YWdzOyBpKyspIHtcXG4zNDg1OlxcdFxcdFxcdFxcdHN0cnVjdCByZXF1ZXN0ICpycSA9IHRhZ3MtXFx1MDAzZXN0YXRpY19ycXNbaV07XFxuMzQ4NjpcXHRcXG4zNDg3OlxcdFxcdFxcdFxcdGlmICghcnEpXFxuMzQ4ODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDg5OlxcdFxcdFxcdFxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VleGl0X3JlcXVlc3Qoc2V0LCBycSwgaGN0eF9pZHgpO1xcbjM0OTA6XFx0XFx0XFx0XFx0dGFncy1cXHUwMDNlc3RhdGljX3Jxc1tpXSA9IE5VTEw7XFxuMzQ5MTpcXHRcXHRcXHR9XFxuMzQ5MjpcXHRcXHR9XFxuMzQ5MzpcXHRcXG4zNDk0OlxcdFxcdGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKGRydl90YWdzLCB0YWdzKTtcXG4zNDk1OlxcdFxcdC8qXFxuMzQ5NjpcXHRcXHQgKiBGcmVlIHJlcXVlc3QgcGFnZXMgaW4gU1JDVSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGZyb21cXG4zNDk3OlxcdFxcdCAqIGJsa19tcV9mcmVlX3RhZ3MoKS5cXG4zNDk4OlxcdFxcdCAqL1xcbjM0OTk6XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHR2b2lkIGJsa19tcV9mcmVlX3JxX21hcChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxcbjM1MDI6XFx0e1xcbjM1MDM6XFx0XFx0a2ZyZWUodGFncy1cXHUwMDNlcnFzKTtcXG4zNTA0OlxcdFxcdHRhZ3MtXFx1MDAzZXJxcyA9IE5VTEw7XFxuMzUwNTpcXHRcXHRrZnJlZSh0YWdzLVxcdTAwM2VzdGF0aWNfcnFzKTtcXG4zNTA2OlxcdFxcdHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMgPSBOVUxMO1xcbjM1MDc6XFx0XFxuMzUwODpcXHRcXHRibGtfbXFfZnJlZV90YWdzKHNldCwgdGFncyk7XFxuMzUwOTpcXHR9XFxuMzUxMDpcXHRcXG4zNTExOlxcdHN0YXRpYyBlbnVtIGhjdHhfdHlwZSBoY3R4X2lkeF90b190eXBlKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxcbjM1MTI6XFx0XFx0XFx0dW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbjM1MTM6XFx0e1xcbjM1MTQ6XFx0XFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI0OjUyLjIxODg3MTk0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTMwOTYyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBibGtfbXFfZnJlZV9ycXNgIENhbGxzaXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgYmxrX21xX2ZyZWVfcnFzYC4gVGltZSB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGV4ZWN1dGlvbiBwYXRocyB0aGF0IGxlYWQgdG8gYGJsa19tcV9mcmVlX3Jxc2AgYmVpbmcgY2FsbGVkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IFdoYXQgbG9ja3MgYXJlIGhlbGQsIGlmIGFueSwgdXBvbiBlbnRyeT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmN1cnJlbmN5IGNvbmNlcm5zPyBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kgaGVyZTogd2hlbiBhbmQgd2h5IGFyZSByZXF1ZXN0IHF1ZXVlcyBiZWluZyByZWxlYXNlZD8gVGhpcyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBibG9jayBsYXllcidzIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEl0J3MgdGltZSB0byBkaWcgaW4uIExldCdzIHN0YXJ0IHdpdGggdGhlIGNyb3NzLXJlZmVyZW5jZXMgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI0OjU0LjI3MTk3MDg5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMxNzQ5MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9mcmVlX3Jxc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEtc2NoZWQuYz02NzA9dm9pZCBibGtfbXFfc2NoZWRfZnJlZV9ycXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9ibGstbXEtc2NoZWQuYy02NzUtXFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVxcdTAwM2V0YWdfc2V0LVxcdTAwM2VmbGFncykpIHtcXG5ibG9jay9ibGstbXEtc2NoZWQuYzo2NzY6XFx0XFx0YmxrX21xX2ZyZWVfcnFzKHEtXFx1MDAzZXRhZ19zZXQsIHEtXFx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY3Ny1cXHRcXHRcXHRcXHRCTEtfTVFfTk9fSENUWF9JRFgpO1xcbi0tXFxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjgwLVxcdFxcdFxcdGlmIChoY3R4LVxcdTAwM2VzY2hlZF90YWdzKVxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jOjY4MTpcXHRcXHRcXHRcXHRibGtfbXFfZnJlZV9ycXMocS1cXHUwMDNldGFnX3NldCxcXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODItXFx0XFx0XFx0XFx0XFx0XFx0aGN0eC1cXHUwMDNlc2NoZWRfdGFncywgaSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zNDM3PXN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNDY1LVxcbmJsb2NrL2Jsay1tcS5jOjM0NjY6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuYy0zNDY3LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzU4OT1zdGF0aWMgaW50IGJsa19tcV9hbGxvY19ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNjU5LWZhaWw6XFxuYmxvY2svYmxrLW1xLmM6MzY2MDpcXHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XFxuYmxvY2svYmxrLW1xLmMtMzY2MS1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTQxNDU9dm9pZCBibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQxNDktXFx0aWYgKHRhZ3MpIHtcXG5ibG9jay9ibGstbXEuYzo0MTUwOlxcdFxcdGJsa19tcV9mcmVlX3JxcyhzZXQsIHRhZ3MsIGhjdHhfaWR4KTtcXG5ibG9jay9ibGstbXEuYy00MTUxLVxcdFxcdGJsa19tcV9mcmVlX3JxX21hcChzZXQsIHRhZ3MpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmg9NTg9dm9pZCBibGtfbXFfcHV0X3JxX3JlZihzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmgtNjItICovXFxuYmxvY2svYmxrLW1xLmg6NjM6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuaC02NC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI0OjU2LjAwMzcyNTYyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NTI5OTY5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIE1RIFNjaGVkdWxpbmcgYW5kIFJlc291cmNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYmxvY2svYmxrLW1xLXNjaGVkLmM6Njc2YCBzbmlwcGV0LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHEtXHUwMDNldGFnX3NldC1cdTAwM2VmbGFncykpYC4gIEl0IGFwcGVhcnMgd2UncmUgZGVjaWRpbmcgd2hldGhlciB0byBjYWxsIGBibGtfbXFfZnJlZV9ycXNgIGJhc2VkIG9uIHNoYXJlZCB0YWcgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGRpcmVjdGx5IGZyZWVzIHJlcXVlc3Qgc3RydWN0dXJlcyAoYHJxc2ApIGlmIHRhZ3MgYXJlIHNoYXJlZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIldoZW4gZWxzZSBpcyBgYmxrX21xX2ZyZWVfcnFzYCBjYWxsZWQsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29udGV4dHM/XCJcblxuVG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcy4gTGV0IG1lIGxvb2sgZm9yIGNhbGxzIHRvIGBibGtfbXFfc2NoZWRfZnJlZV9ycXNgIGFuZCBgYmxrX21xX2NsZWFyX3JxX21hcHBpbmdgIHdoaWNoIG1pZ2h0IHByb3ZpZGUgcmVsZXZhbnQgaW5mb3JtYXRpb24uIENvbnRleHR1YWxseSwgSSdsbCByZXZpZXcgYXJvdW5kIGxpbmUgNjcwIGluIGBibGstbXEtc2NoZWQuY2AgYW5kIGFyb3VuZCBsaW5lIDM0MzcgaW4gYGJsb2NrL2Jsay1tcS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIHRoZSBibG9jayBsYXllcidzIHNjaGVkdWxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcmVxdWVzdCBzdHJ1Y3R1cmVzIGFuZCB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkIGluIGEgc2hhcmVkIHRhZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo1OC42NTY3MjU5NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEtc2NoZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFx0YmxrX21xX3NjaGVkX3RhZ3NfdGVhcmRvd24ocSwgZmxhZ3MpO1xcbiA2NjE6XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNmVxLVxcdTAwM2Vrb2JqKTtcXG4gNjYyOlxcdFxcdHEtXFx1MDAzZWVsZXZhdG9yID0gTlVMTDtcXG4gNjYzOlxcdFxcdHJldHVybiByZXQ7XFxuIDY2NDpcXHR9XFxuIDY2NTpcXHRcXG4gNjY2OlxcdC8qXFxuIDY2NzpcXHQgKiBjYWxsZWQgaW4gZWl0aGVyIGJsa19xdWV1ZV9jbGVhbnVwIG9yIGVsZXZhdG9yX3N3aXRjaCwgdGFnc2V0XFxuIDY2ODpcXHQgKiBpcyByZXF1aXJlZCBmb3IgZnJlZWluZyByZXF1ZXN0c1xcbiA2Njk6XFx0ICovXFxuIDY3MDpcXHR2b2lkIGJsa19tcV9zY2hlZF9mcmVlX3JxcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4O1xcbiA2NzM6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRpZiAoYmxrX21xX2lzX3NoYXJlZF90YWdzKHEtXFx1MDAzZXRhZ19zZXQtXFx1MDAzZWZsYWdzKSkge1xcbiA2NzY6XFx0XFx0XFx0YmxrX21xX2ZyZWVfcnFzKHEtXFx1MDAzZXRhZ19zZXQsIHEtXFx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxcbiA2Nzc6XFx0XFx0XFx0XFx0XFx0QkxLX01RX05PX0hDVFhfSURYKTtcXG4gNjc4OlxcdFxcdH0gZWxzZSB7XFxuIDY3OTpcXHRcXHRcXHRxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkge1xcbiA2ODA6XFx0XFx0XFx0XFx0aWYgKGhjdHgtXFx1MDAzZXNjaGVkX3RhZ3MpXFxuIDY4MTpcXHRcXHRcXHRcXHRcXHRibGtfbXFfZnJlZV9ycXMocS1cXHUwMDNldGFnX3NldCxcXG4gNjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGhjdHgtXFx1MDAzZXNjaGVkX3RhZ3MsIGkpO1xcbiA2ODM6XFx0XFx0XFx0fVxcbiA2ODQ6XFx0XFx0fVxcbiA2ODU6XFx0fVxcbiA2ODY6XFx0XFxuIDY4NzpcXHR2b2lkIGJsa19tcV9leGl0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUpXFxuIDY4ODpcXHR7XFxuIDY4OTpcXHRcXHRzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDtcXG4gNjkwOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gNjkxOlxcdFxcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XFxuIDY5MjpcXHRcXG4gNjkzOlxcdFxcdHF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7XFxuIDY5NDpcXHRcXHRcXHRpZiAoZS1cXHUwMDNldHlwZS1cXHUwMDNlb3BzLmV4aXRfaGN0eCBcXHUwMDI2XFx1MDAyNiBoY3R4LVxcdTAwM2VzY2hlZF9kYXRhKSB7XFxuIDY5NTpcXHRcXHRcXHRcXHRlLVxcdTAwM2V0eXBlLVxcdTAwM2VvcHMuZXhpdF9oY3R4KGhjdHgsIGkpO1xcbiA2OTY6XFx0XFx0XFx0XFx0aGN0eC1cXHUwMDNlc2NoZWRfZGF0YSA9IE5VTEw7XFxuIDY5NzpcXHRcXHRcXHR9XFxuIDY5ODpcXHRcXHRcXHRmbGFncyA9IGhjdHgtXFx1MDAzZWZsYWdzO1xcbiA2OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNDo1OC42NTY4MTg2MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjYxNjI3MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRGlnZ2luZyBpbnRvIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCBpbiBgYmxvY2svYmxrLW1xLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYmxvY2sgbXVsdGktcXVldWUgSS9PIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgYmxvY2sgbGF5ZXIgaW50ZXJuYWxzIHRlbGxzIG1lIHRoaXMgbXVzdCBiZSBhYm91dCBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBhIHJlcXVlc3QgcXVldWUgZW50cnkgKGBycWApIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoZSBuYW1lIGltcGxpZXMgaXTigJlzIGEgY2xlYXJpbmcgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggZnJlZWluZyByZXNvdXJjZXMgb3IgcmVzZXR0aW5nIHBvaW50ZXJzLiBJIGV4cGVjdCBpdCdzIGludm9rZWQgd2hlbiBhbiBJL08gcmVxdWVzdCBjb21wbGV0ZXMsIGlzIGNhbmNlbGxlZCwgb3IgdW5kZXJnb2VzIHNvbWUgZm9ybSBvZiByZXNjaGVkdWxpbmcgd2hlcmUgaXRzIG1hcHBpbmcgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXF1ZXN0IHF1ZXVlIChgYmxrX21xX2h3X3F1ZXVlYCkgc3RydWN0dXJlcyBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIGFzcGVjdHMgdG9vLCB0aGUgbG9ja3MgYW5kIG1lbW9yeSBiYXJyaWVycywgYmVjYXVzZSB0aGlzIGlzIGEgaGlnaGx5IGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgYW5kIHdoYXQgbG9ja3MgaXQncyB1c2luZyB3aWxsIGJlIHZpdGFsLiBSaWdodCwgdGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDI4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNTowMS45MTg0NDg5OThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1tcS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MzU6XFx0XFxuMzQzNjpcXHQvKiBjYWxsZWQgYmVmb3JlIGZyZWVpbmcgcmVxdWVzdCBwb29sIGluIEB0YWdzICovXFxuMzQzNzpcXHRzdGF0aWMgdm9pZCBibGtfbXFfY2xlYXJfcnFfbWFwcGluZyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKmRydl90YWdzLFxcbjM0Mzg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncylcXG4zNDM5OlxcdHtcXG4zNDQwOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjM0NDE6XFx0XFxuMzQ0MjpcXHRcXHQvKlxcbjM0NDM6XFx0XFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBjbGVhciBtYXBwaW5nIGlmIGRyaXZlciB0YWdzIGlzIG5vdCBpbml0aWFsaXplZFxcbjM0NDQ6XFx0XFx0ICogb3IgdGhlIG1hcHBpbmcgYmVsb25ncyB0byB0aGUgZHJpdmVyIHRhZ3MuXFxuMzQ0NTpcXHRcXHQgKi9cXG4zNDQ2OlxcdFxcdGlmICghZHJ2X3RhZ3MgfHwgZHJ2X3RhZ3MgPT0gdGFncylcXG4zNDQ3OlxcdFxcdFxcdHJldHVybjtcXG4zNDQ4OlxcdFxcbjM0NDk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBcXHUwMDI2dGFncy1cXHUwMDNlcGFnZV9saXN0LCBscnUpIHtcXG4zNDUwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7XFxuMzQ1MTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgb3JkZXJfdG9fc2l6ZShwYWdlLVxcdTAwM2Vwcml2YXRlKTtcXG4zNDUyOlxcdFxcdFxcdGludCBpO1xcbjM0NTM6XFx0XFxuMzQ1NDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZHJ2X3RhZ3MtXFx1MDAzZW5yX3RhZ3M7IGkrKykge1xcbjM0NTU6XFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxID0gZHJ2X3RhZ3MtXFx1MDAzZXJxc1tpXTtcXG4zNDU2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcnFfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJxO1xcbjM0NTc6XFx0XFxuMzQ1ODpcXHRcXHRcXHRcXHRpZiAocnFfYWRkciBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBycV9hZGRyIFxcdTAwM2MgZW5kKSB7XFxuMzQ1OTpcXHRcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UocmVxX3JlZl9yZWFkKHJxKSAhPSAwKTtcXG4zNDYwOlxcdFxcdFxcdFxcdFxcdGNtcHhjaGcoXFx1MDAyNmRydl90YWdzLVxcdTAwM2VycXNbaV0sIHJxLCBOVUxMKTtcXG4zNDYxOlxcdFxcdFxcdFxcdH1cXG4zNDYyOlxcdFxcdFxcdH1cXG4zNDYzOlxcdFxcdH1cXG4zNDY0OlxcdH1cXG4zNDY1OlxcdFxcbjM0NjY6XFx0dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG4zNDY3OlxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbjM0Njg6XFx0e1xcbjM0Njk6XFx0XFx0c3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncztcXG4zNDcwOlxcdFxcbjM0NzE6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnRhZ3MtXFx1MDAzZXBhZ2VfbGlzdCkpXFxuMzQ3MjpcXHRcXHRcXHRyZXR1cm47XFxuMzQ3MzpcXHRcXG4zNDc0OlxcdFxcdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3Moc2V0LVxcdTAwM2VmbGFncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjAxLjkxODY0ODc2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTQ2NzMyNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGNoYW5nZSBpbiBob3cgYGRydl90YWdzYCBpcyBhc3NpZ25lZDogaXQgbm93IGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBoY3R4X2lkeGAgYmVpbmcgd2l0aGluIGJvdW5kcyBiZWZvcmUgYWNjZXNzaW5nIGBzZXQtXHUwMDNldGFnc1tdYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGFwcGFyZW50bHksIGRpZG4ndCBkbyB0aGlzLCBhbmQgSSBpbW1lZGlhdGVseSBzZWUgdGhlIHZ1bG5lcmFiaWxpdHk6ICBpZiB0aGUgYGhjdHhfaWR4YCBpcyBvdXQgb2YgYm91bmRzLCBvciBgQkxLX01RX05PX0hDVFhfSURYYCwgd2hpY2ggaXMgLTEgY2FzdCBhcyBhbiB1bnNpZ25lZCBpbnQsIGl0J3MgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkISBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgY29tbWl0IGFkZHMgYSBjaGVjazpcbmlmIGAhYmxrX21xX2lzX3NoYXJlZF90YWdzKHNldC1cdTAwM2VmbGFncylgLCBjaGVjayB0aGF0IGBoY3R4X2lkeGAgaXMgdmFsaWQsIGFuZCBvbmx5IHNldCBgZHJ2X3RhZ3NgIGlmIGl0IGlzLiBPdGhlcndpc2UsIHNldCBpdCB0byBgTlVMTGAuXG5cbk5vdywgaXMgdGhpcyBpbXBvcnRhbnQgZW5vdWdoIHRvIHBheSBhdHRlbnRpb24gdG8/IFdlbGwsIHRoaXMgY29kZSBsaXZlcyBpbiBgYmxvY2svYmxrLW1xLmNgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSAqY29yZSogYmxvY2sgbGF5ZXIuIENvcmUgYmxvY2sgbGF5ZXIgbG9naWMgaXMgYSBkZWZpbml0ZSB0YXJnZXQgZm9yIHRyaWFnZSBhbmQgcmV2aWV3LiBUaGUgZ3VpZGVsaW5lcyBJIGZvbGxvdyBzYXkgdGhhdCBtb2RpZmljYXRpb25zIGluIHRoZSBibG9jayBsYXllciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IChhbmQgdGhpcyBpcyBtZW1vcnkgYWNjZXNzLCBlc3NlbnRpYWxseSksIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBhdHRlbnRpb24uICBSZWZhY3RvcmluZyBhbmQgY29kZSBjbGVhbnVwcyBhbHNvIGFwcGx5IGhlcmUsIGVzcGVjaWFsbHkgaWYgaXQgaXMgbWFraW5nIHRoZSBjb2RlIHNhZmVyLiBSdW50aW1lIGFzc2VydGlvbnMgYW5kIGRlZmVuc2l2ZSBjaGVja3MgKGxpa2UgdGhlIG9uZSBhZGRlZCBoZXJlKSBhcmUgYWx3YXlzIGdvb2QuXG5cbkZ1cnRoZXJtb3JlLCBgYmxrLW1xYCBpcyBmb3VuZGF0aW9uYWwuIEl0J3MgdXNlZCBieSBldmVyeXRoaW5nIGZyb20gbG9vcCBkZXZpY2VzIGFuZCBudWxsIGJsb2NrIGRldmljZXMgdG8gdmlydGlvX2JsaywgTlZNZSwgYW5kIFNDU0kg4oCTIHByZXR0eSBtdWNoIGV2ZXJ5IGJsb2NrIGRldmljZSBpbiBhIExpbnV4IHN5c3RlbS4gVGhpcyBpcyBjb21wbGV0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBtZWFuaW5nIGl0J3MgZWFzeSB0byB0ZXN0IHdpdGggUUVNVSwgc3l6a2FsbGVyLCBvciBieSBzaW1wbHkgY3JlYXRpbmcvZGVzdHJveWluZyBsb29wIGRldmljZXMsIGNoYW5naW5nIHNjaGVkdWxlcnMsIG9yIG1hbmlwdWxhdGluZyB0YWdzZXQgb3BlcmF0aW9ucy5cblxuU28sIGlzIGl0IFdvcnRoRnV6emluZz8gQWJzb2x1dGVseS4gYFdvcnRoRnV6emluZzogdHJ1ZWAuICBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgcG90ZW50aWFsbHkgZXhwb3NlZCB0byB1c2VyLXByb3ZpZGVkIGlucHV0IHRoYXQgY291bGQgY2F1c2UgYSBjcmFzaCBvciwgd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIGJsb2NrIGxheWVyLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCBgYmxvY2svS2NvbmZpZ2AgZmlsZXMgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIHJlcHJvZHVjZSBvciB0cmlnZ2VyIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNTowNy4wNjUzODM2NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODIyNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstbXEub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT04PW9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTktXFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuYmxvY2svTWFrZWZpbGU6MTA6XFx0XFx0XFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTExLVxcdFxcdFxcdGJsay1tcS10YWcubyBibGstbXEtZG1hLm8gYmxrLXN0YXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjA3LjQyMzYxNTMzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTU1NzI1NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG9iai15YCBpbiB0aGUgQmxvY2sgTWFrZWZpbGUqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgb2JqLXlgIGluIHRoZSBgYmxvY2svTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgYXMgYSBrZXJuZWwgZGV2LCBpcyB0aGF0IHRoaXMgaXMgaW5kaWNhdGluZyB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlIGBibG9ja2AgZGlyZWN0b3J5LiBNYWtlcyBzZW5zZS4gVGhlbiBJIHNlZSB0aGF0IGl0J3MgdGllZCB0byBgQ09ORklHX0JMT0NLYC4gT2theSwgdGhhdCdzIHRoZSBwYXJlbnQgY29uZmlnIG9wdGlvbiBmb3IgYW55dGhpbmcgaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgYEJMT0NLPXlgIGNvbmZpcm1zIHRoYXQgaXQncyBlbmFibGVkLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgZm9yICp3aGljaCogcGFydHMgb2YgdGhlIGJsb2NrIGxheWVyIGdldCBjb21waWxlZCwgY29uc2lkZXJpbmcgaXQgaXMgYSBtb2R1bGUuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNoZWNraW5nIHdoZXRoZXIgYEJMS19NUWAgb3IgYEJMT0NLYCBhcmUgdGhlbXNlbHZlcyBjb25maWd1cmF0aW9ucywgYmVjYXVzZSBhdCBsZWFzdCBvbmUgc2hvdWxkIGJlIHByZXNlbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgZmlndXJlIG91dCB3aGljaCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hhdCB0aGUgbG9naWMgaXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTQsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToxMC4zNzkzNDMxMzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTg0Mjc5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWctNC0jXFxuYmxvY2svS2NvbmZpZzo1Om1lbnVjb25maWcgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXFxcIkVuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xcbmJsb2NrL0tjb25maWctMjgtXFxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuYmxvY2svS2NvbmZpZy0zMC1cXHRib29sIFxcXCJMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cXG4tLVxcbmJsb2NrL0tjb25maWctMjE3LSMgZG8gbm90IHVzZSBpbiBuZXcgY29kZVxcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxcbmJsb2NrL0tjb25maWctMjE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MTIuMTM3Nzc2MzE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5OTU5NDM3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQmxvY2sgTGF5ZXIgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYmxvY2sgbGF5ZXIgdGVzdGluZywgYW5kIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBzZWVtcyB0byBiZSBgQkxPQ0tgLiAgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MsIGxpa2UgYEJMS19ERVZfTE9PUGAgb3IgYEJMS19ERVZfTlVMTF9CTEtgLCBidXQgYEJMT0NLYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IG9uZS4gIEknbGwgc3RhcnQgdGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBsaXN0IG9mIFwiRm9jdXNTeW1ib2xzXCI6IGBibGtfbXFfZnJlZV9ycXNgLCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCwgYGJsa19tcV9mcmVlX21hcF9hbmRfcnFzYCwgYGJsa19tcV9hbGxvY19ycXNgLCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZG8sIHNwZWNpZmljYWxseSBgYmxrX21xX2ZyZWVfcnFzYC5cblxuSXQgc2VlbXMgbGlrZSBgYmxrX21xX2ZyZWVfcnFzYCBpc24ndCBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlLiBJdCdzIHVzZWQgd2hlbiBmcmVlaW5nIHRhZ3NldHMsIGR1cmluZyBlbGV2YXRvciBzd2l0Y2hlcyAod2l0aCBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCksIG9yIGVycm9yIGhhbmRsaW5nIGluIGBibGtfbXFfYWxsb2NfcnFzYC4gIEl0J3MgYSBzcGVjaWZpYyBibG9jayBsYXllciBjbGVhbnVwL2VsZXZhdG9yIHN3aXRjaCBmdW5jdGlvbiwgbm90IHNvbWV0aGluZyBnZW5lcmljLiBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCBpcyBjYWxsZWQgZHVyaW5nIGVsZXZhdG9yIHN3aXRjaGVzIG9yIHF1ZXVlIGNsZWFudXAuIGBibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc2AgaXMgY2FsbGVkIGR1cmluZyB0YWdzZXQgdGVhcmRvd24gb3IgcXVldWUgY2xlYW51cC5cblxuTm93LCBsZXQgbWUgY29uZmlybSBpZiBgYmxrX21xX2NsZWFyX3JxX21hcHBpbmdgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIG5vdC4gQWgsIGluIGBibG9jay9ibGstbXEuY2AsIGBibGtfbXFfY2xlYXJfcnFfbWFwcGluZ2AgaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWMgdm9pZGAuIFRoZSBvdGhlcnMgYXJlIGp1c3QgYHZvaWRgLiBUaGlzIGhlbHBzIHRvIGNvbmZpcm0gdGhlIHNjb3BlLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBzdHJhaWdodDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSB0aGlzIGlzIGltcG9ydGFudC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkJMT0NLXCJdYCAtIEdvdCBpdC5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wiYmxrX21xX2ZyZWVfcnFzXCIsIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsIFwiYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXNcIl1gIC0gQ29uZmlybWVkLCB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIHdhdGNoLlxuKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgLSBJJ3ZlIGdvdCBhIGZvY3VzZWQgZXhwbGFuYXRpb24uXG5cbk9rYXksIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjAsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjE4LjEzMzcyNzI5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTI3NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX3NjaGVkX2ZyZWVfcnFzXCIsXG4gICAgXCJibGtfbXFfZnJlZV9tYXBfYW5kX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYmxrX21xX2ZyZWVfcnFzKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFycmF5IGluZGV4aW5nIG9uIHNldC1cXHUwMDNldGFncyB3aGVuIGhjdHhfaWR4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlcyAoZS5nLiBCTEtfTVFfTk9fSENUWF9JRFgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcXVldWUvZWxldmF0b3IgdGVhcmRvd24gbG9naWMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucyAoc3VjaCBhcyBlbGV2YXRvciBzd2l0Y2hpbmcgb3IgcXVldWUgY2xlYW51cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbXFfZnJlZV9ycXNcIixcbiAgICBcImJsa19tcV9zY2hlZF9mcmVlX3Jxc1wiLFxuICAgIFwiYmxrX21xX2ZyZWVfbWFwX2FuZF9ycXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGJsa19tcV9mcmVlX3JxcygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBpbmRleGluZyBvbiBzZXQtXFx1MDAzZXRhZ3Mgd2hlbiBoY3R4X2lkeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2V0LVxcdTAwM2Vucl9od19xdWV1ZXMgKGUuZy4gQkxLX01RX05PX0hDVFhfSURYKS4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHF1ZXVlL2VsZXZhdG9yIHRlYXJkb3duIGxvZ2ljIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgZWxldmF0b3Igc3dpdGNoaW5nIG9yIHF1ZXVlIGNsZWFudXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToxOC4yMTM4NjIxMjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQ4NzI5MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MTguMjE0NDA2MTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjAzNDgxODAwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlc2AgaW4gYGJsa19tcV9mcmVlX3JxcygpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGBzZXQtXFx1MDAzZXRhZ3NbaGN0eF9pZHhdYCB3aGVuIGBoY3R4X2lkeGAgZXhjZWVkcyBgc2V0LVxcdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgYnVnLCB3aGljaCBmYWxscyBkaXJlY3RseSB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2I4MzdmN2ExNjM5ZGMxOWI3OTQ5MjNkNjk0NWVkZGI2NGRkZmQ4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDEyOjI0OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuY1xuaW5kZXggMmM4NTAzMzBhMzJiYy4uOGU2NzI2YjM3YzY1MSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS5jXG4rKysgYi9ibG9jay9ibGstbXEuY1xuQEAgLTM0NzMsOCArMzQ3MywxMCBAQCB2b2lkIGJsa19tcV9mcmVlX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IGJsa19tcV90YWdzICp0YWdzLFxuIFxuIFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhzZXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2VzaGFyZWRfdGFncztcbi1cdGVsc2VcbitcdGVsc2UgaWYgKGhjdHhfaWR4IFx1MDAzYyBzZXQtXHUwMDNlbnJfaHdfcXVldWVzKVxuIFx0XHRkcnZfdGFncyA9IHNldC1cdTAwM2V0YWdzW2hjdHhfaWR4XTtcbitcdGVsc2VcbitcdFx0ZHJ2X3RhZ3MgPSBOVUxMO1xuIFxuIFx0aWYgKHRhZ3MtXHUwMDNlc3RhdGljX3JxcyBcdTAwMjZcdTAwMjYgc2V0LVx1MDAzZW9wcy1cdTAwM2VleGl0X3JlcXVlc3QpIHtcbiBcdFx0aW50IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToxOC4yMTQ0MDcwMDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxMDUwMTA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgYXMgYW4gZXhwZXJpZW5jZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIFF1ZXVlaW5nIENvZGUqKlxuXG5SaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgYmxvY2svYmxrLW1xLmNgLCB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBibG9jayBtdWx0aS1xdWV1ZSBjb2RlIHJlc2lkZXMuIEkgd2FudCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMgYmVpbmcgbWFkZS4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbHMg4oCTIGxpa2VseSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlIGNvZGUsIGJ1dCBgZ3JlcHBlcmAgaXMgYWxzbyBhbiBvcHRpb24sIHBhcnRpY3VsYXJseSBpZiBJIG5lZWQgdG8gZmluZCBzcGVjaWZpYyBpbnN0YW5jZXMgb2YgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBhY3Jvc3MgdGhlIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIG1vc3QgaW50ZXJlc3RlZCBpbiBgYmxrX21xX2ZyZWVfcnFzYC4gSSBuZWVkIHRvIHNlZSBob3cgaXQncyBjdXJyZW50bHkgaW1wbGVtZW50ZWQsIGFuZCB0aGVuIGhvdyB0aGlzIHBhdGNoIG1vZGlmaWVzIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0LiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MjQuNDI0OTExMTg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDYwOlxcdFxcdFxcdFxcdFxcdGNtcHhjaGcoXFx1MDAyNmRydl90YWdzLVxcdTAwM2VycXNbaV0sIHJxLCBOVUxMKTtcXG4zNDYxOlxcdFxcdFxcdFxcdH1cXG4zNDYyOlxcdFxcdFxcdH1cXG4zNDYzOlxcdFxcdH1cXG4zNDY0OlxcdH1cXG4zNDY1OlxcdFxcbjM0NjY6XFx0dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG4zNDY3OlxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbjM0Njg6XFx0e1xcbjM0Njk6XFx0XFx0c3RydWN0IGJsa19tcV90YWdzICpkcnZfdGFncztcXG4zNDcwOlxcdFxcbjM0NzE6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnRhZ3MtXFx1MDAzZXBhZ2VfbGlzdCkpXFxuMzQ3MjpcXHRcXHRcXHRyZXR1cm47XFxuMzQ3MzpcXHRcXG4zNDc0OlxcdFxcdGlmIChibGtfbXFfaXNfc2hhcmVkX3RhZ3Moc2V0LVxcdTAwM2VmbGFncykpXFxuMzQ3NTpcXHRcXHRcXHRkcnZfdGFncyA9IHNldC1cXHUwMDNlc2hhcmVkX3RhZ3M7XFxuMzQ3NjpcXHRcXHRlbHNlIGlmIChoY3R4X2lkeCBcXHUwMDNjIHNldC1cXHUwMDNlbnJfaHdfcXVldWVzKVxcbjM0Nzc6XFx0XFx0XFx0ZHJ2X3RhZ3MgPSBzZXQtXFx1MDAzZXRhZ3NbaGN0eF9pZHhdO1xcbjM0Nzg6XFx0XFx0ZWxzZVxcbjM0Nzk6XFx0XFx0XFx0ZHJ2X3RhZ3MgPSBOVUxMO1xcbjM0ODA6XFx0XFxuMzQ4MTpcXHRcXHRpZiAodGFncy1cXHUwMDNlc3RhdGljX3JxcyBcXHUwMDI2XFx1MDAyNiBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZXhpdF9yZXF1ZXN0KSB7XFxuMzQ4MjpcXHRcXHRcXHRpbnQgaTtcXG4zNDgzOlxcdFxcbjM0ODQ6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRhZ3MtXFx1MDAzZW5yX3RhZ3M7IGkrKykge1xcbjM0ODU6XFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxID0gdGFncy1cXHUwMDNlc3RhdGljX3Jxc1tpXTtcXG4zNDg2OlxcdFxcbjM0ODc6XFx0XFx0XFx0XFx0aWYgKCFycSlcXG4zNDg4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0ODk6XFx0XFx0XFx0XFx0c2V0LVxcdTAwM2VvcHMtXFx1MDAzZWV4aXRfcmVxdWVzdChzZXQsIHJxLCBoY3R4X2lkeCk7XFxuMzQ5MDpcXHRcXHRcXHRcXHR0YWdzLVxcdTAwM2VzdGF0aWNfcnFzW2ldID0gTlVMTDtcXG4zNDkxOlxcdFxcdFxcdH1cXG4zNDkyOlxcdFxcdH1cXG4zNDkzOlxcdFxcbjM0OTQ6XFx0XFx0YmxrX21xX2NsZWFyX3JxX21hcHBpbmcoZHJ2X3RhZ3MsIHRhZ3MpO1xcbjM0OTU6XFx0XFx0LypcXG4zNDk2OlxcdFxcdCAqIEZyZWUgcmVxdWVzdCBwYWdlcyBpbiBTUkNVIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgZnJvbVxcbjM0OTc6XFx0XFx0ICogYmxrX21xX2ZyZWVfdGFncygpLlxcbjM0OTg6XFx0XFx0ICovXFxuMzQ5OTpcXHR9XFxuMzUwMDpcXHRcXG4zNTAxOlxcdHZvaWQgYmxrX21xX2ZyZWVfcnFfbWFwKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MpXFxuMzUwMjpcXHR7XFxuMzUwMzpcXHRcXHRrZnJlZSh0YWdzLVxcdTAwM2VycXMpO1xcbjM1MDQ6XFx0XFx0dGFncy1cXHUwMDNlcnFzID0gTlVMTDtcXG4zNTA1OlxcdFxcdGtmcmVlKHRhZ3MtXFx1MDAzZXN0YXRpY19ycXMpO1xcbjM1MDY6XFx0XFx0dGFncy1cXHUwMDNlc3RhdGljX3JxcyA9IE5VTEw7XFxuMzUwNzpcXHRcXG4zNTA4OlxcdFxcdGJsa19tcV9mcmVlX3RhZ3Moc2V0LCB0YWdzKTtcXG4zNTA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MjQuNDI1MjUzNDMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjYzMDA2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYmxrX21xX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYmxrX21xX2ZyZWVfcnFzYCBhbmQgYGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nYC4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyB1c2VkIGluIHJlbGF0aW9uIHRvIGVhY2ggb3RoZXI/IFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEknbGwgbmVlZCBzb21lIGNvbnRleHQuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRob3NlIGZ1bmN0aW9uIGNhbGxzLiBMaW5lcyAzNDMwIHRvIDM0NjUgc291bmQgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIHN1cnJvdW5kaW5nIGNvZGUgdG8gY2xhcmlmeSB0aGUgc2l0dWF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5J3JlIGNhbGxlZCwgYW5kIHdoYXQgZGF0YSB0aGV5J3JlIG1hbmlwdWxhdGluZy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgY29uY2lzZSBzdW1tYXJ5IG9mIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjI4LjU5MTU1NjY1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLW1xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQzMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQzMDpcXHRcXG4zNDMxOlxcdHN0YXRpYyBzaXplX3Qgb3JkZXJfdG9fc2l6ZSh1bnNpZ25lZCBpbnQgb3JkZXIpXFxuMzQzMjpcXHR7XFxuMzQzMzpcXHRcXHRyZXR1cm4gKHNpemVfdClQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuMzQzNDpcXHR9XFxuMzQzNTpcXHRcXG4zNDM2OlxcdC8qIGNhbGxlZCBiZWZvcmUgZnJlZWluZyByZXF1ZXN0IHBvb2wgaW4gQHRhZ3MgKi9cXG4zNDM3OlxcdHN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXFxuMzQzODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsa19tcV90YWdzICp0YWdzKVxcbjM0Mzk6XFx0e1xcbjM0NDA6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMzQ0MTpcXHRcXG4zNDQyOlxcdFxcdC8qXFxuMzQ0MzpcXHRcXHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIGNsZWFyIG1hcHBpbmcgaWYgZHJpdmVyIHRhZ3MgaXMgbm90IGluaXRpYWxpemVkXFxuMzQ0NDpcXHRcXHQgKiBvciB0aGUgbWFwcGluZyBiZWxvbmdzIHRvIHRoZSBkcml2ZXIgdGFncy5cXG4zNDQ1OlxcdFxcdCAqL1xcbjM0NDY6XFx0XFx0aWYgKCFkcnZfdGFncyB8fCBkcnZfdGFncyA9PSB0YWdzKVxcbjM0NDc6XFx0XFx0XFx0cmV0dXJuO1xcbjM0NDg6XFx0XFxuMzQ0OTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIFxcdTAwMjZ0YWdzLVxcdTAwM2VwYWdlX2xpc3QsIGxydSkge1xcbjM0NTA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTtcXG4zNDUxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBvcmRlcl90b19zaXplKHBhZ2UtXFx1MDAzZXByaXZhdGUpO1xcbjM0NTI6XFx0XFx0XFx0aW50IGk7XFxuMzQ1MzpcXHRcXG4zNDU0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkcnZfdGFncy1cXHUwMDNlbnJfdGFnczsgaSsrKSB7XFxuMzQ1NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcnZfdGFncy1cXHUwMDNlcnFzW2ldO1xcbjM0NTY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBycV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpcnE7XFxuMzQ1NzpcXHRcXG4zNDU4OlxcdFxcdFxcdFxcdGlmIChycV9hZGRyIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IHJxX2FkZHIgXFx1MDAzYyBlbmQpIHtcXG4zNDU5OlxcdFxcdFxcdFxcdFxcdFdBUk5fT05fT05DRShyZXFfcmVmX3JlYWQocnEpICE9IDApO1xcbjM0NjA6XFx0XFx0XFx0XFx0XFx0Y21weGNoZyhcXHUwMDI2ZHJ2X3RhZ3MtXFx1MDAzZXJxc1tpXSwgcnEsIE5VTEwpO1xcbjM0NjE6XFx0XFx0XFx0XFx0fVxcbjM0NjI6XFx0XFx0XFx0fVxcbjM0NjM6XFx0XFx0fVxcbjM0NjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMjoyNToyOC41OTE4NjcyMzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyNzg1OTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGJsa19tcV9mcmVlX3Jxc2AgQ2FsbGVycyBhbmQgYGhjdHhfaWR4YCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgYmxrX21xX2ZyZWVfcnFzYCBub3cuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBgaGN0eF9pZHhgIGlzIGhhbmRsZWQgYWNyb3NzIGl0cyBjYWxsIHNpdGVzLiBNeSB0aGlua2luZyBpcyB0byBxdWlja2x5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uJ3MgdXNhZ2UsIGNvbmNlbnRyYXRpbmcgb24gdGhlIGNvbnRleHQgcGFzc2VkLCBwYXJ0aWN1bGFybHkgdGhlIHZhbHVlIGFzc2lnbmVkIHRvIGBoY3R4X2lkeGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcGF0dGVybnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdoZXJlIHRoZSBpbmRleCBtaWdodCBiZSBjYWxjdWxhdGVkLCBwYXNzZWQsIG9yIHV0aWxpemVkIGluIGEgbm9uLW9idmlvdXMgd2F5LiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVidWdnaW5nIG9yIHJlZmFjdG9yaW5nIHRoaXMga2luZCBvZiBjb3JlIGZ1bmN0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgdGhlIGRhdGEgZmxvdyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBpbmRleCBhZmZlY3RzIHRoZSBvdmVyYWxsIGxvZ2ljLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIHNvdXJjZXMgb2YgZXJyb3JzIHJlbGF0ZWQgdG8gYGhjdHhfaWR4YC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MzAuODE5NzI4ODk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzNDExOTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9mcmVlX3Jxc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEtc2NoZWQuYz02NzA9dm9pZCBibGtfbXFfc2NoZWRfZnJlZV9ycXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9ibGstbXEtc2NoZWQuYy02NzUtXFx0aWYgKGJsa19tcV9pc19zaGFyZWRfdGFncyhxLVxcdTAwM2V0YWdfc2V0LVxcdTAwM2VmbGFncykpIHtcXG5ibG9jay9ibGstbXEtc2NoZWQuYzo2NzY6XFx0XFx0YmxrX21xX2ZyZWVfcnFzKHEtXFx1MDAzZXRhZ19zZXQsIHEtXFx1MDAzZXNjaGVkX3NoYXJlZF90YWdzLFxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jLTY3Ny1cXHRcXHRcXHRcXHRCTEtfTVFfTk9fSENUWF9JRFgpO1xcbi0tXFxuYmxvY2svYmxrLW1xLXNjaGVkLmMtNjgwLVxcdFxcdFxcdGlmIChoY3R4LVxcdTAwM2VzY2hlZF90YWdzKVxcbmJsb2NrL2Jsay1tcS1zY2hlZC5jOjY4MTpcXHRcXHRcXHRcXHRibGtfbXFfZnJlZV9ycXMocS1cXHUwMDNldGFnX3NldCxcXG5ibG9jay9ibGstbXEtc2NoZWQuYy02ODItXFx0XFx0XFx0XFx0XFx0XFx0aGN0eC1cXHUwMDNlc2NoZWRfdGFncywgaSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zNDM3PXN0YXRpYyB2b2lkIGJsa19tcV9jbGVhcl9ycV9tYXBwaW5nKHN0cnVjdCBibGtfbXFfdGFncyAqZHJ2X3RhZ3MsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNDY1LVxcbmJsb2NrL2Jsay1tcS5jOjM0NjY6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuYy0zNDY3LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzU4OT1zdGF0aWMgaW50IGJsa19tcV9hbGxvY19ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zNjU5LWZhaWw6XFxuYmxvY2svYmxrLW1xLmM6MzY2MDpcXHRibGtfbXFfZnJlZV9ycXMoc2V0LCB0YWdzLCBoY3R4X2lkeCk7XFxuYmxvY2svYmxrLW1xLmMtMzY2MS1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTQxNDU9dm9pZCBibGtfbXFfZnJlZV9tYXBfYW5kX3JxcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQxNDktXFx0aWYgKHRhZ3MpIHtcXG5ibG9jay9ibGstbXEuYzo0MTUwOlxcdFxcdGJsa19tcV9mcmVlX3JxcyhzZXQsIHRhZ3MsIGhjdHhfaWR4KTtcXG5ibG9jay9ibGstbXEuYy00MTUxLVxcdFxcdGJsa19tcV9mcmVlX3JxX21hcChzZXQsIHRhZ3MpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmg9NTg9dm9pZCBibGtfbXFfcHV0X3JxX3JlZihzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmgtNjItICovXFxuYmxvY2svYmxrLW1xLmg6NjM6dm9pZCBibGtfbXFfZnJlZV9ycXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCBibGtfbXFfdGFncyAqdGFncyxcXG5ibG9jay9ibGstbXEuaC02NC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEyOjI1OjMyLjUzMzE0NjY4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDI5NDEyMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsb2NrIEkvTyBTY2hlZHVsZXIgVGFnIEZyZWVpbmcgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYmxrX21xX3NjaGVkX2ZyZWVfcnFzYCBhbmQgb3RoZXIgY2FsbGVycyBjYW4gcGFzcyBpbnZhbGlkIGBoY3R4X2lkeGAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYEJMS19NUV9OT19IQ1RYX0lEWGAgb3IgYW4gb3V0LW9mLWJvdW5kcyBpbmRleCwgd2hlbiBmcmVlaW5nIHNjaGVkdWxlciB0YWdzLCBwb3RlbnRpYWxseSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSBuYWl2ZWx5IGFjY2Vzc2VkIGBzZXQtXHUwMDNldGFnc1toY3R4X2lkeF1gIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZy4gSWYgdGhlIHRhZ3Mgd2VyZW4ndCBzaGFyZWQgYW5kIGBoY3R4X2lkeGAgd2FzIGludmFsaWQgKGxpa2UgLTEpLCB3ZSdkIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlzIHBhdGNoIGZpeGVzIHRoYXQgYnkgYWRkaW5nIGEgY2hlY2s6IGlmIHRoZSBpbmRleCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlIChgaGN0eF9pZHggXHUwMDNjIHNldC1cdTAwM2Vucl9od19xdWV1ZXNgKSwgd2UgYWNjZXNzIHRoZSBhcnJheTsgb3RoZXJ3aXNlLCB3ZSBzZXQgYGRydl90YWdzYCB0byBgTlVMTGAuIFNpbXBsZSBib3VuZHMgY2hlY2tpbmcsIGdvb2QuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgS0FTQU4gYW5kIEtNU0FOLlxuXG4xLiAgKipUaGUgYnVnPyoqICBPdXQtb2YtYm91bmRzIGFjY2Vzcy4gV2UncmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBzZXQtXHUwMDNldGFnc2AgYXJyYXkgd2hlbiBgaGN0eF9pZHhgIGlzIGludmFsaWQuXG4yLiAgKipLQVNBTiBkZXRlY3Rpb24/KiogIEFic29sdXRlbHkuICBgc2V0LVx1MDAzZXRhZ3NgIGlzIGFsbG9jYXRlZCwgYW5kIEtBU0FOIHNob3VsZCBlYXNpbHkgY2F0Y2ggb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb24gc2xhYi9rbWFsbG9jIGFsbG9jYXRpb25zLlxuMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/KiogIExldCdzIHNlZTpcblxuICAgICogICBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuICAgICogICBObyBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuXG4gICAgKiAgIE5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBpbnRyb2R1Y2VkLiBgaGN0eF9pZHhgIGFuZCBgc2V0LVx1MDAzZW5yX2h3X3F1ZXVlc2AgYXJlIGluaXRpYWxpemVkIGludGVnZXIgdmFsdWVzLlxuICAgICogICBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYWZmZWN0ZWQuXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLi4uIFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBUaGlzIGZpeCAqcHJpbWFyaWx5KiBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIEtBU0FOIGNvdmVycy4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gXCJTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjogLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLi4uXCIuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEl0IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cblxuT2theSwgSSdtIHJlYWR5IHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyNSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTI6MjU6MzguNTYyNTYyMDgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGBoY3R4X2lkeGAgYWdhaW5zdCBgc2V0LVxcdTAwM2Vucl9od19xdWV1ZXNgIGluIGBibGtfbXFfZnJlZV9ycXMoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBgc2V0LVxcdTAwM2V0YWdzW2hjdHhfaWR4XWAgd2hlbiBgaGN0eF9pZHhgIGV4Y2VlZHMgYHNldC1cXHUwMDNlbnJfaHdfcXVldWVzYCAoZS5nLiwgYEJMS19NUV9OT19IQ1RYX0lEWGApLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGJ1Zywgd2hpY2ggZmFsbHMgZGlyZWN0bHkgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYGhjdHhfaWR4YCBhZ2FpbnN0IGBzZXQtXFx1MDAzZW5yX2h3X3F1ZXVlc2AgaW4gYGJsa19tcV9mcmVlX3JxcygpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGBzZXQtXFx1MDAzZXRhZ3NbaGN0eF9pZHhdYCB3aGVuIGBoY3R4X2lkeGAgZXhjZWVkcyBgc2V0LVxcdTAwM2Vucl9od19xdWV1ZXNgIChlLmcuLCBgQkxLX01RX05PX0hDVFhfSURYYCkuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgYnVnLCB3aGljaCBmYWxscyBkaXJlY3RseSB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[1] Phase: Succeeded StartedAt: 2026-09-10 12:25:50 +0000 UTC FinishedAt: 2026-09-10 12:25:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 12:25:50 +0000 UTC FinishedAt: 2026-09-10 12:25:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2] Phase: Succeeded StartedAt: 2026-09-10 12:25:50 +0000 UTC FinishedAt: 2026-09-10 16:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 12:25:50 +0000 UTC FinishedAt: 2026-09-10 16:05:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 12:25:50 +0000 UTC FinishedAt: 2026-09-10 12:26:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 12:25:50 +0000 UTC FinishedAt: 2026-09-10 12:25:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowql9bf/series-workflowql9bf-convert-artifact-1518404444/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 12:26:00 +0000 UTC FinishedAt: 2026-09-10 12:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 12:26:00 +0000 UTC FinishedAt: 2026-09-10 12:42:20 +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:*881a993e-7bba-444b-ad30-bb6b5624aaf7,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-workflowql9bf/series-workflowql9bf-convert-artifact-1518404444/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": "390f360d-f990-46fe-8a29-c90ea1cf6de5", "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-workflowql9bf/series-workflowql9bf-build-action-2840802954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 12:26:00 +0000 UTC FinishedAt: 2026-09-10 12:42:10 +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:*881a993e-7bba-444b-ad30-bb6b5624aaf7,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-workflowql9bf/series-workflowql9bf-convert-artifact-1518404444/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": "390f360d-f990-46fe-8a29-c90ea1cf6de5", "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-workflowql9bf/series-workflowql9bf-build-action-2840802954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 12:42:20 +0000 UTC FinishedAt: 2026-09-10 12:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 12:42:20 +0000 UTC FinishedAt: 2026-09-10 12:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 12:42:20 +0000 UTC FinishedAt: 2026-09-10 12:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 12:42:20 +0000 UTC FinishedAt: 2026-09-10 12:42:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowql9bf/series-workflowql9bf-convert-artifact-371111067/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 12:42:31 +0000 UTC FinishedAt: 2026-09-10 12:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 12:42:31 +0000 UTC FinishedAt: 2026-09-10 12:44:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*390f360d-f990-46fe-8a29-c90ea1cf6de5,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-workflowql9bf/series-workflowql9bf-build-action-2840802954/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-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 12:44:53 +0000 UTC FinishedAt: 2026-09-10 12:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 12:44:53 +0000 UTC FinishedAt: 2026-09-10 12:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 12:44:53 +0000 UTC FinishedAt: 2026-09-10 13:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 12:44:53 +0000 UTC FinishedAt: 2026-09-10 13:01:13 +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:*881a993e-7bba-444b-ad30-bb6b5624aaf7,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-workflowql9bf/series-workflowql9bf-convert-artifact-371111067/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": "bf165638-dd79-4ad6-b9bc-39a83192eaa1", "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-workflowql9bf/series-workflowql9bf-build-action-2020483135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 12:44:53 +0000 UTC FinishedAt: 2026-09-10 13:01:04 +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:*881a993e-7bba-444b-ad30-bb6b5624aaf7,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-workflowql9bf/series-workflowql9bf-convert-artifact-371111067/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": "bf165638-dd79-4ad6-b9bc-39a83192eaa1", "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-workflowql9bf/series-workflowql9bf-build-action-2020483135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 13:01:13 +0000 UTC FinishedAt: 2026-09-10 13:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 13:01:13 +0000 UTC FinishedAt: 2026-09-10 13:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 13:01:13 +0000 UTC FinishedAt: 2026-09-10 13:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 13:01:13 +0000 UTC FinishedAt: 2026-09-10 13:03:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf165638-dd79-4ad6-b9bc-39a83192eaa1,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-workflowql9bf/series-workflowql9bf-build-action-2020483135/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-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 13:03:41 +0000 UTC FinishedAt: 2026-09-10 16:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 13:03:41 +0000 UTC FinishedAt: 2026-09-10 16:05:29 +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":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"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:*390f360d-f990-46fe-8a29-c90ea1cf6de5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf165638-dd79-4ad6-b9bc-39a83192eaa1,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-workflowql9bf/series-workflowql9bf-build-action-2840802954/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-workflowql9bf/series-workflowql9bf-build-action-2020483135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 13:03:41 +0000 UTC FinishedAt: 2026-09-10 13:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 13:03:41 +0000 UTC FinishedAt: 2026-09-10 13:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"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-workflowql9bf/series-workflowql9bf-convert-artifact-1373383572/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 13:03:41 +0000 UTC FinishedAt: 2026-09-10 13:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 13:03:41 +0000 UTC FinishedAt: 2026-09-10 13:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 13:03:41 +0000 UTC FinishedAt: 2026-09-10 13:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 13:03:51 +0000 UTC FinishedAt: 2026-09-10 16:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql9bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_free_rqs","blk_mq_sched_free_rqs","blk_mq_free_map_and_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"446369a5-0dc4-4b44-8961-3dfc2c3e2759","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 13:03:51 +0000 UTC FinishedAt: 2026-09-10 16:05:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*390f360d-f990-46fe-8a29-c90ea1cf6de5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf165638-dd79-4ad6-b9bc-39a83192eaa1,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-workflowql9bf/series-workflowql9bf-build-action-2840802954/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-workflowql9bf/series-workflowql9bf-build-action-2020483135/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-workflowql9bf/series-workflowql9bf-convert-artifact-1373383572/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,}