Name: series-workflow5bq8z Phase: Succeeded StartedAt: 2026-09-05 15:11:25 +0000 UTC FinishedAt: 2026-09-05 17:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[0] Phase: Succeeded StartedAt: 2026-09-05 15:11:25 +0000 UTC FinishedAt: 2026-09-05 15:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 15:11:25 +0000 UTC FinishedAt: 2026-09-05 15:59:06 +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": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iolatency_check_latencies", "blkcg_iolatency_done_bio", "iolatency_record_time", "iolatency_set_limit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDssCiAgICAmIzM0O2Jsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfcmVjb3JkX3RpbWUmIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3NldF9saW1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWF0aGVtYXRpY2FsIGNhbGN1bGF0aW9uIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXHUwMDNlYmF0Y2hgIHNldC5cblxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYmxrLWlvbGF0ZW5jeSkgYnkgaW50cm9kdWNpbmcgbGF0ZW5jeV9zdGF0X21lcmdlKCkgdG8gY29ycmVjdGx5IG1lcmdlIGFnZ3JlZ2F0ZWQgc3RhdGlzdGljcyBpbnN0ZWFkIG9mIGludm9raW5nIGJsa19ycV9zdGF0X3N1bSgpIHdoZW4gYWdncmVnYXRpbmcgbGF0ZW5jeSBtZXRyaWNzLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGtlcm5lbCBhcml0aG1ldGljIGFuZCBzdGF0aXN0aWNzIHVwZGF0aW5nIGxvZ2ljIGR1cmluZyBibG9jayBJL08gb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHRocm90dGxpbmcgZXZhbHVhdGlvbi4gRnV6emluZyBjYW4gaGVscCBpZGVudGlmeSBhcml0aG1ldGljIGVkZ2UgY2FzZXMsIGRpdmlzaW9uIGlzc3Vlcywgb3IgbGF0ZW5jeSBjYWxjdWxhdGlvbiByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3ZGQ3NzQ5MWU4NzY2MWEyODNmZjcxYTEzNjcxZjI3YzA2OGIxY2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyBiL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuaW5kZXggMmNhYTc5YTAwOGFkMS4uMjIzZDNhNWUyYmYxYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG5AQCAtMjE2LDYgJiM0MzsyMTYsMzEgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIFx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2c3VtLVx1MDAzZXJxcywgXHUwMDI2c3RhdC1cdTAwM2VycXMpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xuJiM0MzsgKiAobWVhbiAqIG5yX3NhbXBsZXMpOyBibGtfcnFfc3RhdF9zdW0oKSByZWFkcyBzcmMtXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcbiYjNDM7ICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiYjNDM7e1xuJiM0MztcdGlmIChpb2xhdC1cdTAwM2Vzc2QpIHtcbiYjNDM7XHRcdHN1bS1cdTAwM2Vwcy50b3RhbCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy50b3RhbDtcbiYjNDM7XHRcdHN1bS1cdTAwM2Vwcy5taXNzZWQgJiM0Mzs9IHN0YXQtXHUwMDNlcHMubWlzc2VkO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMgXHUwMDNjPVxuJiM0MztcdFx0ICAgIHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0c3VtLVx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXHUwMDNlcnFzLm1lYW4gKiBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgJiM0MztcbiYjNDM7XHRcdFx0XHRcdHN0YXQtXHUwMDNlcnFzLm1lYW4gKiBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzLFxuJiM0MztcdFx0XHRcdFx0c3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMpO1xuJiM0MztcdFx0c3VtLVx1MDAzZXJxcy5taW4gPSBtaW4oc3VtLVx1MDAzZXJxcy5taW4sIHN0YXQtXHUwMDNlcnFzLm1pbik7XG4mIzQzO1x0XHRzdW0tXHUwMDNlcnFzLm1heCA9IG1heChzdW0tXHUwMDNlcnFzLm1heCwgc3RhdC1cdTAwM2VycXMubWF4KTtcbiYjNDM7XHRcdHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyAmIzQzOz0gc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gXHRcdFx0XHRcdCAgICB1NjQgcmVxX3RpbWUpXG4ge1xuQEAgLTU0Nyw3ICYjNDM7NTcyLDcgQEAgc3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXG4gXHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bGF0X2luZm8tXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQsIFx1MDAyNnN0YXQpO1xuJiM0MztcdGxhdGVuY3lfc3RhdF9tZXJnZShpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQsIFx1MDAyNnN0YXQpO1xuIFx0bGF0X2luZm8tXHUwMDNlbnJfc2FtcGxlcyAtPSBpb2xhdC1cdTAwM2Vucl9zYW1wbGVzO1xuIFx0bGF0X2luZm8tXHUwMDNlbnJfc2FtcGxlcyAmIzQzOz0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiBcdGlvbGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDssCiAgICAmIzM0O2Jsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfcmVjb3JkX3RpbWUmIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3NldF9saW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGJsay1pb2xhdGVuY3kpIGJ5IGludHJvZHVjaW5nIGxhdGVuY3lfc3RhdF9tZXJnZSgpIHRvIGNvcnJlY3RseSBtZXJnZSBhZ2dyZWdhdGVkIHN0YXRpc3RpY3MgaW5zdGVhZCBvZiBpbnZva2luZyBibGtfcnFfc3RhdF9zdW0oKSB3aGVuIGFnZ3JlZ2F0aW5nIGxhdGVuY3kgbWV0cmljcy4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBrZXJuZWwgYXJpdGhtZXRpYyBhbmQgc3RhdGlzdGljcyB1cGRhdGluZyBsb2dpYyBkdXJpbmcgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYW5kIGNncm91cCB0aHJvdHRsaW5nIGV2YWx1YXRpb24uIEZ1enppbmcgY2FuIGhlbHAgaWRlbnRpZnkgYXJpdGhtZXRpYyBlZGdlIGNhc2VzLCBkaXZpc2lvbiBpc3N1ZXMsIG9yIGxhdGVuY3kgY2FsY3VsYXRpb24gcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2RkNzc0OTFlODc2NjFhMjgzZmY3MWExMzY3MWYyN2MwNjhiMWNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyBiL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYwppbmRleCAyY2FhNzlhMDA4YWQxLi4yMjNkM2E1ZTJiZjFjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstaW9sYXRlbmN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jCkBAIC0yMTYsNiAmIzQzOzIxNiwzMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsCiAJCWJsa19ycV9zdGF0X3N1bSgmYW1wO3N1bS0mZ3Q7cnFzLCAmYW1wO3N0YXQtJmd0O3Jxcyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIE1lcmdlIGFuIGFscmVhZHktYWdncmVnYXRlZCBAc3RhdCBpbnRvIEBzdW0gYnkgcmVjb25zdHJ1Y3RlZCB0b3RhbHMKJiM0MzsgKiAobWVhbiAqIG5yX3NhbXBsZXMpOyBibGtfcnFfc3RhdF9zdW0oKSByZWFkcyBzcmMtJmd0O2JhdGNoLCB3aGljaCBpcyAwCiYjNDM7ICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9tZXJnZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdCkKJiM0Mzt7CiYjNDM7CWlmIChpb2xhdC0mZ3Q7c3NkKSB7CiYjNDM7CQlzdW0tJmd0O3BzLnRvdGFsICYjNDM7PSBzdGF0LSZndDtwcy50b3RhbDsKJiM0MzsJCXN1bS0mZ3Q7cHMubWlzc2VkICYjNDM7PSBzdGF0LSZndDtwcy5taXNzZWQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoc3VtLSZndDtycXMubnJfc2FtcGxlcyAmIzQzOyBzdGF0LSZndDtycXMubnJfc2FtcGxlcyAmbHQ7PQomIzQzOwkJICAgIHN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJc3VtLSZndDtycXMubWVhbiA9IGRpdl91NjQoc3VtLSZndDtycXMubWVhbiAqIHN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMgJiM0MzsKJiM0MzsJCQkJCXN0YXQtJmd0O3Jxcy5tZWFuICogc3RhdC0mZ3Q7cnFzLm5yX3NhbXBsZXMsCiYjNDM7CQkJCQlzdW0tJmd0O3Jxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtJmd0O3Jxcy5ucl9zYW1wbGVzKTsKJiM0MzsJCXN1bS0mZ3Q7cnFzLm1pbiA9IG1pbihzdW0tJmd0O3Jxcy5taW4sIHN0YXQtJmd0O3Jxcy5taW4pOwomIzQzOwkJc3VtLSZndDtycXMubWF4ID0gbWF4KHN1bS0mZ3Q7cnFzLm1heCwgc3RhdC0mZ3Q7cnFzLm1heCk7CiYjNDM7CQlzdW0tJmd0O3Jxcy5ucl9zYW1wbGVzICYjNDM7PSBzdGF0LSZndDtycXMubnJfc2FtcGxlczsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LAogCQkJCQkgICAgdTY0IHJlcV90aW1lKQogewpAQCAtNTQ3LDcgJiM0Mzs1NzIsNyBAQCBzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdykKIAkvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bGF0X2luZm8tJmd0O2xvY2ssIGZsYWdzKTsKIAotCWxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsICZhbXA7aW9sYXQtJmd0O2N1cl9zdGF0LCAmYW1wO3N0YXQpOwomIzQzOwlsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsICZhbXA7aW9sYXQtJmd0O2N1cl9zdGF0LCAmYW1wO3N0YXQpOwogCWxhdF9pbmZvLSZndDtucl9zYW1wbGVzIC09IGlvbGF0LSZndDtucl9zYW1wbGVzOwogCWxhdF9pbmZvLSZndDtucl9zYW1wbGVzICYjNDM7PSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQpOwogCWlvbGF0LSZndDtucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsICZhbXA7aW9sYXQtJmd0O2N1cl9zdGF0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IHRoaXMgcGF0Y2ggdGFyZ2V0cyBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbXBhY3QuIFRpbWUgdG8gcHVsbCB1cCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJiMzOTtzIGZhc3Rlc3QgZm9yIHRoaXMga2luZCBvZiBxdWljayBpbnNwZWN0aW9uLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDIwMC0yNTAgYW5kIDUzMC01ODAgd2l0aGluIHRoYXQgZmlsZS4gVGhvc2UgcmFuZ2VzIG9mdGVuIGhvbGQgY3J1Y2lhbCBsb2dpYywgc28gSSYjMzk7bGwgZXhhbWluZSB0aGVtIGNsb3NlbHkuIFNpbXVsdGFuZW91c2x5LCBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgc2V0dGluZ3MgcmVsYXRlZCB0byBgYmxrLWlvbGF0ZW5jeS5jYCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgYmFja2dyb3VuZCB0byBzZWUgdGhlIHB1cnBvc2Ugb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay1pb2xhdGVuY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVx0JiM0Mzs9IGJsay1pb3ByaW8ub1xuYmxvY2svTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKVx0JiM0Mzs9IGJsay1pb2xhdGVuY3kub1xuYmxvY2svTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVx0JiM0Mzs9IGJsay1pb2Nvc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQkxLX0NHUk9VUF9JT0xBVEVOQ1kgaW4gdGhlIEJsb2NrIExheWVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLiBNeSBpbnR1aXRpb24gaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIGBibG9jay9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYmxvY2sgbGF5ZXIsIGFuZCwgc3BlY2lmaWNhbGx5LCBhbnl0aGluZyB0aWVkIHRvIGNncm91cHMgYW5kIEkvTyBsYXRlbmN5IHdvdWxkIGxvZ2ljYWxseSByZXNpZGUgdGhlcmUuIFNvLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBibG9jay9LY29uZmlnYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3ZWxsLWRvY3VtZW50ZWQuIElmIG5vdCwgSSYjMzk7bGwgbmVlZCB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBjaGFpbiBlbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbmJsb2NrL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcdCYjNDM7PSBibGstaW9sYXRlbmN5Lm9cbmJsb2NrL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVClcdCYjNDM7PSBibGstaW9jb3N0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJMS19DR1JPVVBfSU9MQVRFTkNZIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgemVybyBpbiBvbiBgYmxvY2svS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2Ygb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIGZpdHMgaW50byB0aGUgYnJvYWRlciBibG9jayBsYXllciBjb25maWd1cmF0aW9uLiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgb3IgdHJpc3RhdGVzIHRoYXQgZ292ZXJuIHdoZW4gYEJMS19DR1JPVVBfSU9MQVRFTkNZYCBpcyBldmVuIHByZXNlbnRlZCBhcyBhbiBvcHRpb24sIHdoaWNoIHdpbGwgbGlrZWx5IGludm9sdmUgb3RoZXIgY2dyb3VwLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7cmVxdWlyZXMmIzM0OyBhbmQgJiMzNDtkZXBlbmRzIG9uJiMzNDsgc3RhdGVtZW50cywgb2YgY291cnNlLCBidXQgSSYjMzk7bGwgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIGlzICpncm91cGVkKiB3aXRoaW4gdGhlIEtjb25maWcgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBsb2dpY2FsIGdyb3VwaW5ncyBnaXZlcyBtZSBhIGJldHRlciBmZWVsIGZvciB0aGUgZGVzaWduIHBoaWxvc29waHkgYmVoaW5kIHRoZSBtb2R1bGUgaXRzZWxmLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZ3JlYXRlciBibG9jayBJL08gY29udHJvbCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdGRlcGVuZHMgb24gQkxLX1dCVFxuIDEzMTpcdFx0aGVscFxuIDEzMjpcdFx0RW5hYmxlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGJ5IGRlZmF1bHQgZm9yIHJlcXVlc3QtYmFzZWQgYmxvY2sgZGV2aWNlcy5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEzNzpcdFx0aGVscFxuIDEzODpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLmxhdGVuY3kgaW50ZXJmYWNlIGZvciBJTyB0aHJvdHRsaW5nLlxuIDEzOTpcdFx0VGhlIElPIGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIG1haW50YWluIGF2ZXJhZ2UgSU8gbGF0ZW5jaWVzIGJlbG93XG4gMTQwOlx0XHR0aGUgY29uZmlndXJlZCBsYXRlbmN5IHRhcmdldCwgdGhyb3R0bGluZyBhbnlib2R5IHdpdGggYSBoaWdoZXIgbGF0ZW5jeVxuIDE0MTpcdFx0dGFyZ2V0IHRoYW4gdGhlIHZpY3RpbWl6ZWQgZ3JvdXAuXG4gMTQyOlx0XG4gMTQzOlx0XHROb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBpbnRlcmZhY2UgYW5kIGNvdWxkIGJlIGNoYW5nZWQgc29tZWRheS5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuIDE0NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQIFx1MDAyNlx1MDAyNiBOVk1FX0ZDXG4gMTQ4Olx0XHRoZWxwXG4gMTQ5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXG4gMTUwOlx0XHQgIGNncm91cCBhcHBsaWNhdGlvbnMuIEl0IGVuYWJsZXMgdGhlIEZhYnJpYyBhbmQgdGhlIHN0b3JhZ2UgdGFyZ2V0cyB0b1xuIDE1MTpcdFx0ICBpZGVudGlmeSwgbW9uaXRvciwgYW5kIGhhbmRsZSBGQyB0cmFmZmljIGJhc2VkIG9uIFZNIHRhZ3MgYnkgaW5zZXJ0aW5nXG4gMTUyOlx0XHQgIGFwcGxpY2F0aW9uIHNwZWNpZmljIGlkZW50aWZpY2F0aW9uIGludG8gdGhlIEZDIGZyYW1lLlxuIDE1MzpcdFxuIDE1NDpcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEJMS19DR1JPVVAqKgoKTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGNvbmZpcm1pbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1cnJvdW5kaW5nIGBCTEtfQ0dST1VQYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2Qgc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgZmVhdHVyZSYjMzk7cyB2aXNpYmlsaXR5LCBkZWZhdWx0IHNldHRpbmdzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgS2NvbmZpZyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGFueSBrZXJuZWwgZGV2ZWxvcGVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBldmVyeXRoaW5nIGFib3V0IHRoaXMgcGFydGljdWxhciBzZXR0aW5nIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcHJvamVjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQgaXMgZGVmaW5lZCwgaWYgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzZXR0aW5ncyB0aGF0IGFmZmVjdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEJMS19DR1JPVVAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQkxLX0NHUk9VUGAuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYWxtb3N0IGFsd2F5cyB0aGUgcmlnaHQgb25lIGZvciB0aGlzIGtpbmQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sLCBpcyB0byBsb29rIGluIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgbGFpZCBvdXQsIHdoZXJlIHRoZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQsIGFuZCB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSB1c3VhbGx5IHNwZWNpZmllZC4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBCTEtfQ0dST1VQYCBpcyBleHBvc2VkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgKGxpa2VseSBvbiBjZ3JvdXAtcmVsYXRlZCBmZWF0dXJlcyksIGFuZCBwb3RlbnRpYWxseSBldmVuIGJyaWVmIGNvbnRleHR1YWwgY29tbWVudHMuIEnigJltIHRoaW5raW5nIEnigJlsbCBzZWUgY29uZGl0aW9uYWwgbG9naWMgaGVyZSDigJMgd2hldGhlciBpdOKAmXMgYSBkaXJlY3QgYGJvb2xgIG9wdGlvbiwgb3IgcGVyaGFwcyBlbmFibGVkIGJhc2VkIG9uIGFub3RoZXIgZmVhdHVyZSwgbGlrZSB3aGV0aGVyIGNncm91cHMgYXJlIGNvbmZpZ3VyZWQgaW4gZ2VuZXJhbC4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3Mgbm90IGEgc3RhbmRhbG9uZSBvcHRpb247IGl0JiMzOTtzIHByb2JhYmx5IGludGVyd292ZW4gd2l0aCBvdGhlciBibG9jay1sYXllciBvciBjZ3JvdXAgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEwOD1jb25maWcgTUVNQ0dfVjFcbi0tXG5pbml0L0tjb25maWctMTEyNC1cbmluaXQvS2NvbmZpZzoxMTI1OmNvbmZpZyBCTEtfQ0dST1VQXG5pbml0L0tjb25maWctMTEyNi1cdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gQmxvY2sgSS9PIExhdGVuY3kgTWVhc3VyZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGtlcm5lbCBjb2RlIGhhbmRsZXMgYmxvY2sgSS9PIGxhdGVuY3kgbWVhc3VyZW1lbnRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIG1lcmdpbmcgb2YgbGF0ZW5jeSBzdGF0aXN0aWNzIGFuZCB0aGUgY2hlY2tpbmcgb2YgdGhlIGdhdGhlcmVkIGxhdGVuY2llcy4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYGxhdGVuY3lfc3RhdF9tZXJnZWAgZnVuY3Rpb24uIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIGNvbWJpbmluZyBsYXRlbmN5IGRhdGEsIHBvc3NpYmx5IGZyb20gZGlmZmVyZW50IENQVXMgb3IgdGhyZWFkcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIHdvcmtzIC0gaXQgcHJvYmFibHkgaW52b2x2ZXMgc29tZSB0aHJlc2hvbGRpbmcgb3IgYW5hbHlzaXMgdG8gc2VlIGlmIHNvbWV0aGluZyYjMzk7cyBhbWlzcyBpbiB0aGUgSS9PIHBlcmZvcm1hbmNlLCBwZXJoYXBzIGxvb2tpbmcgZm9yIG91dGxpZXJzIG9yIGlkZW50aWZ5aW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXG4gMjExOlx0e1xuIDIxMjpcdFx0aWYgKGlvbGF0LVx1MDAzZXNzZCkge1xuIDIxMzpcdFx0XHRzdW0tXHUwMDNlcHMudG90YWwgJiM0Mzs9IHN0YXQtXHUwMDNlcHMudG90YWw7XG4gMjE0Olx0XHRcdHN1bS1cdTAwM2Vwcy5taXNzZWQgJiM0Mzs9IHN0YXQtXHUwMDNlcHMubWlzc2VkO1xuIDIxNTpcdFx0fSBlbHNlXG4gMjE2Olx0XHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZzdW0tXHUwMDNlcnFzLCBcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG4gMjE3Olx0fVxuIDIxODpcdFxuIDIxOTpcdC8qXG4gMjIwOlx0ICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xuIDIyMTpcdCAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxuIDIyMjpcdCAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxuIDIyMzpcdCAqL1xuIDIyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfbWVyZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIDIyNTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLFxuIDIyNjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiAyMjc6XHR7XG4gMjI4Olx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjI5Olx0XHRcdHN1bS1cdTAwM2Vwcy50b3RhbCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy50b3RhbDtcbiAyMzA6XHRcdFx0c3VtLVx1MDAzZXBzLm1pc3NlZCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy5taXNzZWQ7XG4gMjMxOlx0XHR9IGVsc2Uge1xuIDIzMjpcdFx0XHRpZiAoc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMgXHUwMDNjPVxuIDIzMzpcdFx0XHQgICAgc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzKVxuIDIzNDpcdFx0XHRcdHJldHVybjtcbiAyMzU6XHRcdFx0c3VtLVx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXHUwMDNlcnFzLm1lYW4gKiBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgJiM0MztcbiAyMzY6XHRcdFx0XHRcdFx0c3RhdC1cdTAwM2VycXMubWVhbiAqIHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMsXG4gMjM3Olx0XHRcdFx0XHRcdHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyAmIzQzOyBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzKTtcbiAyMzg6XHRcdFx0c3VtLVx1MDAzZXJxcy5taW4gPSBtaW4oc3VtLVx1MDAzZXJxcy5taW4sIHN0YXQtXHUwMDNlcnFzLm1pbik7XG4gMjM5Olx0XHRcdHN1bS1cdTAwM2VycXMubWF4ID0gbWF4KHN1bS1cdTAwM2VycXMubWF4LCBzdGF0LVx1MDAzZXJxcy5tYXgpO1xuIDI0MDpcdFx0XHRzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgJiM0Mzs9IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXM7XG4gMjQxOlx0XHR9XG4gMjQyOlx0fVxuIDI0MzpcdFxuIDI0NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIDI0NTpcdFx0XHRcdFx0XHQgICAgdTY0IHJlcV90aW1lKVxuIDI0NjpcdHtcbiAyNDc6XHRcdHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQgPSBnZXRfY3B1X3B0cihpb2xhdC1cdTAwM2VzdGF0cyk7XG4gMjQ4Olx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjQ5Olx0XHRcdGlmIChyZXFfdGltZSBcdTAwM2U9IGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYylcbiAyNTA6XHRcdFx0XHRzdGF0LVx1MDAzZXBzLm1pc3NlZCYjNDM7JiM0Mzs7XG4gMjUxOlx0XHRcdHN0YXQtXHUwMDNlcHMudG90YWwmIzQzOyYjNDM7O1xuIDI1MjpcdFx0fSBlbHNlXG4gMjUzOlx0XHRcdGJsa19ycV9zdGF0X2FkZChcdTAwMjZzdGF0LVx1MDAzZXJxcywgcmVxX3RpbWUpO1xuIDI1NDpcdFx0cHV0X2NwdV9wdHIoc3RhdCk7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBsYXRlbmN5X3N1bV9vayhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gMjU4Olx0XHRcdFx0XHQgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXG4gMjU5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBibGstaW9sYXRlbmN5LmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgSS9PIGxhdGVuY3kgY29kZS4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgNTIwIHRvIDYyMCBpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSBsb2dpYyB0aGVyZSwgcHJvYmFibHkgcmVsYXRlZCB0b+KApiB3ZWxsLCBsaWtlbHkgY2FsY3VsYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIHBlcmhhcHMgc29tZSBjcml0aWNhbCBkZWNpc2lvbi1tYWtpbmcgcmVnYXJkaW5nIEkvTyByZXF1ZXN0IHRyYWNraW5nLiBHaXZlbiB0aGUgc3Vycm91bmRpbmcgY29kZSBJJiMzOTt2ZSBzZWVuLCBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHNlY3Rpb24gd2lsbCBiZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBhc3BlY3Qgb2YgaG93IHRoZSBsYXRlbmN5IGlzIG1lYXN1cmVkIG9yIGNhdGVnb3JpemVkLiBDb3VsZCBiZSB3aGVyZSB0aGV5JiMzOTtyZSBjYWxjdWxhdGluZyBwZXJjZW50aWxlcywgaGFuZGxpbmcgZGlmZmVyZW50IEkvTyBxdWV1ZSBkZXB0aHMsIG9yIHBlcmhhcHMgZmlsdGVyaW5nIG91dCBjZXJ0YWluIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBpcyBvbiB0YXJnZXQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBvcnRpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvbGF0ZW5jeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRcbiA1MjE6XHRcdHJlcV90aW1lID0gbm93IC0gc3RhcnQ7XG4gNTIyOlx0XG4gNTIzOlx0XHQvKlxuIDUyNDpcdFx0ICogV2UgZG9uJiMzOTt0IHdhbnQgdG8gY291bnQgaXNzdWVfYXNfcm9vdCBiaW8mIzM5O3MgaW4gdGhlIGNncm91cHMgbGF0ZW5jeVxuIDUyNTpcdFx0ICogc3RhdGlzdGljcyBhcyBpdCBjb3VsZCBza2V3IHRoZSBudW1iZXJzIGRvd253YXJkcy5cbiA1MjY6XHRcdCAqL1xuIDUyNzpcdFx0aWYgKHVubGlrZWx5KGlzc3VlX2FzX3Jvb3QgXHUwMDI2XHUwMDI2IGlvbGF0LVx1MDAzZW1heF9kZXB0aCAhPSBVSU5UX01BWCkpIHtcbiA1Mjg6XHRcdFx0dTY0IHN1YiA9IGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYztcbiA1Mjk6XHRcdFx0aWYgKHJlcV90aW1lIFx1MDAzYyBzdWIpXG4gNTMwOlx0XHRcdFx0YmxrY2dfYWRkX2RlbGF5KGxhdF90b19ibGtnKGlvbGF0KSwgbm93LCBzdWIgLSByZXFfdGltZSk7XG4gNTMxOlx0XHRcdHJldHVybjtcbiA1MzI6XHRcdH1cbiA1MzM6XHRcbiA1MzQ6XHRcdGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShpb2xhdCwgcmVxX3RpbWUpO1xuIDUzNTpcdH1cbiA1MzY6XHRcbiA1Mzc6XHQjZGVmaW5lIEJMS0lPTEFURU5DWV9NSU5fQURKVVNUX1RJTUUgKDUwMCAqIE5TRUNfUEVSX01TRUMpXG4gNTM4Olx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUyA1XG4gNTM5Olx0XG4gNTQwOlx0c3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXG4gNTQxOlx0e1xuIDU0MjpcdFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gbGF0X3RvX2Jsa2coaW9sYXQpO1xuIDU0MzpcdFx0c3RydWN0IGlvbGF0ZW5jeV9ncnAgKnBhcmVudDtcbiA1NDQ6XHRcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gKmxhdF9pbmZvO1xuIDU0NTpcdFx0c3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0O1xuIDU0NjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1NDc6XHRcdGludCBjcHU7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgXHUwMDI2c3RhdCk7XG4gNTUwOlx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiA1NTE6XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiA1NTI6XHRcdFx0c3RydWN0IGxhdGVuY3lfc3RhdCAqcztcbiA1NTM6XHRcdFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVx1MDAzZXN0YXRzLCBjcHUpO1xuIDU1NDpcdFx0XHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZzdGF0LCBzKTtcbiA1NTU6XHRcdFx0bGF0ZW5jeV9zdGF0X2luaXQoaW9sYXQsIHMpO1xuIDU1NjpcdFx0fVxuIDU1NzpcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiA1NTg6XHRcbiA1NTk6XHRcdHBhcmVudCA9IGJsa2dfdG9fbGF0KGJsa2ctXHUwMDNlcGFyZW50KTtcbiA1NjA6XHRcdGlmICghcGFyZW50KVxuIDU2MTpcdFx0XHRyZXR1cm47XG4gNTYyOlx0XG4gNTYzOlx0XHRsYXRfaW5mbyA9IFx1MDAyNnBhcmVudC1cdTAwM2VjaGlsZF9sYXQ7XG4gNTY0Olx0XG4gNTY1Olx0XHRpb2xhdF91cGRhdGVfdG90YWxfbGF0X2F2Zyhpb2xhdCwgXHUwMDI2c3RhdCk7XG4gNTY2Olx0XG4gNTY3Olx0XHQvKiBFdmVyeXRoaW5nIGlzIG9rIGFuZCB3ZSBkb24mIzM5O3QgbmVlZCB0byBhZGp1c3QgdGhlIHNjYWxlLiAqL1xuIDU2ODpcdFx0aWYgKGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcdTAwMjZzdGF0KSBcdTAwMjZcdTAwMjZcbiA1Njk6XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsYXRfaW5mby1cdTAwM2VzY2FsZV9jb29raWUpID09IERFRkFVTFRfU0NBTEVfQ09PS0lFKVxuIDU3MDpcdFx0XHRyZXR1cm47XG4gNTcxOlx0XG4gNTcyOlx0XHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xuIDU3MzpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bGF0X2luZm8tXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDU3NDpcdFxuIDU3NTpcdFx0bGF0ZW5jeV9zdGF0X21lcmdlKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG4gNTc2Olx0XHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzIC09IGlvbGF0LVx1MDAzZW5yX3NhbXBsZXM7XG4gNTc3Olx0XHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzICYjNDM7PSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpO1xuIDU3ODpcdFx0aW9sYXQtXHUwMDNlbnJfc2FtcGxlcyA9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCk7XG4gNTc5Olx0XG4gNTgwOlx0XHRpZiAoKGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgXHUwMDNlPSBub3cgfHxcbiA1ODE6XHRcdCAgICBub3cgLSBsYXRfaW5mby1cdTAwM2VsYXN0X3NjYWxlX2V2ZW50IFx1MDAzYyBCTEtJT0xBVEVOQ1lfTUlOX0FESlVTVF9USU1FKSlcbiA1ODI6XHRcdFx0Z290byBvdXQ7XG4gNTgzOlx0XG4gNTg0Olx0XHRpZiAobGF0ZW5jeV9zdW1fb2soaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KSBcdTAwMjZcdTAwMjZcbiA1ODU6XHRcdCAgICBsYXRlbmN5X3N1bV9vayhpb2xhdCwgXHUwMDI2c3RhdCkpIHtcbiA1ODY6XHRcdFx0aWYgKGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCkgXHUwMDNjXG4gNTg3Olx0XHRcdCAgICBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUylcbiA1ODg6XHRcdFx0XHRnb3RvIG91dDtcbiA1ODk6XHRcdFx0aWYgKGxhdF9pbmZvLVx1MDAzZXNjYWxlX2dycCA9PSBpb2xhdCkge1xuIDU5MDpcdFx0XHRcdGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XG4gNTkxOlx0XHRcdFx0c2NhbGVfY29va2llX2NoYW5nZShpb2xhdC1cdTAwM2VibGtpb2xhdCwgbGF0X2luZm8sIHRydWUpO1xuIDU5MjpcdFx0XHR9XG4gNTkzOlx0XHR9IGVsc2UgaWYgKGxhdF9pbmZvLVx1MDAzZXNjYWxlX2xhdCA9PSAwIHx8XG4gNTk0Olx0XHRcdCAgIGxhdF9pbmZvLVx1MDAzZXNjYWxlX2xhdCBcdTAwM2U9IGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYykge1xuIDU5NTpcdFx0XHRsYXRfaW5mby1cdTAwM2VsYXN0X3NjYWxlX2V2ZW50ID0gbm93O1xuIDU5NjpcdFx0XHRpZiAoIWxhdF9pbmZvLVx1MDAzZXNjYWxlX2dycCB8fFxuIDU5NzpcdFx0XHQgICAgbGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0IFx1MDAzZSBpb2xhdC1cdTAwM2VtaW5fbGF0X25zZWMpIHtcbiA1OTg6XHRcdFx0XHRXUklURV9PTkNFKGxhdF9pbmZvLVx1MDAzZXNjYWxlX2xhdCwgaW9sYXQtXHUwMDNlbWluX2xhdF9uc2VjKTtcbiA1OTk6XHRcdFx0XHRsYXRfaW5mby1cdTAwM2VzY2FsZV9ncnAgPSBpb2xhdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJsay1pb2xhdGVuY3kgSW1wbGVtZW50YXRpb24gZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBsYXRlbmN5X3N0YXRfbWVyZ2VgIGZ1bmN0aW9uIGludHJvZHVjZWQgaW4gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgcmVjYWxsIHNlZWluZyB0aGF0IGZ1bmN0aW9uIHJlcGxhY2luZyBgbGF0ZW5jeV9zdGF0X3N1bWAgd2l0aGluIHRoZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZnVuY3Rpb24uIFRoYXQgbWVyZ2UgZnVuY3Rpb24gaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgY29uc2lkZXJpbmcgaXQmIzM5O3MgZG9pbmcgYXJpdGhtZXRpYy4gSSBzZWUgYGRpdl91NjQoLi4uKWAsIGBtaW5gLCBgbWF4YCwgYG5yX3NhbXBsZXNgLCBgdG90YWxgLCBgbWlzc2VkYCwgYWxsIG9mIHdoaWNoIGFyZSBwb3RlbnRpYWwgc291cmNlcyBmb3IgZnV6emluZyB0YXJnZXRzIQoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBibGstaW9sYXRlbmN5LmNgIGlzIGEgKmdvb2QqIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlYWNoIHdpdGhpbiB0aGUga2VybmVsLiBDbGVhcmx5LCBpdCYjMzk7cyB0aWVkIHRvIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlci4gUmlnaHQsIHRoZSBjZ3JvdXBzIHYyIGlvIGNvbnRyb2xsZXIhIElmIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzIGVuYWJsZWQsIHRoZW4gaXQmIzM5O3MgZXhwb3NlZCB2aWEgY2dyb3VwZnMgLSBzb21ldGhpbmcgbGlrZSBgaW8ubGF0ZW5jeWAuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byByZW1lbWJlciB3aGVyZSBJL08gb3BlcmF0aW9ucyBnby4gRnJvbSB3aGF0IEkgcmVjYWxsLCBpdCYjMzk7cyB3aGVuIEkvTyByZXF1ZXN0cyBjb21wbGV0ZSBvciBhcmUgaXNzdWVkIG9uIGJsb2NrIGRldmljZXMsIHN1Y2ggYXMgbG9vcCwgbnVsbF9ibGssIHZpcnRpby1ibGssIGFuZCByYW1kaXNrcywgdGhhdCBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZ2V0cyBpbnZva2VkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZW1lbWJlciB3aGVyZSB0aGUgY29kZSBwYXRocyBhcmUuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGluIHRoZSBjcml0aWNhbCBwYXRoIG9mIGJsb2NrIEkvTy4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxlcnMgb2YgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYGJsay1pb2xhdGVuY3kuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmM9NTEzPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBzdGFydCxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTM5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NDEte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02MDg9c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjUxLVx0XHRcdFx0XHRcdFx0IFx1MDAyNndpbmRvd19zdGFydCwgbm93KSlcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2NTI6XHRcdFx0XHRcdGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoaW9sYXQsIG5vdyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjUzLVx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGJsay1pb2xhdGVuY3kuY2AqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgYGJsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byBzdGFydCBieSB1bmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMg4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlIHRvIGtpY2sgdGhpbmdzIG9mZi4gVGhlbiwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjb3JlIG9wZXJhdGlvbnMgdGhpcyBjb2RlIHBlcmZvcm1zOyB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uYWxpdGllcz8gT25jZSBJIGhhdmUgYSBtZW50YWwgbWFwIG9mIHRob3NlIGVudHJ5IHBvaW50cyBhbmQgb3BlcmF0aW9ucywgSSBjYW4gc3RhcnQgZGl2aW5nIGRlZXBlci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gcmVhZGluZyBtb3JlIG9mIHRoZSBjb2RlIGFmdGVyIEkgdW5kZXJzdGFuZCB0aGUgdG9wLWxldmVsIHN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIGluc2lnaHRzIHRoZSBjb2RlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgY2Z0eXBlfHN0cnVjdCBibGtjZ19wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTQ1Nz1zdGF0aWMgaW50IGJmcWdfc3RhdHNfaW5pdChzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMsIGdmcF90IGdmcClcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtNDg0LVxuYmxvY2svYmZxLWNncm91cC5jOjQ4NTpzdGF0aWMgc3RydWN0IGJmcV9ncm91cF9kYXRhICpjcGRfdG9fYmZxZ2Qoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXG5ibG9jay9iZnEtY2dyb3VwLmMtNDg2LXtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9NDkwPXN0YXRpYyBzdHJ1Y3QgYmZxX2dyb3VwX2RhdGEgKmJsa2NnX3RvX2JmcWdkKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTQ5NC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzo0OTU6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqYmZxX2NwZF9hbGxvYyhnZnBfdCBnZnApXG5ibG9jay9iZnEtY2dyb3VwLmMtNDk2LXtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtNTA2LVxuYmxvY2svYmZxLWNncm91cC5jOjUwNzpzdGF0aWMgdm9pZCBiZnFfY3BkX2ZyZWUoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXG5ibG9jay9iZnEtY2dyb3VwLmMtNTA4LXtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTAzMz1zdGF0aWMgaW50IGJmcV9pb19zZXRfd2VpZ2h0X2xlZ2FjeShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuYmxvY2svYmZxLWNncm91cC5jOjEwMzQ6XHRcdFx0XHQgICAgc3RydWN0IGNmdHlwZSAqY2Z0eXBlLFxuYmxvY2svYmZxLWNncm91cC5jLTEwMzUtXHRcdFx0XHQgICAgdTY0IHZhbClcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTI1ND1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIGludCBub2RlKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjY0LVxuYmxvY2svYmZxLWNncm91cC5jOjEyNjU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfYmZxID0ge1xuYmxvY2svYmZxLWNncm91cC5jLTEyNjYtXHQuZGZsX2NmdHlwZXNcdFx0PSBiZnFfYmxrZ19maWxlcyxcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI3OC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjc5OnN0cnVjdCBjZnR5cGUgYmZxX2Jsa2NnX2xlZ2FjeV9maWxlc1tdID0ge1xuYmxvY2svYmZxLWNncm91cC5jLTEyODAtXHR7XG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE0MDQtXG5ibG9jay9iZnEtY2dyb3VwLmM6MTQwNTpzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtnX2ZpbGVzW10gPSB7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTQwNi1cdHtcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5oPTk2Mj1zdHJ1Y3QgYmZxX2dyb3VwX2RhdGEge1xuYmxvY2svYmZxLWlvc2NoZWQuaC05NjMtXHQvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi9cbmJsb2NrL2JmcS1pb3NjaGVkLmg6OTY0Olx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhIHBkO1xuYmxvY2svYmZxLWlvc2NoZWQuaC05NjUtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuaD0xMDkxPXZvaWQgYmZxZ19hbmRfYmxrZ19wdXQoc3RydWN0IGJmcV9ncm91cCAqYmZxZyk7XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuaC0xMDkzLSNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL2JmcS1pb3NjaGVkLmg6MTA5NDpleHRlcm4gc3RydWN0IGNmdHlwZSBiZnFfYmxrY2dfbGVnYWN5X2ZpbGVzW107XG5ibG9jay9iZnEtaW9zY2hlZC5oOjEwOTU6ZXh0ZXJuIHN0cnVjdCBjZnR5cGUgYmZxX2Jsa2dfZmlsZXNbXTtcbmJsb2NrL2JmcS1pb3NjaGVkLmg6MTA5NjpleHRlcm4gc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfYmZxO1xuYmxvY2svYmZxLWlvc2NoZWQuaC0xMDk3LSNlbmRpZlxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmM9ODE9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19wcmZpbGxfcndzdGF0KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jLTk1LSAqL1xuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuYzo5Njp2b2lkIGJsa2dfcndzdGF0X3JlY3Vyc2l2ZV9zdW0oc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jLTk3LVx0XHRpbnQgb2ZmLCBzdHJ1Y3QgYmxrZ19yd3N0YXRfc2FtcGxlICpzdW0pXG4tLVxuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuaD00Nj11NjQgYmxrZ19wcmZpbGxfcndzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCxcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmgtNDctXHRcdCAgICAgICBpbnQgb2ZmKTtcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0Lmg6NDg6dm9pZCBibGtnX3J3c3RhdF9yZWN1cnNpdmVfc3VtKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuaC00OS1cdFx0aW50IG9mZiwgc3RydWN0IGJsa2dfcndzdGF0X3NhbXBsZSAqc3VtKTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTc9YXRvbWljX3QgYmxrY2dfbnJfY29uZ2VzdGVkIF9fcmVhZF9tb3N0bHkgPSBBVE9NSUNfSU5JVCgwKTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy01OC1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1OTpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSAqYmxrY2dfcG9saWN5W0JMS0NHX01BWF9QT0xTXTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy02MC1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MzA2PXN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfYWxsb2Moc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTM0My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjM0NDpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTM0NS1cdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0zODI9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTQxNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjQxODpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTQxOS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNDMxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0MzI6XHRcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTQzMy1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTIwPXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjUzODpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTUzOS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTY3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTYwNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjYwNjpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTYwNy1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NjUyPXN0YXRpYyBpbnQgYmxrY2dfcmVzZXRfc3RhdHMoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo2NTM6XHRcdFx0ICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsIHU2NCB2YWwpXG5ibG9jay9ibGstY2dyb3VwLmMtNjU0LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNjcwLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzo2NzE6XHRcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTY3Mi1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NzA4PXZvaWQgYmxrY2dfcHJpbnRfYmxrZ3Moc3RydWN0IHNlcV9maWxlICpzZiwgc3RydWN0IGJsa2NnICpibGtjZyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNzEwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqLCBpbnQpLFxuYmxvY2svYmxrLWNncm91cC5jOjcxMTpcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCwgaW50IGRhdGEsXG5ibG9jay9ibGstY2dyb3VwLmMtNzEyLVx0XHQgICAgICAgYm9vbCBzaG93X3RvdGFsKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04MTc9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX29wZW5fYmRldik7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTgzMy0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzo4MzQ6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MzUtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTExMzU9c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTExNzUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTc2Olx0XHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XG5ibG9jay9ibGstY2dyb3VwLmMtMTE3Ny1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTE4Nz1zdGF0aWMgaW50IGJsa2NnX3ByaW50X3N0YXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTIwMy1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjA0OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2ZpbGVzW10gPSB7XG5ibG9jay9ibGstY2dyb3VwLmMtMTIwNS1cdHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTIxMS1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjEyOnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2xlZ2FjeV9maWxlc1tdID0ge1xuYmxvY2svYmxrLWNncm91cC5jLTEyMTMtXHR7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTEzODE9YmxrY2dfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMzk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkxLQ0dfTUFYX1BPTFMgOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjE0MDA6XHRcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDAxOlx0XHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZDtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDAyLVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTQ4PXN0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5ibG9jay9ibGstY2dyb3VwLmM6MTU0OTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTUwLXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTU4NS0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTg2OmludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTg3LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTcwMD12b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5jOjE3MDE6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwMi17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE3MjM9RVhQT1JUX1NZTUJPTF9HUEwoYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kpO1xuYmxvY2svYmxrLWNncm91cC5jLTE3MjQtXG5ibG9jay9ibGstY2dyb3VwLmM6MTcyNTpzdGF0aWMgdm9pZCBibGtjZ19mcmVlX2FsbF9jcGQoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuYmxvY2svYmxrLWNncm91cC5jLTE3MjYte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNzQzLSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjE3NDQ6aW50IGJsa2NnX3BvbGljeV9yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmMtMTc0NS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE3NzYtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrY2csIFx1MDAyNmFsbF9ibGtjZ3MsIGFsbF9ibGtjZ3Nfbm9kZSkge1xuYmxvY2svYmxrLWNncm91cC5jOjE3Nzc6XHRcdFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQ7XG5ibG9jay9ibGstY2dyb3VwLmMtMTc3OC1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTgxNj1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19wb2xpY3lfcmVnaXN0ZXIpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xODIzLSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjE4MjQ6dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmMtMTgyNS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTk0PXN0cnVjdCBibGtjZyB7XG4tLVxuYmxvY2svYmxrLWNncm91cC5oLTEwNC1cbmJsb2NrL2Jsay1jZ3JvdXAuaDoxMDU6XHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGFcdCpjcGRbQkxLQ0dfTUFYX1BPTFNdO1xuYmxvY2svYmxrLWNncm91cC5oLTEwNi1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9MTM4PXN0cnVjdCBibGtnX3BvbGljeV9kYXRhIHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmgtMTUzLSAqL1xuYmxvY2svYmxrLWNncm91cC5oOjE1NDpzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEge1xuYmxvY2svYmxrLWNncm91cC5oLTE1NS1cdC8qIHRoZSBibGtjZyBhbmQgcG9saWN5IGlkIHRoaXMgcGVyLXBvbGljeSBkYXRhIGJlbG9uZ3MgdG8gKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmgtMTU5LVxuYmxvY2svYmxrLWNncm91cC5oOjE2MDp0eXBlZGVmIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqKGJsa2NnX3BvbF9hbGxvY19jcGRfZm4pKGdmcF90IGdmcCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTYxOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2luaXRfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTYyOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2ZyZWVfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTYzOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2JpbmRfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XG5ibG9jay9ibGstY2dyb3VwLmgtMTY0LXR5cGVkZWYgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKihibGtjZ19wb2xfYWxsb2NfcGRfZm4pKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xNzE9dHlwZWRlZiB2b2lkIChibGtjZ19wb2xfc3RhdF9wZF9mbikoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzMtXG5ibG9jay9ibGstY2dyb3VwLmg6MTc0OnN0cnVjdCBibGtjZ19wb2xpY3kge1xuYmxvY2svYmxrLWNncm91cC5oLTE3NS1cdGludFx0XHRcdFx0cGxpZDtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzYtXHQvKiBjZ3JvdXAgZmlsZXMgZm9yIHRoZSBwb2xpY3kgKi9cbmJsb2NrL2Jsay1jZ3JvdXAuaDoxNzc6XHRzdHJ1Y3QgY2Z0eXBlXHRcdFx0KmRmbF9jZnR5cGVzO1xuYmxvY2svYmxrLWNncm91cC5oOjE3ODpcdHN0cnVjdCBjZnR5cGVcdFx0XHQqbGVnYWN5X2NmdHlwZXM7XG5ibG9jay9ibGstY2dyb3VwLmgtMTc5LVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTg9dm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDAtLyogQmxraW8gY29udHJvbGxlciBwb2xpY3kgcmVnaXN0cmF0aW9uICovXG5ibG9jay9ibGstY2dyb3VwLmg6MjAxOmludCBibGtjZ19wb2xpY3lfcmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDI6dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xuYmxvY2svYmxrLWNncm91cC5oOjIwMzppbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xuYmxvY2svYmxrLWNncm91cC5oLTIwNC12b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5oOjIwNTpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmgtMjA2LVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMDg9dm9pZCBibGtjZ19wcmludF9ibGtncyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgYmxrY2cgKmJsa2NnLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMTAtXHRcdFx0XHQgICAgIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICosIGludCksXG5ibG9jay9ibGstY2dyb3VwLmg6MjExOlx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLCBpbnQgZGF0YSxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMTItXHRcdCAgICAgICBib29sIHNob3dfdG90YWwpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjM9aW50IGJsa2dfY29uZl9vcGVuX2JkZXYoc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjQtXHRfX2NvbmRfYWNxdWlyZXMoMCwgXHUwMDI2Y3R4LVx1MDAzZWJkZXYtXHUwMDNlYmRfcXVldWUtXHUwMDNlcnFfcW9zX211dGV4KTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMjU6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjYtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTI4Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpibGtnX3RvX3BkKHN0cnVjdCBibGtjZ19ncSAqYmxrZyxcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyODc6XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmgtMjg4LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmgtMjkxLVxuYmxvY2svYmxrLWNncm91cC5oOjI5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqYmxrY2dfdG9fY3BkKHN0cnVjdCBibGtjZyAqYmxrY2csXG5ibG9jay9ibGstY2dyb3VwLmg6MjkzOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuYmxvY2svYmxrLWNncm91cC5oLTI5NC17XG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTMwND1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqcGRfdG9fYmxrZyhzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLWNncm91cC5oLTMwOC1cbmJsb2NrL2Jsay1jZ3JvdXAuaDozMDk6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2cgKmNwZF90b19ibGtjZyhzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZClcbmJsb2NrL2Jsay1jZ3JvdXAuaC0zMTAte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD00Nzk9c3RhdGljIGlubGluZSBib29sIGJsa2NnX3BvbGljeV9lbmFibGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuYmxvY2svYmxrLWNncm91cC5oOjQ4MDpcdFx0XHRcdGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuaC00ODEte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODk9c3RydWN0IGJsa2dfcG9saWN5X2RhdGEge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXG5ibG9jay9ibGstY2dyb3VwLmg6NDkyOnN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSB7XG5ibG9jay9ibGstY2dyb3VwLmgtNDkzLX07XG5ibG9jay9ibGstY2dyb3VwLmgtNDk0LVxuYmxvY2svYmxrLWNncm91cC5oOjQ5NTpzdHJ1Y3QgYmxrY2dfcG9saWN5IHtcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTYtfTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9NTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuYmxvY2svYmxrLWNncm91cC5oOjUwNTpzdGF0aWMgaW5saW5lIGludCBibGtjZ19wb2xpY3lfcmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XG5ibG9jay9ibGstY2dyb3VwLmg6NTA2OnN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxuYmxvY2svYmxrLWNncm91cC5oLTUwNy1zdGF0aWMgaW5saW5lIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmg6NTA4Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaC01MDktc3RhdGljIGlubGluZSB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5oOjUxMDpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaC01MTEtXG5ibG9jay9ibGstY2dyb3VwLmg9NTEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKmJsa2dfdG9fcGQoc3RydWN0IGJsa2NnX2dxICpibGtnLFxuYmxvY2svYmxrLWNncm91cC5oOjUxMzpcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyByZXR1cm4gTlVMTDsgfVxuYmxvY2svYmxrLWNncm91cC5oLTUxNC1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqcGRfdG9fYmxrZyhzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpIHsgcmV0dXJuIE5VTEw7IH1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9NTU0PXN0cnVjdCBpb2NfY2dycCB7XG5ibG9jay9ibGstaW9jb3N0LmM6NTU1Olx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhXHRjcGQ7XG5ibG9jay9ibGstaW9jb3N0LmMtNTU2LVx0dW5zaWduZWQgaW50XHRcdFx0ZGZsX3dlaWdodDtcbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9NjUxPXN0YXRpYyBjb25zdCB1MzIgdnJhdGVfYWRqX3BjdFtdID1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtNjU2LVxuYmxvY2svYmxrLWlvY29zdC5jOjY1NzpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9jb3N0O1xuYmxvY2svYmxrLWlvY29zdC5jLTY1OC1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMjk3OS1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTgwOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmlvY19jcGRfYWxsb2MoZ2ZwX3QgZ2ZwKVxuYmxvY2svYmxrLWlvY29zdC5jLTI5ODEte1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTkxLVxuYmxvY2svYmxrLWlvY29zdC5jOjI5OTI6c3RhdGljIHZvaWQgaW9jX2NwZF9mcmVlKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKVxuYmxvY2svYmxrLWlvY29zdC5jLTI5OTMte1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0zNDc2PXN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTM1NzMtXG5ibG9jay9ibGstaW9jb3N0LmM6MzU3NDpzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2NfZmlsZXNbXSA9IHtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTc1LVx0e1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTk1LVxuYmxvY2svYmxrLWlvY29zdC5jOjM1OTY6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvY29zdCA9IHtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTk3LVx0LmRmbF9jZnR5cGVzXHQ9IGlvY19maWxlcyxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODMtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6ODQ6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvbGF0ZW5jeTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NS1zdHJ1Y3QgaW9sYXRlbmN5X2dycDtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MTA2OT1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfZnJlZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwODItXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA4MzpzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2xhdGVuY3lfZmlsZXNbXSA9IHtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDg0LVx0e1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDkyLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwOTM6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvbGF0ZW5jeSA9IHtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDk0LVx0LmRmbF9jZnR5cGVzXHQ9IGlvbGF0ZW5jeV9maWxlcyxcbi0tXG5ibG9jay9ibGstaW9wcmlvLmM9NDI9c3RhdGljIGNvbnN0IGNoYXIgKnBvbGljeV9uYW1lW10gPSB7XG4tLVxuYmxvY2svYmxrLWlvcHJpby5jLTQ5LVxuYmxvY2svYmxrLWlvcHJpby5jOjUwOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGlvcHJpb19wb2xpY3k7XG5ibG9jay9ibGstaW9wcmlvLmMtNTEtXG4tLVxuYmxvY2svYmxrLWlvcHJpby5jPTU3PXN0cnVjdCBpb3ByaW9fYmxrY2cge1xuYmxvY2svYmxrLWlvcHJpby5jOjU4Olx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhIGNwZDtcbmJsb2NrL2Jsay1pb3ByaW8uYy01OS1cdGVudW0gcHJpb19wb2xpY3lcdCBwcmlvX3BvbGljeTtcbi0tXG5ibG9jay9ibGstaW9wcmlvLmM9ODI9c3RhdGljIHNzaXplX3QgaW9wcmlvX3NldF9wcmlvX3BvbGljeShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5ibG9jay9ibGstaW9wcmlvLmMtOTctXG5ibG9jay9ibGstaW9wcmlvLmM6OTg6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqaW9wcmlvX2FsbG9jX2NwZChnZnBfdCBnZnApXG5ibG9jay9ibGstaW9wcmlvLmMtOTkte1xuLS1cbmJsb2NrL2Jsay1pb3ByaW8uYy0xMDgtXG5ibG9jay9ibGstaW9wcmlvLmM6MTA5OnN0YXRpYyB2b2lkIGlvcHJpb19mcmVlX2NwZChzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZClcbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTAte1xuLS1cbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTUtXG5ibG9jay9ibGstaW9wcmlvLmM6MTE2OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvcHJpb19maWxlc1tdID0ge1xuYmxvY2svYmxrLWlvcHJpby5jLTExNy1cdHtcbi0tXG5ibG9jay9ibGstaW9wcmlvLmMtMTI0LVxuYmxvY2svYmxrLWlvcHJpby5jOjEyNTpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBpb3ByaW9fcG9saWN5ID0ge1xuYmxvY2svYmxrLWlvcHJpby5jLTEyNi1cdC5kZmxfY2Z0eXBlc1x0PSBpb3ByaW9fZmlsZXMsXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQzMj1zdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdF9yZWN1cnNpdmUoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDM5LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ0MDpzdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQxLVx0e1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE1NDA9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjIxLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTYyMjpzdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfZmlsZXNbXSA9IHtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjMtXHR7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTY3MD1zdGF0aWMgdm9pZCB0aHJvdGxfcGRfb2ZmbGluZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTY3NC1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2NzU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTY3Ni1cdC5kZmxfY2Z0eXBlc1x0XHQ9IHRocm90bF9maWxlcyxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD02OT1zdHJ1Y3QgdGhyb3RsX2dycCB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMTMwLVxuYmxvY2svYmxrLXRocm90dGxlLmg6MTMxOmV4dGVybiBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV90aHJvdGw7XG5ibG9jay9ibGstdGhyb3R0bGUuaC0xMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXMgdGFzazoKCioqQW5hbHl6aW5nIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIC0gSW5pdGlhbGl6YXRpb24sIEV4aXQsIGFuZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBBIGdvb2QgYXBwcm9hY2gsIGVzcGVjaWFsbHkgd2l0aCBrZXJuZWwgbW9kdWxlcywgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBxdWlja2x5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBgbW9kdWxlX2luaXQoKWAgYW5kIGBtb2R1bGVfZXhpdCgpYCBtYWNyb3MuIFRob3NlIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBob3cgdGhlIG1vZHVsZSBpcyBsb2FkZWQgYW5kIHVubG9hZGVkLCB3aGljaCBpcyBrZXkgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gdXN1YWxseSBzcG90IHRoZSBjb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGUgZmlsZS4gSSYjMzk7bGwgbWFrZSBhIHF1aWNrIG5vdGUgb2YgdGhvc2UgdG9vLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0LXBhc3Mgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZSYjMzk7cyByZXNwb25zaWJpbGl0aWVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGFsd2F5cyBnb29kIHRvIHN0YXJ0IHdpdGggdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgZ2V0dGluZyBsb3N0IGluIHRoZSBkZXRhaWxzLiBLbm93aW5nIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgbmFycm93cyBkb3duIHRoZSBzZWFyY2ggY29uc2lkZXJhYmx5LiBJIGNhbiB0aGVuIHJlYWQgdGhlIGNvZGUgbW9yZSBzdHJhdGVnaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1MDpcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9vZmZsaW5lKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcbjEwNTE6XHR7XG4xMDUyOlx0XHRzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQgPSBwZF90b19sYXQocGQpO1xuMTA1MzpcdFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gbGF0X3RvX2Jsa2coaW9sYXQpO1xuMTA1NDpcdFxuMTA1NTpcdFx0aW9sYXRlbmN5X3NldF9taW5fbGF0X25zZWMoYmxrZywgMCk7XG4xMDU2Olx0XHRpb2xhdGVuY3lfY2xlYXJfc2NhbGluZyhibGtnKTtcbjEwNTc6XHR9XG4xMDU4Olx0XG4xMDU5Olx0c3RhdGljIHZvaWQgaW9sYXRfcmVsZWFzZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbjEwNjA6XHR7XG4xMDYxOlx0XHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQgPVxuMTA2MjpcdFx0XHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSwgcmN1X2hlYWQpO1xuMTA2MzpcdFx0c3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0ID0gcGRfdG9fbGF0KHBkKTtcbjEwNjQ6XHRcbjEwNjU6XHRcdGZyZWVfcGVyY3B1KGlvbGF0LVx1MDAzZXN0YXRzKTtcbjEwNjY6XHRcdGtmcmVlKGlvbGF0KTtcbjEwNjc6XHR9XG4xMDY4Olx0XG4xMDY5Olx0c3RhdGljIHZvaWQgaW9sYXRlbmN5X3BkX2ZyZWUoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxuMTA3MDpcdHtcbjEwNzE6XHRcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IHBkX3RvX2Jsa2cocGQpO1xuMTA3MjpcdFxuMTA3MzpcdFx0LypcbjEwNzQ6XHRcdCAqIEdyb3VwcyB0aHJvdHRsZWQgYXMgY29sbGF0ZXJhbCBoYXZlIG1pbl9sYXRfbnNlYyA9PSAwLCBzb1xuMTA3NTpcdFx0ICogaW9sYXRlbmN5X3BkX29mZmxpbmUoKSBsZWF2ZXMgdGhlaXIgZGVsYXkgc2V0LiAgRHJvcCBpdCBoZXJlLCB3aGVyZVxuMTA3NjpcdFx0ICogbm8gaW4tZmxpZ2h0IGJpbyBjYW4gcmUtYXJtIGl0IHZpYSBjaGVja19zY2FsZV9jaGFuZ2UoKS5cbjEwNzc6XHRcdCAqL1xuMTA3ODpcdFx0aWYgKGJsa2cpXG4xMDc5Olx0XHRcdGJsa2NnX2NsZWFyX2RlbGF5KGJsa2cpO1xuMTA4MDpcdFx0Y2FsbF9yY3UoXHUwMDI2cGQtXHUwMDNlcmN1X2hlYWQsIGlvbGF0X3JlbGVhc2UpO1xuMTA4MTpcdH1cbjEwODI6XHRcbjEwODM6XHRzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2xhdGVuY3lfZmlsZXNbXSA9IHtcbjEwODQ6XHRcdHtcbjEwODU6XHRcdFx0Lm5hbWUgPSBcJiMzNDtsYXRlbmN5XCYjMzQ7LFxuMTA4NjpcdFx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4xMDg3Olx0XHRcdC5zZXFfc2hvdyA9IGlvbGF0ZW5jeV9wcmludF9saW1pdCxcbjEwODg6XHRcdFx0LndyaXRlID0gaW9sYXRlbmN5X3NldF9saW1pdCxcbjEwODk6XHRcdH0sXG4xMDkwOlx0XHR7fVxuMTA5MTpcdH07XG4xMDkyOlx0XG4xMDkzOlx0c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvbGF0ZW5jeSA9IHtcbjEwOTQ6XHRcdC5kZmxfY2Z0eXBlc1x0PSBpb2xhdGVuY3lfZmlsZXMsXG4xMDk1Olx0XHQucGRfYWxsb2NfZm5cdD0gaW9sYXRlbmN5X3BkX2FsbG9jLFxuMTA5NjpcdFx0LnBkX2luaXRfZm5cdD0gaW9sYXRlbmN5X3BkX2luaXQsXG4xMDk3Olx0XHQucGRfb2ZmbGluZV9mblx0PSBpb2xhdGVuY3lfcGRfb2ZmbGluZSxcbjEwOTg6XHRcdC5wZF9mcmVlX2ZuXHQ9IGlvbGF0ZW5jeV9wZF9mcmVlLFxuMTA5OTpcdFx0LnBkX3N0YXRfZm5cdD0gaW9sYXRlbmN5X3BkX3N0YXQsXG4xMTAwOlx0fTtcbjExMDE6XHRcbjExMDI6XHRzdGF0aWMgaW50IF9faW5pdCBpb2xhdGVuY3lfaW5pdCh2b2lkKVxuMTEwMzpcdHtcbjExMDQ6XHRcdHJldHVybiBibGtjZ19wb2xpY3lfcmVnaXN0ZXIoXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSk7XG4xMTA1Olx0fVxuMTEwNjpcdFxuMTEwNzpcdHN0YXRpYyB2b2lkIF9fZXhpdCBpb2xhdGVuY3lfZXhpdCh2b2lkKVxuMTEwODpcdHtcbjExMDk6XHRcdGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xuMTExMDpcdH1cbjExMTE6XHRcbjExMTI6XHRtb2R1bGVfaW5pdChpb2xhdGVuY3lfaW5pdCk7XG4xMTEzOlx0bW9kdWxlX2V4aXQoaW9sYXRlbmN5X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbGF0ZW5jeV9zdGF0X21lcmdlYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgbGF0ZW5jeV9zdGF0X21lcmdlYCB3YXMgcHV0IGluIHBsYWNlIHRvIHNwZWNpZmljYWxseSBhZGRyZXNzIGhvdyB3ZSBtZXJnZSBsYXRlbmN5IHN0YXRpc3RpY3Mgd2l0aGluIHRoZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZywgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbGF0ZW5jeV9zdGF0X21lcmdlYCBpcyBzdGF0aWMgaW5saW5lIGFuZCBtYXAgb3V0IGl0cyBjYWxsIGdyYXBoIHdpdGhpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gUmlnaHQsIGhlcmUgd2UgZ286IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBkaXJlY3RseSBjYWxscyBgbGF0ZW5jeV9zdGF0X21lcmdlYC4gQ3J1Y2lhbGx5LCBgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvYCB0aGVuIGNhbGxzIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYC4gVGhpcyBtYWtlcyBpdCBwYXJ0IG9mIHRoZSBjZ3JvdXAgaW9sYXRlbmN5IHBhdGguIEZ1cnRoZXIgY29uZmlybWluZyB0aGUgY29ubmVjdGlvbiB0byBjb25maWd1cmF0aW9uLCBgaW9sYXRlbmN5X3NldF9saW1pdGAgZW5hYmxlcyBhbmQgY29uZmlndXJlcyBpb2xhdGVuY3ksIHdoaWNoIHBvaW50cyB0byBjZ3JvdXAgY29uZmlnIHdyaXRpbmcgdG8gZW5hYmxlIGlvbGF0ZW5jeSBvbiBhIGJsb2NrIGRldmljZS4KCk5vdywgZm9yIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGlzIGxvb2tzIGdvb2QuIEl0IHNlZW1zIHRvIGJlIHJlYWNoYWJsZSBjb2RlOyB3ZSYjMzk7cmUgdGFsa2luZyBhIHN0YW5kYXJkIFFFTVUvR0NFIGtlcm5lbCBlbnZpcm9ubWVudCB3aXRoIGNncm91cHMgdjIsIGJsb2NrIGxheWVyLCBsb29wIGRldmljZXMsIHZpcnRpby1ibGssIGV0Yy4gU28gd2UmIzM5O3JlIGNvdmVyZWQgdGhlcmUuIFRoZSBtb3N0IHNpZ25pZmljYW50IHBhcnQgaXMgdGhhdCBpdCAqaXMqIG1vZGlmeWluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgbWVyZ2luZyBsb2dpYyBmb3IgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5LiBUaGlzIG1ha2VzIHRoZSBhbnN3ZXIgdG8gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsuCgpGaW5hbGx5LCB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgQkxLX0NHUk9VUGAuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucy4gVGltZSB0byBncmVwIGZvciBgQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZYCBhbmQgcmVsYXRlZCBjb25maWdzIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q9MjAxMj1mb3IgYSBkZXZpY2UsIGJ5IEJGUSYjMzk7cyBvd24gY2dyb3VwIHN1cHBvcnQuICBMYXRlbmN5LWJhc2VkIHByb3RlY3Rpb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoyMDEzOihDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpIGFuZCBJL08gcHJpb3JpdHkgYXNzaWdubWVudFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTIwMTQtKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTykgYXJlIGFsc28gYXZhaWxhYmxlLlxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9ODE9Q09ORklHX0JMS19XQlQ9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo4MjpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy04My1DT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRD15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz05Nj1DT05GSUdfQkxLX1dCVD15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjk3OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTk4LUNPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODg9Q09ORklHX0JMS19XQlQ9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjg5OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctOTAtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODI9Q09ORklHX0JMS19XQlQ9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjgzOkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODQtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnPTU2PUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXlcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWc6NTc6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWctNTgtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NTc9Q09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eVxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnOjU4OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWctNTktQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT1BSSU8pXHQmIzQzOz0gYmxrLWlvcHJpby5vXG5ibG9jay9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpXHQmIzQzOz0gYmxrLWlvbGF0ZW5jeS5vXG5ibG9jay9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXHQmIzQzOz0gYmxrLWlvY29zdC5vXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTA9Q09ORklHX0JMS19DR1JPVVA9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTE6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTEyLUNPTkZJR19CTEtfREVWX0JTR0xJQj15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249NT1DT05GSUdfQklORk1UX01JU0M9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb246NjpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb24tNy1DT05GSUdfQkxLX0NHUk9VUD15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODYwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYEJMS19DR1JPVVBgIERlcGVuZGVuY2llcyoqCgpSaWdodCwgYmVmb3JlIGRpdmluZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19DR1JPVVBgLiBObyBwb2ludCBpbiBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWUgZnVuZGFtZW50YWwgcGllY2VzLiBMZXQmIzM5O3MgcHVsbCB1cCBgaW5pdC9LY29uZmlnYCBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGF0IG9wdGlvbiB0byBiZSBhdmFpbGFibGUuIE5lZWQgdG8gZW5zdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBoaWRkZW4gaW1wbGljYXRpb25zIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgY29tcGlsZS10aW1lIGVycm9ycyBvciBydW50aW1lIHN1cnByaXNlcyBsYXRlciBvbi4gQmVzdCB0byBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24gcmlnaHQgZnJvbSB0aGUgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMjE6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTEyMjpcdFxuMTEyMzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTI0Olx0XG4xMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCbG9jayBJL08gTGF0ZW5jeSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEJMS19DR1JPVVBgIHN0dWZmLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgYEJMS19DR1JPVVBgIG9wdGlvbiBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYEJMT0NLYC4gTWFrZXMgc2Vuc2UuIEFuZCwgbmF0dXJhbGx5LCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIHJlbGllcyBvbiBgQkxLX0NHUk9VUGAuIE5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCBzeW1ib2xzIHdlIG5lZWQgdG8gY29uc2lkZXIgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIHdvcmsuCgpJIHNlZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGxhdGVuY3lfc3RhdF9tZXJnZWAuIEludGVyZXN0aW5nLCBidXQgaXQmIzM5O3MgKnN0YXRpYyBpbmxpbmUqIHdpdGhpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gTGV0JiMzOTtzIHRyYWNlIGl0OyBgbGF0ZW5jeV9zdGF0X21lcmdlYCBpcyBjYWxsZWQgaW4gYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgLiBOb3csIGlzICp0aGF0KiBpbmxpbmVkPyBZZXAsIGl0JiMzOTtzIGFsc28gZGVjbGFyZWQgYHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoLi4uKWAuIEhtbS4gVGhhdCBzdGF0aWMgaW5saW5lIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgaXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcHByb2FjaCB0byBhbmFseXNpcy4KCkFscmlnaHQsIHRoZSBzdHJhdGVneSBJJiMzOTttIGdvaW5nIHRvIHRha2UgaXMgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgb3Iga2V5IGNhbGxlciBmdW5jdGlvbnMgd2l0aGluIGBibG9jay9ibGstaW9sYXRlbmN5LmNgLiBGcm9tIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdDoKCiogICBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AKKiAgIGBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9gCiogICBgaW9sYXRlbmN5X3JlY29yZF90aW1lYAoqICAgYGlvbGF0ZW5jeV9zZXRfbGltaXRgCgpJIGNvdWxkIGluY2x1ZGUgYGxhdGVuY3lfc3RhdF9tZXJnZWAsIGJ1dCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIGlmIHRoZSBjaGFuZ2VzIGFyZSBtb3N0bHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpdCYjMzk7cyBiZXR0ZXIgdG8gbGlzdCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLiBTbywgSSB3aWxsIGZvY3VzIG9uIHRoZSBsaXN0IGFib3ZlLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2Ugd2hhdCBzeW1ib2xzIGFjdHVhbGx5IGV4aXN0IHdpdGhpbiBgYmxrLWlvbGF0ZW5jeS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvbGF0ZW5jeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYz04Nz1zdHJ1Y3QgYmxrX2lvbGF0ZW5jeSB7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwMi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDM6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX2lvbGF0ZW5jeSAqQkxLSU9MQVRFTkNZKHN0cnVjdCBycV9xb3MgKnJxb3MpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA0LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MTc1PXN0YXRpYyBjb25zdCB1NjQgaW9sYXRlbmN5X2V4cF9mYWN0b3JzW0JMS0lPTEFURU5DWV9OUl9FWFBfRkFDVE9SU10gPSB7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE4Mi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxODM6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqcGRfdG9fbGF0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODQte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODctXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmJsa2dfdG9fbGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODkte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xOTItXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTkzOnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpsYXRfdG9fYmxrZyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTk0LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTk3LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjE5ODpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X2luaXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE5OS1cdFx0XHRcdCAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA3LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIwODpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA5LVx0XHRcdFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjIzLSAqL1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIyNDpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI0My1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyNDQ6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjQ1LVx0XHRcdFx0XHQgICAgdTY0IHJlcV90aW1lKVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNTYtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCBsYXRlbmN5X3N1bV9vayhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjU4LVx0XHRcdFx0ICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNjctXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjY4OnN0YXRpYyBpbmxpbmUgdTY0IGxhdGVuY3lfc3RhdF9zYW1wbGVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNjktXHRcdFx0XHQgICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjc1LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI3NjpzdGF0aWMgaW5saW5lIHZvaWQgaW9sYXRfdXBkYXRlX3RvdGFsX2xhdF9hdmcoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI3Ny1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjk4LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI5OTpzdGF0aWMgdm9pZCBpb2xhdF9jbGVhbnVwX2NiKHN0cnVjdCBycV93YWl0ICpycXcsIHZvaWQgKnByaXZhdGVfZGF0YSlcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMDAte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMDQtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MzA1OnN0YXRpYyBib29sIGlvbGF0X2FjcXVpcmVfaW5mbGlnaHQoc3RydWN0IHJxX3dhaXQgKnJxdywgdm9pZCAqcHJpdmF0ZV9kYXRhKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTMwNi17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTMxMC1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzozMTE6c3RhdGljIHZvaWQgX19ibGtjZ19pb2xhdGVuY3lfdGhyb3R0bGUoc3RydWN0IHJxX3FvcyAqcnFvcyxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMTItXHRcdFx0XHQgICAgICAgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMzktXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MzQwOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzY2FsZV9hbW91bnQodW5zaWduZWQgbG9uZyBxZCwgYm9vbCB1cClcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zNDEte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zNTMtICovXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MzU0OnN0YXRpYyB2b2lkIHNjYWxlX2Nvb2tpZV9jaGFuZ2Uoc3RydWN0IGJsa19pb2xhdGVuY3kgKmJsa2lvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTM1NS1cdFx0XHRcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gKmxhdF9pbmZvLFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zOTctICovXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6Mzk4OnN0YXRpYyB2b2lkIHNjYWxlX2NoYW5nZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIGJvb2wgdXApXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzk5LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNDIzLS8qIENoZWNrIG91ciBwYXJlbnQgYW5kIHNlZSBpZiB0aGUgc2NhbGUgY29va2llIGhhcyBjaGFuZ2VkLiAqL1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjQyNDpzdGF0aWMgdm9pZCBjaGVja19zY2FsZV9jaGFuZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0KVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQyNS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQ4Ny1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo0ODg6c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X3Rocm90dGxlKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy00ODkte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MTItXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NTEzOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBzdGFydCxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MTQtXHRcdFx0XHQgIHU2NCBub3csIGJvb2wgaXNzdWVfYXNfcm9vdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTM5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NDEte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDctXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjA4OnN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyhzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgYmlvICpiaW8pXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjA5LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjU5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjY2MDpzdGF0aWMgdm9pZCBibGtjZ19pb2xhdGVuY3lfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY2MS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJxX3Fvc19vcHMgYmxrY2dfaW9sYXRlbmN5X29wcyA9IHtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjc1LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjY3NjpzdGF0aWMgdm9pZCBibGtpb2xhdGVuY3lfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjc3LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzUyLSAqL1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc1MzpzdGF0aWMgdm9pZCBibGtpb2xhdGVuY3lfZW5hYmxlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc1NC17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc4Mi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo3ODM6c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzg0LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODExLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjgxMjpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfc2V0X21pbl9sYXRfbnNlYyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHU2NCB2YWwpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODEzLXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODMzLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjgzNDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2xlYXJfc2NhbGluZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODM1LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODUxLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjg1MjpzdGF0aWMgc3NpemVfdCBpb2xhdGVuY3lfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTg1My1cdFx0XHQgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkyNC1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5MjU6c3RhdGljIHU2NCBpb2xhdGVuY3lfcHJmaWxsX2xpbWl0KHN0cnVjdCBzZXFfZmlsZSAqc2YsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTI2LVx0XHRcdFx0ICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQsIGludCBvZmYpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzNy1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5Mzg6c3RhdGljIGludCBpb2xhdGVuY3lfcHJpbnRfbGltaXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05Mzkte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NDUtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTQ2OnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9zc2Rfc3RhdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHN0cnVjdCBzZXFfZmlsZSAqcylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NDcte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NzAtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTcxOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9zdGF0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCwgc3RydWN0IHNlcV9maWxlICpzKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk3Mi17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk5Mi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5OTM6c3RhdGljIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICppb2xhdGVuY3lfcGRfYWxsb2Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTk0LVx0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBnZnBfdCBnZnApXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwMDktXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTAxMDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfaW5pdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTAxMS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNDktXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA1MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfb2ZmbGluZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA1MS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNTgtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA1OTpzdGF0aWMgdm9pZCBpb2xhdF9yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNjAte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDY4LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwNjk6c3RhdGljIHZvaWQgaW9sYXRlbmN5X3BkX2ZyZWUoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNzAte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz0xMDkzPXN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV9pb2xhdGVuY3kgPSB7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMDEtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTEwMjpzdGF0aWMgaW50IF9faW5pdCBpb2xhdGVuY3lfaW5pdCh2b2lkKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMDMte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMTA2LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjExMDc6c3RhdGljIHZvaWQgX19leGl0IGlvbGF0ZW5jeV9leGl0KHZvaWQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwOC17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMTEtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTExMjptb2R1bGVfaW5pdChpb2xhdGVuY3lfaW5pdCk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTExMzptb2R1bGVfZXhpdChpb2xhdGVuY3lfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjE4CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBmb3IgdGhpcyBJL08gbGF0ZW5jeSBtb25pdG9yaW5nIHNldHVwLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBncmFiIHRoZSBjb3JlIGZvY3VzIHN5bWJvbHM6IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCwgYGJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb2AsIGBpb2xhdGVuY3lfcmVjb3JkX3RpbWVgLCBhbmQgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWxsIGRlZmluZWQgYW5kIHdvcmtpbmcgdG9nZXRoZXIgcHJvcGVybHkuCgpOb3cgZm9yIHRoZSBjb25maWcgb3B0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBiZSB1c2luZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgb2YgY291cnNlLCBpdCByZWxpZXMgb24gYEJMS19DR1JPVVBgLiBBbHJpZ2h0LCB0aW1lIGZvciBhIHF1aWNrIGF1ZGl0LiBObyBtaXNzaW5nIHBpZWNlcywgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgdHJlZSBpcyBzb2xpZC4gU28sIEkgc2VlIHRoYXQgYEJMS19DR1JPVVBgIGl0c2VsZiBuZWVkcyBgQkxPQ0tgLiBSaWdodCwgbWFrZXMgc2Vuc2U7IGNhbiYjMzk7dCBtYW5hZ2UgYmxvY2sgSS9PIHdpdGhvdXQgdGhlIGZ1bmRhbWVudGFsIGJsb2NrIGRldmljZSBzdXBwb3J0LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBJJiMzOTt2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IGRlcGVuZGVuY3kuIFllcCwgZXZlcnl0aGluZyBsb29rcyByaWdodC4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7LAogICAgJiMzNDtibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW8mIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3JlY29yZF90aW1lJiMzNDssCiAgICAmIzM0O2lvbGF0ZW5jeV9zZXRfbGltaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7LAogICAgJiMzNDtibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW8mIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3JlY29yZF90aW1lJiMzNDssCiAgICAmIzM0O2lvbGF0ZW5jeV9zZXRfbGltaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChgYmxrLWlvbGF0ZW5jeS5jYCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgbGF0ZW5jeV9zdGF0X21lcmdlKClgIHRvIG1lcmdlIGFscmVhZHktYWdncmVnYXRlZCBgbGF0ZW5jeV9zdGF0YCBzdHJ1Y3R1cmVzIGJ5IHJlY29uc3RydWN0aW5nIHRoZSB0b3RhbCBsYXRlbmN5IHVzaW5nIGBtZWFuICogbnJfc2FtcGxlc2AgcmF0aGVyIHRoYW4gY2FsbGluZyBgYmxrX3JxX3N0YXRfc3VtKClgLCB3aGljaCBleHBlY3RzIHBlci1DUFUgdW5hZ2dyZWdhdGVkIHN0YXRzIHdpdGggYHNyYy1cdTAwM2ViYXRjaGAgc2V0LlxuXG5BbGwgc3RydWN0dXJlcyBpbnZvbHZlZCAoc3VjaCBhcyB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbGF0ZW5jeV9zdGF0IHN0YXRgIGluIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbGF0ZW5jeV9zdGF0X2luaXQoKWAgcHJpb3IgdG8gYWNjZXNzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG8gbm90IG1vZGlmeSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdXNlciBBQkkgYm91bmRhcmllcywgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3ZGQ3NzQ5MWU4NzY2MWEyODNmZjcxYTEzNjcxZjI3YzA2OGIxY2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jCmluZGV4IDJjYWE3OWEwMDhhZDEuLjIyM2QzYTVlMmJmMWMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstaW9sYXRlbmN5LmMKQEAgLTIxNiw2ICYjNDM7MjE2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwKIAkJYmxrX3JxX3N0YXRfc3VtKCZhbXA7c3VtLSZndDtycXMsICZhbXA7c3RhdC0mZ3Q7cnFzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFscwomIzQzOyAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy0mZ3Q7YmF0Y2gsIHdoaWNoIGlzIDAKJiM0MzsgKiBoZXJlLiBUaGUgb3ZlcmZsb3cgY2hlY2sgYWxzbyByZWplY3RzIHRoZSAwIHNhbXBsZXMgY2FzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KQomIzQzO3sKJiM0MzsJaWYgKGlvbGF0LSZndDtzc2QpIHsKJiM0MzsJCXN1bS0mZ3Q7cHMudG90YWwgJiM0Mzs9IHN0YXQtJmd0O3BzLnRvdGFsOwomIzQzOwkJc3VtLSZndDtwcy5taXNzZWQgJiM0Mzs9IHN0YXQtJmd0O3BzLm1pc3NlZDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChzdW0tJmd0O3Jxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtJmd0O3Jxcy5ucl9zYW1wbGVzICZsdDs9CiYjNDM7CQkgICAgc3VtLSZndDtycXMubnJfc2FtcGxlcykKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQlzdW0tJmd0O3Jxcy5tZWFuID0gZGl2X3U2NChzdW0tJmd0O3Jxcy5tZWFuICogc3VtLSZndDtycXMubnJfc2FtcGxlcyAmIzQzOwomIzQzOwkJCQkJc3RhdC0mZ3Q7cnFzLm1lYW4gKiBzdGF0LSZndDtycXMubnJfc2FtcGxlcywKJiM0MzsJCQkJCXN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMgJiM0Mzsgc3RhdC0mZ3Q7cnFzLm5yX3NhbXBsZXMpOwomIzQzOwkJc3VtLSZndDtycXMubWluID0gbWluKHN1bS0mZ3Q7cnFzLm1pbiwgc3RhdC0mZ3Q7cnFzLm1pbik7CiYjNDM7CQlzdW0tJmd0O3Jxcy5tYXggPSBtYXgoc3VtLSZndDtycXMubWF4LCBzdGF0LSZndDtycXMubWF4KTsKJiM0MzsJCXN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMgJiM0Mzs9IHN0YXQtJmd0O3Jxcy5ucl9zYW1wbGVzOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsCiAJCQkJCSAgICB1NjQgcmVxX3RpbWUpCiB7CkBAIC01NDcsNyAmIzQzOzU3Miw3IEBAIHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCB1NjQgbm93KQogCS8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtsYXRfaW5mby0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JbGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQsICZhbXA7c3RhdCk7CiYjNDM7CWxhdGVuY3lfc3RhdF9tZXJnZShpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQsICZhbXA7c3RhdCk7CiAJbGF0X2luZm8tJmd0O25yX3NhbXBsZXMgLT0gaW9sYXQtJmd0O25yX3NhbXBsZXM7CiAJbGF0X2luZm8tJmd0O25yX3NhbXBsZXMgJiM0Mzs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCAmYW1wO2lvbGF0LSZndDtjdXJfc3RhdCk7CiAJaW9sYXQtJmd0O25yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTi9LQVNBTiBOZWVkcyBmb3IgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGluIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIHdhcnJhbnRzIGEgc3BlY2lmaWMgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBhIHRyaWFnZSBzaXR1YXRpb24sIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgaW5jcmVhc2luZyB0aG9zZSByaXNrcz8gSSYjMzk7bSBhcHByb2FjaGluZyB0aGlzIHdpdGggYSBzYWZldHktZmlyc3QgbWluZHNldC4gSXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgZW5naW5lZXJpbmcgYW5kIHRlc3RpbmcgdGFzaywgc28gbGV0JiMzOTtzIGdldCBpdCByaWdodC4KClRoaXMgaXMgYSBwcmV0dHkgYmVuaWduIHJlcXVlc3Qgb3ZlcmFsbCwgc28gSeKAmW0gZ29pbmcgdG8gY29uc2lkZXIgdGhpcyBhIHNhZmUgZnVsZmlsbC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBicmVhayBvdXQgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgaWRlbnRpZnkgaWYgdGhlcmUmIzM5O3MgYW55IG5ldyBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIHBvaW50ZXIgYXNzaWdubWVudHMsIGFuZCB1c2VzIG9mIGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlYWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzay4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFxuIDUyMTpcdFx0cmVxX3RpbWUgPSBub3cgLSBzdGFydDtcbiA1MjI6XHRcbiA1MjM6XHRcdC8qXG4gNTI0Olx0XHQgKiBXZSBkb24mIzM5O3Qgd2FudCB0byBjb3VudCBpc3N1ZV9hc19yb290IGJpbyYjMzk7cyBpbiB0aGUgY2dyb3VwcyBsYXRlbmN5XG4gNTI1Olx0XHQgKiBzdGF0aXN0aWNzIGFzIGl0IGNvdWxkIHNrZXcgdGhlIG51bWJlcnMgZG93bndhcmRzLlxuIDUyNjpcdFx0ICovXG4gNTI3Olx0XHRpZiAodW5saWtlbHkoaXNzdWVfYXNfcm9vdCBcdTAwMjZcdTAwMjYgaW9sYXQtXHUwMDNlbWF4X2RlcHRoICE9IFVJTlRfTUFYKSkge1xuIDUyODpcdFx0XHR1NjQgc3ViID0gaW9sYXQtXHUwMDNlbWluX2xhdF9uc2VjO1xuIDUyOTpcdFx0XHRpZiAocmVxX3RpbWUgXHUwMDNjIHN1YilcbiA1MzA6XHRcdFx0XHRibGtjZ19hZGRfZGVsYXkobGF0X3RvX2Jsa2coaW9sYXQpLCBub3csIHN1YiAtIHJlcV90aW1lKTtcbiA1MzE6XHRcdFx0cmV0dXJuO1xuIDUzMjpcdFx0fVxuIDUzMzpcdFxuIDUzNDpcdFx0bGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKGlvbGF0LCByZXFfdGltZSk7XG4gNTM1Olx0fVxuIDUzNjpcdFxuIDUzNzpcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9BREpVU1RfVElNRSAoNTAwICogTlNFQ19QRVJfTVNFQylcbiA1Mzg6XHQjZGVmaW5lIEJMS0lPTEFURU5DWV9NSU5fR09PRF9TQU1QTEVTIDVcbiA1Mzk6XHRcbiA1NDA6XHRzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbiA1NDE6XHR7XG4gNTQyOlx0XHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBsYXRfdG9fYmxrZyhpb2xhdCk7XG4gNTQzOlx0XHRzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqcGFyZW50O1xuIDU0NDpcdFx0c3RydWN0IGNoaWxkX2xhdGVuY3lfaW5mbyAqbGF0X2luZm87XG4gNTQ1Olx0XHRzdHJ1Y3QgbGF0ZW5jeV9zdGF0IHN0YXQ7XG4gNTQ2Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDU0NzpcdFx0aW50IGNwdTtcbiA1NDg6XHRcbiA1NDk6XHRcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBcdTAwMjZzdGF0KTtcbiA1NTA6XHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuIDU1MTpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuIDU1MjpcdFx0XHRzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzO1xuIDU1MzpcdFx0XHRzID0gcGVyX2NwdV9wdHIoaW9sYXQtXHUwMDNlc3RhdHMsIGNwdSk7XG4gNTU0Olx0XHRcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFx1MDAyNnN0YXQsIHMpO1xuIDU1NTpcdFx0XHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgcyk7XG4gNTU2Olx0XHR9XG4gNTU3Olx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIDU1ODpcdFxuIDU1OTpcdFx0cGFyZW50ID0gYmxrZ190b19sYXQoYmxrZy1cdTAwM2VwYXJlbnQpO1xuIDU2MDpcdFx0aWYgKCFwYXJlbnQpXG4gNTYxOlx0XHRcdHJldHVybjtcbiA1NjI6XHRcbiA1NjM6XHRcdGxhdF9pbmZvID0gXHUwMDI2cGFyZW50LVx1MDAzZWNoaWxkX2xhdDtcbiA1NjQ6XHRcbiA1NjU6XHRcdGlvbGF0X3VwZGF0ZV90b3RhbF9sYXRfYXZnKGlvbGF0LCBcdTAwMjZzdGF0KTtcbiA1NjY6XHRcbiA1Njc6XHRcdC8qIEV2ZXJ5dGhpbmcgaXMgb2sgYW5kIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGFkanVzdCB0aGUgc2NhbGUuICovXG4gNTY4Olx0XHRpZiAobGF0ZW5jeV9zdW1fb2soaW9sYXQsIFx1MDAyNnN0YXQpIFx1MDAyNlx1MDAyNlxuIDU2OTpcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxhdF9pbmZvLVx1MDAzZXNjYWxlX2Nvb2tpZSkgPT0gREVGQVVMVF9TQ0FMRV9DT09LSUUpXG4gNTcwOlx0XHRcdHJldHVybjtcbiA1NzE6XHRcbiA1NzI6XHRcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXG4gNTczOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsYXRfaW5mby1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gNTc0Olx0XG4gNTc1Olx0XHRsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0LCBcdTAwMjZzdGF0KTtcbiA1NzY6XHRcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXHUwMDNlbnJfc2FtcGxlcztcbiA1Nzc6XHRcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCk7XG4gNTc4Olx0XHRpb2xhdC1cdTAwM2Vucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiA1Nzk6XHRcbiA1ODA6XHRcdGlmICgobGF0X2luZm8tXHUwMDNlbGFzdF9zY2FsZV9ldmVudCBcdTAwM2U9IG5vdyB8fFxuIDU4MTpcdFx0ICAgIG5vdyAtIGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgXHUwMDNjIEJMS0lPTEFURU5DWV9NSU5fQURKVVNUX1RJTUUpKVxuIDU4MjpcdFx0XHRnb3RvIG91dDtcbiA1ODM6XHRcbiA1ODQ6XHRcdGlmIChsYXRlbmN5X3N1bV9vayhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpIFx1MDAyNlx1MDAyNlxuIDU4NTpcdFx0ICAgIGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcdTAwMjZzdGF0KSkge1xuIDU4NjpcdFx0XHRpZiAobGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KSBcdTAwM2NcbiA1ODc6XHRcdFx0ICAgIEJMS0lPTEFURU5DWV9NSU5fR09PRF9TQU1QTEVTKVxuIDU4ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDU4OTpcdFx0XHRpZiAobGF0X2luZm8tXHUwMDNlc2NhbGVfZ3JwID09IGlvbGF0KSB7XG4gNTkwOlx0XHRcdFx0bGF0X2luZm8tXHUwMDNlbGFzdF9zY2FsZV9ldmVudCA9IG5vdztcbiA1OTE6XHRcdFx0XHRzY2FsZV9jb29raWVfY2hhbmdlKGlvbGF0LVx1MDAzZWJsa2lvbGF0LCBsYXRfaW5mbywgdHJ1ZSk7XG4gNTkyOlx0XHRcdH1cbiA1OTM6XHRcdH0gZWxzZSBpZiAobGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0ID09IDAgfHxcbiA1OTQ6XHRcdFx0ICAgbGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0IFx1MDAzZT0gaW9sYXQtXHUwMDNlbWluX2xhdF9uc2VjKSB7XG4gNTk1Olx0XHRcdGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XG4gNTk2Olx0XHRcdGlmICghbGF0X2luZm8tXHUwMDNlc2NhbGVfZ3JwIHx8XG4gNTk3Olx0XHRcdCAgICBsYXRfaW5mby1cdTAwM2VzY2FsZV9sYXQgXHUwMDNlIGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYykge1xuIDU5ODpcdFx0XHRcdFdSSVRFX09OQ0UobGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0LCBpb2xhdC1cdTAwM2VtaW5fbGF0X25zZWMpO1xuIDU5OTpcdFx0XHRcdGxhdF9pbmZvLVx1MDAzZXNjYWxlX2dycCA9IGlvbGF0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIExhdGVuY3kgU3RhdGlzdGljcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBsYXRlbmN5IHRyYWNraW5nIGlzIGltcGxlbWVudGVkLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgY29yZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnM6IHNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgbGF0ZW5jeV9zdGF0X2luaXRgLCBgbGF0ZW5jeV9zdGF0X3N1bWAsIGBibGtfcnFfc3RhdF9zdW1gLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBsYXRlbmN5X3N0YXRgIHN0cnVjdCBpdHNlbGYuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGVuLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gTGluZXMgMTUwLTI1MCBvZiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29udGV4dCBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBJJiMzOTttIGFmdGVyLCB3aGVyZSBJIGNhbiBmb2N1cyBvbiBkYXRhIHN0cnVjdHVyZXMgYW5kIHdoZXJlIHN0YXRzIGFyZSBjb2xsZWN0ZWQuIFRoaXMgc2hvdWxkIHJlZnJlc2ggbXkga25vd2xlZGdlIG9uIHRoZSBsYXRlbmN5IG1lYXN1cmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0XHQvKiB0b3RhbCBydW5uaW5nIGF2ZXJhZ2Ugb2Ygb3VyIGlvIGxhdGVuY3kuICovXG4gMTUyOlx0XHR1NjQgbGF0X2F2ZztcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIE91ciBjdXJyZW50IG51bWJlciBvZiBJTyYjMzk7cyBmb3IgdGhlIGxhc3Qgc3VtbWF0aW9uLiAqL1xuIDE1NTpcdFx0dTY0IG5yX3NhbXBsZXM7XG4gMTU2Olx0XG4gMTU3Olx0XHRib29sIHNzZDtcbiAxNTg6XHRcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gY2hpbGRfbGF0O1xuIDE1OTpcdH07XG4gMTYwOlx0XG4gMTYxOlx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX1dJTl9TSVpFICgxMDAgKiBOU0VDX1BFUl9NU0VDKVxuIDE2MjpcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01BWF9XSU5fU0laRSBOU0VDX1BFUl9TRUNcbiAxNjM6XHQvKlxuIDE2NDpcdCAqIFRoZXNlIGFyZSB0aGUgY29uc3RhbnRzIHVzZWQgdG8gZmFrZSB0aGUgZml4ZWQtcG9pbnQgbW92aW5nIGF2ZXJhZ2VcbiAxNjU6XHQgKiBjYWxjdWxhdGlvbiBqdXN0IGxpa2UgbG9hZCBhdmVyYWdlLiAgVGhlIGNhbGwgdG8gY2FsY19sb2FkKCkgZm9sZHNcbiAxNjY6XHQgKiAoRklYRURfMSAoMjA0OCkgLSBleHBfZmFjdG9yKSAqIG5ld19zYW1wbGUgaW50byBsYXRfYXZnLiAgVGhlIHNhbXBsaW5nXG4gMTY3Olx0ICogd2luZG93IHNpemUgaXMgYnVja2V0ZWQgdG8gdHJ5IHRvIGFwcHJveGltYXRlbHkgY2FsY3VsYXRlIGF2ZXJhZ2VcbiAxNjg6XHQgKiBsYXRlbmN5IHN1Y2ggdGhhdCAxL2V4cCAoZGVjYXkgcmF0ZSkgaXMgWzEgbWluLCAyLjUgbWluKSB3aGVuIHdpbmRvd3NcbiAxNjk6XHQgKiBlbGFwc2UgaW1tZWRpYXRlbHkuICBOb3RlLCB3aW5kb3dzIG9ubHkgZWxhcHNlIHdpdGggSU8gYWN0aXZpdHkuICBJZGxlXG4gMTcwOlx0ICogcGVyaW9kcyBleHRlbmQgdGhlIG1vc3QgcmVjZW50IHdpbmRvdy5cbiAxNzE6XHQgKi9cbiAxNzI6XHQjZGVmaW5lIEJMS0lPTEFURU5DWV9OUl9FWFBfRkFDVE9SUyA1XG4gMTczOlx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfRVhQX0JVQ0tFVF9TSVpFIChCTEtJT0xBVEVOQ1lfTUFYX1dJTl9TSVpFIC8gXFxcbiAxNzQ6XHRcdFx0XHRcdCAgICAgIChCTEtJT0xBVEVOQ1lfTlJfRVhQX0ZBQ1RPUlMgLSAxKSlcbiAxNzU6XHRzdGF0aWMgY29uc3QgdTY0IGlvbGF0ZW5jeV9leHBfZmFjdG9yc1tCTEtJT0xBVEVOQ1lfTlJfRVhQX0ZBQ1RPUlNdID0ge1xuIDE3NjpcdFx0MjA0NSwgLy8gZXhwKDEvNjAwKSAtIDYwMCBzYW1wbGVzXG4gMTc3Olx0XHQyMDM5LCAvLyBleHAoMS8yNDApIC0gMjQwIHNhbXBsZXNcbiAxNzg6XHRcdDIwMzEsIC8vIGV4cCgxLzEyMCkgLSAxMjAgc2FtcGxlc1xuIDE3OTpcdFx0MjAyMywgLy8gZXhwKDEvODApICAtIDgwIHNhbXBsZXNcbiAxODA6XHRcdDIwMTQsIC8vIGV4cCgxLzYwKSAgLSA2MCBzYW1wbGVzXG4gMTgxOlx0fTtcbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpwZF90b19sYXQoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxuIDE4NDpcdHtcbiAxODU6XHRcdHJldHVybiBwZCA/IGNvbnRhaW5lcl9vZihwZCwgc3RydWN0IGlvbGF0ZW5jeV9ncnAsIHBkKSA6IE5VTEw7XG4gMTg2Olx0fVxuIDE4NzpcdFxuIDE4ODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmJsa2dfdG9fbGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZylcbiAxODk6XHR7XG4gMTkwOlx0XHRyZXR1cm4gcGRfdG9fbGF0KGJsa2dfdG9fcGQoYmxrZywgXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSkpO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqbGF0X3RvX2Jsa2coc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0KVxuIDE5NDpcdHtcbiAxOTU6XHRcdHJldHVybiBwZF90b19ibGtnKFx1MDAyNmlvbGF0LVx1MDAzZXBkKTtcbiAxOTY6XHR9XG4gMTk3Olx0XG4gMTk4Olx0c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9pbml0KHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiAxOTk6XHRcdFx0XHRcdCAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiAyMDA6XHR7XG4gMjAxOlx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjAyOlx0XHRcdHN0YXQtXHUwMDNlcHMudG90YWwgPSAwO1xuIDIwMzpcdFx0XHRzdGF0LVx1MDAzZXBzLm1pc3NlZCA9IDA7XG4gMjA0Olx0XHR9IGVsc2VcbiAyMDU6XHRcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG4gMjA2Olx0fVxuIDIwNzpcdFxuIDIwODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiAyMDk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4gMjEwOlx0XHRcdFx0XHQgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiAyMTE6XHR7XG4gMjEyOlx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjEzOlx0XHRcdHN1bS1cdTAwM2Vwcy50b3RhbCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy50b3RhbDtcbiAyMTQ6XHRcdFx0c3VtLVx1MDAzZXBzLm1pc3NlZCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy5taXNzZWQ7XG4gMjE1Olx0XHR9IGVsc2VcbiAyMTY6XHRcdFx0YmxrX3JxX3N0YXRfc3VtKFx1MDAyNnN1bS1cdTAwM2VycXMsIFx1MDAyNnN0YXQtXHUwMDNlcnFzKTtcbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0LypcbiAyMjA6XHQgKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXG4gMjIxOlx0ICogKG1lYW4gKiBucl9zYW1wbGVzKTsgYmxrX3JxX3N0YXRfc3VtKCkgcmVhZHMgc3JjLVx1MDAzZWJhdGNoLCB3aGljaCBpcyAwXG4gMjIyOlx0ICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXG4gMjIzOlx0ICovXG4gMjI0Olx0c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9tZXJnZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gMjI1Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4gMjI2Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxuIDIyNzpcdHtcbiAyMjg6XHRcdGlmIChpb2xhdC1cdTAwM2Vzc2QpIHtcbiAyMjk6XHRcdFx0c3VtLVx1MDAzZXBzLnRvdGFsICYjNDM7PSBzdGF0LVx1MDAzZXBzLnRvdGFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTA0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBCbG9jayBSZXF1ZXN0IFN0YXRpc3RpY3MqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aG9zZSBibG9jayByZXF1ZXN0IHN0YXRpc3RpY3MgZnVuY3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBxdWljayBvdmVydmlldy4gSSB0aGluayBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgdGhlIGRlZmluaXRpb25zIGFuZCBhbnkgb2J2aW91cyBjYWxscyB0byBib3RoIGBibGtfcnFfc3RhdF9pbml0YCBhbmQgYGJsa19ycV9zdGF0X3N1bWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBibG9jayBsYXllci4gSXQmIzM5O3MgYSBzb2xpZCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0LiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGludG8gdGhlIG1vcmUgZGV0YWlsZWQgY29kZSBhcyByZXF1aXJlZCwgbGlrZWx5IHVzaW5nIHRoZSBvdXRwdXQgb2YgYGdyZXBwZXJgIGFzIGEganVtcGluZy1vZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19ycV9zdGF0XyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmM9MTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNC1cdH0gZWxzZVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIwNTpcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA2LX1cbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjA4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE1LVx0fSBlbHNlXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjE2Olx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2c3VtLVx1MDAzZXJxcywgXHUwMDI2c3RhdC1cdTAwM2VycXMpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIxNy19XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIyMC0gKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjIxOiAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIyMi0gKiBoZXJlLiBUaGUgb3ZlcmZsb3cgY2hlY2sgYWxzbyByZWplY3RzIHRoZSAwIHNhbXBsZXMgY2FzZS5cbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNTItXHR9IGVsc2VcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyNTM6XHRcdGJsa19ycV9zdGF0X2FkZChcdTAwMjZzdGF0LVx1MDAzZXJxcywgcmVxX3RpbWUpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI1NC1cdHB1dF9jcHVfcHRyKHN0YXQpO1xuLS1cbmJsb2NrL2Jsay1zdGF0LmM9MTQ9c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XG4tLVxuYmxvY2svYmxrLXN0YXQuYy0xOS1cbmJsb2NrL2Jsay1zdGF0LmM6MjA6dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbmJsb2NrL2Jsay1zdGF0LmMtMjEte1xuLS1cbmJsb2NrL2Jsay1zdGF0LmMtMjctLyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbiYjMzk7dCBpbml0aWFsaXplZCAqL1xuYmxvY2svYmxrLXN0YXQuYzoyODp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXG5ibG9jay9ibGstc3RhdC5jLTI5LXtcbi0tXG5ibG9jay9ibGstc3RhdC5jLTQxLVxuYmxvY2svYmxrLXN0YXQuYzo0Mjp2b2lkIGJsa19ycV9zdGF0X2FkZChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQsIHU2NCB2YWx1ZSlcbmJsb2NrL2Jsay1zdGF0LmMtNDMte1xuLS1cbmJsb2NrL2Jsay1zdGF0LmM9NTA9dm9pZCBibGtfc3RhdF9hZGQoc3RydWN0IHJlcXVlc3QgKnJxLCB1NjQgbm93KVxuLS1cbmJsb2NrL2Jsay1zdGF0LmMtNzAtXHRcdHN0YXQgPSBcdTAwMjZwZXJfY3B1X3B0cihjYi1cdTAwM2VjcHVfc3RhdCwgY3B1KVtidWNrZXRdO1xuYmxvY2svYmxrLXN0YXQuYzo3MTpcdFx0YmxrX3JxX3N0YXRfYWRkKHN0YXQsIHZhbHVlKTtcbmJsb2NrL2Jsay1zdGF0LmMtNzItXHR9XG4tLVxuYmxvY2svYmxrLXN0YXQuYz03Nz1zdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5ibG9jay9ibGstc3RhdC5jLTgzLVx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIGNiLVx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCYjNDM7JiM0MzspXG5ibG9jay9ibGstc3RhdC5jOjg0Olx0XHRibGtfcnFfc3RhdF9pbml0KFx1MDAyNmNiLVx1MDAzZXN0YXRbYnVja2V0XSk7XG5ibG9jay9ibGstc3RhdC5jLTg1LVxuLS1cbmJsb2NrL2Jsay1zdGF0LmMtOTAtXHRcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFx1MDAzYyBjYi1cdTAwM2VidWNrZXRzOyBidWNrZXQmIzQzOyYjNDM7KSB7XG5ibG9jay9ibGstc3RhdC5jOjkxOlx0XHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZjYi1cdTAwM2VzdGF0W2J1Y2tldF0sIFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xuYmxvY2svYmxrLXN0YXQuYzo5MjpcdFx0XHRibGtfcnFfc3RhdF9pbml0KFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xuYmxvY2svYmxrLXN0YXQuYy05My1cdFx0fVxuLS1cbmJsb2NrL2Jsay1zdGF0LmM9MTMyPXZvaWQgYmxrX3N0YXRfYWRkX2NhbGxiYWNrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1zdGF0LmMtMTQzLVx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgY2ItXHUwMDNlYnVja2V0czsgYnVja2V0JiM0MzsmIzQzOylcbmJsb2NrL2Jsay1zdGF0LmM6MTQ0Olx0XHRcdGJsa19ycV9zdGF0X2luaXQoXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XG5ibG9jay9ibGstc3RhdC5jLTE0NS1cdH1cbi0tXG5ibG9jay9ibGstc3RhdC5oPTE2Nz1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3N0YXRfYWN0aXZhdGVfbXNlY3Moc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYixcbi0tXG5ibG9jay9ibGstc3RhdC5oLTE3Mi1cbmJsb2NrL2Jsay1zdGF0Lmg6MTczOnZvaWQgYmxrX3JxX3N0YXRfYWRkKHN0cnVjdCBibGtfcnFfc3RhdCAqLCB1NjQpO1xuYmxvY2svYmxrLXN0YXQuaDoxNzQ6dm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICosIHN0cnVjdCBibGtfcnFfc3RhdCAqKTtcbmJsb2NrL2Jsay1zdGF0Lmg6MTc1OnZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKik7XG5ibG9jay9ibGstc3RhdC5oLTE3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBibG9jay9ibGstc3RhdC5jYCBjb2RlOgoKKipEaXZpbmcgaW50byBibG9jay9ibGstc3RhdC5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBibG9jay9ibGstc3RhdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGtlZXBzIHRyYWNrIG9mIGFuZCBwcmVzZW50cyBibG9jayBkZXZpY2Ugc3RhdGlzdGljcy4gTXkgbWFpbiBmb2N1cyBoZXJlIHdpbGwgYmUgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugc3RhdHMgYXJlICpjb2xsZWN0ZWQqLCAqYWdncmVnYXRlZCosIGFuZCB1bHRpbWF0ZWx5ICpleHBvc2VkKiB0byB1c2Vyc3BhY2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgZm9yIGJsb2NrIGRldmljZSBzdGF0aXN0aWNzLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHJlYWQsIHdyaXRlLCBhbmQgbWFuaXB1bGF0ZSB0aGVtLiBUaGlzIHNob3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIEkvTyBvcGVyYXRpb24gY291bnRzLCB0cmFuc2ZlciBzaXplcywgYW5kIGxhdGVuY2llcywgYWxsIG9yZ2FuaXplZCBieSBkZXZpY2UgYW5kIHBvdGVudGlhbGx5IGJ5IHF1ZXVlLiBJdCYjMzk7cyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBzb21lIGdsb2JhbCBjb3VudGVycyBhbmQgdGhlbiBkZXZpY2Utc3BlY2lmaWMgb25lcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGNvbmN1cnJlbmN5IOKAkyB0aGlzIGlzIHRoZSBrZXJuZWwsIGFmdGVyIGFsbC4gVGhlcmUgKmhhcyogdG8gYmUgbG9ja2luZyBpbnZvbHZlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTtsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSBibG9jayBsYXllciYjMzk7cyByZXF1ZXN0IHF1ZXVlLCB0aGUgdmFyaW91cyBiaW8gcGF0aHMsIGFuZCBhbnkgcGVyLWRldmljZSBvciBwZXItcXVldWUgaW5mb3JtYXRpb24uIFRoZSBrZXJuZWwmIzM5O3MgcHJvY2ZzIG9yIHN5c2ZzIGludGVyZmFjZXMgd2lsbCBwcm9iYWJseSBiZSBpbnZvbHZlZCBzb21ld2hlcmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlzdGljcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmVzZW50ZWQgdG8gdXNlci1zcGFjZSB0b29scyBsaWtlIGBpb3N0YXRgIG9yIGBibGtzdGF0YC4gS25vd2luZyB0aGUgZGV0YWlscyB3aWxsIGhlbHAgbWUgZmluZCBhbmQgaW50ZXJwcmV0IHRoZSByaWdodCBkYXRhIHRvIGNvbGxlY3QgYW5kIG1vbml0b3IgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstc3RhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKlxuICAgMzpcdCAqIEJsb2NrIHN0YXQgdHJhY2tpbmcgY29kZVxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChDKSAyMDE2IEplbnMgQXhib2VcbiAgIDY6XHQgKi9cbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFwmIzM0O2Jsay1zdGF0LmhcJiMzNDtcbiAgMTE6XHQjaW5jbHVkZSBcJiMzNDtibGstbXEuaFwmIzM0O1xuICAxMjpcdCNpbmNsdWRlIFwmIzM0O2Jsay5oXCYjMzQ7XG4gIDEzOlx0XG4gIDE0Olx0c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XG4gIDE1Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGNhbGxiYWNrcztcbiAgMTY6XHRcdHNwaW5sb2NrX3QgbG9jaztcbiAgMTc6XHRcdGludCBhY2NvdW50aW5nO1xuICAxODpcdH07XG4gIDE5Olx0XG4gIDIwOlx0dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbiAgMjE6XHR7XG4gIDIyOlx0XHRzdGF0LVx1MDAzZW1pbiA9IC0xVUxMO1xuICAyMzpcdFx0c3RhdC1cdTAwM2VtYXggPSBzdGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBzdGF0LVx1MDAzZW1lYW4gPSAwO1xuICAyNDpcdFx0c3RhdC1cdTAwM2ViYXRjaCA9IDA7XG4gIDI1Olx0fVxuICAyNjpcdFxuICAyNzpcdC8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKi9cbiAgMjg6XHR2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXG4gIDI5Olx0e1xuICAzMDpcdFx0aWYgKGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7IHNyYy1cdTAwM2Vucl9zYW1wbGVzIFx1MDAzYz0gZHN0LVx1MDAzZW5yX3NhbXBsZXMpXG4gIDMxOlx0XHRcdHJldHVybjtcbiAgMzI6XHRcbiAgMzM6XHRcdGRzdC1cdTAwM2VtaW4gPSBtaW4oZHN0LVx1MDAzZW1pbiwgc3JjLVx1MDAzZW1pbik7XG4gIDM0Olx0XHRkc3QtXHUwMDNlbWF4ID0gbWF4KGRzdC1cdTAwM2VtYXgsIHNyYy1cdTAwM2VtYXgpO1xuICAzNTpcdFxuICAzNjpcdFx0ZHN0LVx1MDAzZW1lYW4gPSBkaXZfdTY0KHNyYy1cdTAwM2ViYXRjaCAmIzQzOyBkc3QtXHUwMDNlbWVhbiAqIGRzdC1cdTAwM2Vucl9zYW1wbGVzLFxuICAzNzpcdFx0XHRcdFx0ZHN0LVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzsgc3JjLVx1MDAzZW5yX3NhbXBsZXMpO1xuICAzODpcdFxuICAzOTpcdFx0ZHN0LVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzs9IHNyYy1cdTAwM2Vucl9zYW1wbGVzO1xuICA0MDpcdH1cbiAgNDE6XHRcbiAgNDI6XHR2b2lkIGJsa19ycV9zdGF0X2FkZChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQsIHU2NCB2YWx1ZSlcbiAgNDM6XHR7XG4gIDQ0Olx0XHRzdGF0LVx1MDAzZW1pbiA9IG1pbihzdGF0LVx1MDAzZW1pbiwgdmFsdWUpO1xuICA0NTpcdFx0c3RhdC1cdTAwM2VtYXggPSBtYXgoc3RhdC1cdTAwM2VtYXgsIHZhbHVlKTtcbiAgNDY6XHRcdHN0YXQtXHUwMDNlYmF0Y2ggJiM0Mzs9IHZhbHVlO1xuICA0NzpcdFx0c3RhdC1cdTAwM2Vucl9zYW1wbGVzJiM0MzsmIzQzOztcbiAgNDg6XHR9XG4gIDQ5Olx0XG4gIDUwOlx0dm9pZCBibGtfc3RhdF9hZGQoc3RydWN0IHJlcXVlc3QgKnJxLCB1NjQgbm93KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTk3CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDEzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQmxvY2sgSS9PIExhdGVuY3kgQWdncmVnYXRpb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBibGstaW9sYXRlbmN5LmNgLCBpdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiBvZiBtZWFuIGxhdGVuY2llcyBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agd2FzIGZsYXdlZC4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIG1ldGhvZCB1c2VkIGBsYXRlbmN5X3N0YXRfc3VtYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgYmxrX3JxX3N0YXRfc3VtYC4gVGhlIHByb2JsZW0gYXJvc2UgYmVjYXVzZSBgYmxrX3JxX3N0YXRfc3VtYCBjYWxjdWxhdGVkIHRoZSBtZWFuIGluY29ycmVjdGx5IHdoZW4gYWdncmVnYXRpbmcgcHJlLWNhbGN1bGF0ZWQgcGVyLUNQVSBzdGF0aXN0aWNzLiBUaGUgYGJhdGNoYCBmaWVsZCB3aXRoaW4gYHN0YXQtJmd0O3Jxc2Agd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcG9wdWxhdGVkIGR1cmluZyB0aGUgcGVyLUNQVSBhZ2dyZWdhdGlvbiBsb29wLCBzbyBpdCByZW1haW5lZCB6ZXJvLiBUaGlzIGxlZCB0byBhbiBpbmFjY3VyYXRlIG1lYW4gY2FsY3VsYXRpb24uIFRoZSBwYXRjaCBjb3JyZWN0bHkgY2FsY3VsYXRlcyB0aGUgbWVhbiB1c2luZyB0aGUgYG1lYW4gKiBucl9zYW1wbGVzYCBvZiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgc3RhdGlzdGljcywgYnkgaW50cm9kdWNpbmcgYGxhdGVuY3lfc3RhdF9tZXJnZWAuCgpOb3csIHJlZ2FyZGluZyBLTVNBTiwgbGV0JiMzOTtzIGVuc3VyZSB3ZSBhcmUgc2FmZS4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlLCBhbmQgaGVyZSYjMzk7cyBteSByZWFzb25pbmcuIFRoZSBgc3RhdGAgdmFyaWFibGUsIGNydWNpYWwgZm9yIHRoZXNlIGNhbGN1bGF0aW9ucywgaXMgc3RhY2stYWxsb2NhdGVkLCBidXQgaXQmIzM5O3MgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdXNpbmcgYGxhdGVuY3lfc3RhdF9pbml0YCBiZWZvcmUgdXNlLiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBsYXRlbmN5X3N0YXRfaW5pdGAgZnVuY3Rpb24gY29ycmVjdGx5IGluaXRpYWxpemVzIGFsbCBmaWVsZHMgKGB0b3RhbGAsIGBtaXNzZWRgLCBgbWluYCwgYG1heGAsIGBucl9zYW1wbGVzYCwgYG1lYW5gLCBhbmQgYGJhdGNoYCkuIFRoaXMgaXMgc29saWQuIEZ1cnRoZXJtb3JlLCB0aGUgYXJpdGhtZXRpYyBpbiBgbGF0ZW5jeV9zdGF0X21lcmdlYCBvcGVyYXRlcyBvbiBpbml0aWFsaXplZCBpbnRlZ2VyIGZpZWxkcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBkZWFsbG9jYXRpb25zLCBvciBhbnkgaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGNoYW5nZSBhbnkgY29kZSB0aGF0OgoxLiAgU2VuZHMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4KMi4gIERlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBpbiBjb25kaXRpb25hbCBsb2dpYy4KMy4gIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgTW9kaWZpZXMgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuCgpUaGUgY2hhbmdlcyBwcmltYXJpbHkgZGVhbCB3aXRoIHRoZSBhZ2dyZWdhdGlvbiAqbG9naWMqIHRvIGVuc3VyZSBwcm9wZXIgY2FsY3VsYXRpb24gb2YgdGhlIG1lYW4gb2YgYWxyZWFkeSBhZ2dyZWdhdGVkIHN0YXRzLCBhbmQgYWxsIHRvdWNoZWQgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgbGlrZSBLQVNBTiwgYW5kIHVuaXQgdGVzdHMsIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLiBTbywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4KCkZpbmFsbHksIHRoZSBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBjbGVhcmx5IHN0YXRlIHRoZSBmaXggZm9yIHRoZSBzdGF0aXN0aWNhbCBhZ2dyZWdhdGlvbiBlcnJvciwgdGhhdCBhbGwgc3RydWN0cyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0IEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZW4sIHdlIGNhbiBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChgYmxrLWlvbGF0ZW5jeS5jYCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgbGF0ZW5jeV9zdGF0X21lcmdlKClgIHRvIG1lcmdlIGFscmVhZHktYWdncmVnYXRlZCBgbGF0ZW5jeV9zdGF0YCBzdHJ1Y3R1cmVzIGJ5IHJlY29uc3RydWN0aW5nIHRoZSB0b3RhbCBsYXRlbmN5IHVzaW5nIGBtZWFuICogbnJfc2FtcGxlc2AgcmF0aGVyIHRoYW4gY2FsbGluZyBgYmxrX3JxX3N0YXRfc3VtKClgLCB3aGljaCBleHBlY3RzIHBlci1DUFUgdW5hZ2dyZWdhdGVkIHN0YXRzIHdpdGggYHNyYy1cdTAwM2ViYXRjaGAgc2V0LlxuXG5BbGwgc3RydWN0dXJlcyBpbnZvbHZlZCAoc3VjaCBhcyB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbGF0ZW5jeV9zdGF0IHN0YXRgIGluIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbGF0ZW5jeV9zdGF0X2luaXQoKWAgcHJpb3IgdG8gYWNjZXNzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG8gbm90IG1vZGlmeSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdXNlciBBQkkgYm91bmRhcmllcywgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWF0aGVtYXRpY2FsIGNhbGN1bGF0aW9uIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXHUwMDNlYmF0Y2hgIHNldC5cblxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMxLjk4MjI5NjMwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjE5NzkzMjg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNcIixcbiAgICBcImJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb1wiLFxuICAgIFwiaW9sYXRlbmN5X3JlY29yZF90aW1lXCIsXG4gICAgXCJpb2xhdGVuY3lfc2V0X2xpbWl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1hdGhlbWF0aWNhbCBjYWxjdWxhdGlvbiBidWcgaW4gdGhlIGJsb2NrIGxheWVyJ3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXFx1MDAzZWJhdGNoYCBzZXQuXFxuXFxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NjozMS45ODIzMDE4OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzIzNzEyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjN2RkNzc0OTFlODc2NjFhMjgzZmY3MWExMzY3MWYyN2MwNjhiMWNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXFxuaW5kZXggMmNhYTc5YTAwOGFkMS4uMjIzZDNhNWUyYmYxYyAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstaW9sYXRlbmN5LmNcXG4rKysgYi9ibG9jay9ibGstaW9sYXRlbmN5LmNcXG5AQCAtMjE2LDYgKzIxNiwzMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuIFxcdFxcdGJsa19ycV9zdGF0X3N1bShcXHUwMDI2c3VtLVxcdTAwM2VycXMsIFxcdTAwMjZzdGF0LVxcdTAwM2VycXMpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXFxuKyAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcXG4rICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxcbit7XFxuK1xcdGlmIChpb2xhdC1cXHUwMDNlc3NkKSB7XFxuK1xcdFxcdHN1bS1cXHUwMDNlcHMudG90YWwgKz0gc3RhdC1cXHUwMDNlcHMudG90YWw7XFxuK1xcdFxcdHN1bS1cXHUwMDNlcHMubWlzc2VkICs9IHN0YXQtXFx1MDAzZXBzLm1pc3NlZDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHN1bS1cXHUwMDNlcnFzLm5yX3NhbXBsZXMgKyBzdGF0LVxcdTAwM2VycXMubnJfc2FtcGxlcyBcXHUwMDNjPVxcbitcXHRcXHQgICAgc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcylcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRzdW0tXFx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXFx1MDAzZXJxcy5tZWFuICogc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcyArXFxuK1xcdFxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZXJxcy5tZWFuICogc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdHN1bS1cXHUwMDNlcnFzLm5yX3NhbXBsZXMgKyBzdGF0LVxcdTAwM2VycXMubnJfc2FtcGxlcyk7XFxuK1xcdFxcdHN1bS1cXHUwMDNlcnFzLm1pbiA9IG1pbihzdW0tXFx1MDAzZXJxcy5taW4sIHN0YXQtXFx1MDAzZXJxcy5taW4pO1xcbitcXHRcXHRzdW0tXFx1MDAzZXJxcy5tYXggPSBtYXgoc3VtLVxcdTAwM2VycXMubWF4LCBzdGF0LVxcdTAwM2VycXMubWF4KTtcXG4rXFx0XFx0c3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcyArPSBzdGF0LVxcdTAwM2VycXMubnJfc2FtcGxlcztcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHU2NCByZXFfdGltZSlcXG4ge1xcbkBAIC01NDcsNyArNTcyLDcgQEAgc3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXFxuIFxcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsYXRfaW5mby1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCwgXFx1MDAyNnN0YXQpO1xcbitcXHRsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsIFxcdTAwMjZpb2xhdC1cXHUwMDNlY3VyX3N0YXQsIFxcdTAwMjZzdGF0KTtcXG4gXFx0bGF0X2luZm8tXFx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXFx1MDAzZW5yX3NhbXBsZXM7XFxuIFxcdGxhdF9pbmZvLVxcdTAwM2Vucl9zYW1wbGVzICs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KTtcXG4gXFx0aW9sYXQtXFx1MDAzZW5yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQxNTM3OTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTI1NDY0NTM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCIsXG4gICAgXCJibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9cIixcbiAgICBcImlvbGF0ZW5jeV9yZWNvcmRfdGltZVwiLFxuICAgIFwiaW9sYXRlbmN5X3NldF9saW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYmxrLWlvbGF0ZW5jeSkgYnkgaW50cm9kdWNpbmcgbGF0ZW5jeV9zdGF0X21lcmdlKCkgdG8gY29ycmVjdGx5IG1lcmdlIGFnZ3JlZ2F0ZWQgc3RhdGlzdGljcyBpbnN0ZWFkIG9mIGludm9raW5nIGJsa19ycV9zdGF0X3N1bSgpIHdoZW4gYWdncmVnYXRpbmcgbGF0ZW5jeSBtZXRyaWNzLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGtlcm5lbCBhcml0aG1ldGljIGFuZCBzdGF0aXN0aWNzIHVwZGF0aW5nIGxvZ2ljIGR1cmluZyBibG9jayBJL08gb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHRocm90dGxpbmcgZXZhbHVhdGlvbi4gRnV6emluZyBjYW4gaGVscCBpZGVudGlmeSBhcml0aG1ldGljIGVkZ2UgY2FzZXMsIGRpdmlzaW9uIGlzc3Vlcywgb3IgbGF0ZW5jeSBjYWxjdWxhdGlvbiByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjN2RkNzc0OTFlODc2NjFhMjgzZmY3MWExMzY3MWYyN2MwNjhiMWNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyBiL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuaW5kZXggMmNhYTc5YTAwOGFkMS4uMjIzZDNhNWUyYmYxYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuKysrIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG5AQCAtMjE2LDYgKzIxNiwzMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gXHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZzdW0tXHUwMDNlcnFzLCBcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG4gfVxuIFxuKy8qXG4rICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xuKyAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxuKyAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfbWVyZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbit7XG4rXHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4rXHRcdHN1bS1cdTAwM2Vwcy50b3RhbCArPSBzdGF0LVx1MDAzZXBzLnRvdGFsO1xuK1x0XHRzdW0tXHUwMDNlcHMubWlzc2VkICs9IHN0YXQtXHUwMDNlcHMubWlzc2VkO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyArIHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMgXHUwMDNjPVxuK1x0XHQgICAgc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzKVxuK1x0XHRcdHJldHVybjtcbitcdFx0c3VtLVx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXHUwMDNlcnFzLm1lYW4gKiBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgK1xuK1x0XHRcdFx0XHRzdGF0LVx1MDAzZXJxcy5tZWFuICogc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcyxcbitcdFx0XHRcdFx0c3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICsgc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcyk7XG4rXHRcdHN1bS1cdTAwM2VycXMubWluID0gbWluKHN1bS1cdTAwM2VycXMubWluLCBzdGF0LVx1MDAzZXJxcy5taW4pO1xuK1x0XHRzdW0tXHUwMDNlcnFzLm1heCA9IG1heChzdW0tXHUwMDNlcnFzLm1heCwgc3RhdC1cdTAwM2VycXMubWF4KTtcbitcdFx0c3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICs9IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXM7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIFx0XHRcdFx0XHQgICAgdTY0IHJlcV90aW1lKVxuIHtcbkBAIC01NDcsNyArNTcyLDcgQEAgc3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXG4gXHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bGF0X2luZm8tXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQsIFx1MDAyNnN0YXQpO1xuK1x0bGF0ZW5jeV9zdGF0X21lcmdlKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG4gXHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzIC09IGlvbGF0LVx1MDAzZW5yX3NhbXBsZXM7XG4gXHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzICs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCk7XG4gXHRpb2xhdC1cdTAwM2Vucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQxNTM4MTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI2NjMxOTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGlzIHBhdGNoIHRhcmdldHMgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbXBhY3QuIFRpbWUgdG8gcHVsbCB1cCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0IGZvciB0aGlzIGtpbmQgb2YgcXVpY2sgaW5zcGVjdGlvbi5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBzZWN0aW9ucyBhcm91bmQgbGluZXMgMjAwLTI1MCBhbmQgNTMwLTU4MCB3aXRoaW4gdGhhdCBmaWxlLiBUaG9zZSByYW5nZXMgb2Z0ZW4gaG9sZCBjcnVjaWFsIGxvZ2ljLCBzbyBJJ2xsIGV4YW1pbmUgdGhlbSBjbG9zZWx5LiBTaW11bHRhbmVvdXNseSwgSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgc2V0dGluZ3MgcmVsYXRlZCB0byBgYmxrLWlvbGF0ZW5jeS5jYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5LiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBiYWNrZ3JvdW5kIHRvIHNlZSB0aGUgcHVycG9zZSBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0MC42ODE3MDM5NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTcyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrLWlvbGF0ZW5jeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbmJsb2NrL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG5ibG9jay9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXFx0Kz0gYmxrLWlvY29zdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjQwLjcyNzI2ODAwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4Mzc4MzAzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCTEtfQ0dST1VQX0lPTEFURU5DWSBpbiB0aGUgQmxvY2sgTGF5ZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYEJMS19DR1JPVVBfSU9MQVRFTkNZYC4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IHBvaW50cyBtZSB0byBgYmxvY2svS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBibG9jayBsYXllciwgYW5kLCBzcGVjaWZpY2FsbHksIGFueXRoaW5nIHRpZWQgdG8gY2dyb3VwcyBhbmQgSS9PIGxhdGVuY3kgd291bGQgbG9naWNhbGx5IHJlc2lkZSB0aGVyZS4gU28sIGxldCdzIGRpdmUgaW50byBgYmxvY2svS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIGFuZCB3ZWxsLWRvY3VtZW50ZWQuIElmIG5vdCwgSSdsbCBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZSB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkZXBlbmRlbmN5IGNoYWluIGVuZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0OS41NjUxMDAzOThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMDI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcXHQrPSBibGstaW9wcmlvLm9cXG5ibG9jay9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpXFx0Kz0gYmxrLWlvbGF0ZW5jeS5vXFxuYmxvY2svTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVxcdCs9IGJsay1pb2Nvc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0OS42MjAyMTM3MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE0MzQ3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQkxLX0NHUk9VUF9JT0xBVEVOQ1kgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgemVybyBpbiBvbiBgYmxvY2svS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBzb3J0cyBvZiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIGZlYXR1cmUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGJsb2NrIGxheWVyIGNvbmZpZ3VyYXRpb24uIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmRpdGlvbmFscyBvciB0cmlzdGF0ZXMgdGhhdCBnb3Zlcm4gd2hlbiBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzIGV2ZW4gcHJlc2VudGVkIGFzIGFuIG9wdGlvbiwgd2hpY2ggd2lsbCBsaWtlbHkgaW52b2x2ZSBvdGhlciBjZ3JvdXAtcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcInJlcXVpcmVzXCIgYW5kIFwiZGVwZW5kcyBvblwiIHN0YXRlbWVudHMsIG9mIGNvdXJzZSwgYnV0IEknbGwgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIGlzICpncm91cGVkKiB3aXRoaW4gdGhlIEtjb25maWcgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBsb2dpY2FsIGdyb3VwaW5ncyBnaXZlcyBtZSBhIGJldHRlciBmZWVsIGZvciB0aGUgZGVzaWduIHBoaWxvc29waHkgYmVoaW5kIHRoZSBtb2R1bGUgaXRzZWxmLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZ3JlYXRlciBibG9jayBJL08gY29udHJvbCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1Mi4wMzQ1NjQzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdGRlcGVuZHMgb24gQkxLX1dCVFxcbiAxMzE6XFx0XFx0aGVscFxcbiAxMzI6XFx0XFx0RW5hYmxlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGJ5IGRlZmF1bHQgZm9yIHJlcXVlc3QtYmFzZWQgYmxvY2sgZGV2aWNlcy5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuIDEzNTpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4gMTM2OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxcbiAxMzc6XFx0XFx0aGVscFxcbiAxMzg6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLmxhdGVuY3kgaW50ZXJmYWNlIGZvciBJTyB0aHJvdHRsaW5nLlxcbiAxMzk6XFx0XFx0VGhlIElPIGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIG1haW50YWluIGF2ZXJhZ2UgSU8gbGF0ZW5jaWVzIGJlbG93XFxuIDE0MDpcXHRcXHR0aGUgY29uZmlndXJlZCBsYXRlbmN5IHRhcmdldCwgdGhyb3R0bGluZyBhbnlib2R5IHdpdGggYSBoaWdoZXIgbGF0ZW5jeVxcbiAxNDE6XFx0XFx0dGFyZ2V0IHRoYW4gdGhlIHZpY3RpbWl6ZWQgZ3JvdXAuXFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdE5vdGUsIHRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGludGVyZmFjZSBhbmQgY291bGQgYmUgY2hhbmdlZCBzb21lZGF5LlxcbiAxNDQ6XFx0XFxuIDE0NTpcXHRjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbiAxNDY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuIDE0NzpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVAgXFx1MDAyNlxcdTAwMjYgTlZNRV9GQ1xcbiAxNDg6XFx0XFx0aGVscFxcbiAxNDk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyB0cmFmZmljIGFjcm9zc1xcbiAxNTA6XFx0XFx0ICBjZ3JvdXAgYXBwbGljYXRpb25zLiBJdCBlbmFibGVzIHRoZSBGYWJyaWMgYW5kIHRoZSBzdG9yYWdlIHRhcmdldHMgdG9cXG4gMTUxOlxcdFxcdCAgaWRlbnRpZnksIG1vbml0b3IsIGFuZCBoYW5kbGUgRkMgdHJhZmZpYyBiYXNlZCBvbiBWTSB0YWdzIGJ5IGluc2VydGluZ1xcbiAxNTI6XFx0XFx0ICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBpbnRvIHRoZSBGQyBmcmFtZS5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjUyLjAzNDYyNTc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1NjUyNTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBCTEtfQ0dST1VQKipcblxuTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGNvbmZpcm1pbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1cnJvdW5kaW5nIGBCTEtfQ0dST1VQYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzIHdoZXJlIEknZCBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBmZWF0dXJlJ3MgdmlzaWJpbGl0eSwgZGVmYXVsdCBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIEtjb25maWcgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBhbnkga2VybmVsIGRldmVsb3Blciwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgZXZlcnl0aGluZyBhYm91dCB0aGlzIHBhcnRpY3VsYXIgc2V0dGluZyBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHByb2plY3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0IGlzIGRlZmluZWQsIGlmIGl0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc2V0dGluZ3MgdGhhdCBhZmZlY3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU1LjA5MTE1NDA3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxODQ2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU1LjEzODM0MzAzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc0ODIxNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBCTEtfQ0dST1VQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQkxLX0NHUk9VUGAuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYWxtb3N0IGFsd2F5cyB0aGUgcmlnaHQgb25lIGZvciB0aGlzIGtpbmQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sLCBpcyB0byBsb29rIGluIGBpbml0L0tjb25maWdgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2Ugd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBsYWlkIG91dCwgd2hlcmUgdGhlIG9wdGlvbnMgYXJlIHByZXNlbnRlZCwgYW5kIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHVzdWFsbHkgc3BlY2lmaWVkLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBpbml0aWFsIGJvb3QgcHJvY2Vzcy4gSXQnbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBCTEtfQ0dST1VQYCBpcyBleHBvc2VkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgKGxpa2VseSBvbiBjZ3JvdXAtcmVsYXRlZCBmZWF0dXJlcyksIGFuZCBwb3RlbnRpYWxseSBldmVuIGJyaWVmIGNvbnRleHR1YWwgY29tbWVudHMuIEnigJltIHRoaW5raW5nIEnigJlsbCBzZWUgY29uZGl0aW9uYWwgbG9naWMgaGVyZSDigJMgd2hldGhlciBpdOKAmXMgYSBkaXJlY3QgYGJvb2xgIG9wdGlvbiwgb3IgcGVyaGFwcyBlbmFibGVkIGJhc2VkIG9uIGFub3RoZXIgZmVhdHVyZSwgbGlrZSB3aGV0aGVyIGNncm91cHMgYXJlIGNvbmZpZ3VyZWQgaW4gZ2VuZXJhbC4gTXkgZ3Vlc3MgaXMgaXQncyBub3QgYSBzdGFuZGFsb25lIG9wdGlvbjsgaXQncyBwcm9iYWJseSBpbnRlcndvdmVuIHdpdGggb3RoZXIgYmxvY2stbGF5ZXIgb3IgY2dyb3VwIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTcuNTEzMTY2OTk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDMwNDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUCRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU3LjU3MzQ3NTk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczNTU4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBCbG9jayBJL08gTGF0ZW5jeSBNZWFzdXJlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBrZXJuZWwgY29kZSBoYW5kbGVzIGJsb2NrIEkvTyBsYXRlbmN5IG1lYXN1cmVtZW50cy4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIG1lcmdpbmcgb2YgbGF0ZW5jeSBzdGF0aXN0aWNzIGFuZCB0aGUgY2hlY2tpbmcgb2YgdGhlIGdhdGhlcmVkIGxhdGVuY2llcy4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbGF0ZW5jeV9zdGF0X21lcmdlYCBmdW5jdGlvbi4gSSBhbnRpY2lwYXRlIGl0IGRlYWxzIHdpdGggY29tYmluaW5nIGxhdGVuY3kgZGF0YSwgcG9zc2libHkgZnJvbSBkaWZmZXJlbnQgQ1BVcyBvciB0aHJlYWRzLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agd29ya3MgLSBpdCBwcm9iYWJseSBpbnZvbHZlcyBzb21lIHRocmVzaG9sZGluZyBvciBhbmFseXNpcyB0byBzZWUgaWYgc29tZXRoaW5nJ3MgYW1pc3MgaW4gdGhlIEkvTyBwZXJmb3JtYW5jZSwgcGVyaGFwcyBsb29raW5nIGZvciBvdXRsaWVycyBvciBpZGVudGlmeWluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTg5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU5Ljg0NzAzODMzOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdGlmIChpb2xhdC1cXHUwMDNlc3NkKSB7XFxuIDIxMzpcXHRcXHRcXHRzdW0tXFx1MDAzZXBzLnRvdGFsICs9IHN0YXQtXFx1MDAzZXBzLnRvdGFsO1xcbiAyMTQ6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy5taXNzZWQgKz0gc3RhdC1cXHUwMDNlcHMubWlzc2VkO1xcbiAyMTU6XFx0XFx0fSBlbHNlXFxuIDIxNjpcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNnN1bS1cXHUwMDNlcnFzLCBcXHUwMDI2c3RhdC1cXHUwMDNlcnFzKTtcXG4gMjE3OlxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0LypcXG4gMjIwOlxcdCAqIE1lcmdlIGFuIGFscmVhZHktYWdncmVnYXRlZCBAc3RhdCBpbnRvIEBzdW0gYnkgcmVjb25zdHJ1Y3RlZCB0b3RhbHNcXG4gMjIxOlxcdCAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcXG4gMjIyOlxcdCAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxcbiAyMjM6XFx0ICovXFxuIDIyNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gMjI1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuIDIyNzpcXHR7XFxuIDIyODpcXHRcXHRpZiAoaW9sYXQtXFx1MDAzZXNzZCkge1xcbiAyMjk6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy50b3RhbCArPSBzdGF0LVxcdTAwM2Vwcy50b3RhbDtcXG4gMjMwOlxcdFxcdFxcdHN1bS1cXHUwMDNlcHMubWlzc2VkICs9IHN0YXQtXFx1MDAzZXBzLm1pc3NlZDtcXG4gMjMxOlxcdFxcdH0gZWxzZSB7XFxuIDIzMjpcXHRcXHRcXHRpZiAoc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcyArIHN0YXQtXFx1MDAzZXJxcy5ucl9zYW1wbGVzIFxcdTAwM2M9XFxuIDIzMzpcXHRcXHRcXHQgICAgc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcylcXG4gMjM0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjM1OlxcdFxcdFxcdHN1bS1cXHUwMDNlcnFzLm1lYW4gPSBkaXZfdTY0KHN1bS1cXHUwMDNlcnFzLm1lYW4gKiBzdW0tXFx1MDAzZXJxcy5ucl9zYW1wbGVzICtcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZXJxcy5tZWFuICogc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXMsXFxuIDIzNzpcXHRcXHRcXHRcXHRcXHRcXHRzdW0tXFx1MDAzZXJxcy5ucl9zYW1wbGVzICsgc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXMpO1xcbiAyMzg6XFx0XFx0XFx0c3VtLVxcdTAwM2VycXMubWluID0gbWluKHN1bS1cXHUwMDNlcnFzLm1pbiwgc3RhdC1cXHUwMDNlcnFzLm1pbik7XFxuIDIzOTpcXHRcXHRcXHRzdW0tXFx1MDAzZXJxcy5tYXggPSBtYXgoc3VtLVxcdTAwM2VycXMubWF4LCBzdGF0LVxcdTAwM2VycXMubWF4KTtcXG4gMjQwOlxcdFxcdFxcdHN1bS1cXHUwMDNlcnFzLm5yX3NhbXBsZXMgKz0gc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXM7XFxuIDI0MTpcXHRcXHR9XFxuIDI0MjpcXHR9XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbiAyNDU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCByZXFfdGltZSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQgPSBnZXRfY3B1X3B0cihpb2xhdC1cXHUwMDNlc3RhdHMpO1xcbiAyNDg6XFx0XFx0aWYgKGlvbGF0LVxcdTAwM2Vzc2QpIHtcXG4gMjQ5OlxcdFxcdFxcdGlmIChyZXFfdGltZSBcXHUwMDNlPSBpb2xhdC1cXHUwMDNlbWluX2xhdF9uc2VjKVxcbiAyNTA6XFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlcHMubWlzc2VkKys7XFxuIDI1MTpcXHRcXHRcXHRzdGF0LVxcdTAwM2Vwcy50b3RhbCsrO1xcbiAyNTI6XFx0XFx0fSBlbHNlXFxuIDI1MzpcXHRcXHRcXHRibGtfcnFfc3RhdF9hZGQoXFx1MDAyNnN0YXQtXFx1MDAzZXJxcywgcmVxX3RpbWUpO1xcbiAyNTQ6XFx0XFx0cHV0X2NwdV9wdHIoc3RhdCk7XFxuIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBsYXRlbmN5X3N1bV9vayhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuIDI1ODpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuIDI1OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU5Ljg0NzE3MDc3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY3NzU5NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGJsay1pb2xhdGVuY3kuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIEkvTyBsYXRlbmN5IGNvZGUuIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDUyMCB0byA2MjAgaW4gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBrZXkgbG9naWMgdGhlcmUsIHByb2JhYmx5IHJlbGF0ZWQgdG/igKYgd2VsbCwgbGlrZWx5IGNhbGN1bGF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgZGVjaXNpb24tbWFraW5nIHJlZ2FyZGluZyBJL08gcmVxdWVzdCB0cmFja2luZy4gR2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgSSd2ZSBzZWVuLCBJJ20gYW50aWNpcGF0aW5nIHRoaXMgc2VjdGlvbiB3aWxsIGJlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGFzcGVjdCBvZiBob3cgdGhlIGxhdGVuY3kgaXMgbWVhc3VyZWQgb3IgY2F0ZWdvcml6ZWQuIENvdWxkIGJlIHdoZXJlIHRoZXkncmUgY2FsY3VsYXRpbmcgcGVyY2VudGlsZXMsIGhhbmRsaW5nIGRpZmZlcmVudCBJL08gcXVldWUgZGVwdGhzLCBvciBwZXJoYXBzIGZpbHRlcmluZyBvdXQgY2VydGFpbiBvcGVyYXRpb25zLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBpcyBvbiB0YXJnZXQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcG9ydGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MDEuOTE0OTMyNjU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcbiA1MjE6XFx0XFx0cmVxX3RpbWUgPSBub3cgLSBzdGFydDtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0XFx0LypcXG4gNTI0OlxcdFxcdCAqIFdlIGRvbid0IHdhbnQgdG8gY291bnQgaXNzdWVfYXNfcm9vdCBiaW8ncyBpbiB0aGUgY2dyb3VwcyBsYXRlbmN5XFxuIDUyNTpcXHRcXHQgKiBzdGF0aXN0aWNzIGFzIGl0IGNvdWxkIHNrZXcgdGhlIG51bWJlcnMgZG93bndhcmRzLlxcbiA1MjY6XFx0XFx0ICovXFxuIDUyNzpcXHRcXHRpZiAodW5saWtlbHkoaXNzdWVfYXNfcm9vdCBcXHUwMDI2XFx1MDAyNiBpb2xhdC1cXHUwMDNlbWF4X2RlcHRoICE9IFVJTlRfTUFYKSkge1xcbiA1Mjg6XFx0XFx0XFx0dTY0IHN1YiA9IGlvbGF0LVxcdTAwM2VtaW5fbGF0X25zZWM7XFxuIDUyOTpcXHRcXHRcXHRpZiAocmVxX3RpbWUgXFx1MDAzYyBzdWIpXFxuIDUzMDpcXHRcXHRcXHRcXHRibGtjZ19hZGRfZGVsYXkobGF0X3RvX2Jsa2coaW9sYXQpLCBub3csIHN1YiAtIHJlcV90aW1lKTtcXG4gNTMxOlxcdFxcdFxcdHJldHVybjtcXG4gNTMyOlxcdFxcdH1cXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0bGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKGlvbGF0LCByZXFfdGltZSk7XFxuIDUzNTpcXHR9XFxuIDUzNjpcXHRcXG4gNTM3OlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9BREpVU1RfVElNRSAoNTAwICogTlNFQ19QRVJfTVNFQylcXG4gNTM4OlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9HT09EX1NBTVBMRVMgNVxcbiA1Mzk6XFx0XFxuIDU0MDpcXHRzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcXG4gNTQxOlxcdHtcXG4gNTQyOlxcdFxcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IGxhdF90b19ibGtnKGlvbGF0KTtcXG4gNTQzOlxcdFxcdHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpwYXJlbnQ7XFxuIDU0NDpcXHRcXHRzdHJ1Y3QgY2hpbGRfbGF0ZW5jeV9pbmZvICpsYXRfaW5mbztcXG4gNTQ1OlxcdFxcdHN0cnVjdCBsYXRlbmN5X3N0YXQgc3RhdDtcXG4gNTQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDU0NzpcXHRcXHRpbnQgY3B1O1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgXFx1MDAyNnN0YXQpO1xcbiA1NTA6XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuIDU1MTpcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIDU1MjpcXHRcXHRcXHRzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzO1xcbiA1NTM6XFx0XFx0XFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVxcdTAwM2VzdGF0cywgY3B1KTtcXG4gNTU0OlxcdFxcdFxcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFxcdTAwMjZzdGF0LCBzKTtcXG4gNTU1OlxcdFxcdFxcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBzKTtcXG4gNTU2OlxcdFxcdH1cXG4gNTU3OlxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIDU1ODpcXHRcXG4gNTU5OlxcdFxcdHBhcmVudCA9IGJsa2dfdG9fbGF0KGJsa2ctXFx1MDAzZXBhcmVudCk7XFxuIDU2MDpcXHRcXHRpZiAoIXBhcmVudClcXG4gNTYxOlxcdFxcdFxcdHJldHVybjtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0bGF0X2luZm8gPSBcXHUwMDI2cGFyZW50LVxcdTAwM2VjaGlsZF9sYXQ7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdGlvbGF0X3VwZGF0ZV90b3RhbF9sYXRfYXZnKGlvbGF0LCBcXHUwMDI2c3RhdCk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdC8qIEV2ZXJ5dGhpbmcgaXMgb2sgYW5kIHdlIGRvbid0IG5lZWQgdG8gYWRqdXN0IHRoZSBzY2FsZS4gKi9cXG4gNTY4OlxcdFxcdGlmIChsYXRlbmN5X3N1bV9vayhpb2xhdCwgXFx1MDAyNnN0YXQpIFxcdTAwMjZcXHUwMDI2XFxuIDU2OTpcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxhdF9pbmZvLVxcdTAwM2VzY2FsZV9jb29raWUpID09IERFRkFVTFRfU0NBTEVfQ09PS0lFKVxcbiA1NzA6XFx0XFx0XFx0cmV0dXJuO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xcbiA1NzM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxhdF9pbmZvLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdGxhdGVuY3lfc3RhdF9tZXJnZShpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCwgXFx1MDAyNnN0YXQpO1xcbiA1NzY6XFx0XFx0bGF0X2luZm8tXFx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXFx1MDAzZW5yX3NhbXBsZXM7XFxuIDU3NzpcXHRcXHRsYXRfaW5mby1cXHUwMDNlbnJfc2FtcGxlcyArPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCk7XFxuIDU3ODpcXHRcXHRpb2xhdC1cXHUwMDNlbnJfc2FtcGxlcyA9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0aWYgKChsYXRfaW5mby1cXHUwMDNlbGFzdF9zY2FsZV9ldmVudCBcXHUwMDNlPSBub3cgfHxcXG4gNTgxOlxcdFxcdCAgICBub3cgLSBsYXRfaW5mby1cXHUwMDNlbGFzdF9zY2FsZV9ldmVudCBcXHUwMDNjIEJMS0lPTEFURU5DWV9NSU5fQURKVVNUX1RJTUUpKVxcbiA1ODI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdGlmIChsYXRlbmN5X3N1bV9vayhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCkgXFx1MDAyNlxcdTAwMjZcXG4gNTg1OlxcdFxcdCAgICBsYXRlbmN5X3N1bV9vayhpb2xhdCwgXFx1MDAyNnN0YXQpKSB7XFxuIDU4NjpcXHRcXHRcXHRpZiAobGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFxcdTAwMjZpb2xhdC1cXHUwMDNlY3VyX3N0YXQpIFxcdTAwM2NcXG4gNTg3OlxcdFxcdFxcdCAgICBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUylcXG4gNTg4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1ODk6XFx0XFx0XFx0aWYgKGxhdF9pbmZvLVxcdTAwM2VzY2FsZV9ncnAgPT0gaW9sYXQpIHtcXG4gNTkwOlxcdFxcdFxcdFxcdGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50ID0gbm93O1xcbiA1OTE6XFx0XFx0XFx0XFx0c2NhbGVfY29va2llX2NoYW5nZShpb2xhdC1cXHUwMDNlYmxraW9sYXQsIGxhdF9pbmZvLCB0cnVlKTtcXG4gNTkyOlxcdFxcdFxcdH1cXG4gNTkzOlxcdFxcdH0gZWxzZSBpZiAobGF0X2luZm8tXFx1MDAzZXNjYWxlX2xhdCA9PSAwIHx8XFxuIDU5NDpcXHRcXHRcXHQgICBsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0IFxcdTAwM2U9IGlvbGF0LVxcdTAwM2VtaW5fbGF0X25zZWMpIHtcXG4gNTk1OlxcdFxcdFxcdGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50ID0gbm93O1xcbiA1OTY6XFx0XFx0XFx0aWYgKCFsYXRfaW5mby1cXHUwMDNlc2NhbGVfZ3JwIHx8XFxuIDU5NzpcXHRcXHRcXHQgICAgbGF0X2luZm8tXFx1MDAzZXNjYWxlX2xhdCBcXHUwMDNlIGlvbGF0LVxcdTAwM2VtaW5fbGF0X25zZWMpIHtcXG4gNTk4OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UobGF0X2luZm8tXFx1MDAzZXNjYWxlX2xhdCwgaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYyk7XFxuIDU5OTpcXHRcXHRcXHRcXHRsYXRfaW5mby1cXHUwMDNlc2NhbGVfZ3JwID0gaW9sYXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU3OjAxLjkxNTA2NTYzN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzMzMDgwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmxrLWlvbGF0ZW5jeSBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBsYXRlbmN5X3N0YXRfbWVyZ2VgIGZ1bmN0aW9uIGludHJvZHVjZWQgaW4gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgcmVjYWxsIHNlZWluZyB0aGF0IGZ1bmN0aW9uIHJlcGxhY2luZyBgbGF0ZW5jeV9zdGF0X3N1bWAgd2l0aGluIHRoZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZnVuY3Rpb24uIFRoYXQgbWVyZ2UgZnVuY3Rpb24gaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgY29uc2lkZXJpbmcgaXQncyBkb2luZyBhcml0aG1ldGljLiBJIHNlZSBgZGl2X3U2NCguLi4pYCwgYG1pbmAsIGBtYXhgLCBgbnJfc2FtcGxlc2AsIGB0b3RhbGAsIGBtaXNzZWRgLCBhbGwgb2Ygd2hpY2ggYXJlIHBvdGVudGlhbCBzb3VyY2VzIGZvciBmdXp6aW5nIHRhcmdldHMhXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgYmxrLWlvbGF0ZW5jeS5jYCBpcyBhICpnb29kKiB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWFjaCB3aXRoaW4gdGhlIGtlcm5lbC4gQ2xlYXJseSwgaXQncyB0aWVkIHRvIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlci4gUmlnaHQsIHRoZSBjZ3JvdXBzIHYyIGlvIGNvbnRyb2xsZXIhIElmIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzIGVuYWJsZWQsIHRoZW4gaXQncyBleHBvc2VkIHZpYSBjZ3JvdXBmcyAtIHNvbWV0aGluZyBsaWtlIGBpby5sYXRlbmN5YC5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcmVtZW1iZXIgd2hlcmUgSS9PIG9wZXJhdGlvbnMgZ28uIEZyb20gd2hhdCBJIHJlY2FsbCwgaXQncyB3aGVuIEkvTyByZXF1ZXN0cyBjb21wbGV0ZSBvciBhcmUgaXNzdWVkIG9uIGJsb2NrIGRldmljZXMsIHN1Y2ggYXMgbG9vcCwgbnVsbF9ibGssIHZpcnRpby1ibGssIGFuZCByYW1kaXNrcywgdGhhdCBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZ2V0cyBpbnZva2VkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJlbWVtYmVyIHdoZXJlIHRoZSBjb2RlIHBhdGhzIGFyZS4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgYmxvY2sgSS9PLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxlcnMgb2YgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYGJsay1pb2xhdGVuY3kuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhleSdyZSB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MDUuNjQ4MTQ4NzQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5NTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmM9NTEzPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBzdGFydCxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MzktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQxLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02MDg9c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NTEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ3aW5kb3dfc3RhcnQsIG5vdykpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjY1MjpcXHRcXHRcXHRcXHRcXHRpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKGlvbGF0LCBub3cpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NTMtXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NzowNS42OTYxNDg0MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMzIxOTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGJsay1pb2xhdGVuY3kuY2AqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBvZiBgYmxrLWlvbGF0ZW5jeS5jYC4gSSBuZWVkIHRvIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZnJvbSBlbHNld2hlcmUgdG8ga2ljayB0aGluZ3Mgb2ZmLiBUaGVuLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvcmUgb3BlcmF0aW9ucyB0aGlzIGNvZGUgcGVyZm9ybXM7IHdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25hbGl0aWVzPyBPbmNlIEkgaGF2ZSBhIG1lbnRhbCBtYXAgb2YgdGhvc2UgZW50cnkgcG9pbnRzIGFuZCBvcGVyYXRpb25zLCBJIGNhbiBzdGFydCBkaXZpbmcgZGVlcGVyLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiByZWFkaW5nIG1vcmUgb2YgdGhlIGNvZGUgYWZ0ZXIgSSB1bmRlcnN0YW5kIHRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyB0aGUgY29kZSBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU3OjA3LjcxOTM3MTkxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5ODgxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGNmdHlwZXxzdHJ1Y3QgYmxrY2dfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9NDU3PXN0YXRpYyBpbnQgYmZxZ19zdGF0c19pbml0KHN0cnVjdCBiZnFnX3N0YXRzICpzdGF0cywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTQ4NC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgYmZxX2dyb3VwX2RhdGEgKmNwZF90b19iZnFnZChzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZClcXG5ibG9jay9iZnEtY2dyb3VwLmMtNDg2LXtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz00OTA9c3RhdGljIHN0cnVjdCBiZnFfZ3JvdXBfZGF0YSAqYmxrY2dfdG9fYmZxZ2Qoc3RydWN0IGJsa2NnICpibGtjZylcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy00OTQtXFxuYmxvY2svYmZxLWNncm91cC5jOjQ5NTpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpiZnFfY3BkX2FsbG9jKGdmcF90IGdmcClcXG5ibG9jay9iZnEtY2dyb3VwLmMtNDk2LXtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy01MDYtXFxuYmxvY2svYmZxLWNncm91cC5jOjUwNzpzdGF0aWMgdm9pZCBiZnFfY3BkX2ZyZWUoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXFxuYmxvY2svYmZxLWNncm91cC5jLTUwOC17XFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmM9MTAzMz1zdGF0aWMgaW50IGJmcV9pb19zZXRfd2VpZ2h0X2xlZ2FjeShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMDM0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsXFxuYmxvY2svYmZxLWNncm91cC5jLTEwMzUtXFx0XFx0XFx0XFx0ICAgIHU2NCB2YWwpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmM9MTI1ND1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIGludCBub2RlKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTEyNjQtXFxuYmxvY2svYmZxLWNncm91cC5jOjEyNjU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfYmZxID0ge1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjY2LVxcdC5kZmxfY2Z0eXBlc1xcdFxcdD0gYmZxX2Jsa2dfZmlsZXMsXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI3OC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTI3OTpzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtjZ19sZWdhY3lfZmlsZXNbXSA9IHtcXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI4MC1cXHR7XFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQwNC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTQwNTpzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtnX2ZpbGVzW10gPSB7XFxuYmxvY2svYmZxLWNncm91cC5jLTE0MDYtXFx0e1xcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuaD05NjI9c3RydWN0IGJmcV9ncm91cF9kYXRhIHtcXG5ibG9jay9iZnEtaW9zY2hlZC5oLTk2My1cXHQvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi9cXG5ibG9jay9iZnEtaW9zY2hlZC5oOjk2NDpcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgcGQ7XFxuYmxvY2svYmZxLWlvc2NoZWQuaC05NjUtXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5oPTEwOTE9dm9pZCBiZnFnX2FuZF9ibGtnX3B1dChzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKTtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmgtMTA5My0jaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXFxuYmxvY2svYmZxLWlvc2NoZWQuaDoxMDk0OmV4dGVybiBzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtjZ19sZWdhY3lfZmlsZXNbXTtcXG5ibG9jay9iZnEtaW9zY2hlZC5oOjEwOTU6ZXh0ZXJuIHN0cnVjdCBjZnR5cGUgYmZxX2Jsa2dfZmlsZXNbXTtcXG5ibG9jay9iZnEtaW9zY2hlZC5oOjEwOTY6ZXh0ZXJuIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2JmcTtcXG5ibG9jay9iZnEtaW9zY2hlZC5oLTEwOTctI2VuZGlmXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jPTgxPUVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfcHJmaWxsX3J3c3RhdCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jLTk1LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmM6OTY6dm9pZCBibGtnX3J3c3RhdF9yZWN1cnNpdmVfc3VtKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmMtOTctXFx0XFx0aW50IG9mZiwgc3RydWN0IGJsa2dfcndzdGF0X3NhbXBsZSAqc3VtKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuaD00Nj11NjQgYmxrZ19wcmZpbGxfcndzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCxcXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5oLTQ3LVxcdFxcdCAgICAgICBpbnQgb2ZmKTtcXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5oOjQ4OnZvaWQgYmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5oLTQ5LVxcdFxcdGludCBvZmYsIHN0cnVjdCBibGtnX3J3c3RhdF9zYW1wbGUgKnN1bSk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NTc9YXRvbWljX3QgYmxrY2dfbnJfY29uZ2VzdGVkIF9fcmVhZF9tb3N0bHkgPSBBVE9NSUNfSU5JVCgwKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtNTgtXFxuYmxvY2svYmxrLWNncm91cC5jOjU5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpibGtjZ19wb2xpY3lbQkxLQ0dfTUFYX1BPTFNdO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy02MC1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0zMDY9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19hbGxvYyhzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNDMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpKyspIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6MzQ0OlxcdFxcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMzQ1LVxcdFxcdHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZDtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0zODI9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNDE3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjQxODpcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jLTQxOS1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy00MzEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpKyspIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6NDMyOlxcdFxcdFxcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcXG5ibG9jay9ibGstY2dyb3VwLmMtNDMzLVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTUyMD1zdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3koc3RydWN0IGJsa2NnX2dxICpibGtnKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTUzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKykge1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mzg6XFx0XFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy01MzktXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NTY3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNjA1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjYwNjpcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jLTYwNy1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz02NTI9c3RhdGljIGludCBibGtjZ19yZXNldF9zdGF0cyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo2NTM6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsIHU2NCB2YWwpXFxuYmxvY2svYmxrLWNncm91cC5jLTY1NC17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNjcwLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjY3MTpcXHRcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jLTY3Mi1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz03MDg9dm9pZCBibGtjZ19wcmludF9ibGtncyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgYmxrY2cgKmJsa2NnLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTcxMC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICosIGludCksXFxuYmxvY2svYmxrLWNncm91cC5jOjcxMTpcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLCBpbnQgZGF0YSxcXG5ibG9jay9ibGstY2dyb3VwLmMtNzEyLVxcdFxcdCAgICAgICBib29sIHNob3dfdG90YWwpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9vcGVuX2JkZXYpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTgzMy0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6ODM0OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5jLTgzNS1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTExMzU9c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTE3NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKykge1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTc2OlxcdFxcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTE3Ny1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTg3PXN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMDMtXFxuYmxvY2svYmxrLWNncm91cC5jOjEyMDQ6c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTIwNS1cXHR7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTIxMS1cXG5ibG9jay9ibGstY2dyb3VwLmM6MTIxMjpzdGF0aWMgc3RydWN0IGNmdHlwZSBibGtjZ19sZWdhY3lfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTIxMy1cXHR7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTM4MT1ibGtjZ19jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTM5OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFMgOyBpKyspIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6MTQwMDpcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jOjE0MDE6XFx0XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQ7XFxuYmxvY2svYmxrLWNncm91cC5jLTE0MDItXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTU0OD1zdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTQ5OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1MC17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTU4NS0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6MTU4NjppbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuYmxvY2svYmxrLWNncm91cC5jLTE1ODcte1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTE3MDA9dm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmM6MTcwMTpcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwMi17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTcyMz1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19kZWFjdGl2YXRlX3BvbGljeSk7XFxuYmxvY2svYmxrLWNncm91cC5jLTE3MjQtXFxuYmxvY2svYmxrLWNncm91cC5jOjE3MjU6c3RhdGljIHZvaWQgYmxrY2dfZnJlZV9hbGxfY3BkKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTcyNi17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTc0My0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6MTc0NDppbnQgYmxrY2dfcG9saWN5X3JlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTc0NS17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTc3Ni1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2NnLCBcXHUwMDI2YWxsX2Jsa2NncywgYWxsX2Jsa2Nnc19ub2RlKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjE3Nzc6XFx0XFx0XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQ7XFxuYmxvY2svYmxrLWNncm91cC5jLTE3NzgtXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTgxNj1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19wb2xpY3lfcmVnaXN0ZXIpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE4MjMtICovXFxuYmxvY2svYmxrLWNncm91cC5jOjE4MjQ6dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuYmxvY2svYmxrLWNncm91cC5jLTE4MjUte1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTk0PXN0cnVjdCBibGtjZyB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmgtMTA0LVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDoxMDU6XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhXFx0KmNwZFtCTEtDR19NQVhfUE9MU107XFxuYmxvY2svYmxrLWNncm91cC5oLTEwNi1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0xMzg9c3RydWN0IGJsa2dfcG9saWN5X2RhdGEge1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oLTE1My0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmg6MTU0OnN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSB7XFxuYmxvY2svYmxrLWNncm91cC5oLTE1NS1cXHQvKiB0aGUgYmxrY2cgYW5kIHBvbGljeSBpZCB0aGlzIHBlci1wb2xpY3kgZGF0YSBiZWxvbmdzIHRvICovXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmgtMTU5LVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDoxNjA6dHlwZWRlZiBzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKihibGtjZ19wb2xfYWxsb2NfY3BkX2ZuKShnZnBfdCBnZnApO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoxNjE6dHlwZWRlZiB2b2lkIChibGtjZ19wb2xfaW5pdF9jcGRfZm4pKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MTYyOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2ZyZWVfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjE2Mzp0eXBlZGVmIHZvaWQgKGJsa2NnX3BvbF9iaW5kX2NwZF9mbikoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNjQtdHlwZWRlZiBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqKGJsa2NnX3BvbF9hbGxvY19wZF9mbikoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MTcxPXR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX3N0YXRfcGRfZm4pKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzMtXFxuYmxvY2svYmxrLWNncm91cC5oOjE3NDpzdHJ1Y3QgYmxrY2dfcG9saWN5IHtcXG5ibG9jay9ibGstY2dyb3VwLmgtMTc1LVxcdGludFxcdFxcdFxcdFxcdHBsaWQ7XFxuYmxvY2svYmxrLWNncm91cC5oLTE3Ni1cXHQvKiBjZ3JvdXAgZmlsZXMgZm9yIHRoZSBwb2xpY3kgKi9cXG5ibG9jay9ibGstY2dyb3VwLmg6MTc3OlxcdHN0cnVjdCBjZnR5cGVcXHRcXHRcXHQqZGZsX2NmdHlwZXM7XFxuYmxvY2svYmxrLWNncm91cC5oOjE3ODpcXHRzdHJ1Y3QgY2Z0eXBlXFx0XFx0XFx0KmxlZ2FjeV9jZnR5cGVzO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzktXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MTk4PXZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDAtLyogQmxraW8gY29udHJvbGxlciBwb2xpY3kgcmVnaXN0cmF0aW9uICovXFxuYmxvY2svYmxrLWNncm91cC5oOjIwMTppbnQgYmxrY2dfcG9saWN5X3JlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjIwMjp2b2lkIGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjIwMzppbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDQtdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmg6MjA1OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA2LVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTIwOD12b2lkIGJsa2NnX3ByaW50X2Jsa2dzKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBibGtjZyAqYmxrY2csXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmgtMjEwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKiwgaW50KSxcXG5ibG9jay9ibGstY2dyb3VwLmg6MjExOlxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsIGludCBkYXRhLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMTItXFx0XFx0ICAgICAgIGJvb2wgc2hvd190b3RhbCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MjIzPWludCBibGtnX2NvbmZfb3Blbl9iZGV2KHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXFxuYmxvY2svYmxrLWNncm91cC5oLTIyNC1cXHRfX2NvbmRfYWNxdWlyZXMoMCwgXFx1MDAyNmN0eC1cXHUwMDNlYmRldi1cXHUwMDNlYmRfcXVldWUtXFx1MDAzZXJxX3Fvc19tdXRleCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjIyNTppbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjYtXFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yODY9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqYmxrZ190b19wZChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csXFxuYmxvY2svYmxrLWNncm91cC5oOjI4NzpcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmgtMjg4LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yOTEtXFxuYmxvY2svYmxrLWNncm91cC5oOjI5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqYmxrY2dfdG9fY3BkKHN0cnVjdCBibGtjZyAqYmxrY2csXFxuYmxvY2svYmxrLWNncm91cC5oOjI5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmgtMjk0LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0zMDQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2dfZ3EgKnBkX3RvX2Jsa2coc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oLTMwOC1cXG5ibG9jay9ibGstY2dyb3VwLmg6MzA5OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnICpjcGRfdG9fYmxrY2coc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXFxuYmxvY2svYmxrLWNncm91cC5oLTMxMC17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NDc5PXN0YXRpYyBpbmxpbmUgYm9vbCBibGtjZ19wb2xpY3lfZW5hYmxlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstY2dyb3VwLmg6NDgwOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmgtNDgxLXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODk9c3RydWN0IGJsa2dfcG9saWN5X2RhdGEge1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oLTQ5MS1cXG5ibG9jay9ibGstY2dyb3VwLmg6NDkyOnN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSB7XFxuYmxvY2svYmxrLWNncm91cC5oLTQ5My19O1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTQtXFxuYmxvY2svYmxrLWNncm91cC5oOjQ5NTpzdHJ1Y3QgYmxrY2dfcG9saWN5IHtcXG5ibG9jay9ibGstY2dyb3VwLmgtNDk2LX07XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo1MDU6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfcG9saWN5X3JlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyByZXR1cm4gMDsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo1MDY6c3RhdGljIGlubGluZSB2b2lkIGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyB9XFxuYmxvY2svYmxrLWNncm91cC5oLTUwNy1zdGF0aWMgaW5saW5lIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5oOjUwODpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cXG5ibG9jay9ibGstY2dyb3VwLmgtNTA5LXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmg6NTEwOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyB9XFxuYmxvY2svYmxrLWNncm91cC5oLTUxMS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NTEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKmJsa2dfdG9fcGQoc3RydWN0IGJsa2NnX2dxICpibGtnLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo1MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIE5VTEw7IH1cXG5ibG9jay9ibGstY2dyb3VwLmgtNTE0LXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpwZF90b19ibGtnKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCkgeyByZXR1cm4gTlVMTDsgfVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTU1ND1zdHJ1Y3QgaW9jX2NncnAge1xcbmJsb2NrL2Jsay1pb2Nvc3QuYzo1NTU6XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhXFx0Y3BkO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy01NTYtXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0ZGZsX3dlaWdodDtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz02NTE9c3RhdGljIGNvbnN0IHUzMiB2cmF0ZV9hZGpfcGN0W10gPVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTY1Ni1cXG5ibG9jay9ibGstaW9jb3N0LmM6NjU3OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV9pb2Nvc3Q7XFxuYmxvY2svYmxrLWlvY29zdC5jLTY1OC1cXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0yOTE1PXN0YXRpYyBpbnQgYmxrX2lvY29zdF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI5NzktXFxuYmxvY2svYmxrLWlvY29zdC5jOjI5ODA6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqaW9jX2NwZF9hbGxvYyhnZnBfdCBnZnApXFxuYmxvY2svYmxrLWlvY29zdC5jLTI5ODEte1xcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI5OTEtXFxuYmxvY2svYmxrLWlvY29zdC5jOjI5OTI6c3RhdGljIHZvaWQgaW9jX2NwZF9mcmVlKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTkzLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0zNDc2PXN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3My1cXG5ibG9jay9ibGstaW9jb3N0LmM6MzU3NDpzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2NfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3NS1cXHR7XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzU5NS1cXG5ibG9jay9ibGstaW9jb3N0LmM6MzU5NjpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9jb3N0ID0ge1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTk3LVxcdC5kZmxfY2Z0eXBlc1xcdD0gaW9jX2ZpbGVzLFxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTgzLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo4NDpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9sYXRlbmN5O1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NS1zdHJ1Y3QgaW9sYXRlbmN5X2dycDtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz0xMDY5PXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9mcmVlKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDgyLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDgzOnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvbGF0ZW5jeV9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDg0LVxcdHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDkyLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDkzOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV9pb2xhdGVuY3kgPSB7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwOTQtXFx0LmRmbF9jZnR5cGVzXFx0PSBpb2xhdGVuY3lfZmlsZXMsXFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmM9NDI9c3RhdGljIGNvbnN0IGNoYXIgKnBvbGljeV9uYW1lW10gPSB7XFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmMtNDktXFxuYmxvY2svYmxrLWlvcHJpby5jOjUwOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGlvcHJpb19wb2xpY3k7XFxuYmxvY2svYmxrLWlvcHJpby5jLTUxLVxcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jPTU3PXN0cnVjdCBpb3ByaW9fYmxrY2cge1xcbmJsb2NrL2Jsay1pb3ByaW8uYzo1ODpcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgY3BkO1xcbmJsb2NrL2Jsay1pb3ByaW8uYy01OS1cXHRlbnVtIHByaW9fcG9saWN5XFx0IHByaW9fcG9saWN5O1xcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jPTgyPXN0YXRpYyBzc2l6ZV90IGlvcHJpb19zZXRfcHJpb19wb2xpY3koc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmMtOTctXFxuYmxvY2svYmxrLWlvcHJpby5jOjk4OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmlvcHJpb19hbGxvY19jcGQoZ2ZwX3QgZ2ZwKVxcbmJsb2NrL2Jsay1pb3ByaW8uYy05OS17XFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmMtMTA4LVxcbmJsb2NrL2Jsay1pb3ByaW8uYzoxMDk6c3RhdGljIHZvaWQgaW9wcmlvX2ZyZWVfY3BkKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKVxcbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTAte1xcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jLTExNS1cXG5ibG9jay9ibGstaW9wcmlvLmM6MTE2OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvcHJpb19maWxlc1tdID0ge1xcbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTctXFx0e1xcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jLTEyNC1cXG5ibG9jay9ibGstaW9wcmlvLmM6MTI1OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGlvcHJpb19wb2xpY3kgPSB7XFxuYmxvY2svYmxrLWlvcHJpby5jLTEyNi1cXHQuZGZsX2NmdHlwZXNcXHQ9IGlvcHJpb19maWxlcyxcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE0MzI9c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDM5LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NDA6c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDEtXFx0e1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0MD1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYyMS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNjIyOnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjMtXFx0e1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTY3MD1zdGF0aWMgdm9pZCB0aHJvdGxfcGRfb2ZmbGluZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjc0LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2NzU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2NzYtXFx0LmRmbF9jZnR5cGVzXFx0XFx0PSB0aHJvdGxfZmlsZXMsXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD02OT1zdHJ1Y3QgdGhyb3RsX2dycCB7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xMzAtXFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTMxOmV4dGVybiBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV90aHJvdGw7XFxuYmxvY2svYmxrLXRocm90dGxlLmgtMTMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NzowNy43NjczNjIwMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTUyNjc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzIHRhc2s6XG5cbioqQW5hbHl6aW5nIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIC0gSW5pdGlhbGl6YXRpb24sIEV4aXQsIGFuZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gQSBnb29kIGFwcHJvYWNoLCBlc3BlY2lhbGx5IHdpdGgga2VybmVsIG1vZHVsZXMsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgcXVpY2tseS4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgeW91IGZpbmQgdGhlIGBtb2R1bGVfaW5pdCgpYCBhbmQgYG1vZHVsZV9leGl0KClgIG1hY3Jvcy4gVGhvc2Ugd2lsbCBpbW1lZGlhdGVseSBzaG93IG1lIGhvdyB0aGUgbW9kdWxlIGlzIGxvYWRlZCBhbmQgdW5sb2FkZWQsIHdoaWNoIGlzIGtleSBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiB1c3VhbGx5IHNwb3QgdGhlIGNvcmUgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoZSBmaWxlLiBJJ2xsIG1ha2UgYSBxdWljayBub3RlIG9mIHRob3NlIHRvby4gVGhpcyB3aWxsIGdpdmUgbWUgYSBmaXJzdC1wYXNzIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGUncyByZXNwb25zaWJpbGl0aWVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGFsd2F5cyBnb29kIHRvIHN0YXJ0IHdpdGggdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgZ2V0dGluZyBsb3N0IGluIHRoZSBkZXRhaWxzLiBLbm93aW5nIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgbmFycm93cyBkb3duIHRoZSBzZWFyY2ggY29uc2lkZXJhYmx5LiBJIGNhbiB0aGVuIHJlYWQgdGhlIGNvZGUgbW9yZSBzdHJhdGVnaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU3OjEwLjAxNjg5MjA0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1pb2xhdGVuY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDUwOlxcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9vZmZsaW5lKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4xMDUxOlxcdHtcXG4xMDUyOlxcdFxcdHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCA9IHBkX3RvX2xhdChwZCk7XFxuMTA1MzpcXHRcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBsYXRfdG9fYmxrZyhpb2xhdCk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdGlvbGF0ZW5jeV9zZXRfbWluX2xhdF9uc2VjKGJsa2csIDApO1xcbjEwNTY6XFx0XFx0aW9sYXRlbmN5X2NsZWFyX3NjYWxpbmcoYmxrZyk7XFxuMTA1NzpcXHR9XFxuMTA1ODpcXHRcXG4xMDU5OlxcdHN0YXRpYyB2b2lkIGlvbGF0X3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuMTA2MDpcXHR7XFxuMTA2MTpcXHRcXHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQgPVxcbjEwNjI6XFx0XFx0XFx0Y29udGFpbmVyX29mKHJjdSwgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEsIHJjdV9oZWFkKTtcXG4xMDYzOlxcdFxcdHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCA9IHBkX3RvX2xhdChwZCk7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdGZyZWVfcGVyY3B1KGlvbGF0LVxcdTAwM2VzdGF0cyk7XFxuMTA2NjpcXHRcXHRrZnJlZShpb2xhdCk7XFxuMTA2NzpcXHR9XFxuMTA2ODpcXHRcXG4xMDY5OlxcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9mcmVlKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IHBkX3RvX2Jsa2cocGQpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHQvKlxcbjEwNzQ6XFx0XFx0ICogR3JvdXBzIHRocm90dGxlZCBhcyBjb2xsYXRlcmFsIGhhdmUgbWluX2xhdF9uc2VjID09IDAsIHNvXFxuMTA3NTpcXHRcXHQgKiBpb2xhdGVuY3lfcGRfb2ZmbGluZSgpIGxlYXZlcyB0aGVpciBkZWxheSBzZXQuICBEcm9wIGl0IGhlcmUsIHdoZXJlXFxuMTA3NjpcXHRcXHQgKiBubyBpbi1mbGlnaHQgYmlvIGNhbiByZS1hcm0gaXQgdmlhIGNoZWNrX3NjYWxlX2NoYW5nZSgpLlxcbjEwNzc6XFx0XFx0ICovXFxuMTA3ODpcXHRcXHRpZiAoYmxrZylcXG4xMDc5OlxcdFxcdFxcdGJsa2NnX2NsZWFyX2RlbGF5KGJsa2cpO1xcbjEwODA6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBkLVxcdTAwM2VyY3VfaGVhZCwgaW9sYXRfcmVsZWFzZSk7XFxuMTA4MTpcXHR9XFxuMTA4MjpcXHRcXG4xMDgzOlxcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvbGF0ZW5jeV9maWxlc1tdID0ge1xcbjEwODQ6XFx0XFx0e1xcbjEwODU6XFx0XFx0XFx0Lm5hbWUgPSBcXFwibGF0ZW5jeVxcXCIsXFxuMTA4NjpcXHRcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuMTA4NzpcXHRcXHRcXHQuc2VxX3Nob3cgPSBpb2xhdGVuY3lfcHJpbnRfbGltaXQsXFxuMTA4ODpcXHRcXHRcXHQud3JpdGUgPSBpb2xhdGVuY3lfc2V0X2xpbWl0LFxcbjEwODk6XFx0XFx0fSxcXG4xMDkwOlxcdFxcdHt9XFxuMTA5MTpcXHR9O1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9sYXRlbmN5ID0ge1xcbjEwOTQ6XFx0XFx0LmRmbF9jZnR5cGVzXFx0PSBpb2xhdGVuY3lfZmlsZXMsXFxuMTA5NTpcXHRcXHQucGRfYWxsb2NfZm5cXHQ9IGlvbGF0ZW5jeV9wZF9hbGxvYyxcXG4xMDk2OlxcdFxcdC5wZF9pbml0X2ZuXFx0PSBpb2xhdGVuY3lfcGRfaW5pdCxcXG4xMDk3OlxcdFxcdC5wZF9vZmZsaW5lX2ZuXFx0PSBpb2xhdGVuY3lfcGRfb2ZmbGluZSxcXG4xMDk4OlxcdFxcdC5wZF9mcmVlX2ZuXFx0PSBpb2xhdGVuY3lfcGRfZnJlZSxcXG4xMDk5OlxcdFxcdC5wZF9zdGF0X2ZuXFx0PSBpb2xhdGVuY3lfcGRfc3RhdCxcXG4xMTAwOlxcdH07XFxuMTEwMTpcXHRcXG4xMTAyOlxcdHN0YXRpYyBpbnQgX19pbml0IGlvbGF0ZW5jeV9pbml0KHZvaWQpXFxuMTEwMzpcXHR7XFxuMTEwNDpcXHRcXHRyZXR1cm4gYmxrY2dfcG9saWN5X3JlZ2lzdGVyKFxcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5KTtcXG4xMTA1OlxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0c3RhdGljIHZvaWQgX19leGl0IGlvbGF0ZW5jeV9leGl0KHZvaWQpXFxuMTEwODpcXHR7XFxuMTEwOTpcXHRcXHRibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihcXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSk7XFxuMTExMDpcXHR9XFxuMTExMTpcXHRcXG4xMTEyOlxcdG1vZHVsZV9pbml0KGlvbGF0ZW5jeV9pbml0KTtcXG4xMTEzOlxcdG1vZHVsZV9leGl0KGlvbGF0ZW5jeV9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MTAuMDE2OTkzODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA0MzY4OTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbGF0ZW5jeV9zdGF0X21lcmdlYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGxhdGVuY3lfc3RhdF9tZXJnZWAgd2FzIHB1dCBpbiBwbGFjZSB0byBzcGVjaWZpY2FsbHkgYWRkcmVzcyBob3cgd2UgbWVyZ2UgbGF0ZW5jeSBzdGF0aXN0aWNzIHdpdGhpbiB0aGUgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIHNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbGF0ZW5jeV9zdGF0X21lcmdlYCBpcyBzdGF0aWMgaW5saW5lIGFuZCBtYXAgb3V0IGl0cyBjYWxsIGdyYXBoIHdpdGhpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gUmlnaHQsIGhlcmUgd2UgZ286IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBkaXJlY3RseSBjYWxscyBgbGF0ZW5jeV9zdGF0X21lcmdlYC4gQ3J1Y2lhbGx5LCBgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvYCB0aGVuIGNhbGxzIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYC4gVGhpcyBtYWtlcyBpdCBwYXJ0IG9mIHRoZSBjZ3JvdXAgaW9sYXRlbmN5IHBhdGguIEZ1cnRoZXIgY29uZmlybWluZyB0aGUgY29ubmVjdGlvbiB0byBjb25maWd1cmF0aW9uLCBgaW9sYXRlbmN5X3NldF9saW1pdGAgZW5hYmxlcyBhbmQgY29uZmlndXJlcyBpb2xhdGVuY3ksIHdoaWNoIHBvaW50cyB0byBjZ3JvdXAgY29uZmlnIHdyaXRpbmcgdG8gZW5hYmxlIGlvbGF0ZW5jeSBvbiBhIGJsb2NrIGRldmljZS5cblxuTm93LCBmb3IgdGhlIGZ1enppbmcgY3JpdGVyaWEuIFRoaXMgbG9va3MgZ29vZC4gSXQgc2VlbXMgdG8gYmUgcmVhY2hhYmxlIGNvZGU7IHdlJ3JlIHRhbGtpbmcgYSBzdGFuZGFyZCBRRU1VL0dDRSBrZXJuZWwgZW52aXJvbm1lbnQgd2l0aCBjZ3JvdXBzIHYyLCBibG9jayBsYXllciwgbG9vcCBkZXZpY2VzLCB2aXJ0aW8tYmxrLCBldGMuIFNvIHdlJ3JlIGNvdmVyZWQgdGhlcmUuIFRoZSBtb3N0IHNpZ25pZmljYW50IHBhcnQgaXMgdGhhdCBpdCAqaXMqIG1vZGlmeWluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgbWVyZ2luZyBsb2dpYyBmb3IgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5LiBUaGlzIG1ha2VzIHRoZSBhbnN3ZXIgdG8gXCJXb3J0aEZ1enppbmdcIiBhIGRlZmluaXRlIFwieWVzXCIuXG5cbkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlndXJhdGlvbnMuIFdlJ3JlIGxvb2tpbmcgYXQgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEJMS19DR1JPVVBgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFRpbWUgdG8gZ3JlcCBmb3IgYENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWWAgYW5kIHJlbGF0ZWQgY29uZmlncyB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NzoxNC4wNjA2ODU3NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjU2MjI2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTIwMTI9Zm9yIGEgZGV2aWNlLCBieSBCRlEncyBvd24gY2dyb3VwIHN1cHBvcnQuICBMYXRlbmN5LWJhc2VkIHByb3RlY3Rpb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q6MjAxMzooQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKSBhbmQgSS9PIHByaW9yaXR5IGFzc2lnbm1lbnRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMjAxNC0oQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKSBhcmUgYWxzbyBhdmFpbGFibGUuXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTgxPUNPTkZJR19CTEtfV0JUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjgyOkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy04My1DT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRD15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTk2PUNPTkZJR19CTEtfV0JUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjk3OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy05OC1DT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRD15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODg9Q09ORklHX0JMS19XQlQ9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo4OTpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy05MC1DT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTgyPUNPTkZJR19CTEtfV0JUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6ODM6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODQtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcXG4tLVxcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWc9NTY9Q09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eVxcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWc6NTc6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnLTU4LUNPTkZJR19CTEtfQ0dST1VQX0lPQ09TVD15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NTc9Q09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eVxcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzo1ODpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZy01OS1DT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxcbi0tXFxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcXG4tLVxcbmJsb2NrL0tjb25maWctMTMzLVxcbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbmJsb2NrL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbi0tXFxuYmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbmJsb2NrL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG5ibG9jay9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXFx0Kz0gYmxrLWlvY29zdC5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82ND0xMD1DT05GSUdfQkxLX0NHUk9VUD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTE6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0xMi1DT05GSUdfQkxLX0RFVl9CU0dMSUI9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249NT1DT05GSUdfQklORk1UX01JU0M9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjY6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi03LUNPTkZJR19CTEtfQ0dST1VQPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MTYuNTI2MzEzNDQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMjEwODI4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgQkxLX0NHUk9VUGAgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjcnlzdGFsIGNsZWFyIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19DR1JPVVBgLiBObyBwb2ludCBpbiBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgSSdtIG1pc3Npbmcgc29tZSBmdW5kYW1lbnRhbCBwaWVjZXMuIExldCdzIHB1bGwgdXAgYGluaXQvS2NvbmZpZ2AgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCBmb3IgdGhhdCBvcHRpb24gdG8gYmUgYXZhaWxhYmxlLiBOZWVkIHRvIGVuc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSBoaWRkZW4gaW1wbGljYXRpb25zIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBjb21waWxlLXRpbWUgZXJyb3JzIG9yIHJ1bnRpbWUgc3VycHJpc2VzIGxhdGVyIG9uLiBCZXN0IHRvIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbiByaWdodCBmcm9tIHRoZSBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODoxOC43MzcxNDQ2MzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTIwOlxcdFxcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxcbjExMjE6XFx0XFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExMjQ6XFx0XFxuMTEyNTpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMjY6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTI3OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTI4OlxcdFxcdGRlZmF1bHQgblxcbjExMjk6XFx0XFx0aGVscFxcbjExMzA6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMzE6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEzMjpcXHRcXHRwb2xpY2llcy5cXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMzU6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMzY6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEzNzpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjE4LjczNzMzMDgxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDYyMTY0NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJsb2NrIEkvTyBMYXRlbmN5IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEJMS19DR1JPVVBgIHN0dWZmLCBhbmQgaXQncyBjbGVhciB0aGF0IHRoZSBgQkxLX0NHUk9VUGAgb3B0aW9uIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgQkxPQ0tgLiBNYWtlcyBzZW5zZS4gQW5kLCBuYXR1cmFsbHksIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAgcmVsaWVzIG9uIGBCTEtfQ0dST1VQYC4gTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGluIHRoZSBjb250ZXh0IG9mIG91ciB3b3JrLlxuXG5JIHNlZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGxhdGVuY3lfc3RhdF9tZXJnZWAuIEludGVyZXN0aW5nLCBidXQgaXQncyAqc3RhdGljIGlubGluZSogd2l0aGluIGBibG9jay9ibGstaW9sYXRlbmN5LmNgLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBMZXQncyB0cmFjZSBpdDsgYGxhdGVuY3lfc3RhdF9tZXJnZWAgaXMgY2FsbGVkIGluIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYC4gTm93LCBpcyAqdGhhdCogaW5saW5lZD8gWWVwLCBpdCdzIGFsc28gZGVjbGFyZWQgYHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoLi4uKWAuIEhtbS4gVGhhdCBzdGF0aWMgaW5saW5lIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgaXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcHByb2FjaCB0byBhbmFseXNpcy5cblxuQWxyaWdodCwgdGhlIHN0cmF0ZWd5IEknbSBnb2luZyB0byB0YWtlIGlzIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIG9yIGtleSBjYWxsZXIgZnVuY3Rpb25zIHdpdGhpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gRnJvbSB0aGlzLCBJJ2xsIG5lZWQgdG8gbG9vayBhdDpcblxuKiAgIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYFxuKiAgIGBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9gXG4qICAgYGlvbGF0ZW5jeV9yZWNvcmRfdGltZWBcbiogICBgaW9sYXRlbmN5X3NldF9saW1pdGBcblxuSSBjb3VsZCBpbmNsdWRlIGBsYXRlbmN5X3N0YXRfbWVyZ2VgLCBidXQgYWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBpZiB0aGUgY2hhbmdlcyBhcmUgbW9zdGx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaXQncyBiZXR0ZXIgdG8gbGlzdCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLiBTbywgSSB3aWxsIGZvY3VzIG9uIHRoZSBsaXN0IGFib3ZlLlxuXG5Ob3csIEknbGwgbmVlZCB0byBnbyBhaGVhZCBhbmQgY3Jvc3MtcmVmZXJlbmNlIHdoYXQgc3ltYm9scyBhY3R1YWxseSBleGlzdCB3aXRoaW4gYGJsay1pb2xhdGVuY3kuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MjIuNzk5NDk3NjY3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE5NDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTg3PXN0cnVjdCBibGtfaW9sYXRlbmN5IHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfaW9sYXRlbmN5ICpCTEtJT0xBVEVOQ1koc3RydWN0IHJxX3FvcyAqcnFvcylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA0LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz0xNzU9c3RhdGljIGNvbnN0IHU2NCBpb2xhdGVuY3lfZXhwX2ZhY3RvcnNbQkxLSU9MQVRFTkNZX05SX0VYUF9GQUNUT1JTXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjE4MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpwZF90b19sYXQoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE4Ny1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmJsa2dfdG9fbGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTg5LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xOTItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjE5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqbGF0X3RvX2Jsa2coc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0KVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xOTQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE5Ny1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTk4OnN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE5OS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA3LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMDg6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMDktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjMtICovXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIyNDpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjI1LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNDMtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI0NDpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjQ1LVxcdFxcdFxcdFxcdFxcdCAgICB1NjQgcmVxX3RpbWUpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjU2LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyNTc6c3RhdGljIGlubGluZSBib29sIGxhdGVuY3lfc3VtX29rKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjU4LVxcdFxcdFxcdFxcdCAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNjctXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI2ODpzdGF0aWMgaW5saW5lIHU2NCBsYXRlbmN5X3N0YXRfc2FtcGxlcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI2OS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNzUtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI3NjpzdGF0aWMgaW5saW5lIHZvaWQgaW9sYXRfdXBkYXRlX3RvdGFsX2xhdF9hdmcoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNzctXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yOTgtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI5OTpzdGF0aWMgdm9pZCBpb2xhdF9jbGVhbnVwX2NiKHN0cnVjdCBycV93YWl0ICpycXcsIHZvaWQgKnByaXZhdGVfZGF0YSlcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzAwLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMDQtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjMwNTpzdGF0aWMgYm9vbCBpb2xhdF9hY3F1aXJlX2luZmxpZ2h0KHN0cnVjdCBycV93YWl0ICpycXcsIHZvaWQgKnByaXZhdGVfZGF0YSlcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzA2LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMTAtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjMxMTpzdGF0aWMgdm9pZCBfX2Jsa2NnX2lvbGF0ZW5jeV90aHJvdHRsZShzdHJ1Y3QgcnFfcW9zICpycW9zLFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMTItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMzktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjM0MDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2NhbGVfYW1vdW50KHVuc2lnbmVkIGxvbmcgcWQsIGJvb2wgdXApXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTM0MS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzUzLSAqL1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzozNTQ6c3RhdGljIHZvaWQgc2NhbGVfY29va2llX2NoYW5nZShzdHJ1Y3QgYmxrX2lvbGF0ZW5jeSAqYmxraW9sYXQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTM1NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgY2hpbGRfbGF0ZW5jeV9pbmZvICpsYXRfaW5mbyxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zOTctICovXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjM5ODpzdGF0aWMgdm9pZCBzY2FsZV9jaGFuZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCBib29sIHVwKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zOTkte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQyMy0vKiBDaGVjayBvdXIgcGFyZW50IGFuZCBzZWUgaWYgdGhlIHNjYWxlIGNvb2tpZSBoYXMgY2hhbmdlZC4gKi9cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NDI0OnN0YXRpYyB2b2lkIGNoZWNrX3NjYWxlX2NoYW5nZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQyNS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNDg3LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo0ODg6c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X3Rocm90dGxlKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNDg5LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MTItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjUxMzpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCB1NjQgc3RhcnQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTUxNC1cXHRcXHRcXHRcXHQgIHU2NCBub3csIGJvb2wgaXNzdWVfYXNfcm9vdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MzktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQxLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDctXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjYwODpzdGF0aWMgdm9pZCBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW8oc3RydWN0IHJxX3FvcyAqcnFvcywgc3RydWN0IGJpbyAqYmlvKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDkte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY1OS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjYwOnN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY2MS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnFfcW9zX29wcyBibGtjZ19pb2xhdGVuY3lfb3BzID0ge1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY3NS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6Njc2OnN0YXRpYyB2b2lkIGJsa2lvbGF0ZW5jeV90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjc3LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NTItICovXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc1MzpzdGF0aWMgdm9pZCBibGtpb2xhdGVuY3lfZW5hYmxlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NTQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc4Mi1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NzgzOnN0YXRpYyBpbnQgYmxrX2lvbGF0ZW5jeV9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03ODQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTgxMS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6ODEyOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9zZXRfbWluX2xhdF9uc2VjKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgdTY0IHZhbClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODEzLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04MzMtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjgzNDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2xlYXJfc2NhbGluZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTgzNS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODUxLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo4NTI6c3RhdGljIHNzaXplX3QgaW9sYXRlbmN5X3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODUzLVxcdFxcdFxcdCAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05MjQtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjkyNTpzdGF0aWMgdTY0IGlvbGF0ZW5jeV9wcmZpbGxfbGltaXQoc3RydWN0IHNlcV9maWxlICpzZixcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTI2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLCBpbnQgb2ZmKVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzNy1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTM4OnN0YXRpYyBpbnQgaW9sYXRlbmN5X3ByaW50X2xpbWl0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzOS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTQ1LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5NDY6c3RhdGljIHZvaWQgaW9sYXRlbmN5X3NzZF9zdGF0KHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgc3RydWN0IHNlcV9maWxlICpzKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NDcte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk3MC1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTcxOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9zdGF0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCwgc3RydWN0IHNlcV9maWxlICpzKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NzIte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk5Mi1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTkzOnN0YXRpYyBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqaW9sYXRlbmN5X3BkX2FsbG9jKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05OTQtXFx0XFx0c3RydWN0IGJsa2NnICpibGtjZywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwMDktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwMTA6c3RhdGljIHZvaWQgaW9sYXRlbmN5X3BkX2luaXQoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDExLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDQ5LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDUwOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9vZmZsaW5lKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA1MS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA1OC1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA1OTpzdGF0aWMgdm9pZCBpb2xhdF9yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDYwLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDY4LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDY5OnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9mcmVlKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA3MC17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MTA5Mz1zdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9sYXRlbmN5ID0ge1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMDEtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjExMDI6c3RhdGljIGludCBfX2luaXQgaW9sYXRlbmN5X2luaXQodm9pZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwMy17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwNi1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTEwNzpzdGF0aWMgdm9pZCBfX2V4aXQgaW9sYXRlbmN5X2V4aXQodm9pZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwOC17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTExMS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTExMjptb2R1bGVfaW5pdChpb2xhdGVuY3lfaW5pdCk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjExMTM6bW9kdWxlX2V4aXQoaW9sYXRlbmN5X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODoyMi44NDU2OTU4NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0MDI5MDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MgZm9yIHRoaXMgSS9PIGxhdGVuY3kgbW9uaXRvcmluZyBzZXR1cC4gRmlyc3QsIEknbSBnb2luZyB0byBncmFiIHRoZSBjb3JlIGZvY3VzIHN5bWJvbHM6IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCwgYGJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb2AsIGBpb2xhdGVuY3lfcmVjb3JkX3RpbWVgLCBhbmQgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSdyZSBhbGwgZGVmaW5lZCBhbmQgd29ya2luZyB0b2dldGhlciBwcm9wZXJseS5cblxuTm93IGZvciB0aGUgY29uZmlnIG9wdGlvbnMuIEknbSBnb2luZyB0byBiZSB1c2luZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgb2YgY291cnNlLCBpdCByZWxpZXMgb24gYEJMS19DR1JPVVBgLiBBbHJpZ2h0LCB0aW1lIGZvciBhIHF1aWNrIGF1ZGl0LiBObyBtaXNzaW5nIHBpZWNlcywgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgdHJlZSBpcyBzb2xpZC4gU28sIEkgc2VlIHRoYXQgYEJMS19DR1JPVVBgIGl0c2VsZiBuZWVkcyBgQkxPQ0tgLiBSaWdodCwgbWFrZXMgc2Vuc2U7IGNhbid0IG1hbmFnZSBibG9jayBJL08gd2l0aG91dCB0aGUgZnVuZGFtZW50YWwgYmxvY2sgZGV2aWNlIHN1cHBvcnQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbGFzdCB0aW1lIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IGRlcGVuZGVuY3kuIFllcCwgZXZlcnl0aGluZyBsb29rcyByaWdodC4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMTgsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjI1Ljg4NTk4OTM5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODQxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNcIixcbiAgICBcImJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb1wiLFxuICAgIFwiaW9sYXRlbmN5X3JlY29yZF90aW1lXCIsXG4gICAgXCJpb2xhdGVuY3lfc2V0X2xpbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc1wiLFxuICAgIFwiYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvXCIsXG4gICAgXCJpb2xhdGVuY3lfcmVjb3JkX3RpbWVcIixcbiAgICBcImlvbGF0ZW5jeV9zZXRfbGltaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGJsay1pb2xhdGVuY3kpIGJ5IGludHJvZHVjaW5nIGxhdGVuY3lfc3RhdF9tZXJnZSgpIHRvIGNvcnJlY3RseSBtZXJnZSBhZ2dyZWdhdGVkIHN0YXRpc3RpY3MgaW5zdGVhZCBvZiBpbnZva2luZyBibGtfcnFfc3RhdF9zdW0oKSB3aGVuIGFnZ3JlZ2F0aW5nIGxhdGVuY3kgbWV0cmljcy4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBrZXJuZWwgYXJpdGhtZXRpYyBhbmQgc3RhdGlzdGljcyB1cGRhdGluZyBsb2dpYyBkdXJpbmcgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYW5kIGNncm91cCB0aHJvdHRsaW5nIGV2YWx1YXRpb24uIEZ1enppbmcgY2FuIGhlbHAgaWRlbnRpZnkgYXJpdGhtZXRpYyBlZGdlIGNhc2VzLCBkaXZpc2lvbiBpc3N1ZXMsIG9yIGxhdGVuY3kgY2FsY3VsYXRpb24gcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjI1Ljk2MTgzNzkwOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMTgzODE3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODoyNS45NjIzODk3ODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODIxNzgyNTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllcidzIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGBibGstaW9sYXRlbmN5LmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGBsYXRlbmN5X3N0YXRfbWVyZ2UoKWAgdG8gbWVyZ2UgYWxyZWFkeS1hZ2dyZWdhdGVkIGBsYXRlbmN5X3N0YXRgIHN0cnVjdHVyZXMgYnkgcmVjb25zdHJ1Y3RpbmcgdGhlIHRvdGFsIGxhdGVuY3kgdXNpbmcgYG1lYW4gKiBucl9zYW1wbGVzYCByYXRoZXIgdGhhbiBjYWxsaW5nIGBibGtfcnFfc3RhdF9zdW0oKWAsIHdoaWNoIGV4cGVjdHMgcGVyLUNQVSB1bmFnZ3JlZ2F0ZWQgc3RhdHMgd2l0aCBgc3JjLVxcdTAwM2ViYXRjaGAgc2V0LlxcblxcbkFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIChzdWNoIGFzIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBsYXRlbmN5X3N0YXQgc3RhdGAgaW4gYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBsYXRlbmN5X3N0YXRfaW5pdCgpYCBwcmlvciB0byBhY2Nlc3MuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkbyBub3QgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB1c2VyIEFCSSBib3VuZGFyaWVzLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3ZGQ3NzQ5MWU4NzY2MWEyODNmZjcxYTEzNjcxZjI3YzA2OGIxY2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG5pbmRleCAyY2FhNzlhMDA4YWQxLi4yMjNkM2E1ZTJiZjFjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG4rKysgYi9ibG9jay9ibGstaW9sYXRlbmN5LmNcbkBAIC0yMTYsNiArMjE2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiBcdFx0YmxrX3JxX3N0YXRfc3VtKFx1MDAyNnN1bS1cdTAwM2VycXMsIFx1MDAyNnN0YXQtXHUwMDNlcnFzKTtcbiB9XG4gXG4rLypcbisgKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXG4rICogKG1lYW4gKiBucl9zYW1wbGVzKTsgYmxrX3JxX3N0YXRfc3VtKCkgcmVhZHMgc3JjLVx1MDAzZWJhdGNoLCB3aGljaCBpcyAwXG4rICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9tZXJnZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxuK3tcbitcdGlmIChpb2xhdC1cdTAwM2Vzc2QpIHtcbitcdFx0c3VtLVx1MDAzZXBzLnRvdGFsICs9IHN0YXQtXHUwMDNlcHMudG90YWw7XG4rXHRcdHN1bS1cdTAwM2Vwcy5taXNzZWQgKz0gc3RhdC1cdTAwM2Vwcy5taXNzZWQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICsgc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcyBcdTAwM2M9XG4rXHRcdCAgICBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMpXG4rXHRcdFx0cmV0dXJuO1xuK1x0XHRzdW0tXHUwMDNlcnFzLm1lYW4gPSBkaXZfdTY0KHN1bS1cdTAwM2VycXMubWVhbiAqIHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyArXG4rXHRcdFx0XHRcdHN0YXQtXHUwMDNlcnFzLm1lYW4gKiBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzLFxuK1x0XHRcdFx0XHRzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgKyBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzKTtcbitcdFx0c3VtLVx1MDAzZXJxcy5taW4gPSBtaW4oc3VtLVx1MDAzZXJxcy5taW4sIHN0YXQtXHUwMDNlcnFzLm1pbik7XG4rXHRcdHN1bS1cdTAwM2VycXMubWF4ID0gbWF4KHN1bS1cdTAwM2VycXMubWF4LCBzdGF0LVx1MDAzZXJxcy5tYXgpO1xuK1x0XHRzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgKz0gc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcztcbitcdH1cbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gXHRcdFx0XHRcdCAgICB1NjQgcmVxX3RpbWUpXG4ge1xuQEAgLTU0Nyw3ICs1NzIsNyBAQCBzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbiBcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsYXRfaW5mby1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG4rXHRsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0LCBcdTAwMjZzdGF0KTtcbiBcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXHUwMDNlbnJfc2FtcGxlcztcbiBcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgKz0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiBcdGlvbGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MjUuOTYyMzkwOTE4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODk2MDU0MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOL0tBU0FOIE5lZWRzIGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCB3YXJyYW50cyBhIHNwZWNpZmljIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyBhIHRyaWFnZSBzaXR1YXRpb24sIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgaW5jcmVhc2luZyB0aG9zZSByaXNrcz8gSSdtIGFwcHJvYWNoaW5nIHRoaXMgd2l0aCBhIHNhZmV0eS1maXJzdCBtaW5kc2V0LiBJdCdzIGEgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nIGFuZCB0ZXN0aW5nIHRhc2ssIHNvIGxldCdzIGdldCBpdCByaWdodC5cblxuVGhpcyBpcyBhIHByZXR0eSBiZW5pZ24gcmVxdWVzdCBvdmVyYWxsLCBzbyBJ4oCZbSBnb2luZyB0byBjb25zaWRlciB0aGlzIGEgc2FmZSBmdWxmaWxsLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBicmVhayBvdXQgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGFuZCBpZGVudGlmeSBpZiB0aGVyZSdzIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gSSdsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIHBvaW50ZXIgYXNzaWdubWVudHMsIGFuZCB1c2VzIG9mIGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlYWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzay4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODozNy44NTg0NDg5MzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1pb2xhdGVuY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFxuIDUyMTpcXHRcXHRyZXFfdGltZSA9IG5vdyAtIHN0YXJ0O1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHQvKlxcbiA1MjQ6XFx0XFx0ICogV2UgZG9uJ3Qgd2FudCB0byBjb3VudCBpc3N1ZV9hc19yb290IGJpbydzIGluIHRoZSBjZ3JvdXBzIGxhdGVuY3lcXG4gNTI1OlxcdFxcdCAqIHN0YXRpc3RpY3MgYXMgaXQgY291bGQgc2tldyB0aGUgbnVtYmVycyBkb3dud2FyZHMuXFxuIDUyNjpcXHRcXHQgKi9cXG4gNTI3OlxcdFxcdGlmICh1bmxpa2VseShpc3N1ZV9hc19yb290IFxcdTAwMjZcXHUwMDI2IGlvbGF0LVxcdTAwM2VtYXhfZGVwdGggIT0gVUlOVF9NQVgpKSB7XFxuIDUyODpcXHRcXHRcXHR1NjQgc3ViID0gaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYztcXG4gNTI5OlxcdFxcdFxcdGlmIChyZXFfdGltZSBcXHUwMDNjIHN1YilcXG4gNTMwOlxcdFxcdFxcdFxcdGJsa2NnX2FkZF9kZWxheShsYXRfdG9fYmxrZyhpb2xhdCksIG5vdywgc3ViIC0gcmVxX3RpbWUpO1xcbiA1MzE6XFx0XFx0XFx0cmV0dXJuO1xcbiA1MzI6XFx0XFx0fVxcbiA1MzM6XFx0XFxuIDUzNDpcXHRcXHRsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoaW9sYXQsIHJlcV90aW1lKTtcXG4gNTM1OlxcdH1cXG4gNTM2OlxcdFxcbiA1Mzc6XFx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX0FESlVTVF9USU1FICg1MDAgKiBOU0VDX1BFUl9NU0VDKVxcbiA1Mzg6XFx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUyA1XFxuIDUzOTpcXHRcXG4gNTQwOlxcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCB1NjQgbm93KVxcbiA1NDE6XFx0e1xcbiA1NDI6XFx0XFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gbGF0X3RvX2Jsa2coaW9sYXQpO1xcbiA1NDM6XFx0XFx0c3RydWN0IGlvbGF0ZW5jeV9ncnAgKnBhcmVudDtcXG4gNTQ0OlxcdFxcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gKmxhdF9pbmZvO1xcbiA1NDU6XFx0XFx0c3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0O1xcbiA1NDY6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gNTQ3OlxcdFxcdGludCBjcHU7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBcXHUwMDI2c3RhdCk7XFxuIDU1MDpcXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gNTUxOlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4gNTUyOlxcdFxcdFxcdHN0cnVjdCBsYXRlbmN5X3N0YXQgKnM7XFxuIDU1MzpcXHRcXHRcXHRzID0gcGVyX2NwdV9wdHIoaW9sYXQtXFx1MDAzZXN0YXRzLCBjcHUpO1xcbiA1NTQ6XFx0XFx0XFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXFx1MDAyNnN0YXQsIHMpO1xcbiA1NTU6XFx0XFx0XFx0bGF0ZW5jeV9zdGF0X2luaXQoaW9sYXQsIHMpO1xcbiA1NTY6XFx0XFx0fVxcbiA1NTc6XFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gNTU4OlxcdFxcbiA1NTk6XFx0XFx0cGFyZW50ID0gYmxrZ190b19sYXQoYmxrZy1cXHUwMDNlcGFyZW50KTtcXG4gNTYwOlxcdFxcdGlmICghcGFyZW50KVxcbiA1NjE6XFx0XFx0XFx0cmV0dXJuO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHRsYXRfaW5mbyA9IFxcdTAwMjZwYXJlbnQtXFx1MDAzZWNoaWxkX2xhdDtcXG4gNTY0OlxcdFxcbiA1NjU6XFx0XFx0aW9sYXRfdXBkYXRlX3RvdGFsX2xhdF9hdmcoaW9sYXQsIFxcdTAwMjZzdGF0KTtcXG4gNTY2OlxcdFxcbiA1Njc6XFx0XFx0LyogRXZlcnl0aGluZyBpcyBvayBhbmQgd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgdGhlIHNjYWxlLiAqL1xcbiA1Njg6XFx0XFx0aWYgKGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcXHUwMDI2c3RhdCkgXFx1MDAyNlxcdTAwMjZcXG4gNTY5OlxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2bGF0X2luZm8tXFx1MDAzZXNjYWxlX2Nvb2tpZSkgPT0gREVGQVVMVF9TQ0FMRV9DT09LSUUpXFxuIDU3MDpcXHRcXHRcXHRyZXR1cm47XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXFxuIDU3MzpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bGF0X2luZm8tXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0bGF0ZW5jeV9zdGF0X21lcmdlKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0LCBcXHUwMDI2c3RhdCk7XFxuIDU3NjpcXHRcXHRsYXRfaW5mby1cXHUwMDNlbnJfc2FtcGxlcyAtPSBpb2xhdC1cXHUwMDNlbnJfc2FtcGxlcztcXG4gNTc3OlxcdFxcdGxhdF9pbmZvLVxcdTAwM2Vucl9zYW1wbGVzICs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KTtcXG4gNTc4OlxcdFxcdGlvbGF0LVxcdTAwM2Vucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFxcdTAwMjZpb2xhdC1cXHUwMDNlY3VyX3N0YXQpO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRpZiAoKGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50IFxcdTAwM2U9IG5vdyB8fFxcbiA1ODE6XFx0XFx0ICAgIG5vdyAtIGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50IFxcdTAwM2MgQkxLSU9MQVRFTkNZX01JTl9BREpVU1RfVElNRSkpXFxuIDU4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0aWYgKGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KSBcXHUwMDI2XFx1MDAyNlxcbiA1ODU6XFx0XFx0ICAgIGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcXHUwMDI2c3RhdCkpIHtcXG4gNTg2OlxcdFxcdFxcdGlmIChsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCkgXFx1MDAzY1xcbiA1ODc6XFx0XFx0XFx0ICAgIEJMS0lPTEFURU5DWV9NSU5fR09PRF9TQU1QTEVTKVxcbiA1ODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU4OTpcXHRcXHRcXHRpZiAobGF0X2luZm8tXFx1MDAzZXNjYWxlX2dycCA9PSBpb2xhdCkge1xcbiA1OTA6XFx0XFx0XFx0XFx0bGF0X2luZm8tXFx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XFxuIDU5MTpcXHRcXHRcXHRcXHRzY2FsZV9jb29raWVfY2hhbmdlKGlvbGF0LVxcdTAwM2VibGtpb2xhdCwgbGF0X2luZm8sIHRydWUpO1xcbiA1OTI6XFx0XFx0XFx0fVxcbiA1OTM6XFx0XFx0fSBlbHNlIGlmIChsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0ID09IDAgfHxcXG4gNTk0OlxcdFxcdFxcdCAgIGxhdF9pbmZvLVxcdTAwM2VzY2FsZV9sYXQgXFx1MDAzZT0gaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYykge1xcbiA1OTU6XFx0XFx0XFx0bGF0X2luZm8tXFx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XFxuIDU5NjpcXHRcXHRcXHRpZiAoIWxhdF9pbmZvLVxcdTAwM2VzY2FsZV9ncnAgfHxcXG4gNTk3OlxcdFxcdFxcdCAgICBsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0IFxcdTAwM2UgaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYykge1xcbiA1OTg6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0LCBpb2xhdC1cXHUwMDNlbWluX2xhdF9uc2VjKTtcXG4gNTk5OlxcdFxcdFxcdFxcdGxhdF9pbmZvLVxcdTAwM2VzY2FsZV9ncnAgPSBpb2xhdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MzcuODU4NTYyNjczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDY0NDI5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIExhdGVuY3kgU3RhdGlzdGljcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgbGF0ZW5jeSB0cmFja2luZyBpcyBpbXBsZW1lbnRlZC4gRmlyc3QsIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgY29yZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnM6IHNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgbGF0ZW5jeV9zdGF0X2luaXRgLCBgbGF0ZW5jeV9zdGF0X3N1bWAsIGBibGtfcnFfc3RhdF9zdW1gLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBsYXRlbmN5X3N0YXRgIHN0cnVjdCBpdHNlbGYuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGVuLCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBMaW5lcyAxNTAtMjUwIG9mIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBjb250ZXh0IGFuZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEknbSBhZnRlciwgd2hlcmUgSSBjYW4gZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzIGFuZCB3aGVyZSBzdGF0cyBhcmUgY29sbGVjdGVkLiBUaGlzIHNob3VsZCByZWZyZXNoIG15IGtub3dsZWRnZSBvbiB0aGUgbGF0ZW5jeSBtZWFzdXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MzkuODA1MDA4OTYzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0XFx0LyogdG90YWwgcnVubmluZyBhdmVyYWdlIG9mIG91ciBpbyBsYXRlbmN5LiAqL1xcbiAxNTI6XFx0XFx0dTY0IGxhdF9hdmc7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdC8qIE91ciBjdXJyZW50IG51bWJlciBvZiBJTydzIGZvciB0aGUgbGFzdCBzdW1tYXRpb24uICovXFxuIDE1NTpcXHRcXHR1NjQgbnJfc2FtcGxlcztcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0Ym9vbCBzc2Q7XFxuIDE1ODpcXHRcXHRzdHJ1Y3QgY2hpbGRfbGF0ZW5jeV9pbmZvIGNoaWxkX2xhdDtcXG4gMTU5OlxcdH07XFxuIDE2MDpcXHRcXG4gMTYxOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9XSU5fU0laRSAoMTAwICogTlNFQ19QRVJfTVNFQylcXG4gMTYyOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01BWF9XSU5fU0laRSBOU0VDX1BFUl9TRUNcXG4gMTYzOlxcdC8qXFxuIDE2NDpcXHQgKiBUaGVzZSBhcmUgdGhlIGNvbnN0YW50cyB1c2VkIHRvIGZha2UgdGhlIGZpeGVkLXBvaW50IG1vdmluZyBhdmVyYWdlXFxuIDE2NTpcXHQgKiBjYWxjdWxhdGlvbiBqdXN0IGxpa2UgbG9hZCBhdmVyYWdlLiAgVGhlIGNhbGwgdG8gY2FsY19sb2FkKCkgZm9sZHNcXG4gMTY2OlxcdCAqIChGSVhFRF8xICgyMDQ4KSAtIGV4cF9mYWN0b3IpICogbmV3X3NhbXBsZSBpbnRvIGxhdF9hdmcuICBUaGUgc2FtcGxpbmdcXG4gMTY3OlxcdCAqIHdpbmRvdyBzaXplIGlzIGJ1Y2tldGVkIHRvIHRyeSB0byBhcHByb3hpbWF0ZWx5IGNhbGN1bGF0ZSBhdmVyYWdlXFxuIDE2ODpcXHQgKiBsYXRlbmN5IHN1Y2ggdGhhdCAxL2V4cCAoZGVjYXkgcmF0ZSkgaXMgWzEgbWluLCAyLjUgbWluKSB3aGVuIHdpbmRvd3NcXG4gMTY5OlxcdCAqIGVsYXBzZSBpbW1lZGlhdGVseS4gIE5vdGUsIHdpbmRvd3Mgb25seSBlbGFwc2Ugd2l0aCBJTyBhY3Rpdml0eS4gIElkbGVcXG4gMTcwOlxcdCAqIHBlcmlvZHMgZXh0ZW5kIHRoZSBtb3N0IHJlY2VudCB3aW5kb3cuXFxuIDE3MTpcXHQgKi9cXG4gMTcyOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX05SX0VYUF9GQUNUT1JTIDVcXG4gMTczOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX0VYUF9CVUNLRVRfU0laRSAoQkxLSU9MQVRFTkNZX01BWF9XSU5fU0laRSAvIFxcXFxcXG4gMTc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIChCTEtJT0xBVEVOQ1lfTlJfRVhQX0ZBQ1RPUlMgLSAxKSlcXG4gMTc1OlxcdHN0YXRpYyBjb25zdCB1NjQgaW9sYXRlbmN5X2V4cF9mYWN0b3JzW0JMS0lPTEFURU5DWV9OUl9FWFBfRkFDVE9SU10gPSB7XFxuIDE3NjpcXHRcXHQyMDQ1LCAvLyBleHAoMS82MDApIC0gNjAwIHNhbXBsZXNcXG4gMTc3OlxcdFxcdDIwMzksIC8vIGV4cCgxLzI0MCkgLSAyNDAgc2FtcGxlc1xcbiAxNzg6XFx0XFx0MjAzMSwgLy8gZXhwKDEvMTIwKSAtIDEyMCBzYW1wbGVzXFxuIDE3OTpcXHRcXHQyMDIzLCAvLyBleHAoMS84MCkgIC0gODAgc2FtcGxlc1xcbiAxODA6XFx0XFx0MjAxNCwgLy8gZXhwKDEvNjApICAtIDYwIHNhbXBsZXNcXG4gMTgxOlxcdH07XFxuIDE4MjpcXHRcXG4gMTgzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKnBkX3RvX2xhdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRyZXR1cm4gcGQgPyBjb250YWluZXJfb2YocGQsIHN0cnVjdCBpb2xhdGVuY3lfZ3JwLCBwZCkgOiBOVUxMO1xcbiAxODY6XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpibGtnX3RvX2xhdChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuIDE4OTpcXHR7XFxuIDE5MDpcXHRcXHRyZXR1cm4gcGRfdG9fbGF0KGJsa2dfdG9fcGQoYmxrZywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpKTtcXG4gMTkxOlxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2dfZ3EgKmxhdF90b19ibGtnKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdClcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdHJldHVybiBwZF90b19ibGtnKFxcdTAwMjZpb2xhdC1cXHUwMDNlcGQpO1xcbiAxOTY6XFx0fVxcbiAxOTc6XFx0XFxuIDE5ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X2luaXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbiAxOTk6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxcbiAyMDA6XFx0e1xcbiAyMDE6XFx0XFx0aWYgKGlvbGF0LVxcdTAwM2Vzc2QpIHtcXG4gMjAyOlxcdFxcdFxcdHN0YXQtXFx1MDAzZXBzLnRvdGFsID0gMDtcXG4gMjAzOlxcdFxcdFxcdHN0YXQtXFx1MDAzZXBzLm1pc3NlZCA9IDA7XFxuIDIwNDpcXHRcXHR9IGVsc2VcXG4gMjA1OlxcdFxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNnN0YXQtXFx1MDAzZXJxcyk7XFxuIDIwNjpcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gMjA5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXFxuIDIxMDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdGlmIChpb2xhdC1cXHUwMDNlc3NkKSB7XFxuIDIxMzpcXHRcXHRcXHRzdW0tXFx1MDAzZXBzLnRvdGFsICs9IHN0YXQtXFx1MDAzZXBzLnRvdGFsO1xcbiAyMTQ6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy5taXNzZWQgKz0gc3RhdC1cXHUwMDNlcHMubWlzc2VkO1xcbiAyMTU6XFx0XFx0fSBlbHNlXFxuIDIxNjpcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNnN1bS1cXHUwMDNlcnFzLCBcXHUwMDI2c3RhdC1cXHUwMDNlcnFzKTtcXG4gMjE3OlxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0LypcXG4gMjIwOlxcdCAqIE1lcmdlIGFuIGFscmVhZHktYWdncmVnYXRlZCBAc3RhdCBpbnRvIEBzdW0gYnkgcmVjb25zdHJ1Y3RlZCB0b3RhbHNcXG4gMjIxOlxcdCAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcXG4gMjIyOlxcdCAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxcbiAyMjM6XFx0ICovXFxuIDIyNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gMjI1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuIDIyNzpcXHR7XFxuIDIyODpcXHRcXHRpZiAoaW9sYXQtXFx1MDAzZXNzZCkge1xcbiAyMjk6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy50b3RhbCArPSBzdGF0LVxcdTAwM2Vwcy50b3RhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MzkuODA1MTY5MDYzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTAzMzU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgUmVxdWVzdCBTdGF0aXN0aWNzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aG9zZSBibG9jayByZXF1ZXN0IHN0YXRpc3RpY3MgZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHF1aWNrIG92ZXJ2aWV3LiBJIHRoaW5rIEknbGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBhbmQgYW55IG9idmlvdXMgY2FsbHMgdG8gYm90aCBgYmxrX3JxX3N0YXRfaW5pdGAgYW5kIGBibGtfcnFfc3RhdF9zdW1gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0J3MgYSBzb2xpZCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0LiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGludG8gdGhlIG1vcmUgZGV0YWlsZWQgY29kZSBhcyByZXF1aXJlZCwgbGlrZWx5IHVzaW5nIHRoZSBvdXRwdXQgb2YgYGdyZXBwZXJgIGFzIGEganVtcGluZy1vZmYgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjQxLjYxNTUwNzIxNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNDk0NjgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfcnFfc3RhdF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTE5OD1zdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X2luaXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNC1cXHR9IGVsc2VcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjA1OlxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNnN0YXQtXFx1MDAzZXJxcyk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNi19XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjA4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMTUtXFx0fSBlbHNlXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIxNjpcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNnN1bS1cXHUwMDNlcnFzLCBcXHUwMDI2c3RhdC1cXHUwMDNlcnFzKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE3LX1cXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjAtICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMjE6ICogKG1lYW4gKiBucl9zYW1wbGVzKTsgYmxrX3JxX3N0YXRfc3VtKCkgcmVhZHMgc3JjLVxcdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjItICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI1Mi1cXHR9IGVsc2VcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjUzOlxcdFxcdGJsa19ycV9zdGF0X2FkZChcXHUwMDI2c3RhdC1cXHUwMDNlcnFzLCByZXFfdGltZSk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI1NC1cXHRwdXRfY3B1X3B0cihzdGF0KTtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmM9MTQ9c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTE5LVxcbmJsb2NrL2Jsay1zdGF0LmM6MjA6dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcXG5ibG9jay9ibGstc3RhdC5jLTIxLXtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtMjctLyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbid0IGluaXRpYWxpemVkICovXFxuYmxvY2svYmxrLXN0YXQuYzoyODp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuYmxvY2svYmxrLXN0YXQuYy0yOS17XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTQxLVxcbmJsb2NrL2Jsay1zdGF0LmM6NDI6dm9pZCBibGtfcnFfc3RhdF9hZGQoc3RydWN0IGJsa19ycV9zdGF0ICpzdGF0LCB1NjQgdmFsdWUpXFxuYmxvY2svYmxrLXN0YXQuYy00My17XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTUwPXZvaWQgYmxrX3N0YXRfYWRkKHN0cnVjdCByZXF1ZXN0ICpycSwgdTY0IG5vdylcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtNzAtXFx0XFx0c3RhdCA9IFxcdTAwMjZwZXJfY3B1X3B0cihjYi1cXHUwMDNlY3B1X3N0YXQsIGNwdSlbYnVja2V0XTtcXG5ibG9jay9ibGstc3RhdC5jOjcxOlxcdFxcdGJsa19ycV9zdGF0X2FkZChzdGF0LCB2YWx1ZSk7XFxuYmxvY2svYmxrLXN0YXQuYy03Mi1cXHR9XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTc3PXN0YXRpYyB2b2lkIGJsa19zdGF0X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy04My1cXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIGNiLVxcdTAwM2VidWNrZXRzOyBidWNrZXQrKylcXG5ibG9jay9ibGstc3RhdC5jOjg0OlxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNmNiLVxcdTAwM2VzdGF0W2J1Y2tldF0pO1xcbmJsb2NrL2Jsay1zdGF0LmMtODUtXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTkwLVxcdFxcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFxcdTAwM2MgY2ItXFx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCsrKSB7XFxuYmxvY2svYmxrLXN0YXQuYzo5MTpcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNmNiLVxcdTAwM2VzdGF0W2J1Y2tldF0sIFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG5ibG9jay9ibGstc3RhdC5jOjkyOlxcdFxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xcbmJsb2NrL2Jsay1zdGF0LmMtOTMtXFx0XFx0fVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYz0xMzI9dm9pZCBibGtfc3RhdF9hZGRfY2FsbGJhY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTE0My1cXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIGNiLVxcdTAwM2VidWNrZXRzOyBidWNrZXQrKylcXG5ibG9jay9ibGstc3RhdC5jOjE0NDpcXHRcXHRcXHRibGtfcnFfc3RhdF9pbml0KFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG5ibG9jay9ibGstc3RhdC5jLTE0NS1cXHR9XFxuLS1cXG5ibG9jay9ibGstc3RhdC5oPTE2Nz1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3N0YXRfYWN0aXZhdGVfbXNlY3Moc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYixcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmgtMTcyLVxcbmJsb2NrL2Jsay1zdGF0Lmg6MTczOnZvaWQgYmxrX3JxX3N0YXRfYWRkKHN0cnVjdCBibGtfcnFfc3RhdCAqLCB1NjQpO1xcbmJsb2NrL2Jsay1zdGF0Lmg6MTc0OnZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqLCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKik7XFxuYmxvY2svYmxrLXN0YXQuaDoxNzU6dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqKTtcXG5ibG9jay9ibGstc3RhdC5oLTE3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6NDMuMjUwNDYwMDE5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MTAwNjY5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBibG9jay9ibGstc3RhdC5jYCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGJsb2NrL2Jsay1zdGF0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGJsb2NrL2Jsay1zdGF0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwga2VlcHMgdHJhY2sgb2YgYW5kIHByZXNlbnRzIGJsb2NrIGRldmljZSBzdGF0aXN0aWNzLiBNeSBtYWluIGZvY3VzIGhlcmUgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzdGF0cyBhcmUgKmNvbGxlY3RlZCosICphZ2dyZWdhdGVkKiwgYW5kIHVsdGltYXRlbHkgKmV4cG9zZWQqIHRvIHVzZXJzcGFjZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBibG9jayBkZXZpY2Ugc3RhdGlzdGljcywgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCByZWFkLCB3cml0ZSwgYW5kIG1hbmlwdWxhdGUgdGhlbS4gVGhpcyBzaG91bGQgaW5jbHVkZSB0aGluZ3MgbGlrZSBJL08gb3BlcmF0aW9uIGNvdW50cywgdHJhbnNmZXIgc2l6ZXMsIGFuZCBsYXRlbmNpZXMsIGFsbCBvcmdhbml6ZWQgYnkgZGV2aWNlIGFuZCBwb3RlbnRpYWxseSBieSBxdWV1ZS4gSXQncyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBzb21lIGdsb2JhbCBjb3VudGVycyBhbmQgdGhlbiBkZXZpY2Utc3BlY2lmaWMgb25lcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgY29uY3VycmVuY3kg4oCTIHRoaXMgaXMgdGhlIGtlcm5lbCwgYWZ0ZXIgYWxsLiBUaGVyZSAqaGFzKiB0byBiZSBsb2NraW5nIGludm9sdmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHNwaW5sb2NrcywgbXV0ZXhlcywgb3IgUkNVIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gSSdsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSBibG9jayBsYXllcidzIHJlcXVlc3QgcXVldWUsIHRoZSB2YXJpb3VzIGJpbyBwYXRocywgYW5kIGFueSBwZXItZGV2aWNlIG9yIHBlci1xdWV1ZSBpbmZvcm1hdGlvbi4gVGhlIGtlcm5lbCdzIHByb2NmcyBvciBzeXNmcyBpbnRlcmZhY2VzIHdpbGwgcHJvYmFibHkgYmUgaW52b2x2ZWQgc29tZXdoZXJlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlzdGljcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmVzZW50ZWQgdG8gdXNlci1zcGFjZSB0b29scyBsaWtlIGBpb3N0YXRgIG9yIGBibGtzdGF0YC4gS25vd2luZyB0aGUgZGV0YWlscyB3aWxsIGhlbHAgbWUgZmluZCBhbmQgaW50ZXJwcmV0IHRoZSByaWdodCBkYXRhIHRvIGNvbGxlY3QgYW5kIG1vbml0b3IgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjQ2LjA2MDUyOTg4NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstc3RhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBCbG9jayBzdGF0IHRyYWNraW5nIGNvZGVcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSmVucyBBeGJvZVxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXFwiYmxrLXN0YXQuaFxcXCJcXG4gIDExOlxcdCNpbmNsdWRlIFxcXCJibGstbXEuaFxcXCJcXG4gIDEyOlxcdCNpbmNsdWRlIFxcXCJibGsuaFxcXCJcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XFxuICAxNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNhbGxiYWNrcztcXG4gIDE2OlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gIDE3OlxcdFxcdGludCBhY2NvdW50aW5nO1xcbiAgMTg6XFx0fTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcXG4gIDIxOlxcdHtcXG4gIDIyOlxcdFxcdHN0YXQtXFx1MDAzZW1pbiA9IC0xVUxMO1xcbiAgMjM6XFx0XFx0c3RhdC1cXHUwMDNlbWF4ID0gc3RhdC1cXHUwMDNlbnJfc2FtcGxlcyA9IHN0YXQtXFx1MDAzZW1lYW4gPSAwO1xcbiAgMjQ6XFx0XFx0c3RhdC1cXHUwMDNlYmF0Y2ggPSAwO1xcbiAgMjU6XFx0fVxcbiAgMjY6XFx0XFxuICAyNzpcXHQvKiBzcmMgaXMgYSBwZXItY3B1IHN0YXQsIG1lYW4gaXNuJ3QgaW5pdGlhbGl6ZWQgKi9cXG4gIDI4OlxcdHZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYylcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdGlmIChkc3QtXFx1MDAzZW5yX3NhbXBsZXMgKyBzcmMtXFx1MDAzZW5yX3NhbXBsZXMgXFx1MDAzYz0gZHN0LVxcdTAwM2Vucl9zYW1wbGVzKVxcbiAgMzE6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRkc3QtXFx1MDAzZW1pbiA9IG1pbihkc3QtXFx1MDAzZW1pbiwgc3JjLVxcdTAwM2VtaW4pO1xcbiAgMzQ6XFx0XFx0ZHN0LVxcdTAwM2VtYXggPSBtYXgoZHN0LVxcdTAwM2VtYXgsIHNyYy1cXHUwMDNlbWF4KTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ZHN0LVxcdTAwM2VtZWFuID0gZGl2X3U2NChzcmMtXFx1MDAzZWJhdGNoICsgZHN0LVxcdTAwM2VtZWFuICogZHN0LVxcdTAwM2Vucl9zYW1wbGVzLFxcbiAgMzc6XFx0XFx0XFx0XFx0XFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICsgc3JjLVxcdTAwM2Vucl9zYW1wbGVzKTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICs9IHNyYy1cXHUwMDNlbnJfc2FtcGxlcztcXG4gIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0dm9pZCBibGtfcnFfc3RhdF9hZGQoc3RydWN0IGJsa19ycV9zdGF0ICpzdGF0LCB1NjQgdmFsdWUpXFxuICA0MzpcXHR7XFxuICA0NDpcXHRcXHRzdGF0LVxcdTAwM2VtaW4gPSBtaW4oc3RhdC1cXHUwMDNlbWluLCB2YWx1ZSk7XFxuICA0NTpcXHRcXHRzdGF0LVxcdTAwM2VtYXggPSBtYXgoc3RhdC1cXHUwMDNlbWF4LCB2YWx1ZSk7XFxuICA0NjpcXHRcXHRzdGF0LVxcdTAwM2ViYXRjaCArPSB2YWx1ZTtcXG4gIDQ3OlxcdFxcdHN0YXQtXFx1MDAzZW5yX3NhbXBsZXMrKztcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dm9pZCBibGtfc3RhdF9hZGQoc3RydWN0IHJlcXVlc3QgKnJxLCB1NjQgbm93KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODo0Ni4wNjA2MTY3MDZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODExOTU3NjYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBCbG9jayBJL08gTGF0ZW5jeSBBZ2dyZWdhdGlvbiBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBibGstaW9sYXRlbmN5LmNgLCBpdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiBvZiBtZWFuIGxhdGVuY2llcyBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agd2FzIGZsYXdlZC4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIG1ldGhvZCB1c2VkIGBsYXRlbmN5X3N0YXRfc3VtYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgYmxrX3JxX3N0YXRfc3VtYC4gVGhlIHByb2JsZW0gYXJvc2UgYmVjYXVzZSBgYmxrX3JxX3N0YXRfc3VtYCBjYWxjdWxhdGVkIHRoZSBtZWFuIGluY29ycmVjdGx5IHdoZW4gYWdncmVnYXRpbmcgcHJlLWNhbGN1bGF0ZWQgcGVyLUNQVSBzdGF0aXN0aWNzLiBUaGUgYGJhdGNoYCBmaWVsZCB3aXRoaW4gYHN0YXQtXHUwMDNlcnFzYCB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IHBvcHVsYXRlZCBkdXJpbmcgdGhlIHBlci1DUFUgYWdncmVnYXRpb24gbG9vcCwgc28gaXQgcmVtYWluZWQgemVyby4gVGhpcyBsZWQgdG8gYW4gaW5hY2N1cmF0ZSBtZWFuIGNhbGN1bGF0aW9uLiBUaGUgcGF0Y2ggY29ycmVjdGx5IGNhbGN1bGF0ZXMgdGhlIG1lYW4gdXNpbmcgdGhlIGBtZWFuICogbnJfc2FtcGxlc2Agb2YgYWxyZWFkeS1hZ2dyZWdhdGVkIHN0YXRpc3RpY3MsIGJ5IGludHJvZHVjaW5nIGBsYXRlbmN5X3N0YXRfbWVyZ2VgLlxuXG5Ob3csIHJlZ2FyZGluZyBLTVNBTiwgbGV0J3MgZW5zdXJlIHdlIGFyZSBzYWZlLiBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSwgYW5kIGhlcmUncyBteSByZWFzb25pbmcuIFRoZSBgc3RhdGAgdmFyaWFibGUsIGNydWNpYWwgZm9yIHRoZXNlIGNhbGN1bGF0aW9ucywgaXMgc3RhY2stYWxsb2NhdGVkLCBidXQgaXQncyAqYWx3YXlzKiBpbml0aWFsaXplZCB1c2luZyBgbGF0ZW5jeV9zdGF0X2luaXRgIGJlZm9yZSB1c2UuIFRoaXMgbWVhbnMgdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgbGF0ZW5jeV9zdGF0X2luaXRgIGZ1bmN0aW9uIGNvcnJlY3RseSBpbml0aWFsaXplcyBhbGwgZmllbGRzIChgdG90YWxgLCBgbWlzc2VkYCwgYG1pbmAsIGBtYXhgLCBgbnJfc2FtcGxlc2AsIGBtZWFuYCwgYW5kIGBiYXRjaGApLiBUaGlzIGlzIHNvbGlkLiBGdXJ0aGVybW9yZSwgdGhlIGFyaXRobWV0aWMgaW4gYGxhdGVuY3lfc3RhdF9tZXJnZWAgb3BlcmF0ZXMgb24gaW5pdGlhbGl6ZWQgaW50ZWdlciBmaWVsZHMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgZGVhbGxvY2F0aW9ucywgb3IgYW55IGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgY2hhbmdlIGFueSBjb2RlIHRoYXQ6XG4xLiAgU2VuZHMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbjIuICBEZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW4gY29uZGl0aW9uYWwgbG9naWMuXG4zLiAgQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgTW9kaWZpZXMgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZSBjaGFuZ2VzIHByaW1hcmlseSBkZWFsIHdpdGggdGhlIGFnZ3JlZ2F0aW9uICpsb2dpYyogdG8gZW5zdXJlIHByb3BlciBjYWxjdWxhdGlvbiBvZiB0aGUgbWVhbiBvZiBhbHJlYWR5IGFnZ3JlZ2F0ZWQgc3RhdHMsIGFuZCBhbGwgdG91Y2hlZCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4sIGFuZCB1bml0IHRlc3RzLCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gU28sIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cbkZpbmFsbHksIHRoZSBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBjbGVhcmx5IHN0YXRlIHRoZSBmaXggZm9yIHRoZSBzdGF0aXN0aWNhbCBhZ2dyZWdhdGlvbiBlcnJvciwgdGhhdCBhbGwgc3RydWN0cyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0IEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZW4sIHdlIGNhbiBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5NywiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6NTQuMTgwMTk2ODQ5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1hdGhlbWF0aWNhbCBjYWxjdWxhdGlvbiBidWcgaW4gdGhlIGJsb2NrIGxheWVyJ3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXFx1MDAzZWJhdGNoYCBzZXQuXFxuXFxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllcidzIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGBibGstaW9sYXRlbmN5LmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGBsYXRlbmN5X3N0YXRfbWVyZ2UoKWAgdG8gbWVyZ2UgYWxyZWFkeS1hZ2dyZWdhdGVkIGBsYXRlbmN5X3N0YXRgIHN0cnVjdHVyZXMgYnkgcmVjb25zdHJ1Y3RpbmcgdGhlIHRvdGFsIGxhdGVuY3kgdXNpbmcgYG1lYW4gKiBucl9zYW1wbGVzYCByYXRoZXIgdGhhbiBjYWxsaW5nIGBibGtfcnFfc3RhdF9zdW0oKWAsIHdoaWNoIGV4cGVjdHMgcGVyLUNQVSB1bmFnZ3JlZ2F0ZWQgc3RhdHMgd2l0aCBgc3JjLVxcdTAwM2ViYXRjaGAgc2V0LlxcblxcbkFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIChzdWNoIGFzIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBsYXRlbmN5X3N0YXQgc3RhdGAgaW4gYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBsYXRlbmN5X3N0YXRfaW5pdCgpYCBwcmlvciB0byBhY2Nlc3MuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkbyBub3QgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB1c2VyIEFCSSBib3VuZGFyaWVzLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 15:11:25 +0000 UTC FinishedAt: 2026-09-05 15:58:56 +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": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOLATENCY", "BLK_CGROUP" ], "series_id": "e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iolatency_check_latencies", "blkcg_iolatency_done_bio", "iolatency_record_time", "iolatency_set_limit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDssCiAgICAmIzM0O2Jsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfcmVjb3JkX3RpbWUmIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3NldF9saW1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWF0aGVtYXRpY2FsIGNhbGN1bGF0aW9uIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXHUwMDNlYmF0Y2hgIHNldC5cblxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYmxrLWlvbGF0ZW5jeSkgYnkgaW50cm9kdWNpbmcgbGF0ZW5jeV9zdGF0X21lcmdlKCkgdG8gY29ycmVjdGx5IG1lcmdlIGFnZ3JlZ2F0ZWQgc3RhdGlzdGljcyBpbnN0ZWFkIG9mIGludm9raW5nIGJsa19ycV9zdGF0X3N1bSgpIHdoZW4gYWdncmVnYXRpbmcgbGF0ZW5jeSBtZXRyaWNzLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGtlcm5lbCBhcml0aG1ldGljIGFuZCBzdGF0aXN0aWNzIHVwZGF0aW5nIGxvZ2ljIGR1cmluZyBibG9jayBJL08gb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHRocm90dGxpbmcgZXZhbHVhdGlvbi4gRnV6emluZyBjYW4gaGVscCBpZGVudGlmeSBhcml0aG1ldGljIGVkZ2UgY2FzZXMsIGRpdmlzaW9uIGlzc3Vlcywgb3IgbGF0ZW5jeSBjYWxjdWxhdGlvbiByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3ZGQ3NzQ5MWU4NzY2MWEyODNmZjcxYTEzNjcxZjI3YzA2OGIxY2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyBiL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuaW5kZXggMmNhYTc5YTAwOGFkMS4uMjIzZDNhNWUyYmYxYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG5AQCAtMjE2LDYgJiM0MzsyMTYsMzEgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIFx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2c3VtLVx1MDAzZXJxcywgXHUwMDI2c3RhdC1cdTAwM2VycXMpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xuJiM0MzsgKiAobWVhbiAqIG5yX3NhbXBsZXMpOyBibGtfcnFfc3RhdF9zdW0oKSByZWFkcyBzcmMtXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcbiYjNDM7ICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiYjNDM7e1xuJiM0MztcdGlmIChpb2xhdC1cdTAwM2Vzc2QpIHtcbiYjNDM7XHRcdHN1bS1cdTAwM2Vwcy50b3RhbCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy50b3RhbDtcbiYjNDM7XHRcdHN1bS1cdTAwM2Vwcy5taXNzZWQgJiM0Mzs9IHN0YXQtXHUwMDNlcHMubWlzc2VkO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMgXHUwMDNjPVxuJiM0MztcdFx0ICAgIHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0c3VtLVx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXHUwMDNlcnFzLm1lYW4gKiBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgJiM0MztcbiYjNDM7XHRcdFx0XHRcdHN0YXQtXHUwMDNlcnFzLm1lYW4gKiBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzLFxuJiM0MztcdFx0XHRcdFx0c3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMpO1xuJiM0MztcdFx0c3VtLVx1MDAzZXJxcy5taW4gPSBtaW4oc3VtLVx1MDAzZXJxcy5taW4sIHN0YXQtXHUwMDNlcnFzLm1pbik7XG4mIzQzO1x0XHRzdW0tXHUwMDNlcnFzLm1heCA9IG1heChzdW0tXHUwMDNlcnFzLm1heCwgc3RhdC1cdTAwM2VycXMubWF4KTtcbiYjNDM7XHRcdHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyAmIzQzOz0gc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gXHRcdFx0XHRcdCAgICB1NjQgcmVxX3RpbWUpXG4ge1xuQEAgLTU0Nyw3ICYjNDM7NTcyLDcgQEAgc3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXG4gXHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bGF0X2luZm8tXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQsIFx1MDAyNnN0YXQpO1xuJiM0MztcdGxhdGVuY3lfc3RhdF9tZXJnZShpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQsIFx1MDAyNnN0YXQpO1xuIFx0bGF0X2luZm8tXHUwMDNlbnJfc2FtcGxlcyAtPSBpb2xhdC1cdTAwM2Vucl9zYW1wbGVzO1xuIFx0bGF0X2luZm8tXHUwMDNlbnJfc2FtcGxlcyAmIzQzOz0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiBcdGlvbGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzJiMzNDssCiAgICAmIzM0O2Jsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyYjMzQ7LAogICAgJiMzNDtpb2xhdGVuY3lfcmVjb3JkX3RpbWUmIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3NldF9saW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGJsay1pb2xhdGVuY3kpIGJ5IGludHJvZHVjaW5nIGxhdGVuY3lfc3RhdF9tZXJnZSgpIHRvIGNvcnJlY3RseSBtZXJnZSBhZ2dyZWdhdGVkIHN0YXRpc3RpY3MgaW5zdGVhZCBvZiBpbnZva2luZyBibGtfcnFfc3RhdF9zdW0oKSB3aGVuIGFnZ3JlZ2F0aW5nIGxhdGVuY3kgbWV0cmljcy4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBrZXJuZWwgYXJpdGhtZXRpYyBhbmQgc3RhdGlzdGljcyB1cGRhdGluZyBsb2dpYyBkdXJpbmcgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYW5kIGNncm91cCB0aHJvdHRsaW5nIGV2YWx1YXRpb24uIEZ1enppbmcgY2FuIGhlbHAgaWRlbnRpZnkgYXJpdGhtZXRpYyBlZGdlIGNhc2VzLCBkaXZpc2lvbiBpc3N1ZXMsIG9yIGxhdGVuY3kgY2FsY3VsYXRpb24gcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2RkNzc0OTFlODc2NjFhMjgzZmY3MWExMzY3MWYyN2MwNjhiMWNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyBiL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYwppbmRleCAyY2FhNzlhMDA4YWQxLi4yMjNkM2E1ZTJiZjFjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstaW9sYXRlbmN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jCkBAIC0yMTYsNiAmIzQzOzIxNiwzMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsCiAJCWJsa19ycV9zdGF0X3N1bSgmYW1wO3N1bS0mZ3Q7cnFzLCAmYW1wO3N0YXQtJmd0O3Jxcyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIE1lcmdlIGFuIGFscmVhZHktYWdncmVnYXRlZCBAc3RhdCBpbnRvIEBzdW0gYnkgcmVjb25zdHJ1Y3RlZCB0b3RhbHMKJiM0MzsgKiAobWVhbiAqIG5yX3NhbXBsZXMpOyBibGtfcnFfc3RhdF9zdW0oKSByZWFkcyBzcmMtJmd0O2JhdGNoLCB3aGljaCBpcyAwCiYjNDM7ICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9tZXJnZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdCkKJiM0Mzt7CiYjNDM7CWlmIChpb2xhdC0mZ3Q7c3NkKSB7CiYjNDM7CQlzdW0tJmd0O3BzLnRvdGFsICYjNDM7PSBzdGF0LSZndDtwcy50b3RhbDsKJiM0MzsJCXN1bS0mZ3Q7cHMubWlzc2VkICYjNDM7PSBzdGF0LSZndDtwcy5taXNzZWQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoc3VtLSZndDtycXMubnJfc2FtcGxlcyAmIzQzOyBzdGF0LSZndDtycXMubnJfc2FtcGxlcyAmbHQ7PQomIzQzOwkJICAgIHN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJc3VtLSZndDtycXMubWVhbiA9IGRpdl91NjQoc3VtLSZndDtycXMubWVhbiAqIHN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMgJiM0MzsKJiM0MzsJCQkJCXN0YXQtJmd0O3Jxcy5tZWFuICogc3RhdC0mZ3Q7cnFzLm5yX3NhbXBsZXMsCiYjNDM7CQkJCQlzdW0tJmd0O3Jxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtJmd0O3Jxcy5ucl9zYW1wbGVzKTsKJiM0MzsJCXN1bS0mZ3Q7cnFzLm1pbiA9IG1pbihzdW0tJmd0O3Jxcy5taW4sIHN0YXQtJmd0O3Jxcy5taW4pOwomIzQzOwkJc3VtLSZndDtycXMubWF4ID0gbWF4KHN1bS0mZ3Q7cnFzLm1heCwgc3RhdC0mZ3Q7cnFzLm1heCk7CiYjNDM7CQlzdW0tJmd0O3Jxcy5ucl9zYW1wbGVzICYjNDM7PSBzdGF0LSZndDtycXMubnJfc2FtcGxlczsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LAogCQkJCQkgICAgdTY0IHJlcV90aW1lKQogewpAQCAtNTQ3LDcgJiM0Mzs1NzIsNyBAQCBzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdykKIAkvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bGF0X2luZm8tJmd0O2xvY2ssIGZsYWdzKTsKIAotCWxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsICZhbXA7aW9sYXQtJmd0O2N1cl9zdGF0LCAmYW1wO3N0YXQpOwomIzQzOwlsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsICZhbXA7aW9sYXQtJmd0O2N1cl9zdGF0LCAmYW1wO3N0YXQpOwogCWxhdF9pbmZvLSZndDtucl9zYW1wbGVzIC09IGlvbGF0LSZndDtucl9zYW1wbGVzOwogCWxhdF9pbmZvLSZndDtucl9zYW1wbGVzICYjNDM7PSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQpOwogCWlvbGF0LSZndDtucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsICZhbXA7aW9sYXQtJmd0O2N1cl9zdGF0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IHRoaXMgcGF0Y2ggdGFyZ2V0cyBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbXBhY3QuIFRpbWUgdG8gcHVsbCB1cCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJiMzOTtzIGZhc3Rlc3QgZm9yIHRoaXMga2luZCBvZiBxdWljayBpbnNwZWN0aW9uLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDIwMC0yNTAgYW5kIDUzMC01ODAgd2l0aGluIHRoYXQgZmlsZS4gVGhvc2UgcmFuZ2VzIG9mdGVuIGhvbGQgY3J1Y2lhbCBsb2dpYywgc28gSSYjMzk7bGwgZXhhbWluZSB0aGVtIGNsb3NlbHkuIFNpbXVsdGFuZW91c2x5LCBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgc2V0dGluZ3MgcmVsYXRlZCB0byBgYmxrLWlvbGF0ZW5jeS5jYCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgYmFja2dyb3VuZCB0byBzZWUgdGhlIHB1cnBvc2Ugb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay1pb2xhdGVuY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVx0JiM0Mzs9IGJsay1pb3ByaW8ub1xuYmxvY2svTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKVx0JiM0Mzs9IGJsay1pb2xhdGVuY3kub1xuYmxvY2svTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVx0JiM0Mzs9IGJsay1pb2Nvc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQkxLX0NHUk9VUF9JT0xBVEVOQ1kgaW4gdGhlIEJsb2NrIExheWVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLiBNeSBpbnR1aXRpb24gaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIGBibG9jay9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYmxvY2sgbGF5ZXIsIGFuZCwgc3BlY2lmaWNhbGx5LCBhbnl0aGluZyB0aWVkIHRvIGNncm91cHMgYW5kIEkvTyBsYXRlbmN5IHdvdWxkIGxvZ2ljYWxseSByZXNpZGUgdGhlcmUuIFNvLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBibG9jay9LY29uZmlnYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3ZWxsLWRvY3VtZW50ZWQuIElmIG5vdCwgSSYjMzk7bGwgbmVlZCB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBjaGFpbiBlbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbmJsb2NrL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcdCYjNDM7PSBibGstaW9sYXRlbmN5Lm9cbmJsb2NrL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVClcdCYjNDM7PSBibGstaW9jb3N0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJMS19DR1JPVVBfSU9MQVRFTkNZIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgemVybyBpbiBvbiBgYmxvY2svS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2Ygb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIGZpdHMgaW50byB0aGUgYnJvYWRlciBibG9jayBsYXllciBjb25maWd1cmF0aW9uLiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgb3IgdHJpc3RhdGVzIHRoYXQgZ292ZXJuIHdoZW4gYEJMS19DR1JPVVBfSU9MQVRFTkNZYCBpcyBldmVuIHByZXNlbnRlZCBhcyBhbiBvcHRpb24sIHdoaWNoIHdpbGwgbGlrZWx5IGludm9sdmUgb3RoZXIgY2dyb3VwLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7cmVxdWlyZXMmIzM0OyBhbmQgJiMzNDtkZXBlbmRzIG9uJiMzNDsgc3RhdGVtZW50cywgb2YgY291cnNlLCBidXQgSSYjMzk7bGwgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIGlzICpncm91cGVkKiB3aXRoaW4gdGhlIEtjb25maWcgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBsb2dpY2FsIGdyb3VwaW5ncyBnaXZlcyBtZSBhIGJldHRlciBmZWVsIGZvciB0aGUgZGVzaWduIHBoaWxvc29waHkgYmVoaW5kIHRoZSBtb2R1bGUgaXRzZWxmLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZ3JlYXRlciBibG9jayBJL08gY29udHJvbCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdGRlcGVuZHMgb24gQkxLX1dCVFxuIDEzMTpcdFx0aGVscFxuIDEzMjpcdFx0RW5hYmxlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGJ5IGRlZmF1bHQgZm9yIHJlcXVlc3QtYmFzZWQgYmxvY2sgZGV2aWNlcy5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEzNzpcdFx0aGVscFxuIDEzODpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLmxhdGVuY3kgaW50ZXJmYWNlIGZvciBJTyB0aHJvdHRsaW5nLlxuIDEzOTpcdFx0VGhlIElPIGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIG1haW50YWluIGF2ZXJhZ2UgSU8gbGF0ZW5jaWVzIGJlbG93XG4gMTQwOlx0XHR0aGUgY29uZmlndXJlZCBsYXRlbmN5IHRhcmdldCwgdGhyb3R0bGluZyBhbnlib2R5IHdpdGggYSBoaWdoZXIgbGF0ZW5jeVxuIDE0MTpcdFx0dGFyZ2V0IHRoYW4gdGhlIHZpY3RpbWl6ZWQgZ3JvdXAuXG4gMTQyOlx0XG4gMTQzOlx0XHROb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBpbnRlcmZhY2UgYW5kIGNvdWxkIGJlIGNoYW5nZWQgc29tZWRheS5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuIDE0NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQIFx1MDAyNlx1MDAyNiBOVk1FX0ZDXG4gMTQ4Olx0XHRoZWxwXG4gMTQ5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXG4gMTUwOlx0XHQgIGNncm91cCBhcHBsaWNhdGlvbnMuIEl0IGVuYWJsZXMgdGhlIEZhYnJpYyBhbmQgdGhlIHN0b3JhZ2UgdGFyZ2V0cyB0b1xuIDE1MTpcdFx0ICBpZGVudGlmeSwgbW9uaXRvciwgYW5kIGhhbmRsZSBGQyB0cmFmZmljIGJhc2VkIG9uIFZNIHRhZ3MgYnkgaW5zZXJ0aW5nXG4gMTUyOlx0XHQgIGFwcGxpY2F0aW9uIHNwZWNpZmljIGlkZW50aWZpY2F0aW9uIGludG8gdGhlIEZDIGZyYW1lLlxuIDE1MzpcdFxuIDE1NDpcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEJMS19DR1JPVVAqKgoKTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGNvbmZpcm1pbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1cnJvdW5kaW5nIGBCTEtfQ0dST1VQYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2Qgc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgZmVhdHVyZSYjMzk7cyB2aXNpYmlsaXR5LCBkZWZhdWx0IHNldHRpbmdzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgS2NvbmZpZyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGFueSBrZXJuZWwgZGV2ZWxvcGVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBldmVyeXRoaW5nIGFib3V0IHRoaXMgcGFydGljdWxhciBzZXR0aW5nIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcHJvamVjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQgaXMgZGVmaW5lZCwgaWYgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzZXR0aW5ncyB0aGF0IGFmZmVjdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEJMS19DR1JPVVAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQkxLX0NHUk9VUGAuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYWxtb3N0IGFsd2F5cyB0aGUgcmlnaHQgb25lIGZvciB0aGlzIGtpbmQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sLCBpcyB0byBsb29rIGluIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgbGFpZCBvdXQsIHdoZXJlIHRoZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQsIGFuZCB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSB1c3VhbGx5IHNwZWNpZmllZC4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBCTEtfQ0dST1VQYCBpcyBleHBvc2VkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgKGxpa2VseSBvbiBjZ3JvdXAtcmVsYXRlZCBmZWF0dXJlcyksIGFuZCBwb3RlbnRpYWxseSBldmVuIGJyaWVmIGNvbnRleHR1YWwgY29tbWVudHMuIEnigJltIHRoaW5raW5nIEnigJlsbCBzZWUgY29uZGl0aW9uYWwgbG9naWMgaGVyZSDigJMgd2hldGhlciBpdOKAmXMgYSBkaXJlY3QgYGJvb2xgIG9wdGlvbiwgb3IgcGVyaGFwcyBlbmFibGVkIGJhc2VkIG9uIGFub3RoZXIgZmVhdHVyZSwgbGlrZSB3aGV0aGVyIGNncm91cHMgYXJlIGNvbmZpZ3VyZWQgaW4gZ2VuZXJhbC4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3Mgbm90IGEgc3RhbmRhbG9uZSBvcHRpb247IGl0JiMzOTtzIHByb2JhYmx5IGludGVyd292ZW4gd2l0aCBvdGhlciBibG9jay1sYXllciBvciBjZ3JvdXAgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEwOD1jb25maWcgTUVNQ0dfVjFcbi0tXG5pbml0L0tjb25maWctMTEyNC1cbmluaXQvS2NvbmZpZzoxMTI1OmNvbmZpZyBCTEtfQ0dST1VQXG5pbml0L0tjb25maWctMTEyNi1cdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gQmxvY2sgSS9PIExhdGVuY3kgTWVhc3VyZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGtlcm5lbCBjb2RlIGhhbmRsZXMgYmxvY2sgSS9PIGxhdGVuY3kgbWVhc3VyZW1lbnRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIG1lcmdpbmcgb2YgbGF0ZW5jeSBzdGF0aXN0aWNzIGFuZCB0aGUgY2hlY2tpbmcgb2YgdGhlIGdhdGhlcmVkIGxhdGVuY2llcy4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYGxhdGVuY3lfc3RhdF9tZXJnZWAgZnVuY3Rpb24uIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIGNvbWJpbmluZyBsYXRlbmN5IGRhdGEsIHBvc3NpYmx5IGZyb20gZGlmZmVyZW50IENQVXMgb3IgdGhyZWFkcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIHdvcmtzIC0gaXQgcHJvYmFibHkgaW52b2x2ZXMgc29tZSB0aHJlc2hvbGRpbmcgb3IgYW5hbHlzaXMgdG8gc2VlIGlmIHNvbWV0aGluZyYjMzk7cyBhbWlzcyBpbiB0aGUgSS9PIHBlcmZvcm1hbmNlLCBwZXJoYXBzIGxvb2tpbmcgZm9yIG91dGxpZXJzIG9yIGlkZW50aWZ5aW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXG4gMjExOlx0e1xuIDIxMjpcdFx0aWYgKGlvbGF0LVx1MDAzZXNzZCkge1xuIDIxMzpcdFx0XHRzdW0tXHUwMDNlcHMudG90YWwgJiM0Mzs9IHN0YXQtXHUwMDNlcHMudG90YWw7XG4gMjE0Olx0XHRcdHN1bS1cdTAwM2Vwcy5taXNzZWQgJiM0Mzs9IHN0YXQtXHUwMDNlcHMubWlzc2VkO1xuIDIxNTpcdFx0fSBlbHNlXG4gMjE2Olx0XHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZzdW0tXHUwMDNlcnFzLCBcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG4gMjE3Olx0fVxuIDIxODpcdFxuIDIxOTpcdC8qXG4gMjIwOlx0ICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xuIDIyMTpcdCAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxuIDIyMjpcdCAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxuIDIyMzpcdCAqL1xuIDIyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfbWVyZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIDIyNTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLFxuIDIyNjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiAyMjc6XHR7XG4gMjI4Olx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjI5Olx0XHRcdHN1bS1cdTAwM2Vwcy50b3RhbCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy50b3RhbDtcbiAyMzA6XHRcdFx0c3VtLVx1MDAzZXBzLm1pc3NlZCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy5taXNzZWQ7XG4gMjMxOlx0XHR9IGVsc2Uge1xuIDIzMjpcdFx0XHRpZiAoc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMgXHUwMDNjPVxuIDIzMzpcdFx0XHQgICAgc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzKVxuIDIzNDpcdFx0XHRcdHJldHVybjtcbiAyMzU6XHRcdFx0c3VtLVx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXHUwMDNlcnFzLm1lYW4gKiBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgJiM0MztcbiAyMzY6XHRcdFx0XHRcdFx0c3RhdC1cdTAwM2VycXMubWVhbiAqIHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMsXG4gMjM3Olx0XHRcdFx0XHRcdHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyAmIzQzOyBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzKTtcbiAyMzg6XHRcdFx0c3VtLVx1MDAzZXJxcy5taW4gPSBtaW4oc3VtLVx1MDAzZXJxcy5taW4sIHN0YXQtXHUwMDNlcnFzLm1pbik7XG4gMjM5Olx0XHRcdHN1bS1cdTAwM2VycXMubWF4ID0gbWF4KHN1bS1cdTAwM2VycXMubWF4LCBzdGF0LVx1MDAzZXJxcy5tYXgpO1xuIDI0MDpcdFx0XHRzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgJiM0Mzs9IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXM7XG4gMjQxOlx0XHR9XG4gMjQyOlx0fVxuIDI0MzpcdFxuIDI0NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIDI0NTpcdFx0XHRcdFx0XHQgICAgdTY0IHJlcV90aW1lKVxuIDI0NjpcdHtcbiAyNDc6XHRcdHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQgPSBnZXRfY3B1X3B0cihpb2xhdC1cdTAwM2VzdGF0cyk7XG4gMjQ4Olx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjQ5Olx0XHRcdGlmIChyZXFfdGltZSBcdTAwM2U9IGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYylcbiAyNTA6XHRcdFx0XHRzdGF0LVx1MDAzZXBzLm1pc3NlZCYjNDM7JiM0Mzs7XG4gMjUxOlx0XHRcdHN0YXQtXHUwMDNlcHMudG90YWwmIzQzOyYjNDM7O1xuIDI1MjpcdFx0fSBlbHNlXG4gMjUzOlx0XHRcdGJsa19ycV9zdGF0X2FkZChcdTAwMjZzdGF0LVx1MDAzZXJxcywgcmVxX3RpbWUpO1xuIDI1NDpcdFx0cHV0X2NwdV9wdHIoc3RhdCk7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBsYXRlbmN5X3N1bV9vayhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gMjU4Olx0XHRcdFx0XHQgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXG4gMjU5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBibGstaW9sYXRlbmN5LmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgSS9PIGxhdGVuY3kgY29kZS4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgNTIwIHRvIDYyMCBpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSBsb2dpYyB0aGVyZSwgcHJvYmFibHkgcmVsYXRlZCB0b+KApiB3ZWxsLCBsaWtlbHkgY2FsY3VsYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIHBlcmhhcHMgc29tZSBjcml0aWNhbCBkZWNpc2lvbi1tYWtpbmcgcmVnYXJkaW5nIEkvTyByZXF1ZXN0IHRyYWNraW5nLiBHaXZlbiB0aGUgc3Vycm91bmRpbmcgY29kZSBJJiMzOTt2ZSBzZWVuLCBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHNlY3Rpb24gd2lsbCBiZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBhc3BlY3Qgb2YgaG93IHRoZSBsYXRlbmN5IGlzIG1lYXN1cmVkIG9yIGNhdGVnb3JpemVkLiBDb3VsZCBiZSB3aGVyZSB0aGV5JiMzOTtyZSBjYWxjdWxhdGluZyBwZXJjZW50aWxlcywgaGFuZGxpbmcgZGlmZmVyZW50IEkvTyBxdWV1ZSBkZXB0aHMsIG9yIHBlcmhhcHMgZmlsdGVyaW5nIG91dCBjZXJ0YWluIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBpcyBvbiB0YXJnZXQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBvcnRpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvbGF0ZW5jeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRcbiA1MjE6XHRcdHJlcV90aW1lID0gbm93IC0gc3RhcnQ7XG4gNTIyOlx0XG4gNTIzOlx0XHQvKlxuIDUyNDpcdFx0ICogV2UgZG9uJiMzOTt0IHdhbnQgdG8gY291bnQgaXNzdWVfYXNfcm9vdCBiaW8mIzM5O3MgaW4gdGhlIGNncm91cHMgbGF0ZW5jeVxuIDUyNTpcdFx0ICogc3RhdGlzdGljcyBhcyBpdCBjb3VsZCBza2V3IHRoZSBudW1iZXJzIGRvd253YXJkcy5cbiA1MjY6XHRcdCAqL1xuIDUyNzpcdFx0aWYgKHVubGlrZWx5KGlzc3VlX2FzX3Jvb3QgXHUwMDI2XHUwMDI2IGlvbGF0LVx1MDAzZW1heF9kZXB0aCAhPSBVSU5UX01BWCkpIHtcbiA1Mjg6XHRcdFx0dTY0IHN1YiA9IGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYztcbiA1Mjk6XHRcdFx0aWYgKHJlcV90aW1lIFx1MDAzYyBzdWIpXG4gNTMwOlx0XHRcdFx0YmxrY2dfYWRkX2RlbGF5KGxhdF90b19ibGtnKGlvbGF0KSwgbm93LCBzdWIgLSByZXFfdGltZSk7XG4gNTMxOlx0XHRcdHJldHVybjtcbiA1MzI6XHRcdH1cbiA1MzM6XHRcbiA1MzQ6XHRcdGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShpb2xhdCwgcmVxX3RpbWUpO1xuIDUzNTpcdH1cbiA1MzY6XHRcbiA1Mzc6XHQjZGVmaW5lIEJMS0lPTEFURU5DWV9NSU5fQURKVVNUX1RJTUUgKDUwMCAqIE5TRUNfUEVSX01TRUMpXG4gNTM4Olx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUyA1XG4gNTM5Olx0XG4gNTQwOlx0c3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXG4gNTQxOlx0e1xuIDU0MjpcdFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gbGF0X3RvX2Jsa2coaW9sYXQpO1xuIDU0MzpcdFx0c3RydWN0IGlvbGF0ZW5jeV9ncnAgKnBhcmVudDtcbiA1NDQ6XHRcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gKmxhdF9pbmZvO1xuIDU0NTpcdFx0c3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0O1xuIDU0NjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1NDc6XHRcdGludCBjcHU7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgXHUwMDI2c3RhdCk7XG4gNTUwOlx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiA1NTE6XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiA1NTI6XHRcdFx0c3RydWN0IGxhdGVuY3lfc3RhdCAqcztcbiA1NTM6XHRcdFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVx1MDAzZXN0YXRzLCBjcHUpO1xuIDU1NDpcdFx0XHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZzdGF0LCBzKTtcbiA1NTU6XHRcdFx0bGF0ZW5jeV9zdGF0X2luaXQoaW9sYXQsIHMpO1xuIDU1NjpcdFx0fVxuIDU1NzpcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiA1NTg6XHRcbiA1NTk6XHRcdHBhcmVudCA9IGJsa2dfdG9fbGF0KGJsa2ctXHUwMDNlcGFyZW50KTtcbiA1NjA6XHRcdGlmICghcGFyZW50KVxuIDU2MTpcdFx0XHRyZXR1cm47XG4gNTYyOlx0XG4gNTYzOlx0XHRsYXRfaW5mbyA9IFx1MDAyNnBhcmVudC1cdTAwM2VjaGlsZF9sYXQ7XG4gNTY0Olx0XG4gNTY1Olx0XHRpb2xhdF91cGRhdGVfdG90YWxfbGF0X2F2Zyhpb2xhdCwgXHUwMDI2c3RhdCk7XG4gNTY2Olx0XG4gNTY3Olx0XHQvKiBFdmVyeXRoaW5nIGlzIG9rIGFuZCB3ZSBkb24mIzM5O3QgbmVlZCB0byBhZGp1c3QgdGhlIHNjYWxlLiAqL1xuIDU2ODpcdFx0aWYgKGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcdTAwMjZzdGF0KSBcdTAwMjZcdTAwMjZcbiA1Njk6XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsYXRfaW5mby1cdTAwM2VzY2FsZV9jb29raWUpID09IERFRkFVTFRfU0NBTEVfQ09PS0lFKVxuIDU3MDpcdFx0XHRyZXR1cm47XG4gNTcxOlx0XG4gNTcyOlx0XHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xuIDU3MzpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bGF0X2luZm8tXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDU3NDpcdFxuIDU3NTpcdFx0bGF0ZW5jeV9zdGF0X21lcmdlKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG4gNTc2Olx0XHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzIC09IGlvbGF0LVx1MDAzZW5yX3NhbXBsZXM7XG4gNTc3Olx0XHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzICYjNDM7PSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpO1xuIDU3ODpcdFx0aW9sYXQtXHUwMDNlbnJfc2FtcGxlcyA9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCk7XG4gNTc5Olx0XG4gNTgwOlx0XHRpZiAoKGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgXHUwMDNlPSBub3cgfHxcbiA1ODE6XHRcdCAgICBub3cgLSBsYXRfaW5mby1cdTAwM2VsYXN0X3NjYWxlX2V2ZW50IFx1MDAzYyBCTEtJT0xBVEVOQ1lfTUlOX0FESlVTVF9USU1FKSlcbiA1ODI6XHRcdFx0Z290byBvdXQ7XG4gNTgzOlx0XG4gNTg0Olx0XHRpZiAobGF0ZW5jeV9zdW1fb2soaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KSBcdTAwMjZcdTAwMjZcbiA1ODU6XHRcdCAgICBsYXRlbmN5X3N1bV9vayhpb2xhdCwgXHUwMDI2c3RhdCkpIHtcbiA1ODY6XHRcdFx0aWYgKGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCkgXHUwMDNjXG4gNTg3Olx0XHRcdCAgICBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUylcbiA1ODg6XHRcdFx0XHRnb3RvIG91dDtcbiA1ODk6XHRcdFx0aWYgKGxhdF9pbmZvLVx1MDAzZXNjYWxlX2dycCA9PSBpb2xhdCkge1xuIDU5MDpcdFx0XHRcdGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XG4gNTkxOlx0XHRcdFx0c2NhbGVfY29va2llX2NoYW5nZShpb2xhdC1cdTAwM2VibGtpb2xhdCwgbGF0X2luZm8sIHRydWUpO1xuIDU5MjpcdFx0XHR9XG4gNTkzOlx0XHR9IGVsc2UgaWYgKGxhdF9pbmZvLVx1MDAzZXNjYWxlX2xhdCA9PSAwIHx8XG4gNTk0Olx0XHRcdCAgIGxhdF9pbmZvLVx1MDAzZXNjYWxlX2xhdCBcdTAwM2U9IGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYykge1xuIDU5NTpcdFx0XHRsYXRfaW5mby1cdTAwM2VsYXN0X3NjYWxlX2V2ZW50ID0gbm93O1xuIDU5NjpcdFx0XHRpZiAoIWxhdF9pbmZvLVx1MDAzZXNjYWxlX2dycCB8fFxuIDU5NzpcdFx0XHQgICAgbGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0IFx1MDAzZSBpb2xhdC1cdTAwM2VtaW5fbGF0X25zZWMpIHtcbiA1OTg6XHRcdFx0XHRXUklURV9PTkNFKGxhdF9pbmZvLVx1MDAzZXNjYWxlX2xhdCwgaW9sYXQtXHUwMDNlbWluX2xhdF9uc2VjKTtcbiA1OTk6XHRcdFx0XHRsYXRfaW5mby1cdTAwM2VzY2FsZV9ncnAgPSBpb2xhdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJsay1pb2xhdGVuY3kgSW1wbGVtZW50YXRpb24gZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBsYXRlbmN5X3N0YXRfbWVyZ2VgIGZ1bmN0aW9uIGludHJvZHVjZWQgaW4gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgcmVjYWxsIHNlZWluZyB0aGF0IGZ1bmN0aW9uIHJlcGxhY2luZyBgbGF0ZW5jeV9zdGF0X3N1bWAgd2l0aGluIHRoZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZnVuY3Rpb24uIFRoYXQgbWVyZ2UgZnVuY3Rpb24gaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgY29uc2lkZXJpbmcgaXQmIzM5O3MgZG9pbmcgYXJpdGhtZXRpYy4gSSBzZWUgYGRpdl91NjQoLi4uKWAsIGBtaW5gLCBgbWF4YCwgYG5yX3NhbXBsZXNgLCBgdG90YWxgLCBgbWlzc2VkYCwgYWxsIG9mIHdoaWNoIGFyZSBwb3RlbnRpYWwgc291cmNlcyBmb3IgZnV6emluZyB0YXJnZXRzIQoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBibGstaW9sYXRlbmN5LmNgIGlzIGEgKmdvb2QqIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlYWNoIHdpdGhpbiB0aGUga2VybmVsLiBDbGVhcmx5LCBpdCYjMzk7cyB0aWVkIHRvIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlci4gUmlnaHQsIHRoZSBjZ3JvdXBzIHYyIGlvIGNvbnRyb2xsZXIhIElmIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzIGVuYWJsZWQsIHRoZW4gaXQmIzM5O3MgZXhwb3NlZCB2aWEgY2dyb3VwZnMgLSBzb21ldGhpbmcgbGlrZSBgaW8ubGF0ZW5jeWAuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byByZW1lbWJlciB3aGVyZSBJL08gb3BlcmF0aW9ucyBnby4gRnJvbSB3aGF0IEkgcmVjYWxsLCBpdCYjMzk7cyB3aGVuIEkvTyByZXF1ZXN0cyBjb21wbGV0ZSBvciBhcmUgaXNzdWVkIG9uIGJsb2NrIGRldmljZXMsIHN1Y2ggYXMgbG9vcCwgbnVsbF9ibGssIHZpcnRpby1ibGssIGFuZCByYW1kaXNrcywgdGhhdCBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZ2V0cyBpbnZva2VkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZW1lbWJlciB3aGVyZSB0aGUgY29kZSBwYXRocyBhcmUuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGluIHRoZSBjcml0aWNhbCBwYXRoIG9mIGJsb2NrIEkvTy4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxlcnMgb2YgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYGJsay1pb2xhdGVuY3kuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmM9NTEzPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBzdGFydCxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTM5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NDEte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02MDg9c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjUxLVx0XHRcdFx0XHRcdFx0IFx1MDAyNndpbmRvd19zdGFydCwgbm93KSlcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2NTI6XHRcdFx0XHRcdGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoaW9sYXQsIG5vdyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjUzLVx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGJsay1pb2xhdGVuY3kuY2AqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgYGJsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byBzdGFydCBieSB1bmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMg4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlIHRvIGtpY2sgdGhpbmdzIG9mZi4gVGhlbiwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjb3JlIG9wZXJhdGlvbnMgdGhpcyBjb2RlIHBlcmZvcm1zOyB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uYWxpdGllcz8gT25jZSBJIGhhdmUgYSBtZW50YWwgbWFwIG9mIHRob3NlIGVudHJ5IHBvaW50cyBhbmQgb3BlcmF0aW9ucywgSSBjYW4gc3RhcnQgZGl2aW5nIGRlZXBlci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gcmVhZGluZyBtb3JlIG9mIHRoZSBjb2RlIGFmdGVyIEkgdW5kZXJzdGFuZCB0aGUgdG9wLWxldmVsIHN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIGluc2lnaHRzIHRoZSBjb2RlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgY2Z0eXBlfHN0cnVjdCBibGtjZ19wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTQ1Nz1zdGF0aWMgaW50IGJmcWdfc3RhdHNfaW5pdChzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMsIGdmcF90IGdmcClcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtNDg0LVxuYmxvY2svYmZxLWNncm91cC5jOjQ4NTpzdGF0aWMgc3RydWN0IGJmcV9ncm91cF9kYXRhICpjcGRfdG9fYmZxZ2Qoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXG5ibG9jay9iZnEtY2dyb3VwLmMtNDg2LXtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9NDkwPXN0YXRpYyBzdHJ1Y3QgYmZxX2dyb3VwX2RhdGEgKmJsa2NnX3RvX2JmcWdkKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTQ5NC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzo0OTU6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqYmZxX2NwZF9hbGxvYyhnZnBfdCBnZnApXG5ibG9jay9iZnEtY2dyb3VwLmMtNDk2LXtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtNTA2LVxuYmxvY2svYmZxLWNncm91cC5jOjUwNzpzdGF0aWMgdm9pZCBiZnFfY3BkX2ZyZWUoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXG5ibG9jay9iZnEtY2dyb3VwLmMtNTA4LXtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTAzMz1zdGF0aWMgaW50IGJmcV9pb19zZXRfd2VpZ2h0X2xlZ2FjeShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuYmxvY2svYmZxLWNncm91cC5jOjEwMzQ6XHRcdFx0XHQgICAgc3RydWN0IGNmdHlwZSAqY2Z0eXBlLFxuYmxvY2svYmZxLWNncm91cC5jLTEwMzUtXHRcdFx0XHQgICAgdTY0IHZhbClcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTI1ND1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIGludCBub2RlKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjY0LVxuYmxvY2svYmZxLWNncm91cC5jOjEyNjU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfYmZxID0ge1xuYmxvY2svYmZxLWNncm91cC5jLTEyNjYtXHQuZGZsX2NmdHlwZXNcdFx0PSBiZnFfYmxrZ19maWxlcyxcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI3OC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjc5OnN0cnVjdCBjZnR5cGUgYmZxX2Jsa2NnX2xlZ2FjeV9maWxlc1tdID0ge1xuYmxvY2svYmZxLWNncm91cC5jLTEyODAtXHR7XG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE0MDQtXG5ibG9jay9iZnEtY2dyb3VwLmM6MTQwNTpzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtnX2ZpbGVzW10gPSB7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTQwNi1cdHtcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5oPTk2Mj1zdHJ1Y3QgYmZxX2dyb3VwX2RhdGEge1xuYmxvY2svYmZxLWlvc2NoZWQuaC05NjMtXHQvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi9cbmJsb2NrL2JmcS1pb3NjaGVkLmg6OTY0Olx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhIHBkO1xuYmxvY2svYmZxLWlvc2NoZWQuaC05NjUtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuaD0xMDkxPXZvaWQgYmZxZ19hbmRfYmxrZ19wdXQoc3RydWN0IGJmcV9ncm91cCAqYmZxZyk7XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuaC0xMDkzLSNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL2JmcS1pb3NjaGVkLmg6MTA5NDpleHRlcm4gc3RydWN0IGNmdHlwZSBiZnFfYmxrY2dfbGVnYWN5X2ZpbGVzW107XG5ibG9jay9iZnEtaW9zY2hlZC5oOjEwOTU6ZXh0ZXJuIHN0cnVjdCBjZnR5cGUgYmZxX2Jsa2dfZmlsZXNbXTtcbmJsb2NrL2JmcS1pb3NjaGVkLmg6MTA5NjpleHRlcm4gc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfYmZxO1xuYmxvY2svYmZxLWlvc2NoZWQuaC0xMDk3LSNlbmRpZlxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmM9ODE9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19wcmZpbGxfcndzdGF0KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jLTk1LSAqL1xuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuYzo5Njp2b2lkIGJsa2dfcndzdGF0X3JlY3Vyc2l2ZV9zdW0oc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jLTk3LVx0XHRpbnQgb2ZmLCBzdHJ1Y3QgYmxrZ19yd3N0YXRfc2FtcGxlICpzdW0pXG4tLVxuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuaD00Nj11NjQgYmxrZ19wcmZpbGxfcndzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCxcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmgtNDctXHRcdCAgICAgICBpbnQgb2ZmKTtcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0Lmg6NDg6dm9pZCBibGtnX3J3c3RhdF9yZWN1cnNpdmVfc3VtKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuaC00OS1cdFx0aW50IG9mZiwgc3RydWN0IGJsa2dfcndzdGF0X3NhbXBsZSAqc3VtKTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTc9YXRvbWljX3QgYmxrY2dfbnJfY29uZ2VzdGVkIF9fcmVhZF9tb3N0bHkgPSBBVE9NSUNfSU5JVCgwKTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy01OC1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1OTpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSAqYmxrY2dfcG9saWN5W0JMS0NHX01BWF9QT0xTXTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy02MC1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MzA2PXN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfYWxsb2Moc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTM0My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjM0NDpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTM0NS1cdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0zODI9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTQxNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjQxODpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTQxOS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNDMxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0MzI6XHRcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTQzMy1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTIwPXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjUzODpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTUzOS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTY3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTYwNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjYwNjpcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTYwNy1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NjUyPXN0YXRpYyBpbnQgYmxrY2dfcmVzZXRfc3RhdHMoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo2NTM6XHRcdFx0ICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsIHU2NCB2YWwpXG5ibG9jay9ibGstY2dyb3VwLmMtNjU0LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNjcwLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzo2NzE6XHRcdFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xuYmxvY2svYmxrLWNncm91cC5jLTY3Mi1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NzA4PXZvaWQgYmxrY2dfcHJpbnRfYmxrZ3Moc3RydWN0IHNlcV9maWxlICpzZiwgc3RydWN0IGJsa2NnICpibGtjZyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNzEwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqLCBpbnQpLFxuYmxvY2svYmxrLWNncm91cC5jOjcxMTpcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCwgaW50IGRhdGEsXG5ibG9jay9ibGstY2dyb3VwLmMtNzEyLVx0XHQgICAgICAgYm9vbCBzaG93X3RvdGFsKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04MTc9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX29wZW5fYmRldik7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTgzMy0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzo4MzQ6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MzUtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTExMzU9c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTExNzUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTc2Olx0XHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XG5ibG9jay9ibGstY2dyb3VwLmMtMTE3Ny1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTE4Nz1zdGF0aWMgaW50IGJsa2NnX3ByaW50X3N0YXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTIwMy1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjA0OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2ZpbGVzW10gPSB7XG5ibG9jay9ibGstY2dyb3VwLmMtMTIwNS1cdHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTIxMS1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjEyOnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2xlZ2FjeV9maWxlc1tdID0ge1xuYmxvY2svYmxrLWNncm91cC5jLTEyMTMtXHR7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTEzODE9YmxrY2dfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMzk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkxLQ0dfTUFYX1BPTFMgOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmxrLWNncm91cC5jOjE0MDA6XHRcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDAxOlx0XHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZDtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDAyLVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTQ4PXN0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5ibG9jay9ibGstY2dyb3VwLmM6MTU0OTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTUwLXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTU4NS0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTg2OmludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTg3LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTcwMD12b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5jOjE3MDE6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwMi17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE3MjM9RVhQT1JUX1NZTUJPTF9HUEwoYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kpO1xuYmxvY2svYmxrLWNncm91cC5jLTE3MjQtXG5ibG9jay9ibGstY2dyb3VwLmM6MTcyNTpzdGF0aWMgdm9pZCBibGtjZ19mcmVlX2FsbF9jcGQoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuYmxvY2svYmxrLWNncm91cC5jLTE3MjYte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNzQzLSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjE3NDQ6aW50IGJsa2NnX3BvbGljeV9yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmMtMTc0NS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE3NzYtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrY2csIFx1MDAyNmFsbF9ibGtjZ3MsIGFsbF9ibGtjZ3Nfbm9kZSkge1xuYmxvY2svYmxrLWNncm91cC5jOjE3Nzc6XHRcdFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQ7XG5ibG9jay9ibGstY2dyb3VwLmMtMTc3OC1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTgxNj1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19wb2xpY3lfcmVnaXN0ZXIpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xODIzLSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjE4MjQ6dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmMtMTgyNS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTk0PXN0cnVjdCBibGtjZyB7XG4tLVxuYmxvY2svYmxrLWNncm91cC5oLTEwNC1cbmJsb2NrL2Jsay1jZ3JvdXAuaDoxMDU6XHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGFcdCpjcGRbQkxLQ0dfTUFYX1BPTFNdO1xuYmxvY2svYmxrLWNncm91cC5oLTEwNi1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9MTM4PXN0cnVjdCBibGtnX3BvbGljeV9kYXRhIHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmgtMTUzLSAqL1xuYmxvY2svYmxrLWNncm91cC5oOjE1NDpzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEge1xuYmxvY2svYmxrLWNncm91cC5oLTE1NS1cdC8qIHRoZSBibGtjZyBhbmQgcG9saWN5IGlkIHRoaXMgcGVyLXBvbGljeSBkYXRhIGJlbG9uZ3MgdG8gKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmgtMTU5LVxuYmxvY2svYmxrLWNncm91cC5oOjE2MDp0eXBlZGVmIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqKGJsa2NnX3BvbF9hbGxvY19jcGRfZm4pKGdmcF90IGdmcCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTYxOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2luaXRfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTYyOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2ZyZWVfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTYzOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2JpbmRfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XG5ibG9jay9ibGstY2dyb3VwLmgtMTY0LXR5cGVkZWYgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKihibGtjZ19wb2xfYWxsb2NfcGRfZm4pKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xNzE9dHlwZWRlZiB2b2lkIChibGtjZ19wb2xfc3RhdF9wZF9mbikoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzMtXG5ibG9jay9ibGstY2dyb3VwLmg6MTc0OnN0cnVjdCBibGtjZ19wb2xpY3kge1xuYmxvY2svYmxrLWNncm91cC5oLTE3NS1cdGludFx0XHRcdFx0cGxpZDtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzYtXHQvKiBjZ3JvdXAgZmlsZXMgZm9yIHRoZSBwb2xpY3kgKi9cbmJsb2NrL2Jsay1jZ3JvdXAuaDoxNzc6XHRzdHJ1Y3QgY2Z0eXBlXHRcdFx0KmRmbF9jZnR5cGVzO1xuYmxvY2svYmxrLWNncm91cC5oOjE3ODpcdHN0cnVjdCBjZnR5cGVcdFx0XHQqbGVnYWN5X2NmdHlwZXM7XG5ibG9jay9ibGstY2dyb3VwLmgtMTc5LVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTg9dm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDAtLyogQmxraW8gY29udHJvbGxlciBwb2xpY3kgcmVnaXN0cmF0aW9uICovXG5ibG9jay9ibGstY2dyb3VwLmg6MjAxOmludCBibGtjZ19wb2xpY3lfcmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDI6dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xuYmxvY2svYmxrLWNncm91cC5oOjIwMzppbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xuYmxvY2svYmxrLWNncm91cC5oLTIwNC12b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5oOjIwNTpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmgtMjA2LVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMDg9dm9pZCBibGtjZ19wcmludF9ibGtncyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgYmxrY2cgKmJsa2NnLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMTAtXHRcdFx0XHQgICAgIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICosIGludCksXG5ibG9jay9ibGstY2dyb3VwLmg6MjExOlx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLCBpbnQgZGF0YSxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMTItXHRcdCAgICAgICBib29sIHNob3dfdG90YWwpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjM9aW50IGJsa2dfY29uZl9vcGVuX2JkZXYoc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjQtXHRfX2NvbmRfYWNxdWlyZXMoMCwgXHUwMDI2Y3R4LVx1MDAzZWJkZXYtXHUwMDNlYmRfcXVldWUtXHUwMDNlcnFfcW9zX211dGV4KTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMjU6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjYtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTI4Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpibGtnX3RvX3BkKHN0cnVjdCBibGtjZ19ncSAqYmxrZyxcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyODc6XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG5ibG9jay9ibGstY2dyb3VwLmgtMjg4LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmgtMjkxLVxuYmxvY2svYmxrLWNncm91cC5oOjI5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqYmxrY2dfdG9fY3BkKHN0cnVjdCBibGtjZyAqYmxrY2csXG5ibG9jay9ibGstY2dyb3VwLmg6MjkzOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuYmxvY2svYmxrLWNncm91cC5oLTI5NC17XG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTMwND1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqcGRfdG9fYmxrZyhzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLWNncm91cC5oLTMwOC1cbmJsb2NrL2Jsay1jZ3JvdXAuaDozMDk6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2cgKmNwZF90b19ibGtjZyhzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZClcbmJsb2NrL2Jsay1jZ3JvdXAuaC0zMTAte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD00Nzk9c3RhdGljIGlubGluZSBib29sIGJsa2NnX3BvbGljeV9lbmFibGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuYmxvY2svYmxrLWNncm91cC5oOjQ4MDpcdFx0XHRcdGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuaC00ODEte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODk9c3RydWN0IGJsa2dfcG9saWN5X2RhdGEge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXG5ibG9jay9ibGstY2dyb3VwLmg6NDkyOnN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSB7XG5ibG9jay9ibGstY2dyb3VwLmgtNDkzLX07XG5ibG9jay9ibGstY2dyb3VwLmgtNDk0LVxuYmxvY2svYmxrLWNncm91cC5oOjQ5NTpzdHJ1Y3QgYmxrY2dfcG9saWN5IHtcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTYtfTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9NTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuYmxvY2svYmxrLWNncm91cC5oOjUwNTpzdGF0aWMgaW5saW5lIGludCBibGtjZ19wb2xpY3lfcmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XG5ibG9jay9ibGstY2dyb3VwLmg6NTA2OnN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxuYmxvY2svYmxrLWNncm91cC5oLTUwNy1zdGF0aWMgaW5saW5lIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmg6NTA4Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaC01MDktc3RhdGljIGlubGluZSB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5oOjUxMDpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaC01MTEtXG5ibG9jay9ibGstY2dyb3VwLmg9NTEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKmJsa2dfdG9fcGQoc3RydWN0IGJsa2NnX2dxICpibGtnLFxuYmxvY2svYmxrLWNncm91cC5oOjUxMzpcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyByZXR1cm4gTlVMTDsgfVxuYmxvY2svYmxrLWNncm91cC5oLTUxNC1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqcGRfdG9fYmxrZyhzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpIHsgcmV0dXJuIE5VTEw7IH1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9NTU0PXN0cnVjdCBpb2NfY2dycCB7XG5ibG9jay9ibGstaW9jb3N0LmM6NTU1Olx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhXHRjcGQ7XG5ibG9jay9ibGstaW9jb3N0LmMtNTU2LVx0dW5zaWduZWQgaW50XHRcdFx0ZGZsX3dlaWdodDtcbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9NjUxPXN0YXRpYyBjb25zdCB1MzIgdnJhdGVfYWRqX3BjdFtdID1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtNjU2LVxuYmxvY2svYmxrLWlvY29zdC5jOjY1NzpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9jb3N0O1xuYmxvY2svYmxrLWlvY29zdC5jLTY1OC1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMjk3OS1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTgwOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmlvY19jcGRfYWxsb2MoZ2ZwX3QgZ2ZwKVxuYmxvY2svYmxrLWlvY29zdC5jLTI5ODEte1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTkxLVxuYmxvY2svYmxrLWlvY29zdC5jOjI5OTI6c3RhdGljIHZvaWQgaW9jX2NwZF9mcmVlKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKVxuYmxvY2svYmxrLWlvY29zdC5jLTI5OTMte1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0zNDc2PXN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTM1NzMtXG5ibG9jay9ibGstaW9jb3N0LmM6MzU3NDpzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2NfZmlsZXNbXSA9IHtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTc1LVx0e1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTk1LVxuYmxvY2svYmxrLWlvY29zdC5jOjM1OTY6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvY29zdCA9IHtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTk3LVx0LmRmbF9jZnR5cGVzXHQ9IGlvY19maWxlcyxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODMtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6ODQ6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvbGF0ZW5jeTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NS1zdHJ1Y3QgaW9sYXRlbmN5X2dycDtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MTA2OT1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfZnJlZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwODItXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA4MzpzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2xhdGVuY3lfZmlsZXNbXSA9IHtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDg0LVx0e1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDkyLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwOTM6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvbGF0ZW5jeSA9IHtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDk0LVx0LmRmbF9jZnR5cGVzXHQ9IGlvbGF0ZW5jeV9maWxlcyxcbi0tXG5ibG9jay9ibGstaW9wcmlvLmM9NDI9c3RhdGljIGNvbnN0IGNoYXIgKnBvbGljeV9uYW1lW10gPSB7XG4tLVxuYmxvY2svYmxrLWlvcHJpby5jLTQ5LVxuYmxvY2svYmxrLWlvcHJpby5jOjUwOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGlvcHJpb19wb2xpY3k7XG5ibG9jay9ibGstaW9wcmlvLmMtNTEtXG4tLVxuYmxvY2svYmxrLWlvcHJpby5jPTU3PXN0cnVjdCBpb3ByaW9fYmxrY2cge1xuYmxvY2svYmxrLWlvcHJpby5jOjU4Olx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhIGNwZDtcbmJsb2NrL2Jsay1pb3ByaW8uYy01OS1cdGVudW0gcHJpb19wb2xpY3lcdCBwcmlvX3BvbGljeTtcbi0tXG5ibG9jay9ibGstaW9wcmlvLmM9ODI9c3RhdGljIHNzaXplX3QgaW9wcmlvX3NldF9wcmlvX3BvbGljeShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5ibG9jay9ibGstaW9wcmlvLmMtOTctXG5ibG9jay9ibGstaW9wcmlvLmM6OTg6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqaW9wcmlvX2FsbG9jX2NwZChnZnBfdCBnZnApXG5ibG9jay9ibGstaW9wcmlvLmMtOTkte1xuLS1cbmJsb2NrL2Jsay1pb3ByaW8uYy0xMDgtXG5ibG9jay9ibGstaW9wcmlvLmM6MTA5OnN0YXRpYyB2b2lkIGlvcHJpb19mcmVlX2NwZChzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZClcbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTAte1xuLS1cbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTUtXG5ibG9jay9ibGstaW9wcmlvLmM6MTE2OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvcHJpb19maWxlc1tdID0ge1xuYmxvY2svYmxrLWlvcHJpby5jLTExNy1cdHtcbi0tXG5ibG9jay9ibGstaW9wcmlvLmMtMTI0LVxuYmxvY2svYmxrLWlvcHJpby5jOjEyNTpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBpb3ByaW9fcG9saWN5ID0ge1xuYmxvY2svYmxrLWlvcHJpby5jLTEyNi1cdC5kZmxfY2Z0eXBlc1x0PSBpb3ByaW9fZmlsZXMsXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQzMj1zdGF0aWMgaW50IHRnX3ByaW50X3J3c3RhdF9yZWN1cnNpdmUoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDM5LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ0MDpzdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDQxLVx0e1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE1NDA9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjIxLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTYyMjpzdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfZmlsZXNbXSA9IHtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjMtXHR7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTY3MD1zdGF0aWMgdm9pZCB0aHJvdGxfcGRfb2ZmbGluZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTY3NC1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2NzU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTY3Ni1cdC5kZmxfY2Z0eXBlc1x0XHQ9IHRocm90bF9maWxlcyxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD02OT1zdHJ1Y3QgdGhyb3RsX2dycCB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMTMwLVxuYmxvY2svYmxrLXRocm90dGxlLmg6MTMxOmV4dGVybiBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV90aHJvdGw7XG5ibG9jay9ibGstdGhyb3R0bGUuaC0xMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXMgdGFzazoKCioqQW5hbHl6aW5nIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIC0gSW5pdGlhbGl6YXRpb24sIEV4aXQsIGFuZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBBIGdvb2QgYXBwcm9hY2gsIGVzcGVjaWFsbHkgd2l0aCBrZXJuZWwgbW9kdWxlcywgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBxdWlja2x5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBgbW9kdWxlX2luaXQoKWAgYW5kIGBtb2R1bGVfZXhpdCgpYCBtYWNyb3MuIFRob3NlIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBob3cgdGhlIG1vZHVsZSBpcyBsb2FkZWQgYW5kIHVubG9hZGVkLCB3aGljaCBpcyBrZXkgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gdXN1YWxseSBzcG90IHRoZSBjb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGUgZmlsZS4gSSYjMzk7bGwgbWFrZSBhIHF1aWNrIG5vdGUgb2YgdGhvc2UgdG9vLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0LXBhc3Mgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZSYjMzk7cyByZXNwb25zaWJpbGl0aWVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGFsd2F5cyBnb29kIHRvIHN0YXJ0IHdpdGggdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgZ2V0dGluZyBsb3N0IGluIHRoZSBkZXRhaWxzLiBLbm93aW5nIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgbmFycm93cyBkb3duIHRoZSBzZWFyY2ggY29uc2lkZXJhYmx5LiBJIGNhbiB0aGVuIHJlYWQgdGhlIGNvZGUgbW9yZSBzdHJhdGVnaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1MDpcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9vZmZsaW5lKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcbjEwNTE6XHR7XG4xMDUyOlx0XHRzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQgPSBwZF90b19sYXQocGQpO1xuMTA1MzpcdFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gbGF0X3RvX2Jsa2coaW9sYXQpO1xuMTA1NDpcdFxuMTA1NTpcdFx0aW9sYXRlbmN5X3NldF9taW5fbGF0X25zZWMoYmxrZywgMCk7XG4xMDU2Olx0XHRpb2xhdGVuY3lfY2xlYXJfc2NhbGluZyhibGtnKTtcbjEwNTc6XHR9XG4xMDU4Olx0XG4xMDU5Olx0c3RhdGljIHZvaWQgaW9sYXRfcmVsZWFzZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbjEwNjA6XHR7XG4xMDYxOlx0XHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQgPVxuMTA2MjpcdFx0XHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSwgcmN1X2hlYWQpO1xuMTA2MzpcdFx0c3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0ID0gcGRfdG9fbGF0KHBkKTtcbjEwNjQ6XHRcbjEwNjU6XHRcdGZyZWVfcGVyY3B1KGlvbGF0LVx1MDAzZXN0YXRzKTtcbjEwNjY6XHRcdGtmcmVlKGlvbGF0KTtcbjEwNjc6XHR9XG4xMDY4Olx0XG4xMDY5Olx0c3RhdGljIHZvaWQgaW9sYXRlbmN5X3BkX2ZyZWUoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxuMTA3MDpcdHtcbjEwNzE6XHRcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IHBkX3RvX2Jsa2cocGQpO1xuMTA3MjpcdFxuMTA3MzpcdFx0LypcbjEwNzQ6XHRcdCAqIEdyb3VwcyB0aHJvdHRsZWQgYXMgY29sbGF0ZXJhbCBoYXZlIG1pbl9sYXRfbnNlYyA9PSAwLCBzb1xuMTA3NTpcdFx0ICogaW9sYXRlbmN5X3BkX29mZmxpbmUoKSBsZWF2ZXMgdGhlaXIgZGVsYXkgc2V0LiAgRHJvcCBpdCBoZXJlLCB3aGVyZVxuMTA3NjpcdFx0ICogbm8gaW4tZmxpZ2h0IGJpbyBjYW4gcmUtYXJtIGl0IHZpYSBjaGVja19zY2FsZV9jaGFuZ2UoKS5cbjEwNzc6XHRcdCAqL1xuMTA3ODpcdFx0aWYgKGJsa2cpXG4xMDc5Olx0XHRcdGJsa2NnX2NsZWFyX2RlbGF5KGJsa2cpO1xuMTA4MDpcdFx0Y2FsbF9yY3UoXHUwMDI2cGQtXHUwMDNlcmN1X2hlYWQsIGlvbGF0X3JlbGVhc2UpO1xuMTA4MTpcdH1cbjEwODI6XHRcbjEwODM6XHRzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2xhdGVuY3lfZmlsZXNbXSA9IHtcbjEwODQ6XHRcdHtcbjEwODU6XHRcdFx0Lm5hbWUgPSBcJiMzNDtsYXRlbmN5XCYjMzQ7LFxuMTA4NjpcdFx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4xMDg3Olx0XHRcdC5zZXFfc2hvdyA9IGlvbGF0ZW5jeV9wcmludF9saW1pdCxcbjEwODg6XHRcdFx0LndyaXRlID0gaW9sYXRlbmN5X3NldF9saW1pdCxcbjEwODk6XHRcdH0sXG4xMDkwOlx0XHR7fVxuMTA5MTpcdH07XG4xMDkyOlx0XG4xMDkzOlx0c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2lvbGF0ZW5jeSA9IHtcbjEwOTQ6XHRcdC5kZmxfY2Z0eXBlc1x0PSBpb2xhdGVuY3lfZmlsZXMsXG4xMDk1Olx0XHQucGRfYWxsb2NfZm5cdD0gaW9sYXRlbmN5X3BkX2FsbG9jLFxuMTA5NjpcdFx0LnBkX2luaXRfZm5cdD0gaW9sYXRlbmN5X3BkX2luaXQsXG4xMDk3Olx0XHQucGRfb2ZmbGluZV9mblx0PSBpb2xhdGVuY3lfcGRfb2ZmbGluZSxcbjEwOTg6XHRcdC5wZF9mcmVlX2ZuXHQ9IGlvbGF0ZW5jeV9wZF9mcmVlLFxuMTA5OTpcdFx0LnBkX3N0YXRfZm5cdD0gaW9sYXRlbmN5X3BkX3N0YXQsXG4xMTAwOlx0fTtcbjExMDE6XHRcbjExMDI6XHRzdGF0aWMgaW50IF9faW5pdCBpb2xhdGVuY3lfaW5pdCh2b2lkKVxuMTEwMzpcdHtcbjExMDQ6XHRcdHJldHVybiBibGtjZ19wb2xpY3lfcmVnaXN0ZXIoXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSk7XG4xMTA1Olx0fVxuMTEwNjpcdFxuMTEwNzpcdHN0YXRpYyB2b2lkIF9fZXhpdCBpb2xhdGVuY3lfZXhpdCh2b2lkKVxuMTEwODpcdHtcbjExMDk6XHRcdGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xuMTExMDpcdH1cbjExMTE6XHRcbjExMTI6XHRtb2R1bGVfaW5pdChpb2xhdGVuY3lfaW5pdCk7XG4xMTEzOlx0bW9kdWxlX2V4aXQoaW9sYXRlbmN5X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbGF0ZW5jeV9zdGF0X21lcmdlYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgbGF0ZW5jeV9zdGF0X21lcmdlYCB3YXMgcHV0IGluIHBsYWNlIHRvIHNwZWNpZmljYWxseSBhZGRyZXNzIGhvdyB3ZSBtZXJnZSBsYXRlbmN5IHN0YXRpc3RpY3Mgd2l0aGluIHRoZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZywgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbGF0ZW5jeV9zdGF0X21lcmdlYCBpcyBzdGF0aWMgaW5saW5lIGFuZCBtYXAgb3V0IGl0cyBjYWxsIGdyYXBoIHdpdGhpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gUmlnaHQsIGhlcmUgd2UgZ286IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBkaXJlY3RseSBjYWxscyBgbGF0ZW5jeV9zdGF0X21lcmdlYC4gQ3J1Y2lhbGx5LCBgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvYCB0aGVuIGNhbGxzIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYC4gVGhpcyBtYWtlcyBpdCBwYXJ0IG9mIHRoZSBjZ3JvdXAgaW9sYXRlbmN5IHBhdGguIEZ1cnRoZXIgY29uZmlybWluZyB0aGUgY29ubmVjdGlvbiB0byBjb25maWd1cmF0aW9uLCBgaW9sYXRlbmN5X3NldF9saW1pdGAgZW5hYmxlcyBhbmQgY29uZmlndXJlcyBpb2xhdGVuY3ksIHdoaWNoIHBvaW50cyB0byBjZ3JvdXAgY29uZmlnIHdyaXRpbmcgdG8gZW5hYmxlIGlvbGF0ZW5jeSBvbiBhIGJsb2NrIGRldmljZS4KCk5vdywgZm9yIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGlzIGxvb2tzIGdvb2QuIEl0IHNlZW1zIHRvIGJlIHJlYWNoYWJsZSBjb2RlOyB3ZSYjMzk7cmUgdGFsa2luZyBhIHN0YW5kYXJkIFFFTVUvR0NFIGtlcm5lbCBlbnZpcm9ubWVudCB3aXRoIGNncm91cHMgdjIsIGJsb2NrIGxheWVyLCBsb29wIGRldmljZXMsIHZpcnRpby1ibGssIGV0Yy4gU28gd2UmIzM5O3JlIGNvdmVyZWQgdGhlcmUuIFRoZSBtb3N0IHNpZ25pZmljYW50IHBhcnQgaXMgdGhhdCBpdCAqaXMqIG1vZGlmeWluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgbWVyZ2luZyBsb2dpYyBmb3IgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5LiBUaGlzIG1ha2VzIHRoZSBhbnN3ZXIgdG8gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsuCgpGaW5hbGx5LCB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgQkxLX0NHUk9VUGAuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucy4gVGltZSB0byBncmVwIGZvciBgQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZYCBhbmQgcmVsYXRlZCBjb25maWdzIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q9MjAxMj1mb3IgYSBkZXZpY2UsIGJ5IEJGUSYjMzk7cyBvd24gY2dyb3VwIHN1cHBvcnQuICBMYXRlbmN5LWJhc2VkIHByb3RlY3Rpb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoyMDEzOihDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpIGFuZCBJL08gcHJpb3JpdHkgYXNzaWdubWVudFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTIwMTQtKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTykgYXJlIGFsc28gYXZhaWxhYmxlLlxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9ODE9Q09ORklHX0JMS19XQlQ9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo4MjpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy04My1DT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRD15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz05Nj1DT05GSUdfQkxLX1dCVD15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjk3OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTk4LUNPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODg9Q09ORklHX0JMS19XQlQ9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjg5OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctOTAtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODI9Q09ORklHX0JMS19XQlQ9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjgzOkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODQtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnPTU2PUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXlcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWc6NTc6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWctNTgtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NTc9Q09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eVxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnOjU4OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWctNTktQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT1BSSU8pXHQmIzQzOz0gYmxrLWlvcHJpby5vXG5ibG9jay9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpXHQmIzQzOz0gYmxrLWlvbGF0ZW5jeS5vXG5ibG9jay9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXHQmIzQzOz0gYmxrLWlvY29zdC5vXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTA9Q09ORklHX0JMS19DR1JPVVA9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTE6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTEyLUNPTkZJR19CTEtfREVWX0JTR0xJQj15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249NT1DT05GSUdfQklORk1UX01JU0M9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb246NjpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb24tNy1DT05GSUdfQkxLX0NHUk9VUD15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODYwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYEJMS19DR1JPVVBgIERlcGVuZGVuY2llcyoqCgpSaWdodCwgYmVmb3JlIGRpdmluZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19DR1JPVVBgLiBObyBwb2ludCBpbiBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWUgZnVuZGFtZW50YWwgcGllY2VzLiBMZXQmIzM5O3MgcHVsbCB1cCBgaW5pdC9LY29uZmlnYCBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGF0IG9wdGlvbiB0byBiZSBhdmFpbGFibGUuIE5lZWQgdG8gZW5zdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBoaWRkZW4gaW1wbGljYXRpb25zIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgY29tcGlsZS10aW1lIGVycm9ycyBvciBydW50aW1lIHN1cnByaXNlcyBsYXRlciBvbi4gQmVzdCB0byBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24gcmlnaHQgZnJvbSB0aGUgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMjE6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTEyMjpcdFxuMTEyMzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTI0Olx0XG4xMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCbG9jayBJL08gTGF0ZW5jeSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEJMS19DR1JPVVBgIHN0dWZmLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgYEJMS19DR1JPVVBgIG9wdGlvbiBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYEJMT0NLYC4gTWFrZXMgc2Vuc2UuIEFuZCwgbmF0dXJhbGx5LCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIHJlbGllcyBvbiBgQkxLX0NHUk9VUGAuIE5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCBzeW1ib2xzIHdlIG5lZWQgdG8gY29uc2lkZXIgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIHdvcmsuCgpJIHNlZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGxhdGVuY3lfc3RhdF9tZXJnZWAuIEludGVyZXN0aW5nLCBidXQgaXQmIzM5O3MgKnN0YXRpYyBpbmxpbmUqIHdpdGhpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gTGV0JiMzOTtzIHRyYWNlIGl0OyBgbGF0ZW5jeV9zdGF0X21lcmdlYCBpcyBjYWxsZWQgaW4gYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgLiBOb3csIGlzICp0aGF0KiBpbmxpbmVkPyBZZXAsIGl0JiMzOTtzIGFsc28gZGVjbGFyZWQgYHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoLi4uKWAuIEhtbS4gVGhhdCBzdGF0aWMgaW5saW5lIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgaXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcHByb2FjaCB0byBhbmFseXNpcy4KCkFscmlnaHQsIHRoZSBzdHJhdGVneSBJJiMzOTttIGdvaW5nIHRvIHRha2UgaXMgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgb3Iga2V5IGNhbGxlciBmdW5jdGlvbnMgd2l0aGluIGBibG9jay9ibGstaW9sYXRlbmN5LmNgLiBGcm9tIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdDoKCiogICBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AKKiAgIGBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9gCiogICBgaW9sYXRlbmN5X3JlY29yZF90aW1lYAoqICAgYGlvbGF0ZW5jeV9zZXRfbGltaXRgCgpJIGNvdWxkIGluY2x1ZGUgYGxhdGVuY3lfc3RhdF9tZXJnZWAsIGJ1dCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIGlmIHRoZSBjaGFuZ2VzIGFyZSBtb3N0bHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpdCYjMzk7cyBiZXR0ZXIgdG8gbGlzdCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLiBTbywgSSB3aWxsIGZvY3VzIG9uIHRoZSBsaXN0IGFib3ZlLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2Ugd2hhdCBzeW1ib2xzIGFjdHVhbGx5IGV4aXN0IHdpdGhpbiBgYmxrLWlvbGF0ZW5jeS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvbGF0ZW5jeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYz04Nz1zdHJ1Y3QgYmxrX2lvbGF0ZW5jeSB7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwMi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDM6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX2lvbGF0ZW5jeSAqQkxLSU9MQVRFTkNZKHN0cnVjdCBycV9xb3MgKnJxb3MpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA0LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MTc1PXN0YXRpYyBjb25zdCB1NjQgaW9sYXRlbmN5X2V4cF9mYWN0b3JzW0JMS0lPTEFURU5DWV9OUl9FWFBfRkFDVE9SU10gPSB7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE4Mi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxODM6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqcGRfdG9fbGF0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODQte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODctXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmJsa2dfdG9fbGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODkte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xOTItXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTkzOnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpsYXRfdG9fYmxrZyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTk0LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTk3LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjE5ODpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X2luaXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE5OS1cdFx0XHRcdCAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA3LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIwODpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA5LVx0XHRcdFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjIzLSAqL1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIyNDpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI0My1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyNDQ6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjQ1LVx0XHRcdFx0XHQgICAgdTY0IHJlcV90aW1lKVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNTYtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCBsYXRlbmN5X3N1bV9vayhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjU4LVx0XHRcdFx0ICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNjctXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjY4OnN0YXRpYyBpbmxpbmUgdTY0IGxhdGVuY3lfc3RhdF9zYW1wbGVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNjktXHRcdFx0XHQgICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjc1LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI3NjpzdGF0aWMgaW5saW5lIHZvaWQgaW9sYXRfdXBkYXRlX3RvdGFsX2xhdF9hdmcoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI3Ny1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjk4LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI5OTpzdGF0aWMgdm9pZCBpb2xhdF9jbGVhbnVwX2NiKHN0cnVjdCBycV93YWl0ICpycXcsIHZvaWQgKnByaXZhdGVfZGF0YSlcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMDAte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMDQtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MzA1OnN0YXRpYyBib29sIGlvbGF0X2FjcXVpcmVfaW5mbGlnaHQoc3RydWN0IHJxX3dhaXQgKnJxdywgdm9pZCAqcHJpdmF0ZV9kYXRhKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTMwNi17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTMxMC1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzozMTE6c3RhdGljIHZvaWQgX19ibGtjZ19pb2xhdGVuY3lfdGhyb3R0bGUoc3RydWN0IHJxX3FvcyAqcnFvcyxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMTItXHRcdFx0XHQgICAgICAgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMzktXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MzQwOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzY2FsZV9hbW91bnQodW5zaWduZWQgbG9uZyBxZCwgYm9vbCB1cClcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zNDEte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zNTMtICovXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MzU0OnN0YXRpYyB2b2lkIHNjYWxlX2Nvb2tpZV9jaGFuZ2Uoc3RydWN0IGJsa19pb2xhdGVuY3kgKmJsa2lvbGF0LFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTM1NS1cdFx0XHRcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gKmxhdF9pbmZvLFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zOTctICovXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6Mzk4OnN0YXRpYyB2b2lkIHNjYWxlX2NoYW5nZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIGJvb2wgdXApXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzk5LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNDIzLS8qIENoZWNrIG91ciBwYXJlbnQgYW5kIHNlZSBpZiB0aGUgc2NhbGUgY29va2llIGhhcyBjaGFuZ2VkLiAqL1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjQyNDpzdGF0aWMgdm9pZCBjaGVja19zY2FsZV9jaGFuZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0KVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQyNS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQ4Ny1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo0ODg6c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X3Rocm90dGxlKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy00ODkte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MTItXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NTEzOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBzdGFydCxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MTQtXHRcdFx0XHQgIHU2NCBub3csIGJvb2wgaXNzdWVfYXNfcm9vdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTM5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01NDEte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDctXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjA4OnN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyhzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgYmlvICpiaW8pXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjA5LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjU5LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjY2MDpzdGF0aWMgdm9pZCBibGtjZ19pb2xhdGVuY3lfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY2MS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJxX3Fvc19vcHMgYmxrY2dfaW9sYXRlbmN5X29wcyA9IHtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjc1LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjY3NjpzdGF0aWMgdm9pZCBibGtpb2xhdGVuY3lfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjc3LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzUyLSAqL1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc1MzpzdGF0aWMgdm9pZCBibGtpb2xhdGVuY3lfZW5hYmxlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc1NC17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc4Mi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo3ODM6c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzg0LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODExLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjgxMjpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfc2V0X21pbl9sYXRfbnNlYyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHU2NCB2YWwpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODEzLXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODMzLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjgzNDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2xlYXJfc2NhbGluZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODM1LXtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODUxLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjg1MjpzdGF0aWMgc3NpemVfdCBpb2xhdGVuY3lfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTg1My1cdFx0XHQgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkyNC1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5MjU6c3RhdGljIHU2NCBpb2xhdGVuY3lfcHJmaWxsX2xpbWl0KHN0cnVjdCBzZXFfZmlsZSAqc2YsXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTI2LVx0XHRcdFx0ICBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQsIGludCBvZmYpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzNy1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5Mzg6c3RhdGljIGludCBpb2xhdGVuY3lfcHJpbnRfbGltaXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05Mzkte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NDUtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTQ2OnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9zc2Rfc3RhdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHN0cnVjdCBzZXFfZmlsZSAqcylcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NDcte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NzAtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTcxOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9zdGF0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCwgc3RydWN0IHNlcV9maWxlICpzKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk3Mi17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk5Mi1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5OTM6c3RhdGljIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICppb2xhdGVuY3lfcGRfYWxsb2Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTk0LVx0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBnZnBfdCBnZnApXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwMDktXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTAxMDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfaW5pdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTAxMS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNDktXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA1MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfb2ZmbGluZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA1MS17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNTgtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA1OTpzdGF0aWMgdm9pZCBpb2xhdF9yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNjAte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDY4LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwNjk6c3RhdGljIHZvaWQgaW9sYXRlbmN5X3BkX2ZyZWUoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwNzAte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz0xMDkzPXN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV9pb2xhdGVuY3kgPSB7XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMDEtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTEwMjpzdGF0aWMgaW50IF9faW5pdCBpb2xhdGVuY3lfaW5pdCh2b2lkKVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMDMte1xuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMTA2LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjExMDc6c3RhdGljIHZvaWQgX19leGl0IGlvbGF0ZW5jeV9leGl0KHZvaWQpXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwOC17XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMTEtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTExMjptb2R1bGVfaW5pdChpb2xhdGVuY3lfaW5pdCk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTExMzptb2R1bGVfZXhpdChpb2xhdGVuY3lfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjE4CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBmb3IgdGhpcyBJL08gbGF0ZW5jeSBtb25pdG9yaW5nIHNldHVwLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBncmFiIHRoZSBjb3JlIGZvY3VzIHN5bWJvbHM6IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCwgYGJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb2AsIGBpb2xhdGVuY3lfcmVjb3JkX3RpbWVgLCBhbmQgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWxsIGRlZmluZWQgYW5kIHdvcmtpbmcgdG9nZXRoZXIgcHJvcGVybHkuCgpOb3cgZm9yIHRoZSBjb25maWcgb3B0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBiZSB1c2luZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgb2YgY291cnNlLCBpdCByZWxpZXMgb24gYEJMS19DR1JPVVBgLiBBbHJpZ2h0LCB0aW1lIGZvciBhIHF1aWNrIGF1ZGl0LiBObyBtaXNzaW5nIHBpZWNlcywgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgdHJlZSBpcyBzb2xpZC4gU28sIEkgc2VlIHRoYXQgYEJMS19DR1JPVVBgIGl0c2VsZiBuZWVkcyBgQkxPQ0tgLiBSaWdodCwgbWFrZXMgc2Vuc2U7IGNhbiYjMzk7dCBtYW5hZ2UgYmxvY2sgSS9PIHdpdGhvdXQgdGhlIGZ1bmRhbWVudGFsIGJsb2NrIGRldmljZSBzdXBwb3J0LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBJJiMzOTt2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IGRlcGVuZGVuY3kuIFllcCwgZXZlcnl0aGluZyBsb29rcyByaWdodC4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7LAogICAgJiMzNDtibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW8mIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3JlY29yZF90aW1lJiMzNDssCiAgICAmIzM0O2lvbGF0ZW5jeV9zZXRfbGltaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyYjMzQ7LAogICAgJiMzNDtibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW8mIzM0OywKICAgICYjMzQ7aW9sYXRlbmN5X3JlY29yZF90aW1lJiMzNDssCiAgICAmIzM0O2lvbGF0ZW5jeV9zZXRfbGltaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChgYmxrLWlvbGF0ZW5jeS5jYCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgbGF0ZW5jeV9zdGF0X21lcmdlKClgIHRvIG1lcmdlIGFscmVhZHktYWdncmVnYXRlZCBgbGF0ZW5jeV9zdGF0YCBzdHJ1Y3R1cmVzIGJ5IHJlY29uc3RydWN0aW5nIHRoZSB0b3RhbCBsYXRlbmN5IHVzaW5nIGBtZWFuICogbnJfc2FtcGxlc2AgcmF0aGVyIHRoYW4gY2FsbGluZyBgYmxrX3JxX3N0YXRfc3VtKClgLCB3aGljaCBleHBlY3RzIHBlci1DUFUgdW5hZ2dyZWdhdGVkIHN0YXRzIHdpdGggYHNyYy1cdTAwM2ViYXRjaGAgc2V0LlxuXG5BbGwgc3RydWN0dXJlcyBpbnZvbHZlZCAoc3VjaCBhcyB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbGF0ZW5jeV9zdGF0IHN0YXRgIGluIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbGF0ZW5jeV9zdGF0X2luaXQoKWAgcHJpb3IgdG8gYWNjZXNzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG8gbm90IG1vZGlmeSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdXNlciBBQkkgYm91bmRhcmllcywgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3ZGQ3NzQ5MWU4NzY2MWEyODNmZjcxYTEzNjcxZjI3YzA2OGIxY2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jCmluZGV4IDJjYWE3OWEwMDhhZDEuLjIyM2QzYTVlMmJmMWMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstaW9sYXRlbmN5LmMKQEAgLTIxNiw2ICYjNDM7MjE2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwKIAkJYmxrX3JxX3N0YXRfc3VtKCZhbXA7c3VtLSZndDtycXMsICZhbXA7c3RhdC0mZ3Q7cnFzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFscwomIzQzOyAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy0mZ3Q7YmF0Y2gsIHdoaWNoIGlzIDAKJiM0MzsgKiBoZXJlLiBUaGUgb3ZlcmZsb3cgY2hlY2sgYWxzbyByZWplY3RzIHRoZSAwIHNhbXBsZXMgY2FzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KQomIzQzO3sKJiM0MzsJaWYgKGlvbGF0LSZndDtzc2QpIHsKJiM0MzsJCXN1bS0mZ3Q7cHMudG90YWwgJiM0Mzs9IHN0YXQtJmd0O3BzLnRvdGFsOwomIzQzOwkJc3VtLSZndDtwcy5taXNzZWQgJiM0Mzs9IHN0YXQtJmd0O3BzLm1pc3NlZDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChzdW0tJmd0O3Jxcy5ucl9zYW1wbGVzICYjNDM7IHN0YXQtJmd0O3Jxcy5ucl9zYW1wbGVzICZsdDs9CiYjNDM7CQkgICAgc3VtLSZndDtycXMubnJfc2FtcGxlcykKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQlzdW0tJmd0O3Jxcy5tZWFuID0gZGl2X3U2NChzdW0tJmd0O3Jxcy5tZWFuICogc3VtLSZndDtycXMubnJfc2FtcGxlcyAmIzQzOwomIzQzOwkJCQkJc3RhdC0mZ3Q7cnFzLm1lYW4gKiBzdGF0LSZndDtycXMubnJfc2FtcGxlcywKJiM0MzsJCQkJCXN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMgJiM0Mzsgc3RhdC0mZ3Q7cnFzLm5yX3NhbXBsZXMpOwomIzQzOwkJc3VtLSZndDtycXMubWluID0gbWluKHN1bS0mZ3Q7cnFzLm1pbiwgc3RhdC0mZ3Q7cnFzLm1pbik7CiYjNDM7CQlzdW0tJmd0O3Jxcy5tYXggPSBtYXgoc3VtLSZndDtycXMubWF4LCBzdGF0LSZndDtycXMubWF4KTsKJiM0MzsJCXN1bS0mZ3Q7cnFzLm5yX3NhbXBsZXMgJiM0Mzs9IHN0YXQtJmd0O3Jxcy5ucl9zYW1wbGVzOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsCiAJCQkJCSAgICB1NjQgcmVxX3RpbWUpCiB7CkBAIC01NDcsNyAmIzQzOzU3Miw3IEBAIHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCB1NjQgbm93KQogCS8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtsYXRfaW5mby0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JbGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQsICZhbXA7c3RhdCk7CiYjNDM7CWxhdGVuY3lfc3RhdF9tZXJnZShpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQsICZhbXA7c3RhdCk7CiAJbGF0X2luZm8tJmd0O25yX3NhbXBsZXMgLT0gaW9sYXQtJmd0O25yX3NhbXBsZXM7CiAJbGF0X2luZm8tJmd0O25yX3NhbXBsZXMgJiM0Mzs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCAmYW1wO2lvbGF0LSZndDtjdXJfc3RhdCk7CiAJaW9sYXQtJmd0O25yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgJmFtcDtpb2xhdC0mZ3Q7Y3VyX3N0YXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTi9LQVNBTiBOZWVkcyBmb3IgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGluIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIHdhcnJhbnRzIGEgc3BlY2lmaWMgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBhIHRyaWFnZSBzaXR1YXRpb24sIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgaW5jcmVhc2luZyB0aG9zZSByaXNrcz8gSSYjMzk7bSBhcHByb2FjaGluZyB0aGlzIHdpdGggYSBzYWZldHktZmlyc3QgbWluZHNldC4gSXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgZW5naW5lZXJpbmcgYW5kIHRlc3RpbmcgdGFzaywgc28gbGV0JiMzOTtzIGdldCBpdCByaWdodC4KClRoaXMgaXMgYSBwcmV0dHkgYmVuaWduIHJlcXVlc3Qgb3ZlcmFsbCwgc28gSeKAmW0gZ29pbmcgdG8gY29uc2lkZXIgdGhpcyBhIHNhZmUgZnVsZmlsbC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBicmVhayBvdXQgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgaWRlbnRpZnkgaWYgdGhlcmUmIzM5O3MgYW55IG5ldyBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIHBvaW50ZXIgYXNzaWdubWVudHMsIGFuZCB1c2VzIG9mIGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlYWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzay4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFxuIDUyMTpcdFx0cmVxX3RpbWUgPSBub3cgLSBzdGFydDtcbiA1MjI6XHRcbiA1MjM6XHRcdC8qXG4gNTI0Olx0XHQgKiBXZSBkb24mIzM5O3Qgd2FudCB0byBjb3VudCBpc3N1ZV9hc19yb290IGJpbyYjMzk7cyBpbiB0aGUgY2dyb3VwcyBsYXRlbmN5XG4gNTI1Olx0XHQgKiBzdGF0aXN0aWNzIGFzIGl0IGNvdWxkIHNrZXcgdGhlIG51bWJlcnMgZG93bndhcmRzLlxuIDUyNjpcdFx0ICovXG4gNTI3Olx0XHRpZiAodW5saWtlbHkoaXNzdWVfYXNfcm9vdCBcdTAwMjZcdTAwMjYgaW9sYXQtXHUwMDNlbWF4X2RlcHRoICE9IFVJTlRfTUFYKSkge1xuIDUyODpcdFx0XHR1NjQgc3ViID0gaW9sYXQtXHUwMDNlbWluX2xhdF9uc2VjO1xuIDUyOTpcdFx0XHRpZiAocmVxX3RpbWUgXHUwMDNjIHN1YilcbiA1MzA6XHRcdFx0XHRibGtjZ19hZGRfZGVsYXkobGF0X3RvX2Jsa2coaW9sYXQpLCBub3csIHN1YiAtIHJlcV90aW1lKTtcbiA1MzE6XHRcdFx0cmV0dXJuO1xuIDUzMjpcdFx0fVxuIDUzMzpcdFxuIDUzNDpcdFx0bGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKGlvbGF0LCByZXFfdGltZSk7XG4gNTM1Olx0fVxuIDUzNjpcdFxuIDUzNzpcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9BREpVU1RfVElNRSAoNTAwICogTlNFQ19QRVJfTVNFQylcbiA1Mzg6XHQjZGVmaW5lIEJMS0lPTEFURU5DWV9NSU5fR09PRF9TQU1QTEVTIDVcbiA1Mzk6XHRcbiA1NDA6XHRzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbiA1NDE6XHR7XG4gNTQyOlx0XHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBsYXRfdG9fYmxrZyhpb2xhdCk7XG4gNTQzOlx0XHRzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqcGFyZW50O1xuIDU0NDpcdFx0c3RydWN0IGNoaWxkX2xhdGVuY3lfaW5mbyAqbGF0X2luZm87XG4gNTQ1Olx0XHRzdHJ1Y3QgbGF0ZW5jeV9zdGF0IHN0YXQ7XG4gNTQ2Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDU0NzpcdFx0aW50IGNwdTtcbiA1NDg6XHRcbiA1NDk6XHRcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBcdTAwMjZzdGF0KTtcbiA1NTA6XHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuIDU1MTpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuIDU1MjpcdFx0XHRzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzO1xuIDU1MzpcdFx0XHRzID0gcGVyX2NwdV9wdHIoaW9sYXQtXHUwMDNlc3RhdHMsIGNwdSk7XG4gNTU0Olx0XHRcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFx1MDAyNnN0YXQsIHMpO1xuIDU1NTpcdFx0XHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgcyk7XG4gNTU2Olx0XHR9XG4gNTU3Olx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIDU1ODpcdFxuIDU1OTpcdFx0cGFyZW50ID0gYmxrZ190b19sYXQoYmxrZy1cdTAwM2VwYXJlbnQpO1xuIDU2MDpcdFx0aWYgKCFwYXJlbnQpXG4gNTYxOlx0XHRcdHJldHVybjtcbiA1NjI6XHRcbiA1NjM6XHRcdGxhdF9pbmZvID0gXHUwMDI2cGFyZW50LVx1MDAzZWNoaWxkX2xhdDtcbiA1NjQ6XHRcbiA1NjU6XHRcdGlvbGF0X3VwZGF0ZV90b3RhbF9sYXRfYXZnKGlvbGF0LCBcdTAwMjZzdGF0KTtcbiA1NjY6XHRcbiA1Njc6XHRcdC8qIEV2ZXJ5dGhpbmcgaXMgb2sgYW5kIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGFkanVzdCB0aGUgc2NhbGUuICovXG4gNTY4Olx0XHRpZiAobGF0ZW5jeV9zdW1fb2soaW9sYXQsIFx1MDAyNnN0YXQpIFx1MDAyNlx1MDAyNlxuIDU2OTpcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxhdF9pbmZvLVx1MDAzZXNjYWxlX2Nvb2tpZSkgPT0gREVGQVVMVF9TQ0FMRV9DT09LSUUpXG4gNTcwOlx0XHRcdHJldHVybjtcbiA1NzE6XHRcbiA1NzI6XHRcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXG4gNTczOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsYXRfaW5mby1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gNTc0Olx0XG4gNTc1Olx0XHRsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0LCBcdTAwMjZzdGF0KTtcbiA1NzY6XHRcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXHUwMDNlbnJfc2FtcGxlcztcbiA1Nzc6XHRcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCk7XG4gNTc4Olx0XHRpb2xhdC1cdTAwM2Vucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiA1Nzk6XHRcbiA1ODA6XHRcdGlmICgobGF0X2luZm8tXHUwMDNlbGFzdF9zY2FsZV9ldmVudCBcdTAwM2U9IG5vdyB8fFxuIDU4MTpcdFx0ICAgIG5vdyAtIGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgXHUwMDNjIEJMS0lPTEFURU5DWV9NSU5fQURKVVNUX1RJTUUpKVxuIDU4MjpcdFx0XHRnb3RvIG91dDtcbiA1ODM6XHRcbiA1ODQ6XHRcdGlmIChsYXRlbmN5X3N1bV9vayhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpIFx1MDAyNlx1MDAyNlxuIDU4NTpcdFx0ICAgIGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcdTAwMjZzdGF0KSkge1xuIDU4NjpcdFx0XHRpZiAobGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KSBcdTAwM2NcbiA1ODc6XHRcdFx0ICAgIEJMS0lPTEFURU5DWV9NSU5fR09PRF9TQU1QTEVTKVxuIDU4ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDU4OTpcdFx0XHRpZiAobGF0X2luZm8tXHUwMDNlc2NhbGVfZ3JwID09IGlvbGF0KSB7XG4gNTkwOlx0XHRcdFx0bGF0X2luZm8tXHUwMDNlbGFzdF9zY2FsZV9ldmVudCA9IG5vdztcbiA1OTE6XHRcdFx0XHRzY2FsZV9jb29raWVfY2hhbmdlKGlvbGF0LVx1MDAzZWJsa2lvbGF0LCBsYXRfaW5mbywgdHJ1ZSk7XG4gNTkyOlx0XHRcdH1cbiA1OTM6XHRcdH0gZWxzZSBpZiAobGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0ID09IDAgfHxcbiA1OTQ6XHRcdFx0ICAgbGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0IFx1MDAzZT0gaW9sYXQtXHUwMDNlbWluX2xhdF9uc2VjKSB7XG4gNTk1Olx0XHRcdGxhdF9pbmZvLVx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XG4gNTk2Olx0XHRcdGlmICghbGF0X2luZm8tXHUwMDNlc2NhbGVfZ3JwIHx8XG4gNTk3Olx0XHRcdCAgICBsYXRfaW5mby1cdTAwM2VzY2FsZV9sYXQgXHUwMDNlIGlvbGF0LVx1MDAzZW1pbl9sYXRfbnNlYykge1xuIDU5ODpcdFx0XHRcdFdSSVRFX09OQ0UobGF0X2luZm8tXHUwMDNlc2NhbGVfbGF0LCBpb2xhdC1cdTAwM2VtaW5fbGF0X25zZWMpO1xuIDU5OTpcdFx0XHRcdGxhdF9pbmZvLVx1MDAzZXNjYWxlX2dycCA9IGlvbGF0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIExhdGVuY3kgU3RhdGlzdGljcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBsYXRlbmN5IHRyYWNraW5nIGlzIGltcGxlbWVudGVkLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgY29yZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnM6IHNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgbGF0ZW5jeV9zdGF0X2luaXRgLCBgbGF0ZW5jeV9zdGF0X3N1bWAsIGBibGtfcnFfc3RhdF9zdW1gLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBsYXRlbmN5X3N0YXRgIHN0cnVjdCBpdHNlbGYuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGVuLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gTGluZXMgMTUwLTI1MCBvZiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29udGV4dCBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBJJiMzOTttIGFmdGVyLCB3aGVyZSBJIGNhbiBmb2N1cyBvbiBkYXRhIHN0cnVjdHVyZXMgYW5kIHdoZXJlIHN0YXRzIGFyZSBjb2xsZWN0ZWQuIFRoaXMgc2hvdWxkIHJlZnJlc2ggbXkga25vd2xlZGdlIG9uIHRoZSBsYXRlbmN5IG1lYXN1cmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0XHQvKiB0b3RhbCBydW5uaW5nIGF2ZXJhZ2Ugb2Ygb3VyIGlvIGxhdGVuY3kuICovXG4gMTUyOlx0XHR1NjQgbGF0X2F2ZztcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIE91ciBjdXJyZW50IG51bWJlciBvZiBJTyYjMzk7cyBmb3IgdGhlIGxhc3Qgc3VtbWF0aW9uLiAqL1xuIDE1NTpcdFx0dTY0IG5yX3NhbXBsZXM7XG4gMTU2Olx0XG4gMTU3Olx0XHRib29sIHNzZDtcbiAxNTg6XHRcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gY2hpbGRfbGF0O1xuIDE1OTpcdH07XG4gMTYwOlx0XG4gMTYxOlx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX1dJTl9TSVpFICgxMDAgKiBOU0VDX1BFUl9NU0VDKVxuIDE2MjpcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01BWF9XSU5fU0laRSBOU0VDX1BFUl9TRUNcbiAxNjM6XHQvKlxuIDE2NDpcdCAqIFRoZXNlIGFyZSB0aGUgY29uc3RhbnRzIHVzZWQgdG8gZmFrZSB0aGUgZml4ZWQtcG9pbnQgbW92aW5nIGF2ZXJhZ2VcbiAxNjU6XHQgKiBjYWxjdWxhdGlvbiBqdXN0IGxpa2UgbG9hZCBhdmVyYWdlLiAgVGhlIGNhbGwgdG8gY2FsY19sb2FkKCkgZm9sZHNcbiAxNjY6XHQgKiAoRklYRURfMSAoMjA0OCkgLSBleHBfZmFjdG9yKSAqIG5ld19zYW1wbGUgaW50byBsYXRfYXZnLiAgVGhlIHNhbXBsaW5nXG4gMTY3Olx0ICogd2luZG93IHNpemUgaXMgYnVja2V0ZWQgdG8gdHJ5IHRvIGFwcHJveGltYXRlbHkgY2FsY3VsYXRlIGF2ZXJhZ2VcbiAxNjg6XHQgKiBsYXRlbmN5IHN1Y2ggdGhhdCAxL2V4cCAoZGVjYXkgcmF0ZSkgaXMgWzEgbWluLCAyLjUgbWluKSB3aGVuIHdpbmRvd3NcbiAxNjk6XHQgKiBlbGFwc2UgaW1tZWRpYXRlbHkuICBOb3RlLCB3aW5kb3dzIG9ubHkgZWxhcHNlIHdpdGggSU8gYWN0aXZpdHkuICBJZGxlXG4gMTcwOlx0ICogcGVyaW9kcyBleHRlbmQgdGhlIG1vc3QgcmVjZW50IHdpbmRvdy5cbiAxNzE6XHQgKi9cbiAxNzI6XHQjZGVmaW5lIEJMS0lPTEFURU5DWV9OUl9FWFBfRkFDVE9SUyA1XG4gMTczOlx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfRVhQX0JVQ0tFVF9TSVpFIChCTEtJT0xBVEVOQ1lfTUFYX1dJTl9TSVpFIC8gXFxcbiAxNzQ6XHRcdFx0XHRcdCAgICAgIChCTEtJT0xBVEVOQ1lfTlJfRVhQX0ZBQ1RPUlMgLSAxKSlcbiAxNzU6XHRzdGF0aWMgY29uc3QgdTY0IGlvbGF0ZW5jeV9leHBfZmFjdG9yc1tCTEtJT0xBVEVOQ1lfTlJfRVhQX0ZBQ1RPUlNdID0ge1xuIDE3NjpcdFx0MjA0NSwgLy8gZXhwKDEvNjAwKSAtIDYwMCBzYW1wbGVzXG4gMTc3Olx0XHQyMDM5LCAvLyBleHAoMS8yNDApIC0gMjQwIHNhbXBsZXNcbiAxNzg6XHRcdDIwMzEsIC8vIGV4cCgxLzEyMCkgLSAxMjAgc2FtcGxlc1xuIDE3OTpcdFx0MjAyMywgLy8gZXhwKDEvODApICAtIDgwIHNhbXBsZXNcbiAxODA6XHRcdDIwMTQsIC8vIGV4cCgxLzYwKSAgLSA2MCBzYW1wbGVzXG4gMTgxOlx0fTtcbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpwZF90b19sYXQoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxuIDE4NDpcdHtcbiAxODU6XHRcdHJldHVybiBwZCA/IGNvbnRhaW5lcl9vZihwZCwgc3RydWN0IGlvbGF0ZW5jeV9ncnAsIHBkKSA6IE5VTEw7XG4gMTg2Olx0fVxuIDE4NzpcdFxuIDE4ODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmJsa2dfdG9fbGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZylcbiAxODk6XHR7XG4gMTkwOlx0XHRyZXR1cm4gcGRfdG9fbGF0KGJsa2dfdG9fcGQoYmxrZywgXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSkpO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqbGF0X3RvX2Jsa2coc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0KVxuIDE5NDpcdHtcbiAxOTU6XHRcdHJldHVybiBwZF90b19ibGtnKFx1MDAyNmlvbGF0LVx1MDAzZXBkKTtcbiAxOTY6XHR9XG4gMTk3Olx0XG4gMTk4Olx0c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9pbml0KHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiAxOTk6XHRcdFx0XHRcdCAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiAyMDA6XHR7XG4gMjAxOlx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjAyOlx0XHRcdHN0YXQtXHUwMDNlcHMudG90YWwgPSAwO1xuIDIwMzpcdFx0XHRzdGF0LVx1MDAzZXBzLm1pc3NlZCA9IDA7XG4gMjA0Olx0XHR9IGVsc2VcbiAyMDU6XHRcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG4gMjA2Olx0fVxuIDIwNzpcdFxuIDIwODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiAyMDk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4gMjEwOlx0XHRcdFx0XHQgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbiAyMTE6XHR7XG4gMjEyOlx0XHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4gMjEzOlx0XHRcdHN1bS1cdTAwM2Vwcy50b3RhbCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy50b3RhbDtcbiAyMTQ6XHRcdFx0c3VtLVx1MDAzZXBzLm1pc3NlZCAmIzQzOz0gc3RhdC1cdTAwM2Vwcy5taXNzZWQ7XG4gMjE1Olx0XHR9IGVsc2VcbiAyMTY6XHRcdFx0YmxrX3JxX3N0YXRfc3VtKFx1MDAyNnN1bS1cdTAwM2VycXMsIFx1MDAyNnN0YXQtXHUwMDNlcnFzKTtcbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0LypcbiAyMjA6XHQgKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXG4gMjIxOlx0ICogKG1lYW4gKiBucl9zYW1wbGVzKTsgYmxrX3JxX3N0YXRfc3VtKCkgcmVhZHMgc3JjLVx1MDAzZWJhdGNoLCB3aGljaCBpcyAwXG4gMjIyOlx0ICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXG4gMjIzOlx0ICovXG4gMjI0Olx0c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9tZXJnZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gMjI1Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4gMjI2Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxuIDIyNzpcdHtcbiAyMjg6XHRcdGlmIChpb2xhdC1cdTAwM2Vzc2QpIHtcbiAyMjk6XHRcdFx0c3VtLVx1MDAzZXBzLnRvdGFsICYjNDM7PSBzdGF0LVx1MDAzZXBzLnRvdGFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTA0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBCbG9jayBSZXF1ZXN0IFN0YXRpc3RpY3MqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aG9zZSBibG9jayByZXF1ZXN0IHN0YXRpc3RpY3MgZnVuY3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBxdWljayBvdmVydmlldy4gSSB0aGluayBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGZpbmQgdGhlIGRlZmluaXRpb25zIGFuZCBhbnkgb2J2aW91cyBjYWxscyB0byBib3RoIGBibGtfcnFfc3RhdF9pbml0YCBhbmQgYGJsa19ycV9zdGF0X3N1bWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBibG9jayBsYXllci4gSXQmIzM5O3MgYSBzb2xpZCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0LiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGludG8gdGhlIG1vcmUgZGV0YWlsZWQgY29kZSBhcyByZXF1aXJlZCwgbGlrZWx5IHVzaW5nIHRoZSBvdXRwdXQgb2YgYGdyZXBwZXJgIGFzIGEganVtcGluZy1vZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19ycV9zdGF0XyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9sYXRlbmN5LmM9MTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNC1cdH0gZWxzZVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIwNTpcdFx0YmxrX3JxX3N0YXRfaW5pdChcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA2LX1cbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjA4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE1LVx0fSBlbHNlXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjE2Olx0XHRibGtfcnFfc3RhdF9zdW0oXHUwMDI2c3VtLVx1MDAzZXJxcywgXHUwMDI2c3RhdC1cdTAwM2VycXMpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIxNy19XG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIyMC0gKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjIxOiAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIyMi0gKiBoZXJlLiBUaGUgb3ZlcmZsb3cgY2hlY2sgYWxzbyByZWplY3RzIHRoZSAwIHNhbXBsZXMgY2FzZS5cbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNTItXHR9IGVsc2VcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyNTM6XHRcdGJsa19ycV9zdGF0X2FkZChcdTAwMjZzdGF0LVx1MDAzZXJxcywgcmVxX3RpbWUpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI1NC1cdHB1dF9jcHVfcHRyKHN0YXQpO1xuLS1cbmJsb2NrL2Jsay1zdGF0LmM9MTQ9c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XG4tLVxuYmxvY2svYmxrLXN0YXQuYy0xOS1cbmJsb2NrL2Jsay1zdGF0LmM6MjA6dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbmJsb2NrL2Jsay1zdGF0LmMtMjEte1xuLS1cbmJsb2NrL2Jsay1zdGF0LmMtMjctLyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbiYjMzk7dCBpbml0aWFsaXplZCAqL1xuYmxvY2svYmxrLXN0YXQuYzoyODp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXG5ibG9jay9ibGstc3RhdC5jLTI5LXtcbi0tXG5ibG9jay9ibGstc3RhdC5jLTQxLVxuYmxvY2svYmxrLXN0YXQuYzo0Mjp2b2lkIGJsa19ycV9zdGF0X2FkZChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQsIHU2NCB2YWx1ZSlcbmJsb2NrL2Jsay1zdGF0LmMtNDMte1xuLS1cbmJsb2NrL2Jsay1zdGF0LmM9NTA9dm9pZCBibGtfc3RhdF9hZGQoc3RydWN0IHJlcXVlc3QgKnJxLCB1NjQgbm93KVxuLS1cbmJsb2NrL2Jsay1zdGF0LmMtNzAtXHRcdHN0YXQgPSBcdTAwMjZwZXJfY3B1X3B0cihjYi1cdTAwM2VjcHVfc3RhdCwgY3B1KVtidWNrZXRdO1xuYmxvY2svYmxrLXN0YXQuYzo3MTpcdFx0YmxrX3JxX3N0YXRfYWRkKHN0YXQsIHZhbHVlKTtcbmJsb2NrL2Jsay1zdGF0LmMtNzItXHR9XG4tLVxuYmxvY2svYmxrLXN0YXQuYz03Nz1zdGF0aWMgdm9pZCBibGtfc3RhdF90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5ibG9jay9ibGstc3RhdC5jLTgzLVx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIGNiLVx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCYjNDM7JiM0MzspXG5ibG9jay9ibGstc3RhdC5jOjg0Olx0XHRibGtfcnFfc3RhdF9pbml0KFx1MDAyNmNiLVx1MDAzZXN0YXRbYnVja2V0XSk7XG5ibG9jay9ibGstc3RhdC5jLTg1LVxuLS1cbmJsb2NrL2Jsay1zdGF0LmMtOTAtXHRcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFx1MDAzYyBjYi1cdTAwM2VidWNrZXRzOyBidWNrZXQmIzQzOyYjNDM7KSB7XG5ibG9jay9ibGstc3RhdC5jOjkxOlx0XHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZjYi1cdTAwM2VzdGF0W2J1Y2tldF0sIFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xuYmxvY2svYmxrLXN0YXQuYzo5MjpcdFx0XHRibGtfcnFfc3RhdF9pbml0KFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xuYmxvY2svYmxrLXN0YXQuYy05My1cdFx0fVxuLS1cbmJsb2NrL2Jsay1zdGF0LmM9MTMyPXZvaWQgYmxrX3N0YXRfYWRkX2NhbGxiYWNrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1zdGF0LmMtMTQzLVx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgY2ItXHUwMDNlYnVja2V0czsgYnVja2V0JiM0MzsmIzQzOylcbmJsb2NrL2Jsay1zdGF0LmM6MTQ0Olx0XHRcdGJsa19ycV9zdGF0X2luaXQoXHUwMDI2Y3B1X3N0YXRbYnVja2V0XSk7XG5ibG9jay9ibGstc3RhdC5jLTE0NS1cdH1cbi0tXG5ibG9jay9ibGstc3RhdC5oPTE2Nz1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3N0YXRfYWN0aXZhdGVfbXNlY3Moc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYixcbi0tXG5ibG9jay9ibGstc3RhdC5oLTE3Mi1cbmJsb2NrL2Jsay1zdGF0Lmg6MTczOnZvaWQgYmxrX3JxX3N0YXRfYWRkKHN0cnVjdCBibGtfcnFfc3RhdCAqLCB1NjQpO1xuYmxvY2svYmxrLXN0YXQuaDoxNzQ6dm9pZCBibGtfcnFfc3RhdF9zdW0oc3RydWN0IGJsa19ycV9zdGF0ICosIHN0cnVjdCBibGtfcnFfc3RhdCAqKTtcbmJsb2NrL2Jsay1zdGF0Lmg6MTc1OnZvaWQgYmxrX3JxX3N0YXRfaW5pdChzdHJ1Y3QgYmxrX3JxX3N0YXQgKik7XG5ibG9jay9ibGstc3RhdC5oLTE3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBibG9jay9ibGstc3RhdC5jYCBjb2RlOgoKKipEaXZpbmcgaW50byBibG9jay9ibGstc3RhdC5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBibG9jay9ibGstc3RhdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGtlZXBzIHRyYWNrIG9mIGFuZCBwcmVzZW50cyBibG9jayBkZXZpY2Ugc3RhdGlzdGljcy4gTXkgbWFpbiBmb2N1cyBoZXJlIHdpbGwgYmUgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugc3RhdHMgYXJlICpjb2xsZWN0ZWQqLCAqYWdncmVnYXRlZCosIGFuZCB1bHRpbWF0ZWx5ICpleHBvc2VkKiB0byB1c2Vyc3BhY2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgZm9yIGJsb2NrIGRldmljZSBzdGF0aXN0aWNzLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHJlYWQsIHdyaXRlLCBhbmQgbWFuaXB1bGF0ZSB0aGVtLiBUaGlzIHNob3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIEkvTyBvcGVyYXRpb24gY291bnRzLCB0cmFuc2ZlciBzaXplcywgYW5kIGxhdGVuY2llcywgYWxsIG9yZ2FuaXplZCBieSBkZXZpY2UgYW5kIHBvdGVudGlhbGx5IGJ5IHF1ZXVlLiBJdCYjMzk7cyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBzb21lIGdsb2JhbCBjb3VudGVycyBhbmQgdGhlbiBkZXZpY2Utc3BlY2lmaWMgb25lcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGNvbmN1cnJlbmN5IOKAkyB0aGlzIGlzIHRoZSBrZXJuZWwsIGFmdGVyIGFsbC4gVGhlcmUgKmhhcyogdG8gYmUgbG9ja2luZyBpbnZvbHZlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTtsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSBibG9jayBsYXllciYjMzk7cyByZXF1ZXN0IHF1ZXVlLCB0aGUgdmFyaW91cyBiaW8gcGF0aHMsIGFuZCBhbnkgcGVyLWRldmljZSBvciBwZXItcXVldWUgaW5mb3JtYXRpb24uIFRoZSBrZXJuZWwmIzM5O3MgcHJvY2ZzIG9yIHN5c2ZzIGludGVyZmFjZXMgd2lsbCBwcm9iYWJseSBiZSBpbnZvbHZlZCBzb21ld2hlcmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlzdGljcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmVzZW50ZWQgdG8gdXNlci1zcGFjZSB0b29scyBsaWtlIGBpb3N0YXRgIG9yIGBibGtzdGF0YC4gS25vd2luZyB0aGUgZGV0YWlscyB3aWxsIGhlbHAgbWUgZmluZCBhbmQgaW50ZXJwcmV0IHRoZSByaWdodCBkYXRhIHRvIGNvbGxlY3QgYW5kIG1vbml0b3IgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstc3RhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKlxuICAgMzpcdCAqIEJsb2NrIHN0YXQgdHJhY2tpbmcgY29kZVxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChDKSAyMDE2IEplbnMgQXhib2VcbiAgIDY6XHQgKi9cbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFwmIzM0O2Jsay1zdGF0LmhcJiMzNDtcbiAgMTE6XHQjaW5jbHVkZSBcJiMzNDtibGstbXEuaFwmIzM0O1xuICAxMjpcdCNpbmNsdWRlIFwmIzM0O2Jsay5oXCYjMzQ7XG4gIDEzOlx0XG4gIDE0Olx0c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XG4gIDE1Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGNhbGxiYWNrcztcbiAgMTY6XHRcdHNwaW5sb2NrX3QgbG9jaztcbiAgMTc6XHRcdGludCBhY2NvdW50aW5nO1xuICAxODpcdH07XG4gIDE5Olx0XG4gIDIwOlx0dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcbiAgMjE6XHR7XG4gIDIyOlx0XHRzdGF0LVx1MDAzZW1pbiA9IC0xVUxMO1xuICAyMzpcdFx0c3RhdC1cdTAwM2VtYXggPSBzdGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBzdGF0LVx1MDAzZW1lYW4gPSAwO1xuICAyNDpcdFx0c3RhdC1cdTAwM2ViYXRjaCA9IDA7XG4gIDI1Olx0fVxuICAyNjpcdFxuICAyNzpcdC8qIHNyYyBpcyBhIHBlci1jcHUgc3RhdCwgbWVhbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKi9cbiAgMjg6XHR2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXG4gIDI5Olx0e1xuICAzMDpcdFx0aWYgKGRzdC1cdTAwM2Vucl9zYW1wbGVzICYjNDM7IHNyYy1cdTAwM2Vucl9zYW1wbGVzIFx1MDAzYz0gZHN0LVx1MDAzZW5yX3NhbXBsZXMpXG4gIDMxOlx0XHRcdHJldHVybjtcbiAgMzI6XHRcbiAgMzM6XHRcdGRzdC1cdTAwM2VtaW4gPSBtaW4oZHN0LVx1MDAzZW1pbiwgc3JjLVx1MDAzZW1pbik7XG4gIDM0Olx0XHRkc3QtXHUwMDNlbWF4ID0gbWF4KGRzdC1cdTAwM2VtYXgsIHNyYy1cdTAwM2VtYXgpO1xuICAzNTpcdFxuICAzNjpcdFx0ZHN0LVx1MDAzZW1lYW4gPSBkaXZfdTY0KHNyYy1cdTAwM2ViYXRjaCAmIzQzOyBkc3QtXHUwMDNlbWVhbiAqIGRzdC1cdTAwM2Vucl9zYW1wbGVzLFxuICAzNzpcdFx0XHRcdFx0ZHN0LVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzsgc3JjLVx1MDAzZW5yX3NhbXBsZXMpO1xuICAzODpcdFxuICAzOTpcdFx0ZHN0LVx1MDAzZW5yX3NhbXBsZXMgJiM0Mzs9IHNyYy1cdTAwM2Vucl9zYW1wbGVzO1xuICA0MDpcdH1cbiAgNDE6XHRcbiAgNDI6XHR2b2lkIGJsa19ycV9zdGF0X2FkZChzdHJ1Y3QgYmxrX3JxX3N0YXQgKnN0YXQsIHU2NCB2YWx1ZSlcbiAgNDM6XHR7XG4gIDQ0Olx0XHRzdGF0LVx1MDAzZW1pbiA9IG1pbihzdGF0LVx1MDAzZW1pbiwgdmFsdWUpO1xuICA0NTpcdFx0c3RhdC1cdTAwM2VtYXggPSBtYXgoc3RhdC1cdTAwM2VtYXgsIHZhbHVlKTtcbiAgNDY6XHRcdHN0YXQtXHUwMDNlYmF0Y2ggJiM0Mzs9IHZhbHVlO1xuICA0NzpcdFx0c3RhdC1cdTAwM2Vucl9zYW1wbGVzJiM0MzsmIzQzOztcbiAgNDg6XHR9XG4gIDQ5Olx0XG4gIDUwOlx0dm9pZCBibGtfc3RhdF9hZGQoc3RydWN0IHJlcXVlc3QgKnJxLCB1NjQgbm93KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTk3CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDEzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQmxvY2sgSS9PIExhdGVuY3kgQWdncmVnYXRpb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBibGstaW9sYXRlbmN5LmNgLCBpdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiBvZiBtZWFuIGxhdGVuY2llcyBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agd2FzIGZsYXdlZC4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIG1ldGhvZCB1c2VkIGBsYXRlbmN5X3N0YXRfc3VtYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgYmxrX3JxX3N0YXRfc3VtYC4gVGhlIHByb2JsZW0gYXJvc2UgYmVjYXVzZSBgYmxrX3JxX3N0YXRfc3VtYCBjYWxjdWxhdGVkIHRoZSBtZWFuIGluY29ycmVjdGx5IHdoZW4gYWdncmVnYXRpbmcgcHJlLWNhbGN1bGF0ZWQgcGVyLUNQVSBzdGF0aXN0aWNzLiBUaGUgYGJhdGNoYCBmaWVsZCB3aXRoaW4gYHN0YXQtJmd0O3Jxc2Agd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcG9wdWxhdGVkIGR1cmluZyB0aGUgcGVyLUNQVSBhZ2dyZWdhdGlvbiBsb29wLCBzbyBpdCByZW1haW5lZCB6ZXJvLiBUaGlzIGxlZCB0byBhbiBpbmFjY3VyYXRlIG1lYW4gY2FsY3VsYXRpb24uIFRoZSBwYXRjaCBjb3JyZWN0bHkgY2FsY3VsYXRlcyB0aGUgbWVhbiB1c2luZyB0aGUgYG1lYW4gKiBucl9zYW1wbGVzYCBvZiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgc3RhdGlzdGljcywgYnkgaW50cm9kdWNpbmcgYGxhdGVuY3lfc3RhdF9tZXJnZWAuCgpOb3csIHJlZ2FyZGluZyBLTVNBTiwgbGV0JiMzOTtzIGVuc3VyZSB3ZSBhcmUgc2FmZS4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlLCBhbmQgaGVyZSYjMzk7cyBteSByZWFzb25pbmcuIFRoZSBgc3RhdGAgdmFyaWFibGUsIGNydWNpYWwgZm9yIHRoZXNlIGNhbGN1bGF0aW9ucywgaXMgc3RhY2stYWxsb2NhdGVkLCBidXQgaXQmIzM5O3MgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdXNpbmcgYGxhdGVuY3lfc3RhdF9pbml0YCBiZWZvcmUgdXNlLiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBsYXRlbmN5X3N0YXRfaW5pdGAgZnVuY3Rpb24gY29ycmVjdGx5IGluaXRpYWxpemVzIGFsbCBmaWVsZHMgKGB0b3RhbGAsIGBtaXNzZWRgLCBgbWluYCwgYG1heGAsIGBucl9zYW1wbGVzYCwgYG1lYW5gLCBhbmQgYGJhdGNoYCkuIFRoaXMgaXMgc29saWQuIEZ1cnRoZXJtb3JlLCB0aGUgYXJpdGhtZXRpYyBpbiBgbGF0ZW5jeV9zdGF0X21lcmdlYCBvcGVyYXRlcyBvbiBpbml0aWFsaXplZCBpbnRlZ2VyIGZpZWxkcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBkZWFsbG9jYXRpb25zLCBvciBhbnkgaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGNoYW5nZSBhbnkgY29kZSB0aGF0OgoxLiAgU2VuZHMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4KMi4gIERlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBpbiBjb25kaXRpb25hbCBsb2dpYy4KMy4gIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgTW9kaWZpZXMgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuCgpUaGUgY2hhbmdlcyBwcmltYXJpbHkgZGVhbCB3aXRoIHRoZSBhZ2dyZWdhdGlvbiAqbG9naWMqIHRvIGVuc3VyZSBwcm9wZXIgY2FsY3VsYXRpb24gb2YgdGhlIG1lYW4gb2YgYWxyZWFkeSBhZ2dyZWdhdGVkIHN0YXRzLCBhbmQgYWxsIHRvdWNoZWQgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgbGlrZSBLQVNBTiwgYW5kIHVuaXQgdGVzdHMsIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLiBTbywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4KCkZpbmFsbHksIHRoZSBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBjbGVhcmx5IHN0YXRlIHRoZSBmaXggZm9yIHRoZSBzdGF0aXN0aWNhbCBhZ2dyZWdhdGlvbiBlcnJvciwgdGhhdCBhbGwgc3RydWN0cyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0IEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZW4sIHdlIGNhbiBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChgYmxrLWlvbGF0ZW5jeS5jYCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgbGF0ZW5jeV9zdGF0X21lcmdlKClgIHRvIG1lcmdlIGFscmVhZHktYWdncmVnYXRlZCBgbGF0ZW5jeV9zdGF0YCBzdHJ1Y3R1cmVzIGJ5IHJlY29uc3RydWN0aW5nIHRoZSB0b3RhbCBsYXRlbmN5IHVzaW5nIGBtZWFuICogbnJfc2FtcGxlc2AgcmF0aGVyIHRoYW4gY2FsbGluZyBgYmxrX3JxX3N0YXRfc3VtKClgLCB3aGljaCBleHBlY3RzIHBlci1DUFUgdW5hZ2dyZWdhdGVkIHN0YXRzIHdpdGggYHNyYy1cdTAwM2ViYXRjaGAgc2V0LlxuXG5BbGwgc3RydWN0dXJlcyBpbnZvbHZlZCAoc3VjaCBhcyB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbGF0ZW5jeV9zdGF0IHN0YXRgIGluIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbGF0ZW5jeV9zdGF0X2luaXQoKWAgcHJpb3IgdG8gYWNjZXNzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG8gbm90IG1vZGlmeSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdXNlciBBQkkgYm91bmRhcmllcywgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWF0aGVtYXRpY2FsIGNhbGN1bGF0aW9uIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXHUwMDNlYmF0Y2hgIHNldC5cblxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMxLjk4MjI5NjMwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjE5NzkzMjg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNcIixcbiAgICBcImJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb1wiLFxuICAgIFwiaW9sYXRlbmN5X3JlY29yZF90aW1lXCIsXG4gICAgXCJpb2xhdGVuY3lfc2V0X2xpbWl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1hdGhlbWF0aWNhbCBjYWxjdWxhdGlvbiBidWcgaW4gdGhlIGJsb2NrIGxheWVyJ3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXFx1MDAzZWJhdGNoYCBzZXQuXFxuXFxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NjozMS45ODIzMDE4OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzIzNzEyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjN2RkNzc0OTFlODc2NjFhMjgzZmY3MWExMzY3MWYyN2MwNjhiMWNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXFxuaW5kZXggMmNhYTc5YTAwOGFkMS4uMjIzZDNhNWUyYmYxYyAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstaW9sYXRlbmN5LmNcXG4rKysgYi9ibG9jay9ibGstaW9sYXRlbmN5LmNcXG5AQCAtMjE2LDYgKzIxNiwzMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuIFxcdFxcdGJsa19ycV9zdGF0X3N1bShcXHUwMDI2c3VtLVxcdTAwM2VycXMsIFxcdTAwMjZzdGF0LVxcdTAwM2VycXMpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXFxuKyAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcXG4rICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxcbit7XFxuK1xcdGlmIChpb2xhdC1cXHUwMDNlc3NkKSB7XFxuK1xcdFxcdHN1bS1cXHUwMDNlcHMudG90YWwgKz0gc3RhdC1cXHUwMDNlcHMudG90YWw7XFxuK1xcdFxcdHN1bS1cXHUwMDNlcHMubWlzc2VkICs9IHN0YXQtXFx1MDAzZXBzLm1pc3NlZDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHN1bS1cXHUwMDNlcnFzLm5yX3NhbXBsZXMgKyBzdGF0LVxcdTAwM2VycXMubnJfc2FtcGxlcyBcXHUwMDNjPVxcbitcXHRcXHQgICAgc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcylcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRzdW0tXFx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXFx1MDAzZXJxcy5tZWFuICogc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcyArXFxuK1xcdFxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZXJxcy5tZWFuICogc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdHN1bS1cXHUwMDNlcnFzLm5yX3NhbXBsZXMgKyBzdGF0LVxcdTAwM2VycXMubnJfc2FtcGxlcyk7XFxuK1xcdFxcdHN1bS1cXHUwMDNlcnFzLm1pbiA9IG1pbihzdW0tXFx1MDAzZXJxcy5taW4sIHN0YXQtXFx1MDAzZXJxcy5taW4pO1xcbitcXHRcXHRzdW0tXFx1MDAzZXJxcy5tYXggPSBtYXgoc3VtLVxcdTAwM2VycXMubWF4LCBzdGF0LVxcdTAwM2VycXMubWF4KTtcXG4rXFx0XFx0c3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcyArPSBzdGF0LVxcdTAwM2VycXMubnJfc2FtcGxlcztcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHU2NCByZXFfdGltZSlcXG4ge1xcbkBAIC01NDcsNyArNTcyLDcgQEAgc3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXFxuIFxcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsYXRfaW5mby1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCwgXFx1MDAyNnN0YXQpO1xcbitcXHRsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsIFxcdTAwMjZpb2xhdC1cXHUwMDNlY3VyX3N0YXQsIFxcdTAwMjZzdGF0KTtcXG4gXFx0bGF0X2luZm8tXFx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXFx1MDAzZW5yX3NhbXBsZXM7XFxuIFxcdGxhdF9pbmZvLVxcdTAwM2Vucl9zYW1wbGVzICs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KTtcXG4gXFx0aW9sYXQtXFx1MDAzZW5yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQxNTM3OTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTI1NDY0NTM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCIsXG4gICAgXCJibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9cIixcbiAgICBcImlvbGF0ZW5jeV9yZWNvcmRfdGltZVwiLFxuICAgIFwiaW9sYXRlbmN5X3NldF9saW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYmxrLWlvbGF0ZW5jeSkgYnkgaW50cm9kdWNpbmcgbGF0ZW5jeV9zdGF0X21lcmdlKCkgdG8gY29ycmVjdGx5IG1lcmdlIGFnZ3JlZ2F0ZWQgc3RhdGlzdGljcyBpbnN0ZWFkIG9mIGludm9raW5nIGJsa19ycV9zdGF0X3N1bSgpIHdoZW4gYWdncmVnYXRpbmcgbGF0ZW5jeSBtZXRyaWNzLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGtlcm5lbCBhcml0aG1ldGljIGFuZCBzdGF0aXN0aWNzIHVwZGF0aW5nIGxvZ2ljIGR1cmluZyBibG9jayBJL08gb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHRocm90dGxpbmcgZXZhbHVhdGlvbi4gRnV6emluZyBjYW4gaGVscCBpZGVudGlmeSBhcml0aG1ldGljIGVkZ2UgY2FzZXMsIGRpdmlzaW9uIGlzc3Vlcywgb3IgbGF0ZW5jeSBjYWxjdWxhdGlvbiByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjN2RkNzc0OTFlODc2NjFhMjgzZmY3MWExMzY3MWYyN2MwNjhiMWNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuYyBiL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuaW5kZXggMmNhYTc5YTAwOGFkMS4uMjIzZDNhNWUyYmYxYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1pb2xhdGVuY3kuY1xuKysrIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG5AQCAtMjE2LDYgKzIxNiwzMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3N1bShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gXHRcdGJsa19ycV9zdGF0X3N1bShcdTAwMjZzdW0tXHUwMDNlcnFzLCBcdTAwMjZzdGF0LVx1MDAzZXJxcyk7XG4gfVxuIFxuKy8qXG4rICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xuKyAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxuKyAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfbWVyZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3VtLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcbit7XG4rXHRpZiAoaW9sYXQtXHUwMDNlc3NkKSB7XG4rXHRcdHN1bS1cdTAwM2Vwcy50b3RhbCArPSBzdGF0LVx1MDAzZXBzLnRvdGFsO1xuK1x0XHRzdW0tXHUwMDNlcHMubWlzc2VkICs9IHN0YXQtXHUwMDNlcHMubWlzc2VkO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyArIHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXMgXHUwMDNjPVxuK1x0XHQgICAgc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzKVxuK1x0XHRcdHJldHVybjtcbitcdFx0c3VtLVx1MDAzZXJxcy5tZWFuID0gZGl2X3U2NChzdW0tXHUwMDNlcnFzLm1lYW4gKiBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgK1xuK1x0XHRcdFx0XHRzdGF0LVx1MDAzZXJxcy5tZWFuICogc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcyxcbitcdFx0XHRcdFx0c3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICsgc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcyk7XG4rXHRcdHN1bS1cdTAwM2VycXMubWluID0gbWluKHN1bS1cdTAwM2VycXMubWluLCBzdGF0LVx1MDAzZXJxcy5taW4pO1xuK1x0XHRzdW0tXHUwMDNlcnFzLm1heCA9IG1heChzdW0tXHUwMDNlcnFzLm1heCwgc3RhdC1cdTAwM2VycXMubWF4KTtcbitcdFx0c3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICs9IHN0YXQtXHUwMDNlcnFzLm5yX3NhbXBsZXM7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxuIFx0XHRcdFx0XHQgICAgdTY0IHJlcV90aW1lKVxuIHtcbkBAIC01NDcsNyArNTcyLDcgQEAgc3RhdGljIHZvaWQgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBub3cpXG4gXHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bGF0X2luZm8tXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQsIFx1MDAyNnN0YXQpO1xuK1x0bGF0ZW5jeV9zdGF0X21lcmdlKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG4gXHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzIC09IGlvbGF0LVx1MDAzZW5yX3NhbXBsZXM7XG4gXHRsYXRfaW5mby1cdTAwM2Vucl9zYW1wbGVzICs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCk7XG4gXHRpb2xhdC1cdTAwM2Vucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQxNTM4MTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI2NjMxOTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGlzIHBhdGNoIHRhcmdldHMgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbXBhY3QuIFRpbWUgdG8gcHVsbCB1cCBgYmxrLWlvbGF0ZW5jeS5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0IGZvciB0aGlzIGtpbmQgb2YgcXVpY2sgaW5zcGVjdGlvbi5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBzZWN0aW9ucyBhcm91bmQgbGluZXMgMjAwLTI1MCBhbmQgNTMwLTU4MCB3aXRoaW4gdGhhdCBmaWxlLiBUaG9zZSByYW5nZXMgb2Z0ZW4gaG9sZCBjcnVjaWFsIGxvZ2ljLCBzbyBJJ2xsIGV4YW1pbmUgdGhlbSBjbG9zZWx5LiBTaW11bHRhbmVvdXNseSwgSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgc2V0dGluZ3MgcmVsYXRlZCB0byBgYmxrLWlvbGF0ZW5jeS5jYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5LiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBiYWNrZ3JvdW5kIHRvIHNlZSB0aGUgcHVycG9zZSBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0MC42ODE3MDM5NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTcyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrLWlvbGF0ZW5jeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbmJsb2NrL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG5ibG9jay9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXFx0Kz0gYmxrLWlvY29zdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjQwLjcyNzI2ODAwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4Mzc4MzAzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCTEtfQ0dST1VQX0lPTEFURU5DWSBpbiB0aGUgQmxvY2sgTGF5ZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYEJMS19DR1JPVVBfSU9MQVRFTkNZYC4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IHBvaW50cyBtZSB0byBgYmxvY2svS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBibG9jayBsYXllciwgYW5kLCBzcGVjaWZpY2FsbHksIGFueXRoaW5nIHRpZWQgdG8gY2dyb3VwcyBhbmQgSS9PIGxhdGVuY3kgd291bGQgbG9naWNhbGx5IHJlc2lkZSB0aGVyZS4gU28sIGxldCdzIGRpdmUgaW50byBgYmxvY2svS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIGFuZCB3ZWxsLWRvY3VtZW50ZWQuIElmIG5vdCwgSSdsbCBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZSB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkZXBlbmRlbmN5IGNoYWluIGVuZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0OS41NjUxMDAzOThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMDI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcXHQrPSBibGstaW9wcmlvLm9cXG5ibG9jay9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpXFx0Kz0gYmxrLWlvbGF0ZW5jeS5vXFxuYmxvY2svTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVxcdCs9IGJsay1pb2Nvc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0OS42MjAyMTM3MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE0MzQ3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQkxLX0NHUk9VUF9JT0xBVEVOQ1kgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgemVybyBpbiBvbiBgYmxvY2svS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBzb3J0cyBvZiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIGZlYXR1cmUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGJsb2NrIGxheWVyIGNvbmZpZ3VyYXRpb24uIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmRpdGlvbmFscyBvciB0cmlzdGF0ZXMgdGhhdCBnb3Zlcm4gd2hlbiBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzIGV2ZW4gcHJlc2VudGVkIGFzIGFuIG9wdGlvbiwgd2hpY2ggd2lsbCBsaWtlbHkgaW52b2x2ZSBvdGhlciBjZ3JvdXAtcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcInJlcXVpcmVzXCIgYW5kIFwiZGVwZW5kcyBvblwiIHN0YXRlbWVudHMsIG9mIGNvdXJzZSwgYnV0IEknbGwgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIGlzICpncm91cGVkKiB3aXRoaW4gdGhlIEtjb25maWcgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBsb2dpY2FsIGdyb3VwaW5ncyBnaXZlcyBtZSBhIGJldHRlciBmZWVsIGZvciB0aGUgZGVzaWduIHBoaWxvc29waHkgYmVoaW5kIHRoZSBtb2R1bGUgaXRzZWxmLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZ3JlYXRlciBibG9jayBJL08gY29udHJvbCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1Mi4wMzQ1NjQzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdGRlcGVuZHMgb24gQkxLX1dCVFxcbiAxMzE6XFx0XFx0aGVscFxcbiAxMzI6XFx0XFx0RW5hYmxlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGJ5IGRlZmF1bHQgZm9yIHJlcXVlc3QtYmFzZWQgYmxvY2sgZGV2aWNlcy5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuIDEzNTpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4gMTM2OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxcbiAxMzc6XFx0XFx0aGVscFxcbiAxMzg6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLmxhdGVuY3kgaW50ZXJmYWNlIGZvciBJTyB0aHJvdHRsaW5nLlxcbiAxMzk6XFx0XFx0VGhlIElPIGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIG1haW50YWluIGF2ZXJhZ2UgSU8gbGF0ZW5jaWVzIGJlbG93XFxuIDE0MDpcXHRcXHR0aGUgY29uZmlndXJlZCBsYXRlbmN5IHRhcmdldCwgdGhyb3R0bGluZyBhbnlib2R5IHdpdGggYSBoaWdoZXIgbGF0ZW5jeVxcbiAxNDE6XFx0XFx0dGFyZ2V0IHRoYW4gdGhlIHZpY3RpbWl6ZWQgZ3JvdXAuXFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdE5vdGUsIHRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGludGVyZmFjZSBhbmQgY291bGQgYmUgY2hhbmdlZCBzb21lZGF5LlxcbiAxNDQ6XFx0XFxuIDE0NTpcXHRjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbiAxNDY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuIDE0NzpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVAgXFx1MDAyNlxcdTAwMjYgTlZNRV9GQ1xcbiAxNDg6XFx0XFx0aGVscFxcbiAxNDk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyB0cmFmZmljIGFjcm9zc1xcbiAxNTA6XFx0XFx0ICBjZ3JvdXAgYXBwbGljYXRpb25zLiBJdCBlbmFibGVzIHRoZSBGYWJyaWMgYW5kIHRoZSBzdG9yYWdlIHRhcmdldHMgdG9cXG4gMTUxOlxcdFxcdCAgaWRlbnRpZnksIG1vbml0b3IsIGFuZCBoYW5kbGUgRkMgdHJhZmZpYyBiYXNlZCBvbiBWTSB0YWdzIGJ5IGluc2VydGluZ1xcbiAxNTI6XFx0XFx0ICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBpbnRvIHRoZSBGQyBmcmFtZS5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjUyLjAzNDYyNTc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1NjUyNTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBCTEtfQ0dST1VQKipcblxuTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGNvbmZpcm1pbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1cnJvdW5kaW5nIGBCTEtfQ0dST1VQYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzIHdoZXJlIEknZCBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBmZWF0dXJlJ3MgdmlzaWJpbGl0eSwgZGVmYXVsdCBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIEtjb25maWcgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBhbnkga2VybmVsIGRldmVsb3Blciwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgZXZlcnl0aGluZyBhYm91dCB0aGlzIHBhcnRpY3VsYXIgc2V0dGluZyBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHByb2plY3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0IGlzIGRlZmluZWQsIGlmIGl0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc2V0dGluZ3MgdGhhdCBhZmZlY3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU1LjA5MTE1NDA3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxODQ2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU1LjEzODM0MzAzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc0ODIxNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBCTEtfQ0dST1VQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQkxLX0NHUk9VUGAuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYWxtb3N0IGFsd2F5cyB0aGUgcmlnaHQgb25lIGZvciB0aGlzIGtpbmQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sLCBpcyB0byBsb29rIGluIGBpbml0L0tjb25maWdgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2Ugd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBsYWlkIG91dCwgd2hlcmUgdGhlIG9wdGlvbnMgYXJlIHByZXNlbnRlZCwgYW5kIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHVzdWFsbHkgc3BlY2lmaWVkLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBpbml0aWFsIGJvb3QgcHJvY2Vzcy4gSXQnbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBCTEtfQ0dST1VQYCBpcyBleHBvc2VkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgKGxpa2VseSBvbiBjZ3JvdXAtcmVsYXRlZCBmZWF0dXJlcyksIGFuZCBwb3RlbnRpYWxseSBldmVuIGJyaWVmIGNvbnRleHR1YWwgY29tbWVudHMuIEnigJltIHRoaW5raW5nIEnigJlsbCBzZWUgY29uZGl0aW9uYWwgbG9naWMgaGVyZSDigJMgd2hldGhlciBpdOKAmXMgYSBkaXJlY3QgYGJvb2xgIG9wdGlvbiwgb3IgcGVyaGFwcyBlbmFibGVkIGJhc2VkIG9uIGFub3RoZXIgZmVhdHVyZSwgbGlrZSB3aGV0aGVyIGNncm91cHMgYXJlIGNvbmZpZ3VyZWQgaW4gZ2VuZXJhbC4gTXkgZ3Vlc3MgaXMgaXQncyBub3QgYSBzdGFuZGFsb25lIG9wdGlvbjsgaXQncyBwcm9iYWJseSBpbnRlcndvdmVuIHdpdGggb3RoZXIgYmxvY2stbGF5ZXIgb3IgY2dyb3VwIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTcuNTEzMTY2OTk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDMwNDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUCRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU3LjU3MzQ3NTk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczNTU4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBCbG9jayBJL08gTGF0ZW5jeSBNZWFzdXJlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBrZXJuZWwgY29kZSBoYW5kbGVzIGJsb2NrIEkvTyBsYXRlbmN5IG1lYXN1cmVtZW50cy4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIG1lcmdpbmcgb2YgbGF0ZW5jeSBzdGF0aXN0aWNzIGFuZCB0aGUgY2hlY2tpbmcgb2YgdGhlIGdhdGhlcmVkIGxhdGVuY2llcy4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbGF0ZW5jeV9zdGF0X21lcmdlYCBmdW5jdGlvbi4gSSBhbnRpY2lwYXRlIGl0IGRlYWxzIHdpdGggY29tYmluaW5nIGxhdGVuY3kgZGF0YSwgcG9zc2libHkgZnJvbSBkaWZmZXJlbnQgQ1BVcyBvciB0aHJlYWRzLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agd29ya3MgLSBpdCBwcm9iYWJseSBpbnZvbHZlcyBzb21lIHRocmVzaG9sZGluZyBvciBhbmFseXNpcyB0byBzZWUgaWYgc29tZXRoaW5nJ3MgYW1pc3MgaW4gdGhlIEkvTyBwZXJmb3JtYW5jZSwgcGVyaGFwcyBsb29raW5nIGZvciBvdXRsaWVycyBvciBpZGVudGlmeWluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTg5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU5Ljg0NzAzODMzOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdGlmIChpb2xhdC1cXHUwMDNlc3NkKSB7XFxuIDIxMzpcXHRcXHRcXHRzdW0tXFx1MDAzZXBzLnRvdGFsICs9IHN0YXQtXFx1MDAzZXBzLnRvdGFsO1xcbiAyMTQ6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy5taXNzZWQgKz0gc3RhdC1cXHUwMDNlcHMubWlzc2VkO1xcbiAyMTU6XFx0XFx0fSBlbHNlXFxuIDIxNjpcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNnN1bS1cXHUwMDNlcnFzLCBcXHUwMDI2c3RhdC1cXHUwMDNlcnFzKTtcXG4gMjE3OlxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0LypcXG4gMjIwOlxcdCAqIE1lcmdlIGFuIGFscmVhZHktYWdncmVnYXRlZCBAc3RhdCBpbnRvIEBzdW0gYnkgcmVjb25zdHJ1Y3RlZCB0b3RhbHNcXG4gMjIxOlxcdCAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcXG4gMjIyOlxcdCAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxcbiAyMjM6XFx0ICovXFxuIDIyNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gMjI1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuIDIyNzpcXHR7XFxuIDIyODpcXHRcXHRpZiAoaW9sYXQtXFx1MDAzZXNzZCkge1xcbiAyMjk6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy50b3RhbCArPSBzdGF0LVxcdTAwM2Vwcy50b3RhbDtcXG4gMjMwOlxcdFxcdFxcdHN1bS1cXHUwMDNlcHMubWlzc2VkICs9IHN0YXQtXFx1MDAzZXBzLm1pc3NlZDtcXG4gMjMxOlxcdFxcdH0gZWxzZSB7XFxuIDIzMjpcXHRcXHRcXHRpZiAoc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcyArIHN0YXQtXFx1MDAzZXJxcy5ucl9zYW1wbGVzIFxcdTAwM2M9XFxuIDIzMzpcXHRcXHRcXHQgICAgc3VtLVxcdTAwM2VycXMubnJfc2FtcGxlcylcXG4gMjM0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjM1OlxcdFxcdFxcdHN1bS1cXHUwMDNlcnFzLm1lYW4gPSBkaXZfdTY0KHN1bS1cXHUwMDNlcnFzLm1lYW4gKiBzdW0tXFx1MDAzZXJxcy5ucl9zYW1wbGVzICtcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZXJxcy5tZWFuICogc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXMsXFxuIDIzNzpcXHRcXHRcXHRcXHRcXHRcXHRzdW0tXFx1MDAzZXJxcy5ucl9zYW1wbGVzICsgc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXMpO1xcbiAyMzg6XFx0XFx0XFx0c3VtLVxcdTAwM2VycXMubWluID0gbWluKHN1bS1cXHUwMDNlcnFzLm1pbiwgc3RhdC1cXHUwMDNlcnFzLm1pbik7XFxuIDIzOTpcXHRcXHRcXHRzdW0tXFx1MDAzZXJxcy5tYXggPSBtYXgoc3VtLVxcdTAwM2VycXMubWF4LCBzdGF0LVxcdTAwM2VycXMubWF4KTtcXG4gMjQwOlxcdFxcdFxcdHN1bS1cXHUwMDNlcnFzLm5yX3NhbXBsZXMgKz0gc3RhdC1cXHUwMDNlcnFzLm5yX3NhbXBsZXM7XFxuIDI0MTpcXHRcXHR9XFxuIDI0MjpcXHR9XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbiAyNDU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCByZXFfdGltZSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQgPSBnZXRfY3B1X3B0cihpb2xhdC1cXHUwMDNlc3RhdHMpO1xcbiAyNDg6XFx0XFx0aWYgKGlvbGF0LVxcdTAwM2Vzc2QpIHtcXG4gMjQ5OlxcdFxcdFxcdGlmIChyZXFfdGltZSBcXHUwMDNlPSBpb2xhdC1cXHUwMDNlbWluX2xhdF9uc2VjKVxcbiAyNTA6XFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlcHMubWlzc2VkKys7XFxuIDI1MTpcXHRcXHRcXHRzdGF0LVxcdTAwM2Vwcy50b3RhbCsrO1xcbiAyNTI6XFx0XFx0fSBlbHNlXFxuIDI1MzpcXHRcXHRcXHRibGtfcnFfc3RhdF9hZGQoXFx1MDAyNnN0YXQtXFx1MDAzZXJxcywgcmVxX3RpbWUpO1xcbiAyNTQ6XFx0XFx0cHV0X2NwdV9wdHIoc3RhdCk7XFxuIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBsYXRlbmN5X3N1bV9vayhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuIDI1ODpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuIDI1OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjU5Ljg0NzE3MDc3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY3NzU5NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGJsay1pb2xhdGVuY3kuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIEkvTyBsYXRlbmN5IGNvZGUuIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDUyMCB0byA2MjAgaW4gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBrZXkgbG9naWMgdGhlcmUsIHByb2JhYmx5IHJlbGF0ZWQgdG/igKYgd2VsbCwgbGlrZWx5IGNhbGN1bGF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgZGVjaXNpb24tbWFraW5nIHJlZ2FyZGluZyBJL08gcmVxdWVzdCB0cmFja2luZy4gR2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgSSd2ZSBzZWVuLCBJJ20gYW50aWNpcGF0aW5nIHRoaXMgc2VjdGlvbiB3aWxsIGJlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGFzcGVjdCBvZiBob3cgdGhlIGxhdGVuY3kgaXMgbWVhc3VyZWQgb3IgY2F0ZWdvcml6ZWQuIENvdWxkIGJlIHdoZXJlIHRoZXkncmUgY2FsY3VsYXRpbmcgcGVyY2VudGlsZXMsIGhhbmRsaW5nIGRpZmZlcmVudCBJL08gcXVldWUgZGVwdGhzLCBvciBwZXJoYXBzIGZpbHRlcmluZyBvdXQgY2VydGFpbiBvcGVyYXRpb25zLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBpcyBvbiB0YXJnZXQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcG9ydGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MDEuOTE0OTMyNjU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcbiA1MjE6XFx0XFx0cmVxX3RpbWUgPSBub3cgLSBzdGFydDtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0XFx0LypcXG4gNTI0OlxcdFxcdCAqIFdlIGRvbid0IHdhbnQgdG8gY291bnQgaXNzdWVfYXNfcm9vdCBiaW8ncyBpbiB0aGUgY2dyb3VwcyBsYXRlbmN5XFxuIDUyNTpcXHRcXHQgKiBzdGF0aXN0aWNzIGFzIGl0IGNvdWxkIHNrZXcgdGhlIG51bWJlcnMgZG93bndhcmRzLlxcbiA1MjY6XFx0XFx0ICovXFxuIDUyNzpcXHRcXHRpZiAodW5saWtlbHkoaXNzdWVfYXNfcm9vdCBcXHUwMDI2XFx1MDAyNiBpb2xhdC1cXHUwMDNlbWF4X2RlcHRoICE9IFVJTlRfTUFYKSkge1xcbiA1Mjg6XFx0XFx0XFx0dTY0IHN1YiA9IGlvbGF0LVxcdTAwM2VtaW5fbGF0X25zZWM7XFxuIDUyOTpcXHRcXHRcXHRpZiAocmVxX3RpbWUgXFx1MDAzYyBzdWIpXFxuIDUzMDpcXHRcXHRcXHRcXHRibGtjZ19hZGRfZGVsYXkobGF0X3RvX2Jsa2coaW9sYXQpLCBub3csIHN1YiAtIHJlcV90aW1lKTtcXG4gNTMxOlxcdFxcdFxcdHJldHVybjtcXG4gNTMyOlxcdFxcdH1cXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0bGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKGlvbGF0LCByZXFfdGltZSk7XFxuIDUzNTpcXHR9XFxuIDUzNjpcXHRcXG4gNTM3OlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9BREpVU1RfVElNRSAoNTAwICogTlNFQ19QRVJfTVNFQylcXG4gNTM4OlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9HT09EX1NBTVBMRVMgNVxcbiA1Mzk6XFx0XFxuIDU0MDpcXHRzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcXG4gNTQxOlxcdHtcXG4gNTQyOlxcdFxcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IGxhdF90b19ibGtnKGlvbGF0KTtcXG4gNTQzOlxcdFxcdHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpwYXJlbnQ7XFxuIDU0NDpcXHRcXHRzdHJ1Y3QgY2hpbGRfbGF0ZW5jeV9pbmZvICpsYXRfaW5mbztcXG4gNTQ1OlxcdFxcdHN0cnVjdCBsYXRlbmN5X3N0YXQgc3RhdDtcXG4gNTQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDU0NzpcXHRcXHRpbnQgY3B1O1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRsYXRlbmN5X3N0YXRfaW5pdChpb2xhdCwgXFx1MDAyNnN0YXQpO1xcbiA1NTA6XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuIDU1MTpcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIDU1MjpcXHRcXHRcXHRzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzO1xcbiA1NTM6XFx0XFx0XFx0cyA9IHBlcl9jcHVfcHRyKGlvbGF0LVxcdTAwM2VzdGF0cywgY3B1KTtcXG4gNTU0OlxcdFxcdFxcdGxhdGVuY3lfc3RhdF9zdW0oaW9sYXQsIFxcdTAwMjZzdGF0LCBzKTtcXG4gNTU1OlxcdFxcdFxcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBzKTtcXG4gNTU2OlxcdFxcdH1cXG4gNTU3OlxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIDU1ODpcXHRcXG4gNTU5OlxcdFxcdHBhcmVudCA9IGJsa2dfdG9fbGF0KGJsa2ctXFx1MDAzZXBhcmVudCk7XFxuIDU2MDpcXHRcXHRpZiAoIXBhcmVudClcXG4gNTYxOlxcdFxcdFxcdHJldHVybjtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0bGF0X2luZm8gPSBcXHUwMDI2cGFyZW50LVxcdTAwM2VjaGlsZF9sYXQ7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdGlvbGF0X3VwZGF0ZV90b3RhbF9sYXRfYXZnKGlvbGF0LCBcXHUwMDI2c3RhdCk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdC8qIEV2ZXJ5dGhpbmcgaXMgb2sgYW5kIHdlIGRvbid0IG5lZWQgdG8gYWRqdXN0IHRoZSBzY2FsZS4gKi9cXG4gNTY4OlxcdFxcdGlmIChsYXRlbmN5X3N1bV9vayhpb2xhdCwgXFx1MDAyNnN0YXQpIFxcdTAwMjZcXHUwMDI2XFxuIDU2OTpcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxhdF9pbmZvLVxcdTAwM2VzY2FsZV9jb29raWUpID09IERFRkFVTFRfU0NBTEVfQ09PS0lFKVxcbiA1NzA6XFx0XFx0XFx0cmV0dXJuO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHQvKiBTb21lYm9keSBiZWF0IHVzIHRvIHRoZSBwdW5jaCwganVzdCBiYWlsLiAqL1xcbiA1NzM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxhdF9pbmZvLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdGxhdGVuY3lfc3RhdF9tZXJnZShpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCwgXFx1MDAyNnN0YXQpO1xcbiA1NzY6XFx0XFx0bGF0X2luZm8tXFx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXFx1MDAzZW5yX3NhbXBsZXM7XFxuIDU3NzpcXHRcXHRsYXRfaW5mby1cXHUwMDNlbnJfc2FtcGxlcyArPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCk7XFxuIDU3ODpcXHRcXHRpb2xhdC1cXHUwMDNlbnJfc2FtcGxlcyA9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0aWYgKChsYXRfaW5mby1cXHUwMDNlbGFzdF9zY2FsZV9ldmVudCBcXHUwMDNlPSBub3cgfHxcXG4gNTgxOlxcdFxcdCAgICBub3cgLSBsYXRfaW5mby1cXHUwMDNlbGFzdF9zY2FsZV9ldmVudCBcXHUwMDNjIEJMS0lPTEFURU5DWV9NSU5fQURKVVNUX1RJTUUpKVxcbiA1ODI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdGlmIChsYXRlbmN5X3N1bV9vayhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCkgXFx1MDAyNlxcdTAwMjZcXG4gNTg1OlxcdFxcdCAgICBsYXRlbmN5X3N1bV9vayhpb2xhdCwgXFx1MDAyNnN0YXQpKSB7XFxuIDU4NjpcXHRcXHRcXHRpZiAobGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFxcdTAwMjZpb2xhdC1cXHUwMDNlY3VyX3N0YXQpIFxcdTAwM2NcXG4gNTg3OlxcdFxcdFxcdCAgICBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUylcXG4gNTg4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1ODk6XFx0XFx0XFx0aWYgKGxhdF9pbmZvLVxcdTAwM2VzY2FsZV9ncnAgPT0gaW9sYXQpIHtcXG4gNTkwOlxcdFxcdFxcdFxcdGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50ID0gbm93O1xcbiA1OTE6XFx0XFx0XFx0XFx0c2NhbGVfY29va2llX2NoYW5nZShpb2xhdC1cXHUwMDNlYmxraW9sYXQsIGxhdF9pbmZvLCB0cnVlKTtcXG4gNTkyOlxcdFxcdFxcdH1cXG4gNTkzOlxcdFxcdH0gZWxzZSBpZiAobGF0X2luZm8tXFx1MDAzZXNjYWxlX2xhdCA9PSAwIHx8XFxuIDU5NDpcXHRcXHRcXHQgICBsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0IFxcdTAwM2U9IGlvbGF0LVxcdTAwM2VtaW5fbGF0X25zZWMpIHtcXG4gNTk1OlxcdFxcdFxcdGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50ID0gbm93O1xcbiA1OTY6XFx0XFx0XFx0aWYgKCFsYXRfaW5mby1cXHUwMDNlc2NhbGVfZ3JwIHx8XFxuIDU5NzpcXHRcXHRcXHQgICAgbGF0X2luZm8tXFx1MDAzZXNjYWxlX2xhdCBcXHUwMDNlIGlvbGF0LVxcdTAwM2VtaW5fbGF0X25zZWMpIHtcXG4gNTk4OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UobGF0X2luZm8tXFx1MDAzZXNjYWxlX2xhdCwgaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYyk7XFxuIDU5OTpcXHRcXHRcXHRcXHRsYXRfaW5mby1cXHUwMDNlc2NhbGVfZ3JwID0gaW9sYXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU3OjAxLjkxNTA2NTYzN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzMzMDgwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmxrLWlvbGF0ZW5jeSBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBsYXRlbmN5X3N0YXRfbWVyZ2VgIGZ1bmN0aW9uIGludHJvZHVjZWQgaW4gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgcmVjYWxsIHNlZWluZyB0aGF0IGZ1bmN0aW9uIHJlcGxhY2luZyBgbGF0ZW5jeV9zdGF0X3N1bWAgd2l0aGluIHRoZSBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZnVuY3Rpb24uIFRoYXQgbWVyZ2UgZnVuY3Rpb24gaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgY29uc2lkZXJpbmcgaXQncyBkb2luZyBhcml0aG1ldGljLiBJIHNlZSBgZGl2X3U2NCguLi4pYCwgYG1pbmAsIGBtYXhgLCBgbnJfc2FtcGxlc2AsIGB0b3RhbGAsIGBtaXNzZWRgLCBhbGwgb2Ygd2hpY2ggYXJlIHBvdGVudGlhbCBzb3VyY2VzIGZvciBmdXp6aW5nIHRhcmdldHMhXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgYmxrLWlvbGF0ZW5jeS5jYCBpcyBhICpnb29kKiB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWFjaCB3aXRoaW4gdGhlIGtlcm5lbC4gQ2xlYXJseSwgaXQncyB0aWVkIHRvIHRoZSBibG9jayBjZ3JvdXAgSS9PIGxhdGVuY3kgY29udHJvbGxlci4gUmlnaHQsIHRoZSBjZ3JvdXBzIHYyIGlvIGNvbnRyb2xsZXIhIElmIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzIGVuYWJsZWQsIHRoZW4gaXQncyBleHBvc2VkIHZpYSBjZ3JvdXBmcyAtIHNvbWV0aGluZyBsaWtlIGBpby5sYXRlbmN5YC5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcmVtZW1iZXIgd2hlcmUgSS9PIG9wZXJhdGlvbnMgZ28uIEZyb20gd2hhdCBJIHJlY2FsbCwgaXQncyB3aGVuIEkvTyByZXF1ZXN0cyBjb21wbGV0ZSBvciBhcmUgaXNzdWVkIG9uIGJsb2NrIGRldmljZXMsIHN1Y2ggYXMgbG9vcCwgbnVsbF9ibGssIHZpcnRpby1ibGssIGFuZCByYW1kaXNrcywgdGhhdCBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2AgZ2V0cyBpbnZva2VkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJlbWVtYmVyIHdoZXJlIHRoZSBjb2RlIHBhdGhzIGFyZS4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgYmxvY2sgSS9PLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxlcnMgb2YgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYGJsay1pb2xhdGVuY3kuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhleSdyZSB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MDUuNjQ4MTQ4NzQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5NTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmM9NTEzPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsIHU2NCBzdGFydCxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MzktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQxLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02MDg9c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NTEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ3aW5kb3dfc3RhcnQsIG5vdykpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjY1MjpcXHRcXHRcXHRcXHRcXHRpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKGlvbGF0LCBub3cpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NTMtXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NzowNS42OTYxNDg0MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMzIxOTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGJsay1pb2xhdGVuY3kuY2AqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBvZiBgYmxrLWlvbGF0ZW5jeS5jYC4gSSBuZWVkIHRvIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZnJvbSBlbHNld2hlcmUgdG8ga2ljayB0aGluZ3Mgb2ZmLiBUaGVuLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvcmUgb3BlcmF0aW9ucyB0aGlzIGNvZGUgcGVyZm9ybXM7IHdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25hbGl0aWVzPyBPbmNlIEkgaGF2ZSBhIG1lbnRhbCBtYXAgb2YgdGhvc2UgZW50cnkgcG9pbnRzIGFuZCBvcGVyYXRpb25zLCBJIGNhbiBzdGFydCBkaXZpbmcgZGVlcGVyLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiByZWFkaW5nIG1vcmUgb2YgdGhlIGNvZGUgYWZ0ZXIgSSB1bmRlcnN0YW5kIHRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyB0aGUgY29kZSBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU3OjA3LjcxOTM3MTkxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5ODgxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGNmdHlwZXxzdHJ1Y3QgYmxrY2dfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9NDU3PXN0YXRpYyBpbnQgYmZxZ19zdGF0c19pbml0KHN0cnVjdCBiZnFnX3N0YXRzICpzdGF0cywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTQ4NC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgYmZxX2dyb3VwX2RhdGEgKmNwZF90b19iZnFnZChzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZClcXG5ibG9jay9iZnEtY2dyb3VwLmMtNDg2LXtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz00OTA9c3RhdGljIHN0cnVjdCBiZnFfZ3JvdXBfZGF0YSAqYmxrY2dfdG9fYmZxZ2Qoc3RydWN0IGJsa2NnICpibGtjZylcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy00OTQtXFxuYmxvY2svYmZxLWNncm91cC5jOjQ5NTpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpiZnFfY3BkX2FsbG9jKGdmcF90IGdmcClcXG5ibG9jay9iZnEtY2dyb3VwLmMtNDk2LXtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy01MDYtXFxuYmxvY2svYmZxLWNncm91cC5jOjUwNzpzdGF0aWMgdm9pZCBiZnFfY3BkX2ZyZWUoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXFxuYmxvY2svYmZxLWNncm91cC5jLTUwOC17XFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmM9MTAzMz1zdGF0aWMgaW50IGJmcV9pb19zZXRfd2VpZ2h0X2xlZ2FjeShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMDM0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsXFxuYmxvY2svYmZxLWNncm91cC5jLTEwMzUtXFx0XFx0XFx0XFx0ICAgIHU2NCB2YWwpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmM9MTI1ND1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIGludCBub2RlKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTEyNjQtXFxuYmxvY2svYmZxLWNncm91cC5jOjEyNjU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfYmZxID0ge1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjY2LVxcdC5kZmxfY2Z0eXBlc1xcdFxcdD0gYmZxX2Jsa2dfZmlsZXMsXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI3OC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTI3OTpzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtjZ19sZWdhY3lfZmlsZXNbXSA9IHtcXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI4MC1cXHR7XFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQwNC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTQwNTpzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtnX2ZpbGVzW10gPSB7XFxuYmxvY2svYmZxLWNncm91cC5jLTE0MDYtXFx0e1xcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuaD05NjI9c3RydWN0IGJmcV9ncm91cF9kYXRhIHtcXG5ibG9jay9iZnEtaW9zY2hlZC5oLTk2My1cXHQvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi9cXG5ibG9jay9iZnEtaW9zY2hlZC5oOjk2NDpcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgcGQ7XFxuYmxvY2svYmZxLWlvc2NoZWQuaC05NjUtXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5oPTEwOTE9dm9pZCBiZnFnX2FuZF9ibGtnX3B1dChzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKTtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmgtMTA5My0jaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXFxuYmxvY2svYmZxLWlvc2NoZWQuaDoxMDk0OmV4dGVybiBzdHJ1Y3QgY2Z0eXBlIGJmcV9ibGtjZ19sZWdhY3lfZmlsZXNbXTtcXG5ibG9jay9iZnEtaW9zY2hlZC5oOjEwOTU6ZXh0ZXJuIHN0cnVjdCBjZnR5cGUgYmZxX2Jsa2dfZmlsZXNbXTtcXG5ibG9jay9iZnEtaW9zY2hlZC5oOjEwOTY6ZXh0ZXJuIHN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X2JmcTtcXG5ibG9jay9iZnEtaW9zY2hlZC5oLTEwOTctI2VuZGlmXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jPTgxPUVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfcHJmaWxsX3J3c3RhdCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5jLTk1LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmM6OTY6dm9pZCBibGtnX3J3c3RhdF9yZWN1cnNpdmVfc3VtKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAtcndzdGF0LmMtOTctXFx0XFx0aW50IG9mZiwgc3RydWN0IGJsa2dfcndzdGF0X3NhbXBsZSAqc3VtKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC1yd3N0YXQuaD00Nj11NjQgYmxrZ19wcmZpbGxfcndzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCxcXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5oLTQ3LVxcdFxcdCAgICAgICBpbnQgb2ZmKTtcXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5oOjQ4OnZvaWQgYmxrZ19yd3N0YXRfcmVjdXJzaXZlX3N1bShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG5ibG9jay9ibGstY2dyb3VwLXJ3c3RhdC5oLTQ5LVxcdFxcdGludCBvZmYsIHN0cnVjdCBibGtnX3J3c3RhdF9zYW1wbGUgKnN1bSk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NTc9YXRvbWljX3QgYmxrY2dfbnJfY29uZ2VzdGVkIF9fcmVhZF9tb3N0bHkgPSBBVE9NSUNfSU5JVCgwKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtNTgtXFxuYmxvY2svYmxrLWNncm91cC5jOjU5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpibGtjZ19wb2xpY3lbQkxLQ0dfTUFYX1BPTFNdO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy02MC1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0zMDY9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19hbGxvYyhzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNDMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpKyspIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6MzQ0OlxcdFxcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMzQ1LVxcdFxcdHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZDtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0zODI9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNDE3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjQxODpcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jLTQxOS1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy00MzEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpKyspIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6NDMyOlxcdFxcdFxcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcXG5ibG9jay9ibGstY2dyb3VwLmMtNDMzLVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTUyMD1zdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3koc3RydWN0IGJsa2NnX2dxICpibGtnKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTUzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKykge1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mzg6XFx0XFx0c3RydWN0IGJsa2NnX3BvbGljeSAqcG9sID0gYmxrY2dfcG9saWN5W2ldO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy01MzktXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NTY3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNjA1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjYwNjpcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jLTYwNy1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz02NTI9c3RhdGljIGludCBibGtjZ19yZXNldF9zdGF0cyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo2NTM6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsIHU2NCB2YWwpXFxuYmxvY2svYmxrLWNncm91cC5jLTY1NC17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNjcwLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjY3MTpcXHRcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jLTY3Mi1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz03MDg9dm9pZCBibGtjZ19wcmludF9ibGtncyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgYmxrY2cgKmJsa2NnLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTcxMC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICosIGludCksXFxuYmxvY2svYmxrLWNncm91cC5jOjcxMTpcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLCBpbnQgZGF0YSxcXG5ibG9jay9ibGstY2dyb3VwLmMtNzEyLVxcdFxcdCAgICAgICBib29sIHNob3dfdG90YWwpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9vcGVuX2JkZXYpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTgzMy0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6ODM0OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5jLTgzNS1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTExMzU9c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTE3NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKykge1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTc2OlxcdFxcdHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCA9IGJsa2NnX3BvbGljeVtpXTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTE3Ny1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTg3PXN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMDMtXFxuYmxvY2svYmxrLWNncm91cC5jOjEyMDQ6c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTIwNS1cXHR7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTIxMS1cXG5ibG9jay9ibGstY2dyb3VwLmM6MTIxMjpzdGF0aWMgc3RydWN0IGNmdHlwZSBibGtjZ19sZWdhY3lfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTIxMy1cXHR7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTM4MT1ibGtjZ19jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTM5OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFMgOyBpKyspIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6MTQwMDpcXHRcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wgPSBibGtjZ19wb2xpY3lbaV07XFxuYmxvY2svYmxrLWNncm91cC5jOjE0MDE6XFx0XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQ7XFxuYmxvY2svYmxrLWNncm91cC5jLTE0MDItXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTU0OD1zdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTQ5OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1MC17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTU4NS0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6MTU4NjppbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuYmxvY2svYmxrLWNncm91cC5jLTE1ODcte1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTE3MDA9dm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmM6MTcwMTpcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwMi17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTcyMz1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19kZWFjdGl2YXRlX3BvbGljeSk7XFxuYmxvY2svYmxrLWNncm91cC5jLTE3MjQtXFxuYmxvY2svYmxrLWNncm91cC5jOjE3MjU6c3RhdGljIHZvaWQgYmxrY2dfZnJlZV9hbGxfY3BkKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTcyNi17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTc0My0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6MTc0NDppbnQgYmxrY2dfcG9saWN5X3JlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTc0NS17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTc3Ni1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2NnLCBcXHUwMDI2YWxsX2Jsa2NncywgYWxsX2Jsa2Nnc19ub2RlKSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjE3Nzc6XFx0XFx0XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQ7XFxuYmxvY2svYmxrLWNncm91cC5jLTE3NzgtXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTgxNj1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19wb2xpY3lfcmVnaXN0ZXIpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE4MjMtICovXFxuYmxvY2svYmxrLWNncm91cC5jOjE4MjQ6dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuYmxvY2svYmxrLWNncm91cC5jLTE4MjUte1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTk0PXN0cnVjdCBibGtjZyB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmgtMTA0LVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDoxMDU6XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhXFx0KmNwZFtCTEtDR19NQVhfUE9MU107XFxuYmxvY2svYmxrLWNncm91cC5oLTEwNi1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0xMzg9c3RydWN0IGJsa2dfcG9saWN5X2RhdGEge1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oLTE1My0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmg6MTU0OnN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSB7XFxuYmxvY2svYmxrLWNncm91cC5oLTE1NS1cXHQvKiB0aGUgYmxrY2cgYW5kIHBvbGljeSBpZCB0aGlzIHBlci1wb2xpY3kgZGF0YSBiZWxvbmdzIHRvICovXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmgtMTU5LVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDoxNjA6dHlwZWRlZiBzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKihibGtjZ19wb2xfYWxsb2NfY3BkX2ZuKShnZnBfdCBnZnApO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoxNjE6dHlwZWRlZiB2b2lkIChibGtjZ19wb2xfaW5pdF9jcGRfZm4pKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MTYyOnR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX2ZyZWVfY3BkX2ZuKShzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmNwZCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjE2Mzp0eXBlZGVmIHZvaWQgKGJsa2NnX3BvbF9iaW5kX2NwZF9mbikoc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNjQtdHlwZWRlZiBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqKGJsa2NnX3BvbF9hbGxvY19wZF9mbikoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MTcxPXR5cGVkZWYgdm9pZCAoYmxrY2dfcG9sX3N0YXRfcGRfZm4pKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzMtXFxuYmxvY2svYmxrLWNncm91cC5oOjE3NDpzdHJ1Y3QgYmxrY2dfcG9saWN5IHtcXG5ibG9jay9ibGstY2dyb3VwLmgtMTc1LVxcdGludFxcdFxcdFxcdFxcdHBsaWQ7XFxuYmxvY2svYmxrLWNncm91cC5oLTE3Ni1cXHQvKiBjZ3JvdXAgZmlsZXMgZm9yIHRoZSBwb2xpY3kgKi9cXG5ibG9jay9ibGstY2dyb3VwLmg6MTc3OlxcdHN0cnVjdCBjZnR5cGVcXHRcXHRcXHQqZGZsX2NmdHlwZXM7XFxuYmxvY2svYmxrLWNncm91cC5oOjE3ODpcXHRzdHJ1Y3QgY2Z0eXBlXFx0XFx0XFx0KmxlZ2FjeV9jZnR5cGVzO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xNzktXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MTk4PXZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDAtLyogQmxraW8gY29udHJvbGxlciBwb2xpY3kgcmVnaXN0cmF0aW9uICovXFxuYmxvY2svYmxrLWNncm91cC5oOjIwMTppbnQgYmxrY2dfcG9saWN5X3JlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjIwMjp2b2lkIGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjIwMzppbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDQtdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmg6MjA1OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA2LVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTIwOD12b2lkIGJsa2NnX3ByaW50X2Jsa2dzKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBibGtjZyAqYmxrY2csXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmgtMjEwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKiwgaW50KSxcXG5ibG9jay9ibGstY2dyb3VwLmg6MjExOlxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsIGludCBkYXRhLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMTItXFx0XFx0ICAgICAgIGJvb2wgc2hvd190b3RhbCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MjIzPWludCBibGtnX2NvbmZfb3Blbl9iZGV2KHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXFxuYmxvY2svYmxrLWNncm91cC5oLTIyNC1cXHRfX2NvbmRfYWNxdWlyZXMoMCwgXFx1MDAyNmN0eC1cXHUwMDNlYmRldi1cXHUwMDNlYmRfcXVldWUtXFx1MDAzZXJxX3Fvc19tdXRleCk7XFxuYmxvY2svYmxrLWNncm91cC5oOjIyNTppbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjYtXFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yODY9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqYmxrZ190b19wZChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csXFxuYmxvY2svYmxrLWNncm91cC5oOjI4NzpcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmgtMjg4LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yOTEtXFxuYmxvY2svYmxrLWNncm91cC5oOjI5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqYmxrY2dfdG9fY3BkKHN0cnVjdCBibGtjZyAqYmxrY2csXFxuYmxvY2svYmxrLWNncm91cC5oOjI5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmgtMjk0LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0zMDQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2dfZ3EgKnBkX3RvX2Jsa2coc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oLTMwOC1cXG5ibG9jay9ibGstY2dyb3VwLmg6MzA5OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnICpjcGRfdG9fYmxrY2coc3RydWN0IGJsa2NnX3BvbGljeV9kYXRhICpjcGQpXFxuYmxvY2svYmxrLWNncm91cC5oLTMxMC17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NDc5PXN0YXRpYyBpbmxpbmUgYm9vbCBibGtjZ19wb2xpY3lfZW5hYmxlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstY2dyb3VwLmg6NDgwOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG5ibG9jay9ibGstY2dyb3VwLmgtNDgxLXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODk9c3RydWN0IGJsa2dfcG9saWN5X2RhdGEge1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oLTQ5MS1cXG5ibG9jay9ibGstY2dyb3VwLmg6NDkyOnN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSB7XFxuYmxvY2svYmxrLWNncm91cC5oLTQ5My19O1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTQtXFxuYmxvY2svYmxrLWNncm91cC5oOjQ5NTpzdHJ1Y3QgYmxrY2dfcG9saWN5IHtcXG5ibG9jay9ibGstY2dyb3VwLmgtNDk2LX07XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo1MDU6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfcG9saWN5X3JlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyByZXR1cm4gMDsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo1MDY6c3RhdGljIGlubGluZSB2b2lkIGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyB9XFxuYmxvY2svYmxrLWNncm91cC5oLTUwNy1zdGF0aWMgaW5saW5lIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5oOjUwODpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cXG5ibG9jay9ibGstY2dyb3VwLmgtNTA5LXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmg6NTEwOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyB9XFxuYmxvY2svYmxrLWNncm91cC5oLTUxMS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NTEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKmJsa2dfdG9fcGQoc3RydWN0IGJsa2NnX2dxICpibGtnLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo1MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIE5VTEw7IH1cXG5ibG9jay9ibGstY2dyb3VwLmgtNTE0LXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpwZF90b19ibGtnKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCkgeyByZXR1cm4gTlVMTDsgfVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTU1ND1zdHJ1Y3QgaW9jX2NncnAge1xcbmJsb2NrL2Jsay1pb2Nvc3QuYzo1NTU6XFx0c3RydWN0IGJsa2NnX3BvbGljeV9kYXRhXFx0Y3BkO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy01NTYtXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0ZGZsX3dlaWdodDtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz02NTE9c3RhdGljIGNvbnN0IHUzMiB2cmF0ZV9hZGpfcGN0W10gPVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTY1Ni1cXG5ibG9jay9ibGstaW9jb3N0LmM6NjU3OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV9pb2Nvc3Q7XFxuYmxvY2svYmxrLWlvY29zdC5jLTY1OC1cXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0yOTE1PXN0YXRpYyBpbnQgYmxrX2lvY29zdF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI5NzktXFxuYmxvY2svYmxrLWlvY29zdC5jOjI5ODA6c3RhdGljIHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqaW9jX2NwZF9hbGxvYyhnZnBfdCBnZnApXFxuYmxvY2svYmxrLWlvY29zdC5jLTI5ODEte1xcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI5OTEtXFxuYmxvY2svYmxrLWlvY29zdC5jOjI5OTI6c3RhdGljIHZvaWQgaW9jX2NwZF9mcmVlKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTkzLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0zNDc2PXN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3My1cXG5ibG9jay9ibGstaW9jb3N0LmM6MzU3NDpzdGF0aWMgc3RydWN0IGNmdHlwZSBpb2NfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3NS1cXHR7XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzU5NS1cXG5ibG9jay9ibGstaW9jb3N0LmM6MzU5NjpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9jb3N0ID0ge1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTk3LVxcdC5kZmxfY2Z0eXBlc1xcdD0gaW9jX2ZpbGVzLFxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTgzLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo4NDpzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9sYXRlbmN5O1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NS1zdHJ1Y3QgaW9sYXRlbmN5X2dycDtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz0xMDY5PXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9mcmVlKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDgyLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDgzOnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvbGF0ZW5jeV9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDg0LVxcdHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDkyLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDkzOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV9pb2xhdGVuY3kgPSB7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwOTQtXFx0LmRmbF9jZnR5cGVzXFx0PSBpb2xhdGVuY3lfZmlsZXMsXFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmM9NDI9c3RhdGljIGNvbnN0IGNoYXIgKnBvbGljeV9uYW1lW10gPSB7XFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmMtNDktXFxuYmxvY2svYmxrLWlvcHJpby5jOjUwOnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGlvcHJpb19wb2xpY3k7XFxuYmxvY2svYmxrLWlvcHJpby5jLTUxLVxcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jPTU3PXN0cnVjdCBpb3ByaW9fYmxrY2cge1xcbmJsb2NrL2Jsay1pb3ByaW8uYzo1ODpcXHRzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgY3BkO1xcbmJsb2NrL2Jsay1pb3ByaW8uYy01OS1cXHRlbnVtIHByaW9fcG9saWN5XFx0IHByaW9fcG9saWN5O1xcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jPTgyPXN0YXRpYyBzc2l6ZV90IGlvcHJpb19zZXRfcHJpb19wb2xpY3koc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmMtOTctXFxuYmxvY2svYmxrLWlvcHJpby5jOjk4OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5X2RhdGEgKmlvcHJpb19hbGxvY19jcGQoZ2ZwX3QgZ2ZwKVxcbmJsb2NrL2Jsay1pb3ByaW8uYy05OS17XFxuLS1cXG5ibG9jay9ibGstaW9wcmlvLmMtMTA4LVxcbmJsb2NrL2Jsay1pb3ByaW8uYzoxMDk6c3RhdGljIHZvaWQgaW9wcmlvX2ZyZWVfY3BkKHN0cnVjdCBibGtjZ19wb2xpY3lfZGF0YSAqY3BkKVxcbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTAte1xcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jLTExNS1cXG5ibG9jay9ibGstaW9wcmlvLmM6MTE2OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvcHJpb19maWxlc1tdID0ge1xcbmJsb2NrL2Jsay1pb3ByaW8uYy0xMTctXFx0e1xcbi0tXFxuYmxvY2svYmxrLWlvcHJpby5jLTEyNC1cXG5ibG9jay9ibGstaW9wcmlvLmM6MTI1OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfcG9saWN5IGlvcHJpb19wb2xpY3kgPSB7XFxuYmxvY2svYmxrLWlvcHJpby5jLTEyNi1cXHQuZGZsX2NmdHlwZXNcXHQ9IGlvcHJpb19maWxlcyxcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE0MzI9c3RhdGljIGludCB0Z19wcmludF9yd3N0YXRfcmVjdXJzaXZlKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDM5LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NDA6c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NDEtXFx0e1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0MD1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYyMS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNjIyOnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjMtXFx0e1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTY3MD1zdGF0aWMgdm9pZCB0aHJvdGxfcGRfb2ZmbGluZShzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjc0LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2NzU6c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2NzYtXFx0LmRmbF9jZnR5cGVzXFx0XFx0PSB0aHJvdGxfZmlsZXMsXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD02OT1zdHJ1Y3QgdGhyb3RsX2dycCB7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xMzAtXFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTMxOmV4dGVybiBzdHJ1Y3QgYmxrY2dfcG9saWN5IGJsa2NnX3BvbGljeV90aHJvdGw7XFxuYmxvY2svYmxrLXRocm90dGxlLmgtMTMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NzowNy43NjczNjIwMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTUyNjc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzIHRhc2s6XG5cbioqQW5hbHl6aW5nIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIC0gSW5pdGlhbGl6YXRpb24sIEV4aXQsIGFuZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gQSBnb29kIGFwcHJvYWNoLCBlc3BlY2lhbGx5IHdpdGgga2VybmVsIG1vZHVsZXMsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgcXVpY2tseS4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgeW91IGZpbmQgdGhlIGBtb2R1bGVfaW5pdCgpYCBhbmQgYG1vZHVsZV9leGl0KClgIG1hY3Jvcy4gVGhvc2Ugd2lsbCBpbW1lZGlhdGVseSBzaG93IG1lIGhvdyB0aGUgbW9kdWxlIGlzIGxvYWRlZCBhbmQgdW5sb2FkZWQsIHdoaWNoIGlzIGtleSBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiB1c3VhbGx5IHNwb3QgdGhlIGNvcmUgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoZSBmaWxlLiBJJ2xsIG1ha2UgYSBxdWljayBub3RlIG9mIHRob3NlIHRvby4gVGhpcyB3aWxsIGdpdmUgbWUgYSBmaXJzdC1wYXNzIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGUncyByZXNwb25zaWJpbGl0aWVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGFsd2F5cyBnb29kIHRvIHN0YXJ0IHdpdGggdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgZ2V0dGluZyBsb3N0IGluIHRoZSBkZXRhaWxzLiBLbm93aW5nIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgbmFycm93cyBkb3duIHRoZSBzZWFyY2ggY29uc2lkZXJhYmx5LiBJIGNhbiB0aGVuIHJlYWQgdGhlIGNvZGUgbW9yZSBzdHJhdGVnaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU3OjEwLjAxNjg5MjA0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1pb2xhdGVuY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDUwOlxcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9vZmZsaW5lKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4xMDUxOlxcdHtcXG4xMDUyOlxcdFxcdHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCA9IHBkX3RvX2xhdChwZCk7XFxuMTA1MzpcXHRcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBsYXRfdG9fYmxrZyhpb2xhdCk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdGlvbGF0ZW5jeV9zZXRfbWluX2xhdF9uc2VjKGJsa2csIDApO1xcbjEwNTY6XFx0XFx0aW9sYXRlbmN5X2NsZWFyX3NjYWxpbmcoYmxrZyk7XFxuMTA1NzpcXHR9XFxuMTA1ODpcXHRcXG4xMDU5OlxcdHN0YXRpYyB2b2lkIGlvbGF0X3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuMTA2MDpcXHR7XFxuMTA2MTpcXHRcXHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQgPVxcbjEwNjI6XFx0XFx0XFx0Y29udGFpbmVyX29mKHJjdSwgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEsIHJjdV9oZWFkKTtcXG4xMDYzOlxcdFxcdHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCA9IHBkX3RvX2xhdChwZCk7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdGZyZWVfcGVyY3B1KGlvbGF0LVxcdTAwM2VzdGF0cyk7XFxuMTA2NjpcXHRcXHRrZnJlZShpb2xhdCk7XFxuMTA2NzpcXHR9XFxuMTA2ODpcXHRcXG4xMDY5OlxcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9mcmVlKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IHBkX3RvX2Jsa2cocGQpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHQvKlxcbjEwNzQ6XFx0XFx0ICogR3JvdXBzIHRocm90dGxlZCBhcyBjb2xsYXRlcmFsIGhhdmUgbWluX2xhdF9uc2VjID09IDAsIHNvXFxuMTA3NTpcXHRcXHQgKiBpb2xhdGVuY3lfcGRfb2ZmbGluZSgpIGxlYXZlcyB0aGVpciBkZWxheSBzZXQuICBEcm9wIGl0IGhlcmUsIHdoZXJlXFxuMTA3NjpcXHRcXHQgKiBubyBpbi1mbGlnaHQgYmlvIGNhbiByZS1hcm0gaXQgdmlhIGNoZWNrX3NjYWxlX2NoYW5nZSgpLlxcbjEwNzc6XFx0XFx0ICovXFxuMTA3ODpcXHRcXHRpZiAoYmxrZylcXG4xMDc5OlxcdFxcdFxcdGJsa2NnX2NsZWFyX2RlbGF5KGJsa2cpO1xcbjEwODA6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBkLVxcdTAwM2VyY3VfaGVhZCwgaW9sYXRfcmVsZWFzZSk7XFxuMTA4MTpcXHR9XFxuMTA4MjpcXHRcXG4xMDgzOlxcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvbGF0ZW5jeV9maWxlc1tdID0ge1xcbjEwODQ6XFx0XFx0e1xcbjEwODU6XFx0XFx0XFx0Lm5hbWUgPSBcXFwibGF0ZW5jeVxcXCIsXFxuMTA4NjpcXHRcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuMTA4NzpcXHRcXHRcXHQuc2VxX3Nob3cgPSBpb2xhdGVuY3lfcHJpbnRfbGltaXQsXFxuMTA4ODpcXHRcXHRcXHQud3JpdGUgPSBpb2xhdGVuY3lfc2V0X2xpbWl0LFxcbjEwODk6XFx0XFx0fSxcXG4xMDkwOlxcdFxcdHt9XFxuMTA5MTpcXHR9O1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRzdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9sYXRlbmN5ID0ge1xcbjEwOTQ6XFx0XFx0LmRmbF9jZnR5cGVzXFx0PSBpb2xhdGVuY3lfZmlsZXMsXFxuMTA5NTpcXHRcXHQucGRfYWxsb2NfZm5cXHQ9IGlvbGF0ZW5jeV9wZF9hbGxvYyxcXG4xMDk2OlxcdFxcdC5wZF9pbml0X2ZuXFx0PSBpb2xhdGVuY3lfcGRfaW5pdCxcXG4xMDk3OlxcdFxcdC5wZF9vZmZsaW5lX2ZuXFx0PSBpb2xhdGVuY3lfcGRfb2ZmbGluZSxcXG4xMDk4OlxcdFxcdC5wZF9mcmVlX2ZuXFx0PSBpb2xhdGVuY3lfcGRfZnJlZSxcXG4xMDk5OlxcdFxcdC5wZF9zdGF0X2ZuXFx0PSBpb2xhdGVuY3lfcGRfc3RhdCxcXG4xMTAwOlxcdH07XFxuMTEwMTpcXHRcXG4xMTAyOlxcdHN0YXRpYyBpbnQgX19pbml0IGlvbGF0ZW5jeV9pbml0KHZvaWQpXFxuMTEwMzpcXHR7XFxuMTEwNDpcXHRcXHRyZXR1cm4gYmxrY2dfcG9saWN5X3JlZ2lzdGVyKFxcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5KTtcXG4xMTA1OlxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0c3RhdGljIHZvaWQgX19leGl0IGlvbGF0ZW5jeV9leGl0KHZvaWQpXFxuMTEwODpcXHR7XFxuMTEwOTpcXHRcXHRibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihcXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSk7XFxuMTExMDpcXHR9XFxuMTExMTpcXHRcXG4xMTEyOlxcdG1vZHVsZV9pbml0KGlvbGF0ZW5jeV9pbml0KTtcXG4xMTEzOlxcdG1vZHVsZV9leGl0KGlvbGF0ZW5jeV9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MTAuMDE2OTkzODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA0MzY4OTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbGF0ZW5jeV9zdGF0X21lcmdlYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGxhdGVuY3lfc3RhdF9tZXJnZWAgd2FzIHB1dCBpbiBwbGFjZSB0byBzcGVjaWZpY2FsbHkgYWRkcmVzcyBob3cgd2UgbWVyZ2UgbGF0ZW5jeSBzdGF0aXN0aWNzIHdpdGhpbiB0aGUgYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIHNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbGF0ZW5jeV9zdGF0X21lcmdlYCBpcyBzdGF0aWMgaW5saW5lIGFuZCBtYXAgb3V0IGl0cyBjYWxsIGdyYXBoIHdpdGhpbiBgYmxrLWlvbGF0ZW5jeS5jYC4gUmlnaHQsIGhlcmUgd2UgZ286IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCBkaXJlY3RseSBjYWxscyBgbGF0ZW5jeV9zdGF0X21lcmdlYC4gQ3J1Y2lhbGx5LCBgYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvYCB0aGVuIGNhbGxzIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYC4gVGhpcyBtYWtlcyBpdCBwYXJ0IG9mIHRoZSBjZ3JvdXAgaW9sYXRlbmN5IHBhdGguIEZ1cnRoZXIgY29uZmlybWluZyB0aGUgY29ubmVjdGlvbiB0byBjb25maWd1cmF0aW9uLCBgaW9sYXRlbmN5X3NldF9saW1pdGAgZW5hYmxlcyBhbmQgY29uZmlndXJlcyBpb2xhdGVuY3ksIHdoaWNoIHBvaW50cyB0byBjZ3JvdXAgY29uZmlnIHdyaXRpbmcgdG8gZW5hYmxlIGlvbGF0ZW5jeSBvbiBhIGJsb2NrIGRldmljZS5cblxuTm93LCBmb3IgdGhlIGZ1enppbmcgY3JpdGVyaWEuIFRoaXMgbG9va3MgZ29vZC4gSXQgc2VlbXMgdG8gYmUgcmVhY2hhYmxlIGNvZGU7IHdlJ3JlIHRhbGtpbmcgYSBzdGFuZGFyZCBRRU1VL0dDRSBrZXJuZWwgZW52aXJvbm1lbnQgd2l0aCBjZ3JvdXBzIHYyLCBibG9jayBsYXllciwgbG9vcCBkZXZpY2VzLCB2aXJ0aW8tYmxrLCBldGMuIFNvIHdlJ3JlIGNvdmVyZWQgdGhlcmUuIFRoZSBtb3N0IHNpZ25pZmljYW50IHBhcnQgaXMgdGhhdCBpdCAqaXMqIG1vZGlmeWluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgbWVyZ2luZyBsb2dpYyBmb3IgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5LiBUaGlzIG1ha2VzIHRoZSBhbnN3ZXIgdG8gXCJXb3J0aEZ1enppbmdcIiBhIGRlZmluaXRlIFwieWVzXCIuXG5cbkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlndXJhdGlvbnMuIFdlJ3JlIGxvb2tpbmcgYXQgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEJMS19DR1JPVVBgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFRpbWUgdG8gZ3JlcCBmb3IgYENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWWAgYW5kIHJlbGF0ZWQgY29uZmlncyB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NzoxNC4wNjA2ODU3NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjU2MjI2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTIwMTI9Zm9yIGEgZGV2aWNlLCBieSBCRlEncyBvd24gY2dyb3VwIHN1cHBvcnQuICBMYXRlbmN5LWJhc2VkIHByb3RlY3Rpb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q6MjAxMzooQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKSBhbmQgSS9PIHByaW9yaXR5IGFzc2lnbm1lbnRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMjAxNC0oQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKSBhcmUgYWxzbyBhdmFpbGFibGUuXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTgxPUNPTkZJR19CTEtfV0JUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjgyOkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy04My1DT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRD15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTk2PUNPTkZJR19CTEtfV0JUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjk3OkNPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy05OC1DT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRD15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODg9Q09ORklHX0JMS19XQlQ9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo4OTpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy05MC1DT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTgyPUNPTkZJR19CTEtfV0JUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6ODM6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODQtQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcXG4tLVxcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWc9NTY9Q09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eVxcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWc6NTc6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnLTU4LUNPTkZJR19CTEtfQ0dST1VQX0lPQ09TVD15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NTc9Q09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eVxcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzo1ODpDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1k9eVxcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZy01OS1DT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxcbi0tXFxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcXG4tLVxcbmJsb2NrL0tjb25maWctMTMzLVxcbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbmJsb2NrL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbi0tXFxuYmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbmJsb2NrL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG5ibG9jay9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXFx0Kz0gYmxrLWlvY29zdC5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82ND0xMD1DT05GSUdfQkxLX0NHUk9VUD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTE6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0xMi1DT05GSUdfQkxLX0RFVl9CU0dMSUI9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249NT1DT05GSUdfQklORk1UX01JU0M9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjY6Q09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi03LUNPTkZJR19CTEtfQ0dST1VQPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MTYuNTI2MzEzNDQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMjEwODI4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgQkxLX0NHUk9VUGAgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjcnlzdGFsIGNsZWFyIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19DR1JPVVBgLiBObyBwb2ludCBpbiBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgSSdtIG1pc3Npbmcgc29tZSBmdW5kYW1lbnRhbCBwaWVjZXMuIExldCdzIHB1bGwgdXAgYGluaXQvS2NvbmZpZ2AgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCBmb3IgdGhhdCBvcHRpb24gdG8gYmUgYXZhaWxhYmxlLiBOZWVkIHRvIGVuc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSBoaWRkZW4gaW1wbGljYXRpb25zIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBjb21waWxlLXRpbWUgZXJyb3JzIG9yIHJ1bnRpbWUgc3VycHJpc2VzIGxhdGVyIG9uLiBCZXN0IHRvIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbiByaWdodCBmcm9tIHRoZSBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODoxOC43MzcxNDQ2MzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTIwOlxcdFxcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxcbjExMjE6XFx0XFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExMjQ6XFx0XFxuMTEyNTpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMjY6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTI3OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTI4OlxcdFxcdGRlZmF1bHQgblxcbjExMjk6XFx0XFx0aGVscFxcbjExMzA6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMzE6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEzMjpcXHRcXHRwb2xpY2llcy5cXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMzU6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMzY6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEzNzpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjE4LjczNzMzMDgxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDYyMTY0NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJsb2NrIEkvTyBMYXRlbmN5IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEJMS19DR1JPVVBgIHN0dWZmLCBhbmQgaXQncyBjbGVhciB0aGF0IHRoZSBgQkxLX0NHUk9VUGAgb3B0aW9uIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgQkxPQ0tgLiBNYWtlcyBzZW5zZS4gQW5kLCBuYXR1cmFsbHksIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAgcmVsaWVzIG9uIGBCTEtfQ0dST1VQYC4gTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGluIHRoZSBjb250ZXh0IG9mIG91ciB3b3JrLlxuXG5JIHNlZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGxhdGVuY3lfc3RhdF9tZXJnZWAuIEludGVyZXN0aW5nLCBidXQgaXQncyAqc3RhdGljIGlubGluZSogd2l0aGluIGBibG9jay9ibGstaW9sYXRlbmN5LmNgLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBMZXQncyB0cmFjZSBpdDsgYGxhdGVuY3lfc3RhdF9tZXJnZWAgaXMgY2FsbGVkIGluIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYC4gTm93LCBpcyAqdGhhdCogaW5saW5lZD8gWWVwLCBpdCdzIGFsc28gZGVjbGFyZWQgYHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoLi4uKWAuIEhtbS4gVGhhdCBzdGF0aWMgaW5saW5lIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgaXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcHByb2FjaCB0byBhbmFseXNpcy5cblxuQWxyaWdodCwgdGhlIHN0cmF0ZWd5IEknbSBnb2luZyB0byB0YWtlIGlzIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIG9yIGtleSBjYWxsZXIgZnVuY3Rpb25zIHdpdGhpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYC4gRnJvbSB0aGlzLCBJJ2xsIG5lZWQgdG8gbG9vayBhdDpcblxuKiAgIGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYFxuKiAgIGBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9gXG4qICAgYGlvbGF0ZW5jeV9yZWNvcmRfdGltZWBcbiogICBgaW9sYXRlbmN5X3NldF9saW1pdGBcblxuSSBjb3VsZCBpbmNsdWRlIGBsYXRlbmN5X3N0YXRfbWVyZ2VgLCBidXQgYWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBpZiB0aGUgY2hhbmdlcyBhcmUgbW9zdGx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaXQncyBiZXR0ZXIgdG8gbGlzdCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLiBTbywgSSB3aWxsIGZvY3VzIG9uIHRoZSBsaXN0IGFib3ZlLlxuXG5Ob3csIEknbGwgbmVlZCB0byBnbyBhaGVhZCBhbmQgY3Jvc3MtcmVmZXJlbmNlIHdoYXQgc3ltYm9scyBhY3R1YWxseSBleGlzdCB3aXRoaW4gYGJsay1pb2xhdGVuY3kuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MjIuNzk5NDk3NjY3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE5NDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTg3PXN0cnVjdCBibGtfaW9sYXRlbmN5IHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfaW9sYXRlbmN5ICpCTEtJT0xBVEVOQ1koc3RydWN0IHJxX3FvcyAqcnFvcylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA0LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz0xNzU9c3RhdGljIGNvbnN0IHU2NCBpb2xhdGVuY3lfZXhwX2ZhY3RvcnNbQkxLSU9MQVRFTkNZX05SX0VYUF9GQUNUT1JTXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjE4MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpwZF90b19sYXQoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xODQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE4Ny1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmJsa2dfdG9fbGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTg5LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xOTItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjE5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqbGF0X3RvX2Jsa2coc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0KVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xOTQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE5Ny1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTk4OnN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfaW5pdChzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTE5OS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjA3LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMDg6c3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9zdW0oc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMDktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjMtICovXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIyNDpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjI1LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNDMtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI0NDpzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X3JlY29yZF90aW1lKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjQ1LVxcdFxcdFxcdFxcdFxcdCAgICB1NjQgcmVxX3RpbWUpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjU2LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyNTc6c3RhdGljIGlubGluZSBib29sIGxhdGVuY3lfc3VtX29rKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjU4LVxcdFxcdFxcdFxcdCAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNjctXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI2ODpzdGF0aWMgaW5saW5lIHU2NCBsYXRlbmN5X3N0YXRfc2FtcGxlcyhzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI2OS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNzUtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI3NjpzdGF0aWMgaW5saW5lIHZvaWQgaW9sYXRfdXBkYXRlX3RvdGFsX2xhdF9hdmcoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yNzctXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yOTgtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjI5OTpzdGF0aWMgdm9pZCBpb2xhdF9jbGVhbnVwX2NiKHN0cnVjdCBycV93YWl0ICpycXcsIHZvaWQgKnByaXZhdGVfZGF0YSlcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzAwLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMDQtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjMwNTpzdGF0aWMgYm9vbCBpb2xhdF9hY3F1aXJlX2luZmxpZ2h0KHN0cnVjdCBycV93YWl0ICpycXcsIHZvaWQgKnByaXZhdGVfZGF0YSlcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzA2LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMTAtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjMxMTpzdGF0aWMgdm9pZCBfX2Jsa2NnX2lvbGF0ZW5jeV90aHJvdHRsZShzdHJ1Y3QgcnFfcW9zICpycW9zLFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMTItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zMzktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjM0MDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2NhbGVfYW1vdW50KHVuc2lnbmVkIGxvbmcgcWQsIGJvb2wgdXApXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTM0MS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMzUzLSAqL1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzozNTQ6c3RhdGljIHZvaWQgc2NhbGVfY29va2llX2NoYW5nZShzdHJ1Y3QgYmxrX2lvbGF0ZW5jeSAqYmxraW9sYXQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTM1NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgY2hpbGRfbGF0ZW5jeV9pbmZvICpsYXRfaW5mbyxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zOTctICovXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjM5ODpzdGF0aWMgdm9pZCBzY2FsZV9jaGFuZ2Uoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCBib29sIHVwKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0zOTkte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQyMy0vKiBDaGVjayBvdXIgcGFyZW50IGFuZCBzZWUgaWYgdGhlIHNjYWxlIGNvb2tpZSBoYXMgY2hhbmdlZC4gKi9cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NDI0OnN0YXRpYyB2b2lkIGNoZWNrX3NjYWxlX2NoYW5nZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTQyNS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNDg3LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo0ODg6c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X3Rocm90dGxlKHN0cnVjdCBycV9xb3MgKnJxb3MsIHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNDg5LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MTItXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjUxMzpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCB1NjQgc3RhcnQsXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTUxNC1cXHRcXHRcXHRcXHQgIHU2NCBub3csIGJvb2wgaXNzdWVfYXNfcm9vdClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy01MzktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjU0MDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNTQxLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDctXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjYwODpzdGF0aWMgdm9pZCBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW8oc3RydWN0IHJxX3FvcyAqcnFvcywgc3RydWN0IGJpbyAqYmlvKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDkte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY1OS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjYwOnN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY2MS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnFfcW9zX29wcyBibGtjZ19pb2xhdGVuY3lfb3BzID0ge1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY3NS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6Njc2OnN0YXRpYyB2b2lkIGJsa2lvbGF0ZW5jeV90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjc3LXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NTItICovXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc1MzpzdGF0aWMgdm9pZCBibGtpb2xhdGVuY3lfZW5hYmxlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NTQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc4Mi1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NzgzOnN0YXRpYyBpbnQgYmxrX2lvbGF0ZW5jeV9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03ODQte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTgxMS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6ODEyOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9zZXRfbWluX2xhdF9uc2VjKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgdTY0IHZhbClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODEzLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04MzMtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjgzNDpzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2xlYXJfc2NhbGluZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTgzNS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODUxLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo4NTI6c3RhdGljIHNzaXplX3QgaW9sYXRlbmN5X3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODUzLVxcdFxcdFxcdCAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05MjQtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjkyNTpzdGF0aWMgdTY0IGlvbGF0ZW5jeV9wcmZpbGxfbGltaXQoc3RydWN0IHNlcV9maWxlICpzZixcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTI2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkLCBpbnQgb2ZmKVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzNy1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTM4OnN0YXRpYyBpbnQgaW9sYXRlbmN5X3ByaW50X2xpbWl0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTkzOS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTQ1LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo5NDY6c3RhdGljIHZvaWQgaW9sYXRlbmN5X3NzZF9zdGF0KHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgc3RydWN0IHNlcV9maWxlICpzKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NDcte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk3MC1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTcxOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9zdGF0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZCwgc3RydWN0IHNlcV9maWxlICpzKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05NzIte1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTk5Mi1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTkzOnN0YXRpYyBzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqaW9sYXRlbmN5X3BkX2FsbG9jKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05OTQtXFx0XFx0c3RydWN0IGJsa2NnICpibGtjZywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTEwMDktXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjEwMTA6c3RhdGljIHZvaWQgaW9sYXRlbmN5X3BkX2luaXQoc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkKVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDExLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDQ5LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDUwOnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9vZmZsaW5lKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA1MS17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA1OC1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTA1OTpzdGF0aWMgdm9pZCBpb2xhdF9yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDYwLXtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0xMDY4LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoxMDY5OnN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9mcmVlKHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTA3MC17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MTA5Mz1zdGF0aWMgc3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfaW9sYXRlbmN5ID0ge1xcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTExMDEtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjExMDI6c3RhdGljIGludCBfX2luaXQgaW9sYXRlbmN5X2luaXQodm9pZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwMy17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwNi1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTEwNzpzdGF0aWMgdm9pZCBfX2V4aXQgaW9sYXRlbmN5X2V4aXQodm9pZClcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTEwOC17XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMTExMS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MTExMjptb2R1bGVfaW5pdChpb2xhdGVuY3lfaW5pdCk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjExMTM6bW9kdWxlX2V4aXQoaW9sYXRlbmN5X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODoyMi44NDU2OTU4NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0MDI5MDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MgZm9yIHRoaXMgSS9PIGxhdGVuY3kgbW9uaXRvcmluZyBzZXR1cC4gRmlyc3QsIEknbSBnb2luZyB0byBncmFiIHRoZSBjb3JlIGZvY3VzIHN5bWJvbHM6IGBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzYCwgYGJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb2AsIGBpb2xhdGVuY3lfcmVjb3JkX3RpbWVgLCBhbmQgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSdyZSBhbGwgZGVmaW5lZCBhbmQgd29ya2luZyB0b2dldGhlciBwcm9wZXJseS5cblxuTm93IGZvciB0aGUgY29uZmlnIG9wdGlvbnMuIEknbSBnb2luZyB0byBiZSB1c2luZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgb2YgY291cnNlLCBpdCByZWxpZXMgb24gYEJMS19DR1JPVVBgLiBBbHJpZ2h0LCB0aW1lIGZvciBhIHF1aWNrIGF1ZGl0LiBObyBtaXNzaW5nIHBpZWNlcywgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgdHJlZSBpcyBzb2xpZC4gU28sIEkgc2VlIHRoYXQgYEJMS19DR1JPVVBgIGl0c2VsZiBuZWVkcyBgQkxPQ0tgLiBSaWdodCwgbWFrZXMgc2Vuc2U7IGNhbid0IG1hbmFnZSBibG9jayBJL08gd2l0aG91dCB0aGUgZnVuZGFtZW50YWwgYmxvY2sgZGV2aWNlIHN1cHBvcnQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbGFzdCB0aW1lIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IGRlcGVuZGVuY3kuIFllcCwgZXZlcnl0aGluZyBsb29rcyByaWdodC4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMTgsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjI1Ljg4NTk4OTM5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODQxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNcIixcbiAgICBcImJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb1wiLFxuICAgIFwiaW9sYXRlbmN5X3JlY29yZF90aW1lXCIsXG4gICAgXCJpb2xhdGVuY3lfc2V0X2xpbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGNncm91cCBJL08gbGF0ZW5jeSBjb250cm9sbGVyIChibGstaW9sYXRlbmN5KSBieSBpbnRyb2R1Y2luZyBsYXRlbmN5X3N0YXRfbWVyZ2UoKSB0byBjb3JyZWN0bHkgbWVyZ2UgYWdncmVnYXRlZCBzdGF0aXN0aWNzIGluc3RlYWQgb2YgaW52b2tpbmcgYmxrX3JxX3N0YXRfc3VtKCkgd2hlbiBhZ2dyZWdhdGluZyBsYXRlbmN5IG1ldHJpY3MuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUga2VybmVsIGFyaXRobWV0aWMgYW5kIHN0YXRpc3RpY3MgdXBkYXRpbmcgbG9naWMgZHVyaW5nIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdGhyb3R0bGluZyBldmFsdWF0aW9uLiBGdXp6aW5nIGNhbiBoZWxwIGlkZW50aWZ5IGFyaXRobWV0aWMgZWRnZSBjYXNlcywgZGl2aXNpb24gaXNzdWVzLCBvciBsYXRlbmN5IGNhbGN1bGF0aW9uIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc1wiLFxuICAgIFwiYmxrY2dfaW9sYXRlbmN5X2RvbmVfYmlvXCIsXG4gICAgXCJpb2xhdGVuY3lfcmVjb3JkX3RpbWVcIixcbiAgICBcImlvbGF0ZW5jeV9zZXRfbGltaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgY2dyb3VwIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGJsay1pb2xhdGVuY3kpIGJ5IGludHJvZHVjaW5nIGxhdGVuY3lfc3RhdF9tZXJnZSgpIHRvIGNvcnJlY3RseSBtZXJnZSBhZ2dyZWdhdGVkIHN0YXRpc3RpY3MgaW5zdGVhZCBvZiBpbnZva2luZyBibGtfcnFfc3RhdF9zdW0oKSB3aGVuIGFnZ3JlZ2F0aW5nIGxhdGVuY3kgbWV0cmljcy4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBrZXJuZWwgYXJpdGhtZXRpYyBhbmQgc3RhdGlzdGljcyB1cGRhdGluZyBsb2dpYyBkdXJpbmcgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYW5kIGNncm91cCB0aHJvdHRsaW5nIGV2YWx1YXRpb24uIEZ1enppbmcgY2FuIGhlbHAgaWRlbnRpZnkgYXJpdGhtZXRpYyBlZGdlIGNhc2VzLCBkaXZpc2lvbiBpc3N1ZXMsIG9yIGxhdGVuY3kgY2FsY3VsYXRpb24gcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjI1Ljk2MTgzNzkwOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMTgzODE3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODoyNS45NjIzODk3ODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODIxNzgyNTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllcidzIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGBibGstaW9sYXRlbmN5LmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGBsYXRlbmN5X3N0YXRfbWVyZ2UoKWAgdG8gbWVyZ2UgYWxyZWFkeS1hZ2dyZWdhdGVkIGBsYXRlbmN5X3N0YXRgIHN0cnVjdHVyZXMgYnkgcmVjb25zdHJ1Y3RpbmcgdGhlIHRvdGFsIGxhdGVuY3kgdXNpbmcgYG1lYW4gKiBucl9zYW1wbGVzYCByYXRoZXIgdGhhbiBjYWxsaW5nIGBibGtfcnFfc3RhdF9zdW0oKWAsIHdoaWNoIGV4cGVjdHMgcGVyLUNQVSB1bmFnZ3JlZ2F0ZWQgc3RhdHMgd2l0aCBgc3JjLVxcdTAwM2ViYXRjaGAgc2V0LlxcblxcbkFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIChzdWNoIGFzIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBsYXRlbmN5X3N0YXQgc3RhdGAgaW4gYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBsYXRlbmN5X3N0YXRfaW5pdCgpYCBwcmlvciB0byBhY2Nlc3MuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkbyBub3QgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB1c2VyIEFCSSBib3VuZGFyaWVzLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3ZGQ3NzQ5MWU4NzY2MWEyODNmZjcxYTEzNjcxZjI3YzA2OGIxY2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jIGIvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG5pbmRleCAyY2FhNzlhMDA4YWQxLi4yMjNkM2E1ZTJiZjFjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWlvbGF0ZW5jeS5jXG4rKysgYi9ibG9jay9ibGstaW9sYXRlbmN5LmNcbkBAIC0yMTYsNiArMjE2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcbiBcdFx0YmxrX3JxX3N0YXRfc3VtKFx1MDAyNnN1bS1cdTAwM2VycXMsIFx1MDAyNnN0YXQtXHUwMDNlcnFzKTtcbiB9XG4gXG4rLypcbisgKiBNZXJnZSBhbiBhbHJlYWR5LWFnZ3JlZ2F0ZWQgQHN0YXQgaW50byBAc3VtIGJ5IHJlY29uc3RydWN0ZWQgdG90YWxzXG4rICogKG1lYW4gKiBucl9zYW1wbGVzKTsgYmxrX3JxX3N0YXRfc3VtKCkgcmVhZHMgc3JjLVx1MDAzZWJhdGNoLCB3aGljaCBpcyAwXG4rICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9tZXJnZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxuK3tcbitcdGlmIChpb2xhdC1cdTAwM2Vzc2QpIHtcbitcdFx0c3VtLVx1MDAzZXBzLnRvdGFsICs9IHN0YXQtXHUwMDNlcHMudG90YWw7XG4rXHRcdHN1bS1cdTAwM2Vwcy5taXNzZWQgKz0gc3RhdC1cdTAwM2Vwcy5taXNzZWQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoc3VtLVx1MDAzZXJxcy5ucl9zYW1wbGVzICsgc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcyBcdTAwM2M9XG4rXHRcdCAgICBzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMpXG4rXHRcdFx0cmV0dXJuO1xuK1x0XHRzdW0tXHUwMDNlcnFzLm1lYW4gPSBkaXZfdTY0KHN1bS1cdTAwM2VycXMubWVhbiAqIHN1bS1cdTAwM2VycXMubnJfc2FtcGxlcyArXG4rXHRcdFx0XHRcdHN0YXQtXHUwMDNlcnFzLm1lYW4gKiBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzLFxuK1x0XHRcdFx0XHRzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgKyBzdGF0LVx1MDAzZXJxcy5ucl9zYW1wbGVzKTtcbitcdFx0c3VtLVx1MDAzZXJxcy5taW4gPSBtaW4oc3VtLVx1MDAzZXJxcy5taW4sIHN0YXQtXHUwMDNlcnFzLm1pbik7XG4rXHRcdHN1bS1cdTAwM2VycXMubWF4ID0gbWF4KHN1bS1cdTAwM2VycXMubWF4LCBzdGF0LVx1MDAzZXJxcy5tYXgpO1xuK1x0XHRzdW0tXHUwMDNlcnFzLm5yX3NhbXBsZXMgKz0gc3RhdC1cdTAwM2VycXMubnJfc2FtcGxlcztcbitcdH1cbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGxhdGVuY3lfc3RhdF9yZWNvcmRfdGltZShzdHJ1Y3QgaW9sYXRlbmN5X2dycCAqaW9sYXQsXG4gXHRcdFx0XHRcdCAgICB1NjQgcmVxX3RpbWUpXG4ge1xuQEAgLTU0Nyw3ICs1NzIsNyBAQCBzdGF0aWMgdm9pZCBpb2xhdGVuY3lfY2hlY2tfbGF0ZW5jaWVzKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCwgdTY0IG5vdylcbiBcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsYXRfaW5mby1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRsYXRlbmN5X3N0YXRfc3VtKGlvbGF0LCBcdTAwMjZpb2xhdC1cdTAwM2VjdXJfc3RhdCwgXHUwMDI2c3RhdCk7XG4rXHRsYXRlbmN5X3N0YXRfbWVyZ2UoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0LCBcdTAwMjZzdGF0KTtcbiBcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgLT0gaW9sYXQtXHUwMDNlbnJfc2FtcGxlcztcbiBcdGxhdF9pbmZvLVx1MDAzZW5yX3NhbXBsZXMgKz0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFx1MDAyNmlvbGF0LVx1MDAzZWN1cl9zdGF0KTtcbiBcdGlvbGF0LVx1MDAzZW5yX3NhbXBsZXMgPSBsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXHUwMDI2aW9sYXQtXHUwMDNlY3VyX3N0YXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MjUuOTYyMzkwOTE4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODk2MDU0MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOL0tBU0FOIE5lZWRzIGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbiBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCB3YXJyYW50cyBhIHNwZWNpZmljIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyBhIHRyaWFnZSBzaXR1YXRpb24sIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgaW5jcmVhc2luZyB0aG9zZSByaXNrcz8gSSdtIGFwcHJvYWNoaW5nIHRoaXMgd2l0aCBhIHNhZmV0eS1maXJzdCBtaW5kc2V0LiBJdCdzIGEgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nIGFuZCB0ZXN0aW5nIHRhc2ssIHNvIGxldCdzIGdldCBpdCByaWdodC5cblxuVGhpcyBpcyBhIHByZXR0eSBiZW5pZ24gcmVxdWVzdCBvdmVyYWxsLCBzbyBJ4oCZbSBnb2luZyB0byBjb25zaWRlciB0aGlzIGEgc2FmZSBmdWxmaWxsLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBicmVhayBvdXQgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGFuZCBpZGVudGlmeSBpZiB0aGVyZSdzIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gSSdsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIHBvaW50ZXIgYXNzaWdubWVudHMsIGFuZCB1c2VzIG9mIGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlYWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzay4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODozNy44NTg0NDg5MzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1pb2xhdGVuY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFxuIDUyMTpcXHRcXHRyZXFfdGltZSA9IG5vdyAtIHN0YXJ0O1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHQvKlxcbiA1MjQ6XFx0XFx0ICogV2UgZG9uJ3Qgd2FudCB0byBjb3VudCBpc3N1ZV9hc19yb290IGJpbydzIGluIHRoZSBjZ3JvdXBzIGxhdGVuY3lcXG4gNTI1OlxcdFxcdCAqIHN0YXRpc3RpY3MgYXMgaXQgY291bGQgc2tldyB0aGUgbnVtYmVycyBkb3dud2FyZHMuXFxuIDUyNjpcXHRcXHQgKi9cXG4gNTI3OlxcdFxcdGlmICh1bmxpa2VseShpc3N1ZV9hc19yb290IFxcdTAwMjZcXHUwMDI2IGlvbGF0LVxcdTAwM2VtYXhfZGVwdGggIT0gVUlOVF9NQVgpKSB7XFxuIDUyODpcXHRcXHRcXHR1NjQgc3ViID0gaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYztcXG4gNTI5OlxcdFxcdFxcdGlmIChyZXFfdGltZSBcXHUwMDNjIHN1YilcXG4gNTMwOlxcdFxcdFxcdFxcdGJsa2NnX2FkZF9kZWxheShsYXRfdG9fYmxrZyhpb2xhdCksIG5vdywgc3ViIC0gcmVxX3RpbWUpO1xcbiA1MzE6XFx0XFx0XFx0cmV0dXJuO1xcbiA1MzI6XFx0XFx0fVxcbiA1MzM6XFx0XFxuIDUzNDpcXHRcXHRsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoaW9sYXQsIHJlcV90aW1lKTtcXG4gNTM1OlxcdH1cXG4gNTM2OlxcdFxcbiA1Mzc6XFx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX0FESlVTVF9USU1FICg1MDAgKiBOU0VDX1BFUl9NU0VDKVxcbiA1Mzg6XFx0I2RlZmluZSBCTEtJT0xBVEVOQ1lfTUlOX0dPT0RfU0FNUExFUyA1XFxuIDUzOTpcXHRcXG4gNTQwOlxcdHN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXMoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LCB1NjQgbm93KVxcbiA1NDE6XFx0e1xcbiA1NDI6XFx0XFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gbGF0X3RvX2Jsa2coaW9sYXQpO1xcbiA1NDM6XFx0XFx0c3RydWN0IGlvbGF0ZW5jeV9ncnAgKnBhcmVudDtcXG4gNTQ0OlxcdFxcdHN0cnVjdCBjaGlsZF9sYXRlbmN5X2luZm8gKmxhdF9pbmZvO1xcbiA1NDU6XFx0XFx0c3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0O1xcbiA1NDY6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gNTQ3OlxcdFxcdGludCBjcHU7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdGxhdGVuY3lfc3RhdF9pbml0KGlvbGF0LCBcXHUwMDI2c3RhdCk7XFxuIDU1MDpcXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gNTUxOlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4gNTUyOlxcdFxcdFxcdHN0cnVjdCBsYXRlbmN5X3N0YXQgKnM7XFxuIDU1MzpcXHRcXHRcXHRzID0gcGVyX2NwdV9wdHIoaW9sYXQtXFx1MDAzZXN0YXRzLCBjcHUpO1xcbiA1NTQ6XFx0XFx0XFx0bGF0ZW5jeV9zdGF0X3N1bShpb2xhdCwgXFx1MDAyNnN0YXQsIHMpO1xcbiA1NTU6XFx0XFx0XFx0bGF0ZW5jeV9zdGF0X2luaXQoaW9sYXQsIHMpO1xcbiA1NTY6XFx0XFx0fVxcbiA1NTc6XFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gNTU4OlxcdFxcbiA1NTk6XFx0XFx0cGFyZW50ID0gYmxrZ190b19sYXQoYmxrZy1cXHUwMDNlcGFyZW50KTtcXG4gNTYwOlxcdFxcdGlmICghcGFyZW50KVxcbiA1NjE6XFx0XFx0XFx0cmV0dXJuO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHRsYXRfaW5mbyA9IFxcdTAwMjZwYXJlbnQtXFx1MDAzZWNoaWxkX2xhdDtcXG4gNTY0OlxcdFxcbiA1NjU6XFx0XFx0aW9sYXRfdXBkYXRlX3RvdGFsX2xhdF9hdmcoaW9sYXQsIFxcdTAwMjZzdGF0KTtcXG4gNTY2OlxcdFxcbiA1Njc6XFx0XFx0LyogRXZlcnl0aGluZyBpcyBvayBhbmQgd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgdGhlIHNjYWxlLiAqL1xcbiA1Njg6XFx0XFx0aWYgKGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcXHUwMDI2c3RhdCkgXFx1MDAyNlxcdTAwMjZcXG4gNTY5OlxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2bGF0X2luZm8tXFx1MDAzZXNjYWxlX2Nvb2tpZSkgPT0gREVGQVVMVF9TQ0FMRV9DT09LSUUpXFxuIDU3MDpcXHRcXHRcXHRyZXR1cm47XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdC8qIFNvbWVib2R5IGJlYXQgdXMgdG8gdGhlIHB1bmNoLCBqdXN0IGJhaWwuICovXFxuIDU3MzpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bGF0X2luZm8tXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0bGF0ZW5jeV9zdGF0X21lcmdlKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0LCBcXHUwMDI2c3RhdCk7XFxuIDU3NjpcXHRcXHRsYXRfaW5mby1cXHUwMDNlbnJfc2FtcGxlcyAtPSBpb2xhdC1cXHUwMDNlbnJfc2FtcGxlcztcXG4gNTc3OlxcdFxcdGxhdF9pbmZvLVxcdTAwM2Vucl9zYW1wbGVzICs9IGxhdGVuY3lfc3RhdF9zYW1wbGVzKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KTtcXG4gNTc4OlxcdFxcdGlvbGF0LVxcdTAwM2Vucl9zYW1wbGVzID0gbGF0ZW5jeV9zdGF0X3NhbXBsZXMoaW9sYXQsIFxcdTAwMjZpb2xhdC1cXHUwMDNlY3VyX3N0YXQpO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRpZiAoKGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50IFxcdTAwM2U9IG5vdyB8fFxcbiA1ODE6XFx0XFx0ICAgIG5vdyAtIGxhdF9pbmZvLVxcdTAwM2VsYXN0X3NjYWxlX2V2ZW50IFxcdTAwM2MgQkxLSU9MQVRFTkNZX01JTl9BREpVU1RfVElNRSkpXFxuIDU4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0aWYgKGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcXHUwMDI2aW9sYXQtXFx1MDAzZWN1cl9zdGF0KSBcXHUwMDI2XFx1MDAyNlxcbiA1ODU6XFx0XFx0ICAgIGxhdGVuY3lfc3VtX29rKGlvbGF0LCBcXHUwMDI2c3RhdCkpIHtcXG4gNTg2OlxcdFxcdFxcdGlmIChsYXRlbmN5X3N0YXRfc2FtcGxlcyhpb2xhdCwgXFx1MDAyNmlvbGF0LVxcdTAwM2VjdXJfc3RhdCkgXFx1MDAzY1xcbiA1ODc6XFx0XFx0XFx0ICAgIEJMS0lPTEFURU5DWV9NSU5fR09PRF9TQU1QTEVTKVxcbiA1ODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU4OTpcXHRcXHRcXHRpZiAobGF0X2luZm8tXFx1MDAzZXNjYWxlX2dycCA9PSBpb2xhdCkge1xcbiA1OTA6XFx0XFx0XFx0XFx0bGF0X2luZm8tXFx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XFxuIDU5MTpcXHRcXHRcXHRcXHRzY2FsZV9jb29raWVfY2hhbmdlKGlvbGF0LVxcdTAwM2VibGtpb2xhdCwgbGF0X2luZm8sIHRydWUpO1xcbiA1OTI6XFx0XFx0XFx0fVxcbiA1OTM6XFx0XFx0fSBlbHNlIGlmIChsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0ID09IDAgfHxcXG4gNTk0OlxcdFxcdFxcdCAgIGxhdF9pbmZvLVxcdTAwM2VzY2FsZV9sYXQgXFx1MDAzZT0gaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYykge1xcbiA1OTU6XFx0XFx0XFx0bGF0X2luZm8tXFx1MDAzZWxhc3Rfc2NhbGVfZXZlbnQgPSBub3c7XFxuIDU5NjpcXHRcXHRcXHRpZiAoIWxhdF9pbmZvLVxcdTAwM2VzY2FsZV9ncnAgfHxcXG4gNTk3OlxcdFxcdFxcdCAgICBsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0IFxcdTAwM2UgaW9sYXQtXFx1MDAzZW1pbl9sYXRfbnNlYykge1xcbiA1OTg6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShsYXRfaW5mby1cXHUwMDNlc2NhbGVfbGF0LCBpb2xhdC1cXHUwMDNlbWluX2xhdF9uc2VjKTtcXG4gNTk5OlxcdFxcdFxcdFxcdGxhdF9pbmZvLVxcdTAwM2VzY2FsZV9ncnAgPSBpb2xhdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MzcuODU4NTYyNjczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDY0NDI5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIExhdGVuY3kgU3RhdGlzdGljcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgbGF0ZW5jeSB0cmFja2luZyBpcyBpbXBsZW1lbnRlZC4gRmlyc3QsIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgY29yZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnM6IHNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgbGF0ZW5jeV9zdGF0X2luaXRgLCBgbGF0ZW5jeV9zdGF0X3N1bWAsIGBibGtfcnFfc3RhdF9zdW1gLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBsYXRlbmN5X3N0YXRgIHN0cnVjdCBpdHNlbGYuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGVuLCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBMaW5lcyAxNTAtMjUwIG9mIGBibG9jay9ibGstaW9sYXRlbmN5LmNgIHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBjb250ZXh0IGFuZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEknbSBhZnRlciwgd2hlcmUgSSBjYW4gZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzIGFuZCB3aGVyZSBzdGF0cyBhcmUgY29sbGVjdGVkLiBUaGlzIHNob3VsZCByZWZyZXNoIG15IGtub3dsZWRnZSBvbiB0aGUgbGF0ZW5jeSBtZWFzdXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MzkuODA1MDA4OTYzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstaW9sYXRlbmN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0XFx0LyogdG90YWwgcnVubmluZyBhdmVyYWdlIG9mIG91ciBpbyBsYXRlbmN5LiAqL1xcbiAxNTI6XFx0XFx0dTY0IGxhdF9hdmc7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdC8qIE91ciBjdXJyZW50IG51bWJlciBvZiBJTydzIGZvciB0aGUgbGFzdCBzdW1tYXRpb24uICovXFxuIDE1NTpcXHRcXHR1NjQgbnJfc2FtcGxlcztcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0Ym9vbCBzc2Q7XFxuIDE1ODpcXHRcXHRzdHJ1Y3QgY2hpbGRfbGF0ZW5jeV9pbmZvIGNoaWxkX2xhdDtcXG4gMTU5OlxcdH07XFxuIDE2MDpcXHRcXG4gMTYxOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01JTl9XSU5fU0laRSAoMTAwICogTlNFQ19QRVJfTVNFQylcXG4gMTYyOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX01BWF9XSU5fU0laRSBOU0VDX1BFUl9TRUNcXG4gMTYzOlxcdC8qXFxuIDE2NDpcXHQgKiBUaGVzZSBhcmUgdGhlIGNvbnN0YW50cyB1c2VkIHRvIGZha2UgdGhlIGZpeGVkLXBvaW50IG1vdmluZyBhdmVyYWdlXFxuIDE2NTpcXHQgKiBjYWxjdWxhdGlvbiBqdXN0IGxpa2UgbG9hZCBhdmVyYWdlLiAgVGhlIGNhbGwgdG8gY2FsY19sb2FkKCkgZm9sZHNcXG4gMTY2OlxcdCAqIChGSVhFRF8xICgyMDQ4KSAtIGV4cF9mYWN0b3IpICogbmV3X3NhbXBsZSBpbnRvIGxhdF9hdmcuICBUaGUgc2FtcGxpbmdcXG4gMTY3OlxcdCAqIHdpbmRvdyBzaXplIGlzIGJ1Y2tldGVkIHRvIHRyeSB0byBhcHByb3hpbWF0ZWx5IGNhbGN1bGF0ZSBhdmVyYWdlXFxuIDE2ODpcXHQgKiBsYXRlbmN5IHN1Y2ggdGhhdCAxL2V4cCAoZGVjYXkgcmF0ZSkgaXMgWzEgbWluLCAyLjUgbWluKSB3aGVuIHdpbmRvd3NcXG4gMTY5OlxcdCAqIGVsYXBzZSBpbW1lZGlhdGVseS4gIE5vdGUsIHdpbmRvd3Mgb25seSBlbGFwc2Ugd2l0aCBJTyBhY3Rpdml0eS4gIElkbGVcXG4gMTcwOlxcdCAqIHBlcmlvZHMgZXh0ZW5kIHRoZSBtb3N0IHJlY2VudCB3aW5kb3cuXFxuIDE3MTpcXHQgKi9cXG4gMTcyOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX05SX0VYUF9GQUNUT1JTIDVcXG4gMTczOlxcdCNkZWZpbmUgQkxLSU9MQVRFTkNZX0VYUF9CVUNLRVRfU0laRSAoQkxLSU9MQVRFTkNZX01BWF9XSU5fU0laRSAvIFxcXFxcXG4gMTc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIChCTEtJT0xBVEVOQ1lfTlJfRVhQX0ZBQ1RPUlMgLSAxKSlcXG4gMTc1OlxcdHN0YXRpYyBjb25zdCB1NjQgaW9sYXRlbmN5X2V4cF9mYWN0b3JzW0JMS0lPTEFURU5DWV9OUl9FWFBfRkFDVE9SU10gPSB7XFxuIDE3NjpcXHRcXHQyMDQ1LCAvLyBleHAoMS82MDApIC0gNjAwIHNhbXBsZXNcXG4gMTc3OlxcdFxcdDIwMzksIC8vIGV4cCgxLzI0MCkgLSAyNDAgc2FtcGxlc1xcbiAxNzg6XFx0XFx0MjAzMSwgLy8gZXhwKDEvMTIwKSAtIDEyMCBzYW1wbGVzXFxuIDE3OTpcXHRcXHQyMDIzLCAvLyBleHAoMS84MCkgIC0gODAgc2FtcGxlc1xcbiAxODA6XFx0XFx0MjAxNCwgLy8gZXhwKDEvNjApICAtIDYwIHNhbXBsZXNcXG4gMTgxOlxcdH07XFxuIDE4MjpcXHRcXG4gMTgzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlvbGF0ZW5jeV9ncnAgKnBkX3RvX2xhdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRyZXR1cm4gcGQgPyBjb250YWluZXJfb2YocGQsIHN0cnVjdCBpb2xhdGVuY3lfZ3JwLCBwZCkgOiBOVUxMO1xcbiAxODY6XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpb2xhdGVuY3lfZ3JwICpibGtnX3RvX2xhdChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuIDE4OTpcXHR7XFxuIDE5MDpcXHRcXHRyZXR1cm4gcGRfdG9fbGF0KGJsa2dfdG9fcGQoYmxrZywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpKTtcXG4gMTkxOlxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2dfZ3EgKmxhdF90b19ibGtnKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdClcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdHJldHVybiBwZF90b19ibGtnKFxcdTAwMjZpb2xhdC1cXHUwMDNlcGQpO1xcbiAxOTY6XFx0fVxcbiAxOTc6XFx0XFxuIDE5ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X2luaXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbiAxOTk6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdGF0KVxcbiAyMDA6XFx0e1xcbiAyMDE6XFx0XFx0aWYgKGlvbGF0LVxcdTAwM2Vzc2QpIHtcXG4gMjAyOlxcdFxcdFxcdHN0YXQtXFx1MDAzZXBzLnRvdGFsID0gMDtcXG4gMjAzOlxcdFxcdFxcdHN0YXQtXFx1MDAzZXBzLm1pc3NlZCA9IDA7XFxuIDIwNDpcXHRcXHR9IGVsc2VcXG4gMjA1OlxcdFxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNnN0YXQtXFx1MDAzZXJxcyk7XFxuIDIwNjpcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gMjA5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGF0ZW5jeV9zdGF0ICpzdW0sXFxuIDIxMDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxhdGVuY3lfc3RhdCAqc3RhdClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdGlmIChpb2xhdC1cXHUwMDNlc3NkKSB7XFxuIDIxMzpcXHRcXHRcXHRzdW0tXFx1MDAzZXBzLnRvdGFsICs9IHN0YXQtXFx1MDAzZXBzLnRvdGFsO1xcbiAyMTQ6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy5taXNzZWQgKz0gc3RhdC1cXHUwMDNlcHMubWlzc2VkO1xcbiAyMTU6XFx0XFx0fSBlbHNlXFxuIDIxNjpcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNnN1bS1cXHUwMDNlcnFzLCBcXHUwMDI2c3RhdC1cXHUwMDNlcnFzKTtcXG4gMjE3OlxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0LypcXG4gMjIwOlxcdCAqIE1lcmdlIGFuIGFscmVhZHktYWdncmVnYXRlZCBAc3RhdCBpbnRvIEBzdW0gYnkgcmVjb25zdHJ1Y3RlZCB0b3RhbHNcXG4gMjIxOlxcdCAqIChtZWFuICogbnJfc2FtcGxlcyk7IGJsa19ycV9zdGF0X3N1bSgpIHJlYWRzIHNyYy1cXHUwMDNlYmF0Y2gsIHdoaWNoIGlzIDBcXG4gMjIyOlxcdCAqIGhlcmUuIFRoZSBvdmVyZmxvdyBjaGVjayBhbHNvIHJlamVjdHMgdGhlIDAgc2FtcGxlcyBjYXNlLlxcbiAyMjM6XFx0ICovXFxuIDIyNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X21lcmdlKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4gMjI1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN1bSxcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsYXRlbmN5X3N0YXQgKnN0YXQpXFxuIDIyNzpcXHR7XFxuIDIyODpcXHRcXHRpZiAoaW9sYXQtXFx1MDAzZXNzZCkge1xcbiAyMjk6XFx0XFx0XFx0c3VtLVxcdTAwM2Vwcy50b3RhbCArPSBzdGF0LVxcdTAwM2Vwcy50b3RhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6MzkuODA1MTY5MDYzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTAzMzU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgUmVxdWVzdCBTdGF0aXN0aWNzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aG9zZSBibG9jayByZXF1ZXN0IHN0YXRpc3RpY3MgZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHF1aWNrIG92ZXJ2aWV3LiBJIHRoaW5rIEknbGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBhbmQgYW55IG9idmlvdXMgY2FsbHMgdG8gYm90aCBgYmxrX3JxX3N0YXRfaW5pdGAgYW5kIGBibGtfcnFfc3RhdF9zdW1gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0J3MgYSBzb2xpZCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0LiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGludG8gdGhlIG1vcmUgZGV0YWlsZWQgY29kZSBhcyByZXF1aXJlZCwgbGlrZWx5IHVzaW5nIHRoZSBvdXRwdXQgb2YgYGdyZXBwZXJgIGFzIGEganVtcGluZy1vZmYgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjQxLjYxNTUwNzIxNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNDk0NjgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfcnFfc3RhdF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTE5OD1zdGF0aWMgaW5saW5lIHZvaWQgbGF0ZW5jeV9zdGF0X2luaXQoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNC1cXHR9IGVsc2VcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjA1OlxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNnN0YXQtXFx1MDAzZXJxcyk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTIwNi19XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjA4PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfc3VtKHN0cnVjdCBpb2xhdGVuY3lfZ3JwICppb2xhdCxcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMTUtXFx0fSBlbHNlXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjIxNjpcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNnN1bS1cXHUwMDNlcnFzLCBcXHUwMDI2c3RhdC1cXHUwMDNlcnFzKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtMjE3LX1cXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjAtICogTWVyZ2UgYW4gYWxyZWFkeS1hZ2dyZWdhdGVkIEBzdGF0IGludG8gQHN1bSBieSByZWNvbnN0cnVjdGVkIHRvdGFsc1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzoyMjE6ICogKG1lYW4gKiBucl9zYW1wbGVzKTsgYmxrX3JxX3N0YXRfc3VtKCkgcmVhZHMgc3JjLVxcdTAwM2ViYXRjaCwgd2hpY2ggaXMgMFxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy0yMjItICogaGVyZS4gVGhlIG92ZXJmbG93IGNoZWNrIGFsc28gcmVqZWN0cyB0aGUgMCBzYW1wbGVzIGNhc2UuXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBsYXRlbmN5X3N0YXRfcmVjb3JkX3RpbWUoc3RydWN0IGlvbGF0ZW5jeV9ncnAgKmlvbGF0LFxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI1Mi1cXHR9IGVsc2VcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6MjUzOlxcdFxcdGJsa19ycV9zdGF0X2FkZChcXHUwMDI2c3RhdC1cXHUwMDNlcnFzLCByZXFfdGltZSk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTI1NC1cXHRwdXRfY3B1X3B0cihzdGF0KTtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmM9MTQ9c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTE5LVxcbmJsb2NrL2Jsay1zdGF0LmM6MjA6dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcXG5ibG9jay9ibGstc3RhdC5jLTIxLXtcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtMjctLyogc3JjIGlzIGEgcGVyLWNwdSBzdGF0LCBtZWFuIGlzbid0IGluaXRpYWxpemVkICovXFxuYmxvY2svYmxrLXN0YXQuYzoyODp2b2lkIGJsa19ycV9zdGF0X3N1bShzdHJ1Y3QgYmxrX3JxX3N0YXQgKmRzdCwgc3RydWN0IGJsa19ycV9zdGF0ICpzcmMpXFxuYmxvY2svYmxrLXN0YXQuYy0yOS17XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTQxLVxcbmJsb2NrL2Jsay1zdGF0LmM6NDI6dm9pZCBibGtfcnFfc3RhdF9hZGQoc3RydWN0IGJsa19ycV9zdGF0ICpzdGF0LCB1NjQgdmFsdWUpXFxuYmxvY2svYmxrLXN0YXQuYy00My17XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTUwPXZvaWQgYmxrX3N0YXRfYWRkKHN0cnVjdCByZXF1ZXN0ICpycSwgdTY0IG5vdylcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmMtNzAtXFx0XFx0c3RhdCA9IFxcdTAwMjZwZXJfY3B1X3B0cihjYi1cXHUwMDNlY3B1X3N0YXQsIGNwdSlbYnVja2V0XTtcXG5ibG9jay9ibGstc3RhdC5jOjcxOlxcdFxcdGJsa19ycV9zdGF0X2FkZChzdGF0LCB2YWx1ZSk7XFxuYmxvY2svYmxrLXN0YXQuYy03Mi1cXHR9XFxuLS1cXG5ibG9jay9ibGstc3RhdC5jPTc3PXN0YXRpYyB2b2lkIGJsa19zdGF0X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy04My1cXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIGNiLVxcdTAwM2VidWNrZXRzOyBidWNrZXQrKylcXG5ibG9jay9ibGstc3RhdC5jOjg0OlxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNmNiLVxcdTAwM2VzdGF0W2J1Y2tldF0pO1xcbmJsb2NrL2Jsay1zdGF0LmMtODUtXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTkwLVxcdFxcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFxcdTAwM2MgY2ItXFx1MDAzZWJ1Y2tldHM7IGJ1Y2tldCsrKSB7XFxuYmxvY2svYmxrLXN0YXQuYzo5MTpcXHRcXHRcXHRibGtfcnFfc3RhdF9zdW0oXFx1MDAyNmNiLVxcdTAwM2VzdGF0W2J1Y2tldF0sIFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG5ibG9jay9ibGstc3RhdC5jOjkyOlxcdFxcdFxcdGJsa19ycV9zdGF0X2luaXQoXFx1MDAyNmNwdV9zdGF0W2J1Y2tldF0pO1xcbmJsb2NrL2Jsay1zdGF0LmMtOTMtXFx0XFx0fVxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYz0xMzI9dm9pZCBibGtfc3RhdF9hZGRfY2FsbGJhY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5ibG9jay9ibGstc3RhdC5jLTE0My1cXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIGNiLVxcdTAwM2VidWNrZXRzOyBidWNrZXQrKylcXG5ibG9jay9ibGstc3RhdC5jOjE0NDpcXHRcXHRcXHRibGtfcnFfc3RhdF9pbml0KFxcdTAwMjZjcHVfc3RhdFtidWNrZXRdKTtcXG5ibG9jay9ibGstc3RhdC5jLTE0NS1cXHR9XFxuLS1cXG5ibG9jay9ibGstc3RhdC5oPTE2Nz1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3N0YXRfYWN0aXZhdGVfbXNlY3Moc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICpjYixcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmgtMTcyLVxcbmJsb2NrL2Jsay1zdGF0Lmg6MTczOnZvaWQgYmxrX3JxX3N0YXRfYWRkKHN0cnVjdCBibGtfcnFfc3RhdCAqLCB1NjQpO1xcbmJsb2NrL2Jsay1zdGF0Lmg6MTc0OnZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqLCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKik7XFxuYmxvY2svYmxrLXN0YXQuaDoxNzU6dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqKTtcXG5ibG9jay9ibGstc3RhdC5oLTE3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6NDMuMjUwNDYwMDE5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MTAwNjY5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBibG9jay9ibGstc3RhdC5jYCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGJsb2NrL2Jsay1zdGF0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGJsb2NrL2Jsay1zdGF0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwga2VlcHMgdHJhY2sgb2YgYW5kIHByZXNlbnRzIGJsb2NrIGRldmljZSBzdGF0aXN0aWNzLiBNeSBtYWluIGZvY3VzIGhlcmUgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzdGF0cyBhcmUgKmNvbGxlY3RlZCosICphZ2dyZWdhdGVkKiwgYW5kIHVsdGltYXRlbHkgKmV4cG9zZWQqIHRvIHVzZXJzcGFjZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBibG9jayBkZXZpY2Ugc3RhdGlzdGljcywgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCByZWFkLCB3cml0ZSwgYW5kIG1hbmlwdWxhdGUgdGhlbS4gVGhpcyBzaG91bGQgaW5jbHVkZSB0aGluZ3MgbGlrZSBJL08gb3BlcmF0aW9uIGNvdW50cywgdHJhbnNmZXIgc2l6ZXMsIGFuZCBsYXRlbmNpZXMsIGFsbCBvcmdhbml6ZWQgYnkgZGV2aWNlIGFuZCBwb3RlbnRpYWxseSBieSBxdWV1ZS4gSXQncyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBzb21lIGdsb2JhbCBjb3VudGVycyBhbmQgdGhlbiBkZXZpY2Utc3BlY2lmaWMgb25lcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgY29uY3VycmVuY3kg4oCTIHRoaXMgaXMgdGhlIGtlcm5lbCwgYWZ0ZXIgYWxsLiBUaGVyZSAqaGFzKiB0byBiZSBsb2NraW5nIGludm9sdmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHNwaW5sb2NrcywgbXV0ZXhlcywgb3IgUkNVIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gSSdsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSBibG9jayBsYXllcidzIHJlcXVlc3QgcXVldWUsIHRoZSB2YXJpb3VzIGJpbyBwYXRocywgYW5kIGFueSBwZXItZGV2aWNlIG9yIHBlci1xdWV1ZSBpbmZvcm1hdGlvbi4gVGhlIGtlcm5lbCdzIHByb2NmcyBvciBzeXNmcyBpbnRlcmZhY2VzIHdpbGwgcHJvYmFibHkgYmUgaW52b2x2ZWQgc29tZXdoZXJlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGlzdGljcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmVzZW50ZWQgdG8gdXNlci1zcGFjZSB0b29scyBsaWtlIGBpb3N0YXRgIG9yIGBibGtzdGF0YC4gS25vd2luZyB0aGUgZGV0YWlscyB3aWxsIGhlbHAgbWUgZmluZCBhbmQgaW50ZXJwcmV0IHRoZSByaWdodCBkYXRhIHRvIGNvbGxlY3QgYW5kIG1vbml0b3IgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU4OjQ2LjA2MDUyOTg4NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstc3RhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBCbG9jayBzdGF0IHRyYWNraW5nIGNvZGVcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSmVucyBBeGJvZVxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXFwiYmxrLXN0YXQuaFxcXCJcXG4gIDExOlxcdCNpbmNsdWRlIFxcXCJibGstbXEuaFxcXCJcXG4gIDEyOlxcdCNpbmNsdWRlIFxcXCJibGsuaFxcXCJcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0c3RydWN0IGJsa19xdWV1ZV9zdGF0cyB7XFxuICAxNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNhbGxiYWNrcztcXG4gIDE2OlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gIDE3OlxcdFxcdGludCBhY2NvdW50aW5nO1xcbiAgMTg6XFx0fTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0dm9pZCBibGtfcnFfc3RhdF9pbml0KHN0cnVjdCBibGtfcnFfc3RhdCAqc3RhdClcXG4gIDIxOlxcdHtcXG4gIDIyOlxcdFxcdHN0YXQtXFx1MDAzZW1pbiA9IC0xVUxMO1xcbiAgMjM6XFx0XFx0c3RhdC1cXHUwMDNlbWF4ID0gc3RhdC1cXHUwMDNlbnJfc2FtcGxlcyA9IHN0YXQtXFx1MDAzZW1lYW4gPSAwO1xcbiAgMjQ6XFx0XFx0c3RhdC1cXHUwMDNlYmF0Y2ggPSAwO1xcbiAgMjU6XFx0fVxcbiAgMjY6XFx0XFxuICAyNzpcXHQvKiBzcmMgaXMgYSBwZXItY3B1IHN0YXQsIG1lYW4gaXNuJ3QgaW5pdGlhbGl6ZWQgKi9cXG4gIDI4OlxcdHZvaWQgYmxrX3JxX3N0YXRfc3VtKHN0cnVjdCBibGtfcnFfc3RhdCAqZHN0LCBzdHJ1Y3QgYmxrX3JxX3N0YXQgKnNyYylcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdGlmIChkc3QtXFx1MDAzZW5yX3NhbXBsZXMgKyBzcmMtXFx1MDAzZW5yX3NhbXBsZXMgXFx1MDAzYz0gZHN0LVxcdTAwM2Vucl9zYW1wbGVzKVxcbiAgMzE6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRkc3QtXFx1MDAzZW1pbiA9IG1pbihkc3QtXFx1MDAzZW1pbiwgc3JjLVxcdTAwM2VtaW4pO1xcbiAgMzQ6XFx0XFx0ZHN0LVxcdTAwM2VtYXggPSBtYXgoZHN0LVxcdTAwM2VtYXgsIHNyYy1cXHUwMDNlbWF4KTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ZHN0LVxcdTAwM2VtZWFuID0gZGl2X3U2NChzcmMtXFx1MDAzZWJhdGNoICsgZHN0LVxcdTAwM2VtZWFuICogZHN0LVxcdTAwM2Vucl9zYW1wbGVzLFxcbiAgMzc6XFx0XFx0XFx0XFx0XFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICsgc3JjLVxcdTAwM2Vucl9zYW1wbGVzKTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ZHN0LVxcdTAwM2Vucl9zYW1wbGVzICs9IHNyYy1cXHUwMDNlbnJfc2FtcGxlcztcXG4gIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0dm9pZCBibGtfcnFfc3RhdF9hZGQoc3RydWN0IGJsa19ycV9zdGF0ICpzdGF0LCB1NjQgdmFsdWUpXFxuICA0MzpcXHR7XFxuICA0NDpcXHRcXHRzdGF0LVxcdTAwM2VtaW4gPSBtaW4oc3RhdC1cXHUwMDNlbWluLCB2YWx1ZSk7XFxuICA0NTpcXHRcXHRzdGF0LVxcdTAwM2VtYXggPSBtYXgoc3RhdC1cXHUwMDNlbWF4LCB2YWx1ZSk7XFxuICA0NjpcXHRcXHRzdGF0LVxcdTAwM2ViYXRjaCArPSB2YWx1ZTtcXG4gIDQ3OlxcdFxcdHN0YXQtXFx1MDAzZW5yX3NhbXBsZXMrKztcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dm9pZCBibGtfc3RhdF9hZGQoc3RydWN0IHJlcXVlc3QgKnJxLCB1NjQgbm93KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1ODo0Ni4wNjA2MTY3MDZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODExOTU3NjYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBCbG9jayBJL08gTGF0ZW5jeSBBZ2dyZWdhdGlvbiBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBibGstaW9sYXRlbmN5LmNgLCBpdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiBvZiBtZWFuIGxhdGVuY2llcyBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2Agd2FzIGZsYXdlZC4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIG1ldGhvZCB1c2VkIGBsYXRlbmN5X3N0YXRfc3VtYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgYmxrX3JxX3N0YXRfc3VtYC4gVGhlIHByb2JsZW0gYXJvc2UgYmVjYXVzZSBgYmxrX3JxX3N0YXRfc3VtYCBjYWxjdWxhdGVkIHRoZSBtZWFuIGluY29ycmVjdGx5IHdoZW4gYWdncmVnYXRpbmcgcHJlLWNhbGN1bGF0ZWQgcGVyLUNQVSBzdGF0aXN0aWNzLiBUaGUgYGJhdGNoYCBmaWVsZCB3aXRoaW4gYHN0YXQtXHUwMDNlcnFzYCB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IHBvcHVsYXRlZCBkdXJpbmcgdGhlIHBlci1DUFUgYWdncmVnYXRpb24gbG9vcCwgc28gaXQgcmVtYWluZWQgemVyby4gVGhpcyBsZWQgdG8gYW4gaW5hY2N1cmF0ZSBtZWFuIGNhbGN1bGF0aW9uLiBUaGUgcGF0Y2ggY29ycmVjdGx5IGNhbGN1bGF0ZXMgdGhlIG1lYW4gdXNpbmcgdGhlIGBtZWFuICogbnJfc2FtcGxlc2Agb2YgYWxyZWFkeS1hZ2dyZWdhdGVkIHN0YXRpc3RpY3MsIGJ5IGludHJvZHVjaW5nIGBsYXRlbmN5X3N0YXRfbWVyZ2VgLlxuXG5Ob3csIHJlZ2FyZGluZyBLTVNBTiwgbGV0J3MgZW5zdXJlIHdlIGFyZSBzYWZlLiBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSwgYW5kIGhlcmUncyBteSByZWFzb25pbmcuIFRoZSBgc3RhdGAgdmFyaWFibGUsIGNydWNpYWwgZm9yIHRoZXNlIGNhbGN1bGF0aW9ucywgaXMgc3RhY2stYWxsb2NhdGVkLCBidXQgaXQncyAqYWx3YXlzKiBpbml0aWFsaXplZCB1c2luZyBgbGF0ZW5jeV9zdGF0X2luaXRgIGJlZm9yZSB1c2UuIFRoaXMgbWVhbnMgdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgbGF0ZW5jeV9zdGF0X2luaXRgIGZ1bmN0aW9uIGNvcnJlY3RseSBpbml0aWFsaXplcyBhbGwgZmllbGRzIChgdG90YWxgLCBgbWlzc2VkYCwgYG1pbmAsIGBtYXhgLCBgbnJfc2FtcGxlc2AsIGBtZWFuYCwgYW5kIGBiYXRjaGApLiBUaGlzIGlzIHNvbGlkLiBGdXJ0aGVybW9yZSwgdGhlIGFyaXRobWV0aWMgaW4gYGxhdGVuY3lfc3RhdF9tZXJnZWAgb3BlcmF0ZXMgb24gaW5pdGlhbGl6ZWQgaW50ZWdlciBmaWVsZHMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgZGVhbGxvY2F0aW9ucywgb3IgYW55IGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgY2hhbmdlIGFueSBjb2RlIHRoYXQ6XG4xLiAgU2VuZHMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbjIuICBEZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW4gY29uZGl0aW9uYWwgbG9naWMuXG4zLiAgQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgTW9kaWZpZXMgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZSBjaGFuZ2VzIHByaW1hcmlseSBkZWFsIHdpdGggdGhlIGFnZ3JlZ2F0aW9uICpsb2dpYyogdG8gZW5zdXJlIHByb3BlciBjYWxjdWxhdGlvbiBvZiB0aGUgbWVhbiBvZiBhbHJlYWR5IGFnZ3JlZ2F0ZWQgc3RhdHMsIGFuZCBhbGwgdG91Y2hlZCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4sIGFuZCB1bml0IHRlc3RzLCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gU28sIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cbkZpbmFsbHksIHRoZSBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBjbGVhcmx5IHN0YXRlIHRoZSBmaXggZm9yIHRoZSBzdGF0aXN0aWNhbCBhZ2dyZWdhdGlvbiBlcnJvciwgdGhhdCBhbGwgc3RydWN0cyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0IEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZW4sIHdlIGNhbiBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5NywiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTg6NTQuMTgwMTk2ODQ5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1hdGhlbWF0aWNhbCBjYWxjdWxhdGlvbiBidWcgaW4gdGhlIGJsb2NrIGxheWVyJ3MgSS9PIGxhdGVuY3kgY29udHJvbGxlciAoYGJsay1pb2xhdGVuY3kuY2ApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGxhdGVuY3lfc3RhdF9tZXJnZSgpYCB0byBtZXJnZSBhbHJlYWR5LWFnZ3JlZ2F0ZWQgYGxhdGVuY3lfc3RhdGAgc3RydWN0dXJlcyBieSByZWNvbnN0cnVjdGluZyB0aGUgdG90YWwgbGF0ZW5jeSB1c2luZyBgbWVhbiAqIG5yX3NhbXBsZXNgIHJhdGhlciB0aGFuIGNhbGxpbmcgYGJsa19ycV9zdGF0X3N1bSgpYCwgd2hpY2ggZXhwZWN0cyBwZXItQ1BVIHVuYWdncmVnYXRlZCBzdGF0cyB3aXRoIGBzcmMtXFx1MDAzZWJhdGNoYCBzZXQuXFxuXFxuQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgKHN1Y2ggYXMgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGxhdGVuY3lfc3RhdCBzdGF0YCBpbiBgaW9sYXRlbmN5X2NoZWNrX2xhdGVuY2llc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYGxhdGVuY3lfc3RhdF9pbml0KClgIHByaW9yIHRvIGFjY2Vzcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvIG5vdCBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHVzZXIgQUJJIGJvdW5kYXJpZXMsIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtYXRoZW1hdGljYWwgY2FsY3VsYXRpb24gYnVnIGluIHRoZSBibG9jayBsYXllcidzIEkvTyBsYXRlbmN5IGNvbnRyb2xsZXIgKGBibGstaW9sYXRlbmN5LmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGBsYXRlbmN5X3N0YXRfbWVyZ2UoKWAgdG8gbWVyZ2UgYWxyZWFkeS1hZ2dyZWdhdGVkIGBsYXRlbmN5X3N0YXRgIHN0cnVjdHVyZXMgYnkgcmVjb25zdHJ1Y3RpbmcgdGhlIHRvdGFsIGxhdGVuY3kgdXNpbmcgYG1lYW4gKiBucl9zYW1wbGVzYCByYXRoZXIgdGhhbiBjYWxsaW5nIGBibGtfcnFfc3RhdF9zdW0oKWAsIHdoaWNoIGV4cGVjdHMgcGVyLUNQVSB1bmFnZ3JlZ2F0ZWQgc3RhdHMgd2l0aCBgc3JjLVxcdTAwM2ViYXRjaGAgc2V0LlxcblxcbkFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIChzdWNoIGFzIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBsYXRlbmN5X3N0YXQgc3RhdGAgaW4gYGlvbGF0ZW5jeV9jaGVja19sYXRlbmNpZXNgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBsYXRlbmN5X3N0YXRfaW5pdCgpYCBwcmlvciB0byBhY2Nlc3MuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkbyBub3QgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB1c2VyIEFCSSBib3VuZGFyaWVzLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[1] Phase: Succeeded StartedAt: 2026-09-05 15:59:06 +0000 UTC FinishedAt: 2026-09-05 15:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 15:59:06 +0000 UTC FinishedAt: 2026-09-05 15:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2] Phase: Succeeded StartedAt: 2026-09-05 15:59:06 +0000 UTC FinishedAt: 2026-09-05 17:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 15:59:06 +0000 UTC FinishedAt: 2026-09-05 17:19:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 15:59:06 +0000 UTC FinishedAt: 2026-09-05 15:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 15:59:06 +0000 UTC FinishedAt: 2026-09-05 15:59:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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-workflow5bq8z/series-workflow5bq8z-convert-artifact-3521527679/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 15:59:16 +0000 UTC FinishedAt: 2026-09-05 16:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 15:59:16 +0000 UTC FinishedAt: 2026-09-05 16:15:06 +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:*5dcae4f3-ac23-4e7c-9d82-4bcc84321edf,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-workflow5bq8z/series-workflow5bq8z-convert-artifact-3521527679/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": "b2fbee5a-6c9f-479a-9bc4-1962515836d2", "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-workflow5bq8z/series-workflow5bq8z-build-action-1197283845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 15:59:16 +0000 UTC FinishedAt: 2026-09-05 16:14:56 +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:*5dcae4f3-ac23-4e7c-9d82-4bcc84321edf,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-workflow5bq8z/series-workflow5bq8z-convert-artifact-3521527679/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": "b2fbee5a-6c9f-479a-9bc4-1962515836d2", "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-workflow5bq8z/series-workflow5bq8z-build-action-1197283845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:15:06 +0000 UTC FinishedAt: 2026-09-05 16:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:15:06 +0000 UTC FinishedAt: 2026-09-05 16:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:15:06 +0000 UTC FinishedAt: 2026-09-05 16:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:15:06 +0000 UTC FinishedAt: 2026-09-05 16:15:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-workflow5bq8z/series-workflow5bq8z-convert-artifact-4145405070/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:15:16 +0000 UTC FinishedAt: 2026-09-05 16:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:15:16 +0000 UTC FinishedAt: 2026-09-05 16:17:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2fbee5a-6c9f-479a-9bc4-1962515836d2,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-workflow5bq8z/series-workflow5bq8z-build-action-1197283845/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-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:17:11 +0000 UTC FinishedAt: 2026-09-05 16:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:17:11 +0000 UTC FinishedAt: 2026-09-05 16:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:17:11 +0000 UTC FinishedAt: 2026-09-05 16:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:17:11 +0000 UTC FinishedAt: 2026-09-05 16:34:48 +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:*5dcae4f3-ac23-4e7c-9d82-4bcc84321edf,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-workflow5bq8z/series-workflow5bq8z-convert-artifact-4145405070/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": "713f2e27-c52e-4bc6-b2b8-75a6a1610e6f", "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-workflow5bq8z/series-workflow5bq8z-build-action-2648781346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:17:11 +0000 UTC FinishedAt: 2026-09-05 16:34:38 +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:*5dcae4f3-ac23-4e7c-9d82-4bcc84321edf,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-workflow5bq8z/series-workflow5bq8z-convert-artifact-4145405070/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": "713f2e27-c52e-4bc6-b2b8-75a6a1610e6f", "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-workflow5bq8z/series-workflow5bq8z-build-action-2648781346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:34:48 +0000 UTC FinishedAt: 2026-09-05 16:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:34:48 +0000 UTC FinishedAt: 2026-09-05 16:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:34:48 +0000 UTC FinishedAt: 2026-09-05 16:36:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:34:48 +0000 UTC FinishedAt: 2026-09-05 16:36:32 +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:*713f2e27-c52e-4bc6-b2b8-75a6a1610e6f,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-workflow5bq8z/series-workflow5bq8z-build-action-2648781346/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-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:42 +0000 UTC FinishedAt: 2026-09-05 17:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:42 +0000 UTC FinishedAt: 2026-09-05 17:19:09 +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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"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:*b2fbee5a-6c9f-479a-9bc4-1962515836d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*713f2e27-c52e-4bc6-b2b8-75a6a1610e6f,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-workflow5bq8z/series-workflow5bq8z-build-action-1197283845/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-workflow5bq8z/series-workflow5bq8z-build-action-2648781346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:42 +0000 UTC FinishedAt: 2026-09-05 16:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:42 +0000 UTC FinishedAt: 2026-09-05 16:36:47 +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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"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-workflow5bq8z/series-workflow5bq8z-convert-artifact-1543606195/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:42 +0000 UTC FinishedAt: 2026-09-05 16:36:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:42 +0000 UTC FinishedAt: 2026-09-05 16:36:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:42 +0000 UTC FinishedAt: 2026-09-05 16:36:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:52 +0000 UTC FinishedAt: 2026-09-05 17:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5bq8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"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":["iolatency_check_latencies","blkcg_iolatency_done_bio","iolatency_record_time","iolatency_set_limit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOLATENCY","BLK_CGROUP"],"series_id":"e0ed8e43-ef0a-4afc-b0c6-4bb8b8e8b01c","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-05 16:36:52 +0000 UTC FinishedAt: 2026-09-05 17:18:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2fbee5a-6c9f-479a-9bc4-1962515836d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*713f2e27-c52e-4bc6-b2b8-75a6a1610e6f,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-workflow5bq8z/series-workflow5bq8z-build-action-1197283845/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-workflow5bq8z/series-workflow5bq8z-build-action-2648781346/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-workflow5bq8z/series-workflow5bq8z-convert-artifact-1543606195/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,}