Name: series-workflowhb67p Phase: Succeeded StartedAt: 2026-08-21 12:08:19 +0000 UTC FinishedAt: 2026-08-21 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[0] Phase: Succeeded StartedAt: 2026-08-21 12:08:19 +0000 UTC FinishedAt: 2026-08-21 13:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 12:08:19 +0000 UTC FinishedAt: 2026-08-21 13:01:41 +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": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "20f44e4d-69ac-469d-a072-3414b3d4d01a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ctrl_uring_cmd", "ublk_ch_uring_cmd", "ublk_ch_batch_io_uring_cmd", "ublk_queue_rq" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF9iYXRjaF9pb191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZDhlMjFjMDg2Mzg5ZjBhZmI3ZGU4YTQ1ZjYwODMxNDM4M2Q4ZjVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTI6NTk6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi4xYTk1NjQyYjlkYjk0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC0zMDI0LDYgJiM0MzszMDI0LDcgQEAgc3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxuIFx0dWJxLVx1MDAzZWNhbmNlbGluZyA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWNhbmNlbF9sb2NrKTtcbiBcdHVicS1cdTAwM2VmYWlsX2lvID0gZmFsc2U7XG4mIzQzO1x0dWJxLVx1MDAzZWZvcmNlX2Fib3J0ID0gZmFsc2U7XG4gfVxuIFxuIC8qIGRldmljZSBjYW4gb25seSBiZSBzdGFydGVkIGFmdGVyIGFsbCBJT3MgYXJlIHJlYWR5ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxuaW5kZXggMjU1NDgwNWU1YjAyYy4uOTJmNDAxMjE3OGYwOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxuQEAgLTI5LDYgJiM0MzsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TVxuIF9jcmVhdGVfYmFja2ZpbGUgMSAxMjhNXG4gX2NyZWF0ZV9iYWNrZmlsZSAyIDEyOE1cbiBcbiYjNDM7dWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIC1iIFx1MDAyNlxuJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgLWIgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX1cJiMzNDsgXHUwMDI2XG4mIzQzO3VibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBzdHJpcGUgLXEgMiAtciAxIC1iIFwmIzM0OyR7VUJMS19CQUNLRklMRVNbMV19XCYjMzQ7IFwmIzM0OyR7VUJMS19CQUNLRklMRVNbMl19XCYjMzQ7IFx1MDAyNlxuJiM0Mzt3YWl0XG4mIzQzO1xuIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBudWxsIC1xIDIgLXIgMSBcdTAwMjZcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX1cJiMzNDsgXHUwMDI2XG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1sxXX1cJiMzNDsgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX1cJiMzNDsgXHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF9iYXRjaF9pb191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDhlMjFjMDg2Mzg5ZjBhZmI3ZGU4YTQ1ZjYwODMxNDM4M2Q4ZjVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTI6NTk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGQxN2VkMjY0ZGExYS4uMWE5NTY0MmI5ZGI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtMzAyNCw2ICYjNDM7MzAyNCw3IEBAIHN0YXRpYyB2b2lkIHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSkKIAl1YnEtJmd0O2NhbmNlbGluZyA9IGZhbHNlOwogCXNwaW5fdW5sb2NrKCZhbXA7dWJxLSZndDtjYW5jZWxfbG9jayk7CiAJdWJxLSZndDtmYWlsX2lvID0gZmFsc2U7CiYjNDM7CXVicS0mZ3Q7Zm9yY2VfYWJvcnQgPSBmYWxzZTsKIH0KIAogLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKaW5kZXggMjU1NDgwNWU1YjAyYy4uOTJmNDAxMjE3OGYwOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKQEAgLTI5LDYgJiM0MzsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TQogX2NyZWF0ZV9iYWNrZmlsZSAxIDEyOE0KIF9jcmVhdGVfYmFja2ZpbGUgMiAxMjhNCiAKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgLWIgJmFtcDsKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzBdfSYjMzQ7ICZhbXA7CiYjNDM7dWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwomIzQzO3dhaXQKJiM0MzsKIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBudWxsIC1xIDIgLXIgMSAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX0mIzM0OyAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdWJsa19kcnYuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgYWRkcyBhIGxpbmUgaW4gYHVibGtfZHJ2LmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGFkZGl0aW9uIG9mIGB1YnEtJmd0O2ZvcmNlX2Fib3J0ID0gZmFsc2U7YCBpcyBpbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgcmVzZXR0aW5nIGEgZmxhZyB0aGF0IGNvbnRyb2xzIGZvcmNpbmcgYW4gYWJvcnQgb24gYSBVQkxLIHF1ZXVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgZm9yY2VfYWJvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgbGlrZWx5IHVzZWQgdG8gcHJldmVudCBmdXR1cmUgSU8gdG8gdGhpcyBxdWV1ZSBhZnRlciBzb21lIHR5cGUgb2YgZXJyb3IsIG9yIG1heWJlIGR1cmluZyBhIHJlc2V0IHByb2NlZHVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdGhhdCB1c2VzIGB1YnEtJmd0O2ZvcmNlX2Fib3J0YCB0byBrbm93IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUuIFRoaXMgY2hhbmdlIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgb3IgcGVyaGFwcyBhIG1vcmUgZ3JhY2VmdWwgcmVjb3ZlcnkgbWVjaGFuaXNtIHdpdGhpbiB0aGUgVUJMSyBibG9jayBkcml2ZXIuIE5vdywgdGhlIHByZXNlbmNlIG9mIGEgc2VsZnRlc3Qgc2NyaXB0IGlzIGVuY291cmFnaW5nLiBJdCBob3BlZnVsbHkgY292ZXJzIHNjZW5hcmlvcyB0aGF0IGV4ZXJjaXNlIHRoaXMgbmV3IGZsYWcsIHdoaWNoIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3LiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHVibGsgcXVldWUgaGFuZGxlcyBkaWZmZXJlbnQga2luZHMgb2YgYWJvcnQgY29uZGl0aW9ucywgYW5kIGVuc3VyaW5nIGl0IGNhbiByZWNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMTI9c3RhdGljIHZvaWQgdWJsa19yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8pXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzAyMTpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAyMi17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMzE9c3RhdGljIHZvaWQgdWJsa19tYXJrX2lvX3JlYWR5KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIHUxNiBxX2lkLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlx0XHR1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHVicSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSB1YmxrIElPIEZsYWcgUmVzZXQqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIGRvd24gdGhpcyBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24gY2FsbC4gVGhlIGNvZGUgZmxvdyBzYXlzIGl0IG9yaWdpbmF0ZXMgZnJvbSBgdWJsa19tYXJrX2lvX3JlYWR5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIG9mIHRoaXMgZnVuY3Rpb24uJiMzNDsgU28sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGVyZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBpcyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBpbiB3aGljaCB0aG9zZSBmbGFncyBhcmUgZ2V0dGluZyByZXNldC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gaXQmIzM5O3MgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIHN0YXRlIHRyYW5zaXRpb24gZm9yIEkvTyByZXF1ZXN0cyB3aXRoaW4gdGhlIHVibGsgc3Vic3lzdGVtLCBhbmQgSSBuZWVkIHRoZSBjYWxsaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgdHJhbnNpdGlvbiBpcy4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHByb2JhYmx5IHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZGl0aW9ucyB0aGF0IG5lY2Vzc2l0YXRlIHRoZSByZXNldCwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW50ZW50aW9uIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfbWFya19pb19yZWFkeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzAyMT1zdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMzAtLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDMxOnN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDMyLVx0c3RydWN0IHVibGtfaW8gKmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMjg2PXN0YXRpYyBpbnQgdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzMDItXHRcdHVibGtfYXBwbHlfaW9fYnVmKHViLCBpbywgY21kLCBidWZfYWRkciwgXHUwMDI2YXV0b19idWYsIE5VTEwpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDM6XHRcdHVibGtfbWFya19pb19yZWFkeSh1YiwgcV9pZCwgaW8pO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzMDQtXHR9XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2OTQ9c3RhdGljIGludCB1YmxrX2JhdGNoX3ByZXBfaW8oc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcxOS1cdGlmICghcmV0KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM3MjA6XHRcdHVibGtfbWFya19pb19yZWFkeShkYXRhLVx1MDAzZXViLCB1YnEtXHUwMDNlcV9pZCwgaW8pO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgQ2FsbGVycyoqCgpBbHJpZ2h0LCBzbyBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gIGFyZSB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaW50byB0aGUgY29yZSBvZiB0aGlzLiBDbGVhcmx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLCBgdWJsa2AuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIHRvIHRoZSBLY29uZmlnIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdWJsa2AgaXMgY29uZmlndXJlZC4gV2hhdCBvcHRpb25zIGFyZSBlbmFibGVkPyBXaGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheT8gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IGZpcnN0IGxvb2sgaW50byBob3cgdGhpcyB0aGluZyBpcyBwdXQgdG9nZXRoZXIgYW5kIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBxdWVzdGlvbjoKCioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX1VCTEtgKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19ERVZfVUJMS2AuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICpyZXF1aXJlZCogZm9yIHRoaXMgdG8gZnVuY3Rpb24uICBJdCYjMzk7cyB1bmxpa2VseSB0aGF0IGBCTEtfREVWX1VCTEtgIGlzIGEgY29tcGxldGVseSBpbmRlcGVuZGVudCBtb2R1bGUuICBNeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvOgoKMS4gICoqQ29uc3VsdCBEb2N1bWVudGF0aW9uICZhbXA7IFNvdXJjZToqKiBGaXJzdCwgSSYjMzk7ZCBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMsIGxpa2VseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIG9yIHRoZSBkZXZpY2UgZHJpdmVyIHNlY3Rpb25zLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMsIHJlbGF0ZWQgc3RydWN0dXJlcywgb3IgYW55IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBkZWNsYXJlZCBpbiB0aGUgY29kZSBpdHNlbGYuIFRoZSBpbmNsdWRlIGZpbGVzIHNob3VsZCBvZmZlciBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluZm9ybWF0aW9uLgoKMi4gICoqRXhwbG9yZSBDb25maWd1cmF0aW9uIE9wdGlvbnM6KiogTmV4dCwgSSYjMzk7ZCBpbnZlc3RpZ2F0ZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gKGBLY29uZmlnYCBmaWxlcykuIEkmIzM5O2Qgc2VhcmNoIGZvciBgQkxLX0RFVl9VQkxLYCBhbmQgZXhhbWluZSBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRob3NlIG9wdGlvbnMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IHByb3ZpZGUgY3J1Y2lhbCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIOKAkyB3aGV0aGVyIGl0IHJlcXVpcmVzIG90aGVyIGJsb2NrIGRldmljZSBzdXBwb3J0IChgQkxLX0RFVl9YWFhgKSBvciBnZW5lcmFsIGRldmljZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O2QgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4KCjMuICAqKlRyYWNlIENvZGUgUGF0aHM6KiogSWYgdGhlIGRvY3VtZW50YXRpb24gaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGNsZWFyLCBvciBpZiBJIHdhbnQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZywgSSB3b3VsZCBmb2xsb3cgY29kZSBwYXRocy4gSSYjMzk7ZCBzdGFydCB3aXRoIHRoZSBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBgQkxLX0RFVl9VQkxLYCBhbmQgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB3aGljaCB2YXJpYWJsZXMgYXJlIHVzZWQuICBUaGlzIHdvdWxkIGV4cG9zZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEkmIzM5O2QgdXNlIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB0byBndWlkZSBtZS4gRm9yIGluc3RhbmNlLCBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBsYXllciYjMzk7cyByZXF1ZXN0IHF1ZXVlLCBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgSS9PIHNjaGVkdWxlci4KCjQuICAqKkNvbnNpZGVyIFJlbGF0ZWQgRmVhdHVyZXM6KiogRXZlbiBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpbiB0aGUgY29kZSBmb3IgYEJMS19ERVZfVUJMS2AsIEkmIzM5O2QgdGhpbmsgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGNvbnNpZGVyIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGFjY29tcGxpc2guIEZvciBleGFtcGxlLCBpZiBpdCYjMzk7cyBhICYjMzQ7dXNlci1zcGFjZSBibG9jayBkZXZpY2UsJiMzNDsgSSYjMzk7ZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBpdCBwcm9iYWJseSBoaW5nZXMgb24gY2VydGFpbiB1c2VyLXNwYWNlIGludGVyZmFjZXMgKGxpa2UgY2hhcmFjdGVyIGRldmljZSBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlKSBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtkIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIGFueSBzcGVjaWZpYyBzdG9yYWdlIHRlY2hub2xvZ2llcyBvciBzdWJzeXN0ZW1zLgoKNS4gICoqTG9vayBmb3IgTW9kdWxlIExvYWQgT3JkZXJzL1JlbGF0aW9uc2hpcHM6KiogSSYjMzk7ZCBjb25zaWRlciBob3cgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIGZyb20gdGhhdCwgdGhhdCBtb2R1bGVzIGhhdmUgc3BlY2lmaWMgcmVsYXRpb25zaGlwcy4KCkJhc2ljYWxseSwgSSBhbSBtYXBwaW5nIG91dCBldmVyeSByZWxhdGlvbnNoaXAgSSBjYW4gZmluZC4gSXQgbWlnaHQgdGFrZSBhIGJpdCBvZiBkaWdnaW5nLCBidXQgdGhlIGtlcm5lbCB1c3VhbGx5IG1ha2VzIHRoZXNlIGRlcGVuZGVuY2llcyByZWFzb25hYmx5IGNsZWFyLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGNvbW1lbnRzLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhpcyB3aWxsIHByb2JhYmx5IHJldmVhbCB0aGF0IGl0IGRlcGVuZHMgb24gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzb21lIGtlcm5lbCBjb21wb25lbnRzLiBPbmNlIEkgZ2F0aGVyIGFsbCB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBmb3JtdWxhdGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYEJMS19ERVZfVUJMS2AgYWN0dWFsbHkgcmVxdWlyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYEJMS19ERVZfVUJMS2AgQ29uZmlndXJhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGBCTEtfREVWX1VCTEtgLCB3aGljaCBpcyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSB0aGUgbGluZSBgdWJxLSZndDtmb3JjZV9hYm9ydCA9IGZhbHNlO2Agd2l0aGluIHRoZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFkanVzdG1lbnQg4oCTIHdlJiMzOTtyZSBleHBsaWNpdGx5IHJlc2V0dGluZyBhIGZsYWcsIHdoaWNoIGRlZmluaXRlbHkgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhlIGtleSByZWFzb25pbmcgaXMgdGhlIGJ1ZyBpdCYjMzk7cyBhZGRyZXNzaW5nOiB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IHJlc2V0LCBhbmQgdGhhdCBjb3VsZCBsZWFkIHRvIHNlcmlvdXNseSBpbmNvcnJlY3QgYmVoYXZpb3Ig4oCTIGxpa2UgaW5hcHByb3ByaWF0ZWx5IGFib3J0aW5nIEkvT3MsIHdoaWNoIGlzIGEgYmlnIGRlYWwgaW4gdGVybXMgb2YgZGF0YSBpbnRlZ3JpdHkgYW5kIHBlcmZvcm1hbmNlLgoKYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGl0c2VsZiBpcyBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQmIzM5O3MgZWl0aGVyIGlubGluZWQgb3IgYSBwcmV0dHkgbGVhbiBoZWxwZXIgZnVuY3Rpb24uIFNvLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyBpdCBhY3R1YWxseSBpbmxpbmVkLCBhbmQgaWYgbm90LCBob3cgd2lkZWx5IHVzZWQgaXMgaXQ/IFdlIGtub3cgaXQmIzM5O3MgY2FsbGVkIGJ5IGB1YmxrX21hcmtfaW9fcmVhZHlgLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZW4gdXNlZCB3aXRoaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19iYXRjaF9wcmVwX2lvYC4gU28sIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2AgYXJlIGdvaW5nIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBmb2N1cyBmb3IgYW5hbHl6aW5nIHRoZSBzY29wZSBvZiB0aGlzIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucyBub3cgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2ZldGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDY4PXN0YXRpYyBpbmxpbmUgaW50IHVibGtfY2hlY2tfY21kX29wKHUzMiBjbWRfb3ApXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwODAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzA4MTovKiBNdXN0IHJ1biBiZWZvcmUgdWJsa19maWxsX2lvX2NtZCgpIC8gX191YmxrX2ZldGNoKCkuICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA4Mi1zdGF0aWMgaW5saW5lIGludCB1YmxrX3ZhbGlkYXRlX2lvX2J1Zihjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMjQ3PXN0YXRpYyBpbnQgdWJsa19jaGVja19mZXRjaF9idWYoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YiwgX191NjQgYnVmX2FkZHIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyNjItXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI2MzpzdGF0aWMgaW50IF9fdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI2NC1cdFx0XHRzdHJ1Y3QgdWJsa19pbyAqaW8sIHUxNiBxX2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg1LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMyODY6c3RhdGljIGludCB1YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg3LVx0XHQgICAgICBzdHJ1Y3QgdWJsa19pbyAqaW8sIF9fdTY0IGJ1Zl9hZGRyLCB1MTYgcV9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI5OS1cdGlmICghcmV0KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDA6XHRcdHJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzMwMS1cdGlmICghcmV0KSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNTk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDgtXHRcdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzQwOTpcdFx0cmV0ID0gdWJsa19mZXRjaChjbWQsIHViLCBpbywgYWRkciwgcV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQxMC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzY5ND1zdGF0aWMgaW50IHVibGtfYmF0Y2hfcHJlcF9pbyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzEzLVx0dWJsa19pb19sb2NrKGlvKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNzE0Olx0cmV0ID0gX191YmxrX2ZldGNoKGRhdGEtXHUwMDNlY21kLCBkYXRhLVx1MDAzZXViLCBpbywgdWJxLVx1MDAzZXFfaWQpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MTUtXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBpb191cmluZyBDb21tYW5kIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhlIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBjb21tYW5kcyBzdWJtaXR0ZWQgdmlhIGlvX3VyaW5nIHdpdGhpbiB0aGUgVWJsayAoVW5pdmVyc2FsIEJsb2NrIExheWVyKSBmcmFtZXdvcmsuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgY2VudHJhbCBodWIgd2hlcmUgZXZlcnl0aGluZyBraWNrcyBvZmYuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSBiZWdpbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyBgdWJsa19jaF91cmluZ19jbWRgIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2NoX3VyaW5nX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM0MT1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM1OC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzU5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjAtXHRcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzQ5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICpfX3VibGtfY2hlY2tfYW5kX2dldF9yZXEoc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTIyOnN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI4LVx0aWYgKCF0dy5jYW5jZWwpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpcdFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMC1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MzQ6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0Mi1cdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQzOlx0XHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ0LVx0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDc6XHRyZXR1cm4gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0OC19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQxNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWJsa19jaF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTUwLVx0LndyaXRlX2l0ZXIgPSB1YmxrX2NoX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE1MTpcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTUyLVx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIGJyb2tlbiBkb3duIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZW06CgoqKkRpc3NlY3RpbmcgdGhlIGlvX3VyaW5nIENvbW1hbmQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1YmxrX2NoX3VyaW5nX2NtZGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IG5hbWUgc2NyZWFtcyAmIzM0O3RoaXMgaXMgdGhlIGNvcmUgaGFuZGxlciBmb3IgaW9fdXJpbmcgY29tbWFuZHMmIzM0Oy4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZGlzcGF0Y2hlciwgdGhlIG9yY2hlc3RyYXRvci4gRXZlcnl0aGluZyBmbG93cyB0aHJvdWdoIGhlcmUgZnJvbSB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCBpdCBsb29rcyBsaWtlLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGxheWVyLiBJIHNlZSBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBUaGF0IG5hbWUgaXMgaW50ZXJlc3RpbmcuICYjMzQ7TG9jYWwmIzM0OyBpbXBsaWVzIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCB0aGlzIGhhbmRsZXIsIHBlcmhhcHMgcGVyLUNQVSBvciBwZXItZGV2aWNlIHJlc291cmNlLCBvciBtYXliZSBpdCYjMzk7cyB0aGUgY29yZSB3b3JraG9yc2Ugd2l0aGluIGB1YmxrX2NoX3VyaW5nX2NtZGAuIE15IGd1ZXNzIGlzIHRoZSBsb2NhbCB2ZXJzaW9uIGlzIGdvaW5nIHRvIGhhbmRsZSB0aGUgaGVhdnkgbGlmdGluZyBvZiB0aGUgaW8gY29tbWFuZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgJiMzNDtsb2NhbCYjMzQ7IHJlZmVycyB0byBpbiB0aGlzIGNvbnRleHQuCgpCZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIHNob3VsZCBjaGVjayBgdWJsa19iYXRjaF9wcmVwX2lvYC4gVGhpcyBzb3VuZHMgbGlrZSBhbiBvcHRpbWl6YXRpb24gb3IgcHJlLXByb2Nlc3Npbmcgc3RhZ2UuIFBlcmhhcHMgaXQmIzM5O3MgcHJlcHBpbmcgYmF0Y2hlcyBvZiBJL08gb3BlcmF0aW9ucyBiZWZvcmUgdGhleSBoaXQgdGhlIGNvcmUgaGFuZGxlci4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzdWJzeXN0ZW0gaXMgb3B0aW1pemVkLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIG1lcmdpbmcgb3IgY29hbGVzY2luZyByZXF1ZXN0cywgb3IgcHJlLWNhbGN1bGF0aW5nIHNvbWUgb2YgdGhlIG1ldGFkYXRhIG5lZWRlZCBieSB0aGUgaGFuZGxlci4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2JhdGNoX3ByZXBfaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2ODE9c3RhdGljIHZvaWQgdWJsa19iYXRjaF9yZXZlcnRfcHJlcF9jbWQoc3RydWN0IHVibGtfYmF0Y2hfaW9faXRlciAqaXRlcixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzY5My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNjk0OnN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzY5NS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pb19kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNzI1PXN0YXRpYyBpbnQgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWQoY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzc0Mi1cdG11dGV4X2xvY2soXHUwMDI2ZGF0YS1cdTAwM2V1Yi1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzc0MzpcdHJldCA9IHVibGtfd2Fsa19jbWRfYnVmKFx1MDAyNml0ZXIsIGRhdGEsIHVibGtfYmF0Y2hfcHJlcF9pbyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzc0NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIHVibGsgQmF0Y2ggUHJlcGFyYXRpb24gRmxvdyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEZyb20gdGhlIGNvZGUsIEkgc2VlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsaW5nIGB1YmxrX3dhbGtfY21kX2J1ZmAsIHdoaWNoIGl0c2VsZiB1c2VzIGB1YmxrX2JhdGNoX3ByZXBfaW9gLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kYCBpcyByZXNwb25zaWJsZSBmb3IgcHJlcGFyaW5nIGJhdGNoZXMgb2YgSS9PIG9wZXJhdGlvbnMsIGxpa2VseSBieSBpdGVyYXRpbmcgdGhyb3VnaCBhIGJ1ZmZlciBvZiBjb21tYW5kcy4gVGhlIGZhY3QgdGhhdCBgdWJsa19iYXRjaF9wcmVwX2lvYCBpcyBiZWluZyB1c2VkIG1lYW5zIHRoaXMgcHJlcGFyYXRpb24gcGhhc2UgaGFuZGxlcyB0aGUgY29yZSBwcmUtcHJvY2Vzc2luZyBsb2dpYyBmb3IgdGhlIGJhdGNoIG9mIGNvbW1hbmRzLCBmb3IgZXhhbXBsZSwgY29tbWFuZCB2YWxpZGl0eSBjaGVja3MsIGFuZCBkYXRhIHNldHVwLiBOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhbmQgdGhlICpob3cqLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbuKAmXMgcmVzcG9uc2liaWxpdGllcyBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBJL08gZmxvdy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgYHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kYC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBiYXRjaCBwcmVwYXJhdGlvbiwgYW5kIHdoYXQgYnJvYWRlciBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjk0PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MjQtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzcyNTpzdGF0aWMgaW50IHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kKGNvbnN0IHN0cnVjdCB1YmxrX2JhdGNoX2lvX2RhdGEgKmRhdGEpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcyNi17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM5ODQ9c3RhdGljIGludCB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQwMTMtXHRcdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDAxNDpcdFx0cmV0ID0gdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWQoXHUwMDI2ZGF0YSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDAxNS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSB1YmxrIEkvTyBVcmluZyBCYXRjaCBDb21tYW5kIEhhbmRsaW5nKioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBob3cgdGhpcyBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIGZ1bmN0aW9uIHdvcmtzLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGJhdGNoZWQgY29tbWFuZHMgY29taW5nIGZyb20gaW9fdXJpbmcuIFRoZSBjb2RlIGluZGljYXRlcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY2FsbGluZyBgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWRgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbWFrZXMgc2Vuc2UgdGhhdCBwcmVwYXJpbmcgdGhlIGNvbW1hbmRzIHdvdWxkIGJlIHNlcGFyYXRlZC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCYjMzk7cyBhIGdvb2QgaWRlYSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAgYWN0dWFsbHkgZG9lcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoaXMgZnVuY3Rpb24gaW5zaWRlIGFuZCBvdXQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIHRoZSBiYXRjaGVkIEkvTyBvcGVyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgbWFuYWdpbmcgdGhlc2UgcmVxdWVzdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhhdCBwcmVwYXJhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBjaGFpbiBhbmQgdGhlIHJvbGVzIG9mIGVhY2ggcGllY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zOTU0PXN0YXRpYyBpbnQgdWJsa19oYW5kbGVfbm9uX2JhdGNoX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM5ODMtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzk4NDpzdGF0aWMgaW50IHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zOTg1LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE1NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2JhdGNoX2lvX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNjAtXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTYxOlx0LnVyaW5nX2NtZCA9IHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNjItXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJhdGNoIElPIENvbW1hbmQgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBoYW5kbGVyIGZvciBiYXRjaCBJTyBvcGVyYXRpb25zIHdpdGhpbiBpb191cmluZywgZ290IGl0LiBUaGUga2V5IHBpZWNlcyBJIG5lZWQgdG8gcmVhbGx5IGZvY3VzIG9uIGFyZSBgdWJsa19jaF91cmluZ19jbWRgIGFuZCwgb2YgY291cnNlLCB0aGlzIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAgaXRzZWxmLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCBzaG91bGQgaGFwcGVuLgoKTm93LCBJJiMzOTttIHRyYWNpbmcgdGhlIGZsb3csIGFuZCBJIHNlZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgYmVpbmcgY2FsbGVkIGZyb20gYHVibGtfbWFya19pb19yZWFkeWAuIEFuZCBgdWJsa19tYXJrX2lvX3JlYWR5YCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2AuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBub3JtYWwgcGF0aCwgcHJlcHBpbmcgYW5kIHJlYWR5aW5nIHRoZSBJTyBmb3IgcHJvY2Vzc2luZy4gQnV0IHdhaXQuLi4gdGhpcyBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgaXMgdG9vIGltcG9ydGFudCB0byBqdXN0IHRydXN0IHRoZSBvYnZpb3VzIGNhbGxzLiBJdCBzZWVtcyBsaWtlIEkgYWxzbyByZW1lbWJlciBpdCBiZWluZyBjYWxsZWQgZnJvbSBgdWJsa19jYW5jZWxfcXVldWVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBmb3IgY2xlYW5pbmcgdXAgYW5kIHJlc2V0dGluZyBpbiB0aGUgZXZlbnQgb2YgZXJyb3JzIG9yIGNhbmNlbGxhdGlvbi4gTGV0JiMzOTtzIG5vdCBtYWtlIGFzc3VtcHRpb25zIGhlcmUuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNhbGwgc2l0ZXMgZm9yIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbnRleHRzIGl0JiMzOTtzIHVzZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMTI9c3RhdGljIHZvaWQgdWJsa19yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8pXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzAyMTpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAyMi17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMzE9c3RhdGljIHZvaWQgdWJsa19tYXJrX2lvX3JlYWR5KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIHUxNiBxX2lkLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlx0XHR1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHVicSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aCBpcyAqb25seSogZW50ZXJlZCB0aHJvdWdoIGB1YmxrX21hcmtfaW9fcmVhZHlgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEtub3dpbmcgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoYXQgSSBuZWVkIHRvIGxvb2sgYXQgaW1tZWRpYXRlbHkuIE5vdywgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgdWJsa19tYXJrX2lvX3JlYWR5YCBhbmQgZmlndXJlIG91dCAqcHJlY2lzZWx5KiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gVW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgY2FsbGVkLCBhbmQgaXRzIGVmZmVjdHMgb24gdGhlIHN5c3RlbSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzAzMTpcdHN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcbjMwMzI6XHRcdHN0cnVjdCB1YmxrX2lvICppbylcbjMwMzM6XHRcdF9fbXVzdF9ob2xkKFx1MDAyNnViLVx1MDAzZW11dGV4KVxuMzAzNDpcdHtcbjMwMzU6XHRcdHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEgPSB1YmxrX2dldF9xdWV1ZSh1YiwgcV9pZCk7XG4zMDM2Olx0XG4zMDM3Olx0XHRpZiAoIXViLVx1MDAzZXVucHJpdmlsZWdlZF9kYWVtb25zIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjMwMzg6XHRcdFx0dWItXHUwMDNldW5wcml2aWxlZ2VkX2RhZW1vbnMgPSB0cnVlO1xuMzAzOTpcdFxuMzA0MDpcdFx0dWJxLVx1MDAzZW5yX2lvX3JlYWR5JiM0MzsmIzQzOztcbjMwNDE6XHRcdHVibGtfcmVzZXRfaW9fZmxhZ3ModWJxLCBpbyk7XG4zMDQyOlx0XG4zMDQzOlx0XHQvKiBDaGVjayBpZiB0aGlzIHNwZWNpZmljIHF1ZXVlIGlzIG5vdyBmdWxseSByZWFkeSAqL1xuMzA0NDpcdFx0aWYgKHVibGtfcXVldWVfcmVhZHkodWJxKSkge1xuMzA0NTpcdFx0XHR1Yi1cdTAwM2Vucl9xdWV1ZV9yZWFkeSYjNDM7JiM0Mzs7XG4zMDQ2Olx0XG4zMDQ3Olx0XHRcdC8qXG4zMDQ4Olx0XHRcdCAqIFJlc2V0IHF1ZXVlIGZsYWdzIGFzIHNvb24gYXMgdGhpcyBxdWV1ZSBpcyByZWFkeS5cbjMwNDk6XHRcdFx0ICogVGhpcyBjbGVhcnMgdGhlIGNhbmNlbGluZyBmbGFnLCBhbGxvd2luZyBiYXRjaCBGRVRDSCBjb21tYW5kc1xuMzA1MDpcdFx0XHQgKiB0byBzdWNjZWVkIGR1cmluZyByZWNvdmVyeSB3aXRob3V0IHdhaXRpbmcgZm9yIGFsbCBxdWV1ZXMuXG4zMDUxOlx0XHRcdCAqL1xuMzA1MjpcdFx0XHR1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHVicSk7XG4zMDUzOlx0XHR9XG4zMDU0Olx0XG4zMDU1Olx0XHQvKiBDaGVjayBpZiBhbGwgcXVldWVzIGFyZSByZWFkeSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlc2V0dGluZyBgdWJxLSZndDtmb3JjZV9hYm9ydGAgdG8gYGZhbHNlYCB3aXRoaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBzeW1ib2xzOiBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgLiBCdXQgd2FpdC4uLiB3YXNuJiMzOTt0IGB1YmxrX21hcmtfaW9fcmVhZHlgIGNhbGxlZCBieSBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gPyBSaWdodCwgZ290dGEgaW5jbHVkZSB0aG9zZSBpbiB0aGUgcmV2aWV3LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgbG9vayBhdCB0aGUgY2FsbHMgdG8gYm90aCBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIHNwZWNpZmljYWxseS4gQW5kLCB3YWl0ISBXaGF0IGFib3V0IGB1YmxrX2N0cmxfdXJpbmdfY21kYD8gVGhhdCYjMzk7cyB0aGUgY29udHJvbCBjb21tYW5kIGhhbmRsZXIsIGFuZCB0aGUgcmVzZXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgdGhlcmUgdG9vLCBzbyBsZXQmIzM5O3MgbWFrZSBzdXJlIHRvIGV4YW1pbmUgdGhhdCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01NjE1PXN0YXRpYyBib29sIHVibGtfdHJ5X2J1Zl9tYXRjaChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjY4LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU2Njk6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24oc3RydWN0IHVibGtfZGV2aWNlICp1YixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjcwLVx0XHR1MzIgY21kX29wLCBzdHJ1Y3QgdWJsa3Nydl9jdHJsX2NtZCAqaGVhZGVyKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ3LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NDg6c3RhdGljIGJvb2wgdWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAodTMyIGNtZF9vcClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2MC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzYxOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2Mi1cdFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzcxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NzI6XHRpZiAodWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAoY21kX29wKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzczLVx0ICAgIGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODAxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4MDI6XHRcdHJldCA9IHVibGtfY3RybF91cmluZ19jbWRfcGVybWlzc2lvbih1YiwgY21kX29wLCBcdTAwMjZoZWFkZXIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU4NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWJsa19jdGxfZm9wcyA9IHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODczLVx0Lm9wZW5cdFx0PSBub25zZWVrYWJsZV9vcGVuLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4NzQ6XHQudXJpbmdfY21kICAgICAgPSB1YmxrX2N0cmxfdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1YmxrIENvbnRyb2wgQ29tbWFuZCBIYW5kbGVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGB1YmxrYCBzdWJzeXN0ZW0gaGFuZGxlcyBjb250cm9sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gdGhlIFVyaW5nIGludGVyZmFjZS4gSSBzZWUgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgdGhlIGNlbnRyYWwgY29tbWFuZCBoYW5kbGVyIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgY29udGFjdCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZS4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgdHdlYWtpbmcgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBJIGtub3cgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBxdWV1ZSBpcyAmIzM0O3JlYWR5LCYjMzQ7IHNwZWNpZmljYWxseSB3aGVuIGB1YmxrX3F1ZXVlX3JlYWR5KHVicSlgIHJldHVybnMgdHJ1ZS4gVGhhdCBoYXBwZW5zIHdoZW4gdGhlIG51bWJlciBvZiBJL09zIHJlYWR5IHRvIHByb2Nlc3MgKGB1YnEtJmd0O25yX2lvX3JlYWR5YCkgZXF1YWxzIHRoZSBxdWV1ZSBkZXB0aCAoYHVicS0mZ3Q7cV9kZXB0aGApLiBUaGF0JiMzOTtzIGEga2V5IHN0YXRlLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBhcmUgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19iYXRjaF9wcmVwX2lvYCwgYXMgdGhlc2UgYXJlIHRoZSB0cmlnZ2Vycy4gYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIEkgc2hvdWxkIGJlIHB1dHRpbmcgbW9zdCBvZiBteSBmb2N1cy4gQW5kIG9mIGNvdXJzZSwgYHVibGtfY3RybF91cmluZ19jbWRgIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2luY2UgaXQmIzM5O3MgdGhlIGRldmljZSBzdGF0ZSBjb250cm9sbGVyLCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgbGlrZSBzdG9wcGluZywgc3RhcnRpbmcsIGFuZCByZWNvdmVyeSBhcmUgbWFuYWdlZC4KCkkgbmVlZCB0byBkaWcgaW50byBgZm9yY2VfYWJvcnRgIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBzZXQuIEl0JiMzOTtzIHByb2JhYmx5IGtleSBmb3IgdW5kZXJzdGFuZGluZyBjZXJ0YWluIGtpbmRzIG9mIGZhaWx1cmUgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JjZV9hYm9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQyPXN0cnVjdCB1YmxrX3F1ZXVlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQ5LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1MDpcdGJvb2wgZm9yY2VfYWJvcnQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjUxLVx0Ym9vbCBjYW5jZWxpbmc7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIxNDE9c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX3ByZXBfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE0Ni1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTQ3Olx0LyogV2l0aCByZWNvdmVyeSBmZWF0dXJlIGVuYWJsZWQsIGZvcmNlX2Fib3J0IGlzIHNldCBpblxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNDgtXHQgKiB1YmxrX3N0b3BfZGV2KCkgYmVmb3JlIGNhbGxpbmcgZGVsX2dlbmRpc2soKS4gV2UgaGF2ZSB0b1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTUyLVx0ICpcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTUzOlx0ICogTm90ZTogZm9yY2VfYWJvcnQgaXMgZ3VhcmFudGVlZCB0byBiZSBzZWVuIGJlY2F1c2UgaXQgaXMgc2V0XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE1NC1cdCAqIGJlZm9yZSByZXF1ZXN0IHF1ZXVlIGlzIHVucWl1ZXNjZWQuXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNTYtXHRpZiAodWJsa19ub3Nydl9zaG91bGRfcXVldWVfaW8odWJxKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTU3Olx0ICAgIHVubGlrZWx5KFJFQURfT05DRSh1YnEtXHUwMDNlZm9yY2VfYWJvcnQpKSlcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTU4LVx0XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE3Nj1zdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODgtXHQvKlxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxODk6XHQgKiAtXHUwMDNlY2FuY2VsaW5nIGhhcyB0byBiZSBoYW5kbGVkIGFmdGVyIC1cdTAwM2Vmb3JjZV9hYm9ydCBhbmQgLVx1MDAzZWZhaWxfaW9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTkwLVx0ICogaXMgZGVhbHQgd2l0aCwgb3RoZXJ3aXNlIHRoaXMgcmVxdWVzdCBtYXkgbm90IGJlIGZhaWxlZCBpbiBjYXNlXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI1MTY9c3RhdGljIHZvaWQgdWJsa19jaF9yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTkxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1Yi1cdTAwM2VkZXZfaW5mby5ucl9od19xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1OTI6XHRcdFx0V1JJVEVfT05DRSh1YmxrX2dldF9xdWV1ZSh1YiwgaSktXHUwMDNlZm9yY2VfYWJvcnQsIHRydWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OTMtXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI4MjQ9c3RhdGljIHZvaWQgdWJsa19iYXRjaF9jYW5jZWxfcXVldWUoc3RydWN0IHVibGtfcXVldWUgKnVicSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjgyOS1cdHNwaW5fbG9jayhcdTAwMjZ1YnEtXHUwMDNlZXZ0c19sb2NrKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyODMwOlx0dWJxLVx1MDAzZWZvcmNlX2Fib3J0ID0gdHJ1ZTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yODMxLVx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZ1YnEtXHUwMDNlZmNtZF9oZWFkLCBcdTAwMjZmY21kX2xpc3QpO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yOTM5PXN0YXRpYyB2b2lkIHVibGtfd2FpdF90YWdzZXRfcnFzX2lkbGUoc3RydWN0IHVibGtfZGV2aWNlICp1Yilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk1My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyOTU0OnN0YXRpYyB2b2lkIHVibGtfZm9yY2VfYWJvcnRfZGV2KHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk1NS17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5NjYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1Yi1cdTAwM2VkZXZfaW5mby5ucl9od19xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI5Njc6XHRcdHVibGtfZ2V0X3F1ZXVlKHViLCBpKS1cdTAwM2Vmb3JjZV9hYm9ydCA9IHRydWU7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk2OC1cdGJsa19tcV91bnF1aWVzY2VfcXVldWUodWItXHUwMDNldWJfZGlzay1cdTAwM2VxdWV1ZSk7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI5ODg9c3RhdGljIHZvaWQgdWJsa19zdG9wX2Rldl91bmxvY2tlZChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTk2LVx0aWYgKHVibGtfbm9zcnZfZGV2X3Nob3VsZF9xdWV1ZV9pbyh1YikpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjk5NzpcdFx0dWJsa19mb3JjZV9hYm9ydF9kZXYodWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5OTgtXHRkZWxfZ2VuZGlzayh1Yi1cdTAwM2V1Yl9kaXNrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzAyMT1zdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjYtXHR1YnEtXHUwMDNlZmFpbF9pbyA9IGZhbHNlO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwMjc6XHR1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDI4LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzg3OD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfYXR0YWNoKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4ODYtXHRzcGluX2xvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzg4NzpcdGlmICh1bmxpa2VseSh1YnEtXHUwMDNlZm9yY2VfYWJvcnQgfHwgdWJxLVx1MDAzZWNhbmNlbGluZykpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zODg4LVx0XHRmcmVlID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVQkxLIEZvcmNlIEFib3J0IEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIGluIHRoZSBVQkxLIGRyaXZlci4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyB1c2luZyBgZm9yY2VfYWJvcnRgIGluIHRoZSBmdW5jdGlvbnMgYHVibGtfY2hfcmVsZWFzZV93b3JrX2ZuYCwgYHVibGtfYmF0Y2hfY2FuY2VsX3F1ZXVlYCwgYW5kIGB1YmxrX2ZvcmNlX2Fib3J0X2RldmAuIEFuZCB0aGVuIGl0JiMzOTtzIHVzZWQgd2hlbiBwcmVwYXJpbmcgYW5kIGF0dGFjaGluZyByZXF1ZXN0czogYHVibGtfcHJlcF9yZXFgIGFuZCBgdWJsa19iYXRjaF9hdHRhY2hgIHJlc3BlY3RpdmVseS4KClRoZSBrZXkgY2hhbmdlIGhlcmUsIGFuZCB0aGUgYml0IHRoYXQgaGFzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBpcyB0aGUgcmVzZXQgb2YgYGZvcmNlX2Fib3J0YCB3aXRoaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBUaGlzIGlzIHVuZG91YnRlZGx5IGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBhIGdvb2Qgb25lIGF0IHRoYXQuIEl0JiMzOTtzIGFkZHJlc3NpbmcgdGhlIGlzc3VlIG9mIGBmb3JjZV9hYm9ydGAgbm90IGJlaW5nIHByb3Blcmx5IGNsZWFyZWQgZHVyaW5nIHJlY292ZXJ5IHNjZW5hcmlvcywgd2hpY2ggd291bGQgY2xlYXJseSBsZWFkIHRvIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEkgYWx3YXlzIGFwcHJlY2lhdGUgYSB0YXJnZXRlZCBidWcgZml4IGxpa2UgdGhpcy4KClRoZSBmYWN0IHRoYXQgYHRlc3RfcmVjb3Zlcl8wMy5zaGAgaXMgYmVpbmcgbW9kaWZpZWQgdGVsbHMgbWUgdGhleSYjMzk7dmUgcHJvYWN0aXZlbHkgY3JlYXRlZCBhIHRlc3QgY2FzZSB0byB2YWxpZGF0ZSB0aGlzIGZpeC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHJldmlldyB0aGlzIHNlbGYtdGVzdCB2ZXJ5IGNsb3NlbHkuCgpUaGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBgQkxLX0RFVl9VQkxLYCBjb25maWcsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIFRoZSBjb3JlIHN5bWJvbHMgaGVyZSBzZWVtIHRvIGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAsIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVu4oCZdCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkLiBMb29rcyBsaWtlIGBCTEtfREVWX1VCTEtgIHJlbGllcyBvbiBgSU9fVVJJTkdgLCB3aGljaCBpcyBzdGFuZGFyZC4gSnVzdCBhIHF1aWNrIGNoZWNrIGFnYWluIG9uIGBCTEtfREVWX1VCTEtgIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYEJMS19ERVZfVUJMS2AgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBhcm91bmQgYEJMS19ERVZfVUJMS2AuIEJlZm9yZSBJIHN0YXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwOyBJIGNhbiYjMzk7dCBlZmZlY3RpdmVseSBldmFsdWF0ZSB0aGlzIGNvbXBvbmVudCYjMzk7cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhvdXQgdW5kZXJzdGFuZGluZyB3aGF0IGl0IGxlYW5zIG9uIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IG1pZ2h0IGJlIGxlYW5pbmcgb24gKml0Ki4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzZWxmLWNvbnRhaW5lZCBtb2R1bGUsIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIGludGVyd292ZW4gd2l0aCBjb3JlIGluZnJhc3RydWN0dXJlLCBkcml2ZXIgZnJhbWV3b3Jrcywgb3IgZXZlbiB1c2Vyc3BhY2UgdXRpbGl0aWVzPyBBIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2sgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50IHRvIGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgbXkgYW5hbHlzaXMuIFdlIG5lZWQgdG8gZmluZCB0aGUgY3JpdGljYWwgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyODpcdGNvbmZpZyBCTEtfREVWX1VCTEtcbiAzMjk6XHRcdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcJiMzNDtcbiAzMzA6XHRcdHNlbGVjdCBJT19VUklOR1xuIDMzMTpcdFx0aGVscFxuIDMzMjpcdFx0ICBpb191cmluZyBiYXNlZCB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLiBUb2dldGhlciB3aXRoIHVibGsgc2VydmVyLCB1YmxrXG4gMzMzOlx0XHQgIGhhcyBiZWVuIHdvcmtpbmcgd2VsbCwgYnV0IGludGVyZmFjZSB3aXRoIHVzZXJzcGFjZSBvciBjb21tYW5kIGRhdGFcbiAzMzQ6XHRcdCAgZGVmaW5pdGlvbiBpc24mIzM5O3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXG4gMzM1Olx0XHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXG4gMzM2Olx0XG4gMzM3Olx0Y29uZmlnIEJMS0RFVl9VQkxLX0xFR0FDWV9PUENPREVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdWJsa19jaCBEcml2ZXImIzM5O3MgSU9fVVJJTkcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVibGtfY2hgIGRyaXZlciBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCBgSU9fVVJJTkdgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0IGV4cGxpY2l0bHkgc2VsZWN0cyBgSU9fVVJJTkdgLCB3aGljaCBpcyBnb29kLiBUaGUgS2NvbmZpZyBlbnRyeSBpc24mIzM5O3QgZGVwZW5kZW50IG9uIGFueXRoaW5nIG90aGVyIHRoYW4gYEJMT0NLYCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQuIFNvLCB0aGUgb25seSBjb25maWcgaXRlbSB0aGF0IG5lZWRzIHRvIGJlIHNlbGVjdGVkIGlzIGBCTEtfREVWX1VCTEtgLiBFYXN5IGVub3VnaC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGRvaW5nIHRoaW5ncyB0aGUgJiMzNDtyaWdodCYjMzQ7IHdheSBmb3Iga2VybmVsIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIG5vbi1zdGF0aWMgc28gaXQgY2FuIGJlIHByZWZlcnJlZCBvdmVyIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQWZ0ZXIgYSBjaGVjaywgSSBmaW5kIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGNvbmNlcm5pbmcuIEJ1dCB3YWl0LCBpdCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0OgoKYGBgYwpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7Cgkud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlciwKCS51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCwKCS5tbWFwID0gdWJsa19jaF9tbWFwLApgYGAKClNvLCBpdCYjMzk7cyBub3QgYmVpbmcgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgb2theS4gU3RpbGwsIGJlc3QgcHJhY3RpY2UgaXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgZXhpc3QuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIGB1YmxrX2Rydi5jYCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHJlcGxhY2UgYHVibGtfY2hfdXJpbmdfY21kYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVibGtfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIHVibGtfIFZhcmlhYmxlIERlY2xhcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGB1YmxrX2AgdmFyaWFibGUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBec3RhdGljIGludCB1YmxrX2AgYW5kIGp1c3QgYF5pbnQgdWJsa19gLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhlIGBzdGF0aWNgIGtleXdvcmQgaXMgdGhlIGtleSBkaWZmZXJlbnRpYXRvciBoZXJlLCBpbXBseWluZyBzY29wZSBhbmQgbGlua2FnZS4gSSBrbm93IGhvdyB0aGUgY29tcGlsZXIgdHJlYXRzIGVhY2ggb2YgdGhvc2UsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IHN1cnByaXNpbmcgdXNhZ2Ugb2YgYHVibGtfYCB0aGF0IHdvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSwgb3IgYWJzZW5jZSwgb2YgYHN0YXRpY2AuIFdl4oCZcmUgdGFsa2luZyBhYm91dCBrZXJuZWwgY29kZSBoZXJlLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSByYW1pZmljYXRpb25zIG9mIHRoYXQgZGVjbGFyYXRpb24gaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHNjb3Bpbmcgb3IgbGlua2FnZSBlcnJvcnMgdGhhdCB3b3VsZCBzdXJmYWNlIGxhdGVyIGFzIGEgYnVnLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYSB2ZXJ5IHNwZWNpZmljIHR5cGUgb2YgcG90ZW50aWFsIGlzc3VlLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoYXQgZGVjbGFyYXRpb24uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgdWJsa18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBVYmxrIERyaXZlciBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGB1YmxrX2Rydi5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgc3RydWN0dXJlLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBkbyBpcyBxdWlja2x5IHNjYW4gZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucy4gSSB3YW50IHRvIGlkZW50aWZ5IHdoYXQgcGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSwgYW5kIGFsc28gd2hpY2ggcGFydHMgYXJlIGxpa2VseSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBLbm93aW5nIHRoZSBleHBvc2VkIGludGVyZmFjZSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzdG9yYWdlIHN5c3RlbS4gVGhpcyBpbml0aWFsIHBhc3Mgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNb2R1bGUmIzM5O3MgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW4gdGVybXMgb2YgaXRzIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3Mgc2VsZi1jb250YWluZWQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cywgd2hlcmUgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24sIGFyZSB0aGUgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBhbmQgYGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYSBmZXc6IGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAsIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuIE15IG5leHQgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMgSSYjMzk7bSBtaXNzaW5nPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpUbyBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYHVibGtfcXVldWVfcnFgLiBJdCYjMzk7cyB3b3J0aCBhIGxvb2sgdG8gY29uZmlybSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQyPXN0cnVjdCB1YmxrX3F1ZXVlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjYxLVx0ICpcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNjI6XHQgKiBUaGVyZSBhcmUgbXVsdGlwbGUgd3JpdGVyIGZyb20gdWJsa19xdWV1ZV9ycSgpIG9yIHVibGtfcXVldWVfcnFzKCksXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjYzLVx0ICogc28gbG9jayBpcyByZXF1aXJlZCBmb3Igc3RvcmluZyByZXF1ZXN0IHRhZyB0byBmaWZvXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIxNDE9c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX3ByZXBfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE3NS0gKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTc2OnN0YXRpYyBpbmxpbmUgYmxrX3N0YXR1c190IF9fdWJsa19xdWV1ZV9ycV9jb21tb24oc3RydWN0IHVibGtfcXVldWUgKnVicSxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc3LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIwMi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjAzOnN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjA0LVx0XHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjEwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMTE6XHRyZXMgPSBfX3VibGtfcXVldWVfcnFfY29tbW9uKHVicSwgcnEsIFx1MDAyNnNob3VsZF9xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMi1cdGlmICghc2hvdWxkX3F1ZXVlKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjE5PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19iYXRjaF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIyNi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjI3Olx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcdTAwMjZzaG91bGRfcXVldWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjgtXHRpZiAoIXNob3VsZF9xdWV1ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjI0Mz1zdGF0aWMgdm9pZCB1YmxrX2NvbW1pdF9ycXMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyNTUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjI1NjpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3JxcyhzdHJ1Y3QgcnFfbGlzdCAqcnFsaXN0KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyNTcte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB1YmxrX21xX29wcyA9IHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzQ2Olx0LnF1ZXVlX3JxICAgICAgID0gdWJsa19xdWV1ZV9ycSxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzQ3Olx0LnF1ZXVlX3JxcyAgICAgID0gdWJsa19xdWV1ZV9ycXMsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjM0OC1cdC5pbml0X2hjdHhcdD0gdWJsa19pbml0X2hjdHgsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI3Mjc9c3RhdGljIHZvaWQgdWJsa19zdGFydF9jYW5jZWwoc3RydWN0IHVibGtfZGV2aWNlICp1Yilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjczNi1cdFx0LypcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNzM3Olx0XHQgKiBRdWllc2NlIHRvIHNlcmlhbGl6ZSB3aXRoIHVibGtfcXVldWVfcnEoKSwgZW5zdXJpbmdcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzM4LVx0XHQgKiB1YnEtXHUwMDNlY2FuY2VsaW5nIGlzIHZpc2libGUgd2hlbiB0aGUgcXVldWUgcmVzdW1lcy5cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0NS1cdFx0ICogRGlzayBub3QgeWV0IGFsbG9jYXRlZCBieSB1YmxrX2N0cmxfc3RhcnRfZGV2KCksIHNvXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NjpcdFx0ICogdGhlcmUgaXMgbm8gcmVxdWVzdCBxdWV1ZSBhbmQgdWJsa19xdWV1ZV9ycSgpIGNhbm5vdFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDctXHRcdCAqIGJlIHJ1bm5pbmcuICBKdXN0IHNldCB0aGUgZmxhZzsgaWYgc3RhcnRfZGV2IHByb2NlZWRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjU2CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBCdWcgUmVsYXRlZCB0byBVQkxLIFJlY292ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVQkxLIGRyaXZlciBpc3N1ZS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgcmVjb3ZlcnksIGFuZCBzaW5jZSBgdWJsa19xdWV1ZV9ycWAgaXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZW50cnkgcG9pbnQsIGl0IG1ha2VzIHNlbnNlIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgaXNzdWUgb3JpZ2luYXRlcy4gIFRoZSByZWNvdmVyeSBwcm9jZXNzIGl0c2VsZiBpcyBoYW5kbGVkIGJ5IGB1YmxrX2N0cmxfdXJpbmdfY21kYCAoZm9yIGRldmljZSBtYW5hZ2VtZW50KSBhbmQgYHVibGtfY2hfdXJpbmdfY21kYCAoZm9yIGZldGNoaW5nIEkvT3MpLiBUaGF0IHN1Z2dlc3RzIHRoYXQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBtaWdodCBhbHNvIGJlIHJlbGV2YW50IHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggYmF0Y2hlZCBjb21tYW5kcywgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGB1YmxrX3F1ZXVlX3JxYCBpdHNlbGYuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGZvY3VzaW5nIG9uIGB1YmxrX2NoX3VyaW5nX2NtZGAgYXMgYSBzdGFydGluZyBwb2ludC4gWWVzLCB0aGF0IGxvb2tzIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHJlbGV2YW50IHRvIHRoaXMgaXNzdWUuIEFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaGFuZGxlcyBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgY29udHJvbCBkZXZpY2UuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBwYXRjaC4gQWgsIEkgc2VlLCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc2ltcGxlIGNoYW5nZS4gSXQmIzM5O3MgYWRkaW5nIGEgcmVzZXQgb2YgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyB3aXRoaW4gdGhlIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBmdW5jdGlvbi4gVGhlIGRlc2NyaXB0aW9uIG1ha2VzIGl0IGNsZWFyOiB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIHdhc24mIzM5O3QgYmVpbmcgY2xlYXJlZCBkdXJpbmcgcmVjb3ZlcnksIHBvdGVudGlhbGx5IGNhdXNpbmcgSS9PcyB0byBiZSBpbmNvcnJlY3RseSBhYm9ydGVkIGFmdGVyIHJlY292ZXJ5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHRvdWNoaW5nIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIuCgpGcm9tIHRoZSBjb25maWcgaW5mb3JtYXRpb24sIEkgc2VlIHRoYXQgdGhpcyBpcyBlbmFibGVkIGJ5IGBCTEtfREVWX1VCTEtgLCB3aGljaCBhbHNvIHNlbGVjdHMgYElPX1VSSU5HYC4gQW5kIHllcywgYEJMS19ERVZfVUJMS2Agc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmUsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuCgpPa2F5LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhpcyBpc3N1ZS4gSSYjMzk7bSByZWFkeSB0byBzZXQgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHVibGsgZHJpdmVyIHdoZXJlIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgb2YgYSBxdWV1ZSBpcyBub3QgcmVzZXQgZHVyaW5nIHJlY292ZXJ5LiBUaGlzIGNvdWxkIGxlYWQgdG8gSU9zIGJlaW5nIGluY29ycmVjdGx5IGFib3J0ZWQgYWZ0ZXIgcmVjb3ZlcnkuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgdWJsayBkcml2ZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHVibGsgZHJpdmVyIHdoZXJlIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgb2YgYSBxdWV1ZSBpcyBub3QgcmVzZXQgZHVyaW5nIHJlY292ZXJ5LiBUaGlzIGNvdWxkIGxlYWQgdG8gSU9zIGJlaW5nIGluY29ycmVjdGx5IGFib3J0ZWQgYWZ0ZXIgcmVjb3ZlcnkuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgdWJsayBkcml2ZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDhlMjFjMDg2Mzg5ZjBhZmI3ZGU4YTQ1ZjYwODMxNDM4M2Q4ZjVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTI6NTk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGQxN2VkMjY0ZGExYS4uMWE5NTY0MmI5ZGI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtMzAyNCw2ICYjNDM7MzAyNCw3IEBAIHN0YXRpYyB2b2lkIHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSkKIAl1YnEtJmd0O2NhbmNlbGluZyA9IGZhbHNlOwogCXNwaW5fdW5sb2NrKCZhbXA7dWJxLSZndDtjYW5jZWxfbG9jayk7CiAJdWJxLSZndDtmYWlsX2lvID0gZmFsc2U7CiYjNDM7CXVicS0mZ3Q7Zm9yY2VfYWJvcnQgPSBmYWxzZTsKIH0KIAogLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKaW5kZXggMjU1NDgwNWU1YjAyYy4uOTJmNDAxMjE3OGYwOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKQEAgLTI5LDYgJiM0MzsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TQogX2NyZWF0ZV9iYWNrZmlsZSAxIDEyOE0KIF9jcmVhdGVfYmFja2ZpbGUgMiAxMjhNCiAKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgLWIgJmFtcDsKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzBdfSYjMzQ7ICZhbXA7CiYjNDM7dWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwomIzQzO3dhaXQKJiM0MzsKIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBudWxsIC1xIDIgLXIgMSAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX0mIzM0OyAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NAoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3VwZXIgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSBpdCYjMzk7cyBqdXN0IGZsaXBwaW5nIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIHRvIGBmYWxzZWAuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm90aGluZyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgZGVmaW5pdGVseSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgcmVzZXR0aW5nIGEgYm9vbGVhbiwgc28gaXQmIzM5O3MgYSBsb2dpYyBjaGFuZ2UsIGFuZCBJJiMzOTttIG5vdCB3b3JyaWVkIGFib3V0IGludHJvZHVjaW5nIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgYnVnIGl0JiMzOTtzIGZpeGluZyBpcyBqdXN0IHRoYXQgYGZvcmNlX2Fib3J0YCB3YXNuJiMzOTt0IGJlaW5nIHJlc2V0IHByb3Blcmx5LCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBJL08gZmFpbHVyZXMgb3Igb3RoZXIgaW5jb3JyZWN0IGJlaGF2aW9y4oCUZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gZml4LiBCdXQsIGEgYGJvb2wgPSBmYWxzZTtgIGFzc2lnbm1lbnQ/IFllYWgsIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIEtBU0FOLCBvciBldmVuIGp1c3QgZ29vZCB0ZXN0aW5nLCB3b3VsZCBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaWYgYGZvcmNlX2Fib3J0YCBhY3R1YWxseSBjb250cm9scyBsaWZlY3ljbGUsIGFuZCBldmVuIHRoYXQgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IuIFNvLCBOZWVkc0tNU0FOID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBhIGJvb2xlYW4gZmxhZyAoYGZvcmNlX2Fib3J0YCkgaW4gdGhlIGB1YmxrX3F1ZXVlYCBzdHJ1Y3R1cmUgdG8gYGZhbHNlYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlIGlzIHB1cmVseSBsb2dpY2FsIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgcG90ZW50aWFsbHkgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpZiB0aGUgZmxhZyBjb250cm9scyBsaWZlY3ljbGUsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjI3Ljc5MzQzMjkzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTY0ODAzNTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRcIixcbiAgICBcInVibGtfcXVldWVfcnFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB1YmxrIGRyaXZlciB3aGVyZSB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIG9mIGEgcXVldWUgaXMgbm90IHJlc2V0IGR1cmluZyByZWNvdmVyeS4gVGhpcyBjb3VsZCBsZWFkIHRvIElPcyBiZWluZyBpbmNvcnJlY3RseSBhYm9ydGVkIGFmdGVyIHJlY292ZXJ5LiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHVibGsgZHJpdmVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6MjcuNzkzNDM4MDQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcwMzI5MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q4ZTIxYzA4NjM4OWYwYWZiN2RlOGE0NWY2MDgzMTQzODNkOGY1Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo1OToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi4xYTk1NjQyYjlkYjk0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbkBAIC0zMDI0LDYgKzMwMjQsNyBAQCBzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuIFxcdHVicS1cXHUwMDNlY2FuY2VsaW5nID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1YnEtXFx1MDAzZWNhbmNlbF9sb2NrKTtcXG4gXFx0dWJxLVxcdTAwM2VmYWlsX2lvID0gZmFsc2U7XFxuK1xcdHVicS1cXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcXG4gfVxcbiBcXG4gLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxcbmluZGV4IDI1NTQ4MDVlNWIwMmMuLjkyZjQwMTIxNzhmMDggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxcbkBAIC0yOSw2ICsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TVxcbiBfY3JlYXRlX2JhY2tmaWxlIDEgMTI4TVxcbiBfY3JlYXRlX2JhY2tmaWxlIDIgMTI4TVxcbiBcXG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIC1iIFxcdTAwMjZcXG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxIC1iIFxcXCIke1VCTEtfQkFDS0ZJTEVTWzBdfVxcXCIgXFx1MDAyNlxcbit1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgc3RyaXBlIC1xIDIgLXIgMSAtYiBcXFwiJHtVQkxLX0JBQ0tGSUxFU1sxXX1cXFwiIFxcXCIke1VCTEtfQkFDS0ZJTEVTWzJdfVxcXCIgXFx1MDAyNlxcbit3YWl0XFxuK1xcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgXFx1MDAyNlxcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgXFxcIiR7VUJMS19CQUNLRklMRVNbMF19XFxcIiBcXHUwMDI2XFxuIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBzdHJpcGUgLXEgMiAtciAxIFxcXCIke1VCTEtfQkFDS0ZJTEVTWzFdfVxcXCIgXFxcIiR7VUJMS19CQUNLRklMRVNbMl19XFxcIiBcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjI5LjI2NDM2OTY2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjY4MzYwMzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRcIixcbiAgICBcInVibGtfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkOGUyMWMwODYzODlmMGFmYjdkZThhNDVmNjA4MzE0MzgzZDhmNWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo1OToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggNGQxN2VkMjY0ZGExYS4uMWE5NTY0MmI5ZGI5NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtMzAyNCw2ICszMDI0LDcgQEAgc3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxuIFx0dWJxLVx1MDAzZWNhbmNlbGluZyA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWNhbmNlbF9sb2NrKTtcbiBcdHVicS1cdTAwM2VmYWlsX2lvID0gZmFsc2U7XG4rXHR1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcbiB9XG4gXG4gLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoXG5pbmRleCAyNTU0ODA1ZTViMDJjLi45MmY0MDEyMTc4ZjA4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoXG5AQCAtMjksNiArMjksMTEgQEAgX2NyZWF0ZV9iYWNrZmlsZSAwIDI1Nk1cbiBfY3JlYXRlX2JhY2tmaWxlIDEgMTI4TVxuIF9jcmVhdGVfYmFja2ZpbGUgMiAxMjhNXG4gXG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIC1iIFx1MDAyNlxuK3VibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBsb29wIC1xIDIgLXIgMSAtYiBcIiR7VUJMS19CQUNLRklMRVNbMF19XCIgXHUwMDI2XG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgLWIgXCIke1VCTEtfQkFDS0ZJTEVTWzFdfVwiIFwiJHtVQkxLX0JBQ0tGSUxFU1syXX1cIiBcdTAwMjZcbit3YWl0XG4rXG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIFx1MDAyNlxuIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBsb29wIC1xIDIgLXIgMSBcIiR7VUJMS19CQUNLRklMRVNbMF19XCIgXHUwMDI2XG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgXCIke1VCTEtfQkFDS0ZJTEVTWzFdfVwiIFwiJHtVQkxLX0JBQ0tGSUxFU1syXX1cIiBcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjI5LjI2NDM3MTAwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjAwNzk2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB1YmxrX2Rydi5jIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgYWRkcyBhIGxpbmUgaW4gYHVibGtfZHJ2LmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGFkZGl0aW9uIG9mIGB1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtgIGlzIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIHdlJ3JlIHJlc2V0dGluZyBhIGZsYWcgdGhhdCBjb250cm9scyBmb3JjaW5nIGFuIGFib3J0IG9uIGEgVUJMSyBxdWV1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGZvcmNlX2Fib3J0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgbGlrZWx5IHVzZWQgdG8gcHJldmVudCBmdXR1cmUgSU8gdG8gdGhpcyBxdWV1ZSBhZnRlciBzb21lIHR5cGUgb2YgZXJyb3IsIG9yIG1heWJlIGR1cmluZyBhIHJlc2V0IHByb2NlZHVyZS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSB0aGF0IHVzZXMgYHVicS1cdTAwM2Vmb3JjZV9hYm9ydGAgdG8ga25vdyB3aGF0IHRyaWdnZXJzIGl0IGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIGNoYW5nZSBtaWdodCBiZSByZWxhdGVkIHRvIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nIG9yIHBlcmhhcHMgYSBtb3JlIGdyYWNlZnVsIHJlY292ZXJ5IG1lY2hhbmlzbSB3aXRoaW4gdGhlIFVCTEsgYmxvY2sgZHJpdmVyLiBOb3csIHRoZSBwcmVzZW5jZSBvZiBhIHNlbGZ0ZXN0IHNjcmlwdCBpcyBlbmNvdXJhZ2luZy4gSXQgaG9wZWZ1bGx5IGNvdmVycyBzY2VuYXJpb3MgdGhhdCBleGVyY2lzZSB0aGlzIG5ldyBmbGFnLCB3aGljaCBJJ2xsIG5lZWQgdG8gcmV2aWV3LiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHVibGsgcXVldWUgaGFuZGxlcyBkaWZmZXJlbnQga2luZHMgb2YgYWJvcnQgY29uZGl0aW9ucywgYW5kIGVuc3VyaW5nIGl0IGNhbiByZWNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6MzQuMDg0NDU0MTI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzAyOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDEyPXN0YXRpYyB2b2lkIHVibGtfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwMjE6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDMxPXN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlxcdFxcdHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3ModWJxKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjM0LjEzNDE1OTU0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDYzMDI1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgdWJsayBJTyBGbGFnIFJlc2V0KipcblxuQWxyaWdodCwgSSdtIHRyYWNpbmcgZG93biB0aGlzIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBmdW5jdGlvbiBjYWxsLiBUaGUgY29kZSBmbG93IHNheXMgaXQgb3JpZ2luYXRlcyBmcm9tIGB1YmxrX21hcmtfaW9fcmVhZHlgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBvZiB0aGlzIGZ1bmN0aW9uLlwiIFNvLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGVyZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBpcyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBpbiB3aGljaCB0aG9zZSBmbGFncyBhcmUgZ2V0dGluZyByZXNldC4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBzdGF0ZSB0cmFuc2l0aW9uIGZvciBJL08gcmVxdWVzdHMgd2l0aGluIHRoZSB1YmxrIHN1YnN5c3RlbSwgYW5kIEkgbmVlZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHRyYW5zaXRpb24gaXMuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGNvbmRpdGlvbnMgdGhhdCBuZWNlc3NpdGF0ZSB0aGUgcmVzZXQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGludGVudGlvbiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjM3LjY0MDQ2Mzk4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzU3NTQ0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19tYXJrX2lvX3JlYWR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzAyMT1zdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAzMC0vKiBkZXZpY2UgY2FuIG9ubHkgYmUgc3RhcnRlZCBhZnRlciBhbGwgSU9zIGFyZSByZWFkeSAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDMxOnN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAzMi1cXHRzdHJ1Y3QgdWJsa19pbyAqaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzI4Nj1zdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzMDItXFx0XFx0dWJsa19hcHBseV9pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBcXHUwMDI2YXV0b19idWYsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzAzOlxcdFxcdHVibGtfbWFya19pb19yZWFkeSh1YiwgcV9pZCwgaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzA0LVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjk0PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcxOS1cXHRpZiAoIXJldClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzcyMDpcXHRcXHR1YmxrX21hcmtfaW9fcmVhZHkoZGF0YS1cXHUwMDNldWIsIHVicS1cXHUwMDNlcV9pZCwgaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzIxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTozNy45NzYyMjM5NDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMxMTk1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIHVibGsgRHJpdmVyIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBzbyBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gIGFyZSB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaW50byB0aGUgY29yZSBvZiB0aGlzLiBDbGVhcmx5LCB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIsIGB1YmxrYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgdG8gdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1YmxrYCBpcyBjb25maWd1cmVkLiBXaGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5PyBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgZmlyc3QgbG9vayBpbnRvIGhvdyB0aGlzIHRoaW5nIGlzIHB1dCB0b2dldGhlciBhbmQgY29uZmlndXJlZC4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTo0MS45MDc0Mjc0ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMjUyNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zMTU9Y29uZmlnIEJMS19ERVZfUkJEXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMjg6Y29uZmlnIEJMS19ERVZfVUJMS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjQyLjQwODY4Mzg4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDUxMDc3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBxdWVzdGlvbjpcblxuKipEZWNvbnN0cnVjdGluZyBEZXBlbmRlbmNpZXMgb2YgYEJMS19ERVZfVUJMS2AqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX1VCTEtgLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIGZ1bmN0aW9uLiAgSXQncyB1bmxpa2VseSB0aGF0IGBCTEtfREVWX1VCTEtgIGlzIGEgY29tcGxldGVseSBpbmRlcGVuZGVudCBtb2R1bGUuICBNeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvOlxuXG4xLiAgKipDb25zdWx0IERvY3VtZW50YXRpb24gXHUwMDI2IFNvdXJjZToqKiBGaXJzdCwgSSdkIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcywgbGlrZWx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIgb3IgdGhlIGRldmljZSBkcml2ZXIgc2VjdGlvbnMuIEknZCBiZSBsb29raW5nIGZvciBgI2lmZGVmYCBkaXJlY3RpdmVzLCByZWxhdGVkIHN0cnVjdHVyZXMsIG9yIGFueSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgaW4gdGhlIGNvZGUgaXRzZWxmLiBUaGUgaW5jbHVkZSBmaWxlcyBzaG91bGQgb2ZmZXIgYSB0cmVhc3VyZSB0cm92ZSBvZiBpbmZvcm1hdGlvbi5cblxuMi4gICoqRXhwbG9yZSBDb25maWd1cmF0aW9uIE9wdGlvbnM6KiogTmV4dCwgSSdkIGludmVzdGlnYXRlIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiAoYEtjb25maWdgIGZpbGVzKS4gSSdkIHNlYXJjaCBmb3IgYEJMS19ERVZfVUJMS2AgYW5kIGV4YW1pbmUgaXRzIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaG9zZSBvcHRpb25zIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBwcm92aWRlIGNydWNpYWwgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiDigJMgd2hldGhlciBpdCByZXF1aXJlcyBvdGhlciBibG9jayBkZXZpY2Ugc3VwcG9ydCAoYEJMS19ERVZfWFhYYCkgb3IgZ2VuZXJhbCBkZXZpY2UgZHJpdmVyIGluZnJhc3RydWN0dXJlLiBJJ2QgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy5cblxuMy4gICoqVHJhY2UgQ29kZSBQYXRoczoqKiBJZiB0aGUgZG9jdW1lbnRhdGlvbiBpc24ndCBpbW1lZGlhdGVseSBjbGVhciwgb3IgaWYgSSB3YW50IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcsIEkgd291bGQgZm9sbG93IGNvZGUgcGF0aHMuIEknZCBzdGFydCB3aXRoIHRoZSBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBgQkxLX0RFVl9VQkxLYCBhbmQgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB3aGljaCB2YXJpYWJsZXMgYXJlIHVzZWQuICBUaGlzIHdvdWxkIGV4cG9zZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEknZCB1c2UgbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYXJjaGl0ZWN0dXJlIHRvIGd1aWRlIG1lLiBGb3IgaW5zdGFuY2UsIEknZCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYmxvY2sgbGF5ZXIncyByZXF1ZXN0IHF1ZXVlLCBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgSS9PIHNjaGVkdWxlci5cblxuNC4gICoqQ29uc2lkZXIgUmVsYXRlZCBGZWF0dXJlczoqKiBFdmVuIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gdGhlIGNvZGUgZm9yIGBCTEtfREVWX1VCTEtgLCBJJ2QgdGhpbmsgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGNvbnNpZGVyIHdoYXQgaXQncyB0cnlpbmcgdG8gYWNjb21wbGlzaC4gRm9yIGV4YW1wbGUsIGlmIGl0J3MgYSBcInVzZXItc3BhY2UgYmxvY2sgZGV2aWNlLFwiIEknZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBpdCBwcm9iYWJseSBoaW5nZXMgb24gY2VydGFpbiB1c2VyLXNwYWNlIGludGVyZmFjZXMgKGxpa2UgY2hhcmFjdGVyIGRldmljZSBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlKSBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2QgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgc3RvcmFnZSB0ZWNobm9sb2dpZXMgb3Igc3Vic3lzdGVtcy5cblxuNS4gICoqTG9vayBmb3IgTW9kdWxlIExvYWQgT3JkZXJzL1JlbGF0aW9uc2hpcHM6KiogSSdkIGNvbnNpZGVyIGhvdyBtb2R1bGVzIGFyZSBsb2FkZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgZnJvbSB0aGF0LCB0aGF0IG1vZHVsZXMgaGF2ZSBzcGVjaWZpYyByZWxhdGlvbnNoaXBzLlxuXG5CYXNpY2FsbHksIEkgYW0gbWFwcGluZyBvdXQgZXZlcnkgcmVsYXRpb25zaGlwIEkgY2FuIGZpbmQuIEl0IG1pZ2h0IHRha2UgYSBiaXQgb2YgZGlnZ2luZywgYnV0IHRoZSBrZXJuZWwgdXN1YWxseSBtYWtlcyB0aGVzZSBkZXBlbmRlbmNpZXMgcmVhc29uYWJseSBjbGVhciwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBjb21tZW50cy4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IHRoaXMgd2lsbCBwcm9iYWJseSByZXZlYWwgdGhhdCBpdCBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc29tZSBrZXJuZWwgY29tcG9uZW50cy4gT25jZSBJIGdhdGhlciBhbGwgdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gZm9ybXVsYXRlIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGBCTEtfREVWX1VCTEtgIGFjdHVhbGx5IHJlcXVpcmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6NDguMTEzNzk1MDQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRoZWxwXFxuIDM0MjpcXHRcXHQgIHVibGsgZHJpdmVyIHN0YXJ0ZWQgdG8gdGFrZSBwbGFpbiBjb21tYW5kIGVuY29kaW5nLCB3aGljaCB0dXJucyBvdXRcXG4gMzQzOlxcdFxcdCAgb25lIGJhZCB3YXkuIFRoZSB0cmFkaXRpb25hbCBpb2N0bCBjb21tYW5kIG9wY29kZSBlbmNvZGVzIG1vcmVcXG4gMzQ0OlxcdFxcdCAgaW5mbyBhbmQgYmFzaWNhbGx5IGRlZmluZXMgZWFjaCBjb2RlIHVuaXF1ZWx5LCBzbyBvcGNvZGUgY29uZmxpY3RcXG4gMzQ1OlxcdFxcdCAgaXMgYXZvaWRlZCwgYW5kIGRyaXZlciBjYW4gaGFuZGxlIHdyb25nIGNvbW1hbmQgZWFzaWx5LCBtZWFudGltZSBpdFxcbiAzNDY6XFx0XFx0ICBtYXkgaGVscCBzZWN1cml0eSBzdWJzeXN0ZW0gdG8gYXVkaXQgaW9fdXJpbmcgY29tbWFuZC5cXG4gMzQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTo0OC4xMTM4OTIwNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0Mzc1OTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgQkxLX0RFVl9VQkxLYCBDb25maWd1cmF0aW9uOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGBCTEtfREVWX1VCTEtgLCB3aGljaCBpcyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHRoZSBsaW5lIGB1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtgIHdpdGhpbiB0aGUgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhZGp1c3RtZW50IOKAkyB3ZSdyZSBleHBsaWNpdGx5IHJlc2V0dGluZyBhIGZsYWcsIHdoaWNoIGRlZmluaXRlbHkgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhlIGtleSByZWFzb25pbmcgaXMgdGhlIGJ1ZyBpdCdzIGFkZHJlc3Npbmc6IHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSByZXNldCwgYW5kIHRoYXQgY291bGQgbGVhZCB0byBzZXJpb3VzbHkgaW5jb3JyZWN0IGJlaGF2aW9yIOKAkyBsaWtlIGluYXBwcm9wcmlhdGVseSBhYm9ydGluZyBJL09zLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIHRlcm1zIG9mIGRhdGEgaW50ZWdyaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGl0c2VsZiBpcyBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQncyBlaXRoZXIgaW5saW5lZCBvciBhIHByZXR0eSBsZWFuIGhlbHBlciBmdW5jdGlvbi4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIGl0IGFjdHVhbGx5IGlubGluZWQsIGFuZCBpZiBub3QsIGhvdyB3aWRlbHkgdXNlZCBpcyBpdD8gV2Uga25vdyBpdCdzIGNhbGxlZCBieSBgdWJsa19tYXJrX2lvX3JlYWR5YC4gVGhhdCBmdW5jdGlvbiBpcyB0aGVuIHVzZWQgd2l0aGluIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2AuIFNvLCBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gIGFyZSBnb2luZyB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBwb2ludHMgb2YgZm9jdXMgZm9yIGFuYWx5emluZyB0aGUgc2NvcGUgb2YgdGhpcyBmaXguIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucyBub3cgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6NTQuMTU3NjU0Mjg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDA4Mjc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2ZldGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzA2OD1zdGF0aWMgaW5saW5lIGludCB1YmxrX2NoZWNrX2NtZF9vcCh1MzIgY21kX29wKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwODAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwODE6LyogTXVzdCBydW4gYmVmb3JlIHVibGtfZmlsbF9pb19jbWQoKSAvIF9fdWJsa19mZXRjaCgpLiAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDgyLXN0YXRpYyBpbmxpbmUgaW50IHVibGtfdmFsaWRhdGVfaW9fYnVmKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzI0Nz1zdGF0aWMgaW50IHVibGtfY2hlY2tfZmV0Y2hfYnVmKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIF9fdTY0IGJ1Zl9hZGRyKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyNjItXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMyNjM6c3RhdGljIGludCBfX3VibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjY0LVxcdFxcdFxcdHN0cnVjdCB1YmxrX2lvICppbywgdTE2IHFfaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI4NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI4NjpzdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg3LVxcdFxcdCAgICAgIHN0cnVjdCB1YmxrX2lvICppbywgX191NjQgYnVmX2FkZHIsIHUxNiBxX2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyOTktXFx0aWYgKCFyZXQpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDA6XFx0XFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzMwMS1cXHRpZiAoIXJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNTk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQwOC1cXHRcXHRcXHRnb3RvIG91dDtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzQwOTpcXHRcXHRyZXQgPSB1YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBhZGRyLCBxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQxMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2OTQ9c3RhdGljIGludCB1YmxrX2JhdGNoX3ByZXBfaW8oc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzEzLVxcdHVibGtfaW9fbG9jayhpbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM3MTQ6XFx0cmV0ID0gX191YmxrX2ZldGNoKGRhdGEtXFx1MDAzZWNtZCwgZGF0YS1cXHUwMDNldWIsIGlvLCB1YnEtXFx1MDAzZXFfaWQpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzE1LVxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTo1NC4yMTc3MzkyMzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwNDk5NjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIGlvX3VyaW5nIENvbW1hbmQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBjb21tYW5kcyBzdWJtaXR0ZWQgdmlhIGlvX3VyaW5nIHdpdGhpbiB0aGUgVWJsayAoVW5pdmVyc2FsIEJsb2NrIExheWVyKSBmcmFtZXdvcmsuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBjZW50cmFsIGh1YiB3aGVyZSBldmVyeXRoaW5nIGtpY2tzIG9mZi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgcmVhbGx5IGJlZ2lucy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgYHVibGtfY2hfdXJpbmdfY21kYCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjAyLjYyMjczOTA5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMTQyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzQxPXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTgtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTk6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjAtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0OTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyMjpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMC1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDItXFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0MzpcXHRcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0NC1cXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDc6XFx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ4LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTUwLVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTUxOlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE1Mi1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MDIuNjc3OTU5NDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDM2ODk4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIGJyb2tlbiBkb3duIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZW06XG5cbioqRGlzc2VjdGluZyB0aGUgaW9fdXJpbmcgQ29tbWFuZCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB1YmxrX2NoX3VyaW5nX2NtZGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IG5hbWUgc2NyZWFtcyBcInRoaXMgaXMgdGhlIGNvcmUgaGFuZGxlciBmb3IgaW9fdXJpbmcgY29tbWFuZHNcIi4gSXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBkaXNwYXRjaGVyLCB0aGUgb3JjaGVzdHJhdG9yLiBFdmVyeXRoaW5nIGZsb3dzIHRocm91Z2ggaGVyZSBmcm9tIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIGl0IGxvb2tzIGxpa2UuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhIGxheWVyLiBJIHNlZSBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBUaGF0IG5hbWUgaXMgaW50ZXJlc3RpbmcuIFwiTG9jYWxcIiBpbXBsaWVzIHRoZXJlJ3Mgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoaXMgaGFuZGxlciwgcGVyaGFwcyBwZXItQ1BVIG9yIHBlci1kZXZpY2UgcmVzb3VyY2UsIG9yIG1heWJlIGl0J3MgdGhlIGNvcmUgd29ya2hvcnNlIHdpdGhpbiBgdWJsa19jaF91cmluZ19jbWRgLiBNeSBndWVzcyBpcyB0aGUgbG9jYWwgdmVyc2lvbiBpcyBnb2luZyB0byBoYW5kbGUgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgdGhlIGlvIGNvbW1hbmQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgXCJsb2NhbFwiIHJlZmVycyB0byBpbiB0aGlzIGNvbnRleHQuXG5cbkJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIGB1YmxrX2JhdGNoX3ByZXBfaW9gLiBUaGlzIHNvdW5kcyBsaWtlIGFuIG9wdGltaXphdGlvbiBvciBwcmUtcHJvY2Vzc2luZyBzdGFnZS4gUGVyaGFwcyBpdCdzIHByZXBwaW5nIGJhdGNoZXMgb2YgSS9PIG9wZXJhdGlvbnMgYmVmb3JlIHRoZXkgaGl0IHRoZSBjb3JlIGhhbmRsZXIuIEl0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzdWJzeXN0ZW0gaXMgb3B0aW1pemVkLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIG1lcmdpbmcgb3IgY29hbGVzY2luZyByZXF1ZXN0cywgb3IgcHJlLWNhbGN1bGF0aW5nIHNvbWUgb2YgdGhlIG1ldGFkYXRhIG5lZWRlZCBieSB0aGUgaGFuZGxlci4gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDowNi43ODE2NTIwMzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzIxMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfYmF0Y2hfcHJlcF9pb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2ODE9c3RhdGljIHZvaWQgdWJsa19iYXRjaF9yZXZlcnRfcHJlcF9jbWQoc3RydWN0IHVibGtfYmF0Y2hfaW9faXRlciAqaXRlcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNjkzLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNjk0OnN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM2OTUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNzI1PXN0YXRpYyBpbnQgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWQoY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzQyLVxcdG11dGV4X2xvY2soXFx1MDAyNmRhdGEtXFx1MDAzZXViLVxcdTAwM2VtdXRleCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM3NDM6XFx0cmV0ID0gdWJsa193YWxrX2NtZF9idWYoXFx1MDAyNml0ZXIsIGRhdGEsIHVibGtfYmF0Y2hfcHJlcF9pbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3NDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjA2LjgzNTk3ODI2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTg1ODQyNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIHVibGsgQmF0Y2ggUHJlcGFyYXRpb24gRmxvdyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHRoZSBjb2RlLCBJIHNlZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGluZyBgdWJsa193YWxrX2NtZF9idWZgLCB3aGljaCBpdHNlbGYgdXNlcyBgdWJsa19iYXRjaF9wcmVwX2lvYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZGAgaXMgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyBiYXRjaGVzIG9mIEkvTyBvcGVyYXRpb25zLCBsaWtlbHkgYnkgaXRlcmF0aW5nIHRocm91Z2ggYSBidWZmZXIgb2YgY29tbWFuZHMuIFRoZSBmYWN0IHRoYXQgYHVibGtfYmF0Y2hfcHJlcF9pb2AgaXMgYmVpbmcgdXNlZCBtZWFucyB0aGlzIHByZXBhcmF0aW9uIHBoYXNlIGhhbmRsZXMgdGhlIGNvcmUgcHJlLXByb2Nlc3NpbmcgbG9naWMgZm9yIHRoZSBiYXRjaCBvZiBjb21tYW5kcywgZm9yIGV4YW1wbGUsIGNvbW1hbmQgdmFsaWRpdHkgY2hlY2tzLCBhbmQgZGF0YSBzZXR1cC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqaG93Ki4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHJlc3BvbnNpYmlsaXRpZXMgaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgSS9PIGZsb3cuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjYWxsIHNpdGVzIG9mIGB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZGAuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBiYXRjaCBwcmVwYXJhdGlvbiwgYW5kIHdoYXQgYnJvYWRlciBjb250ZXh0IGl0J3Mgb3BlcmF0aW5nIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjEzLjAyMTgyMzQ5MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3OTYyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjk0PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcyNC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzcyNTpzdGF0aWMgaW50IHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kKGNvbnN0IHN0cnVjdCB1YmxrX2JhdGNoX2lvX2RhdGEgKmRhdGEpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM5ODQ9c3RhdGljIGludCB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDAxMy1cXHRcXHRcXHRnb3RvIG91dDtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDAxNDpcXHRcXHRyZXQgPSB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZChcXHUwMDI2ZGF0YSk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQwMTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjEzLjA3NTYyNzE1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgzMjQ0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB1YmxrIEkvTyBVcmluZyBCYXRjaCBDb21tYW5kIEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgaG93IHRoaXMgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBiYXRjaGVkIGNvbW1hbmRzIGNvbWluZyBmcm9tIGlvX3VyaW5nLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNhbGxpbmcgYHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1ha2VzIHNlbnNlIHRoYXQgcHJlcGFyaW5nIHRoZSBjb21tYW5kcyB3b3VsZCBiZSBzZXBhcmF0ZWQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCwgaXQncyBhIGdvb2QgaWRlYSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAgYWN0dWFsbHkgZG9lcy4gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyBmdW5jdGlvbiBpbnNpZGUgYW5kIG91dCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb2YgdGhlIGJhdGNoZWQgSS9PIG9wZXJhdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IGl0J3MgbWFuYWdpbmcgdGhlc2UgcmVxdWVzdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhhdCBwcmVwYXJhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBjaGFpbiBhbmQgdGhlIHJvbGVzIG9mIGVhY2ggcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDoxNy41NTg4NzM5ODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzAyMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzk1ND1zdGF0aWMgaW50IHVibGtfaGFuZGxlX25vbl9iYXRjaF9jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM5ODMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM5ODQ6c3RhdGljIGludCB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM5ODUtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfYmF0Y2hfaW9fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTYwLVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTYxOlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE2Mi1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MTcuNjA2MTc4NzAxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NzU2MDY2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCYXRjaCBJTyBDb21tYW5kIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIGNvcmUgaGFuZGxlciBmb3IgYmF0Y2ggSU8gb3BlcmF0aW9ucyB3aXRoaW4gaW9fdXJpbmcsIGdvdCBpdC4gVGhlIGtleSBwaWVjZXMgSSBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiBhcmUgYHVibGtfY2hfdXJpbmdfY21kYCBhbmQsIG9mIGNvdXJzZSwgdGhpcyBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIGl0c2VsZi4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCBzaG91bGQgaGFwcGVuLlxuXG5Ob3csIEknbSB0cmFjaW5nIHRoZSBmbG93LCBhbmQgSSBzZWUgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGJlaW5nIGNhbGxlZCBmcm9tIGB1YmxrX21hcmtfaW9fcmVhZHlgLiBBbmQgYHVibGtfbWFya19pb19yZWFkeWAsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gLiBUaGF0IG1ha2VzIHNlbnNlIGZvciB0aGUgbm9ybWFsIHBhdGgsIHByZXBwaW5nIGFuZCByZWFkeWluZyB0aGUgSU8gZm9yIHByb2Nlc3NpbmcuIEJ1dCB3YWl0Li4uIHRoaXMgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGlzIHRvbyBpbXBvcnRhbnQgdG8ganVzdCB0cnVzdCB0aGUgb2J2aW91cyBjYWxscy4gSXQgc2VlbXMgbGlrZSBJIGFsc28gcmVtZW1iZXIgaXQgYmVpbmcgY2FsbGVkIGZyb20gYHVibGtfY2FuY2VsX3F1ZXVlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgZm9yIGNsZWFuaW5nIHVwIGFuZCByZXNldHRpbmcgaW4gdGhlIGV2ZW50IG9mIGVycm9ycyBvciBjYW5jZWxsYXRpb24uIExldCdzIG5vdCBtYWtlIGFzc3VtcHRpb25zIGhlcmUuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNhbGwgc2l0ZXMgZm9yIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29udGV4dHMgaXQncyB1c2VkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTkyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjIzLjU4MTc4NzU2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MDIwOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDEyPXN0YXRpYyB2b2lkIHVibGtfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwMjE6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDMxPXN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlxcdFxcdHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3ModWJxKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjI0LjA4NjgxMzIyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI4NzI0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyB0aGF0IHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoIGlzICpvbmx5KiBlbnRlcmVkIHRocm91Z2ggYHVibGtfbWFya19pb19yZWFkeWAuIFRoYXQncyB0aGUga2V5LiBLbm93aW5nIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0IEkgbmVlZCB0byBsb29rIGF0IGltbWVkaWF0ZWx5LiBOb3csIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYHVibGtfbWFya19pb19yZWFkeWAgYW5kIGZpZ3VyZSBvdXQgKnByZWNpc2VseSogd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIFVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgY2FsbGVkLCBhbmQgaXRzIGVmZmVjdHMgb24gdGhlIHN5c3RlbSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDoyOC4xMTU1NDAxNTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDMxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDMxOlxcdHN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG4zMDMyOlxcdFxcdHN0cnVjdCB1YmxrX2lvICppbylcXG4zMDMzOlxcdFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZ1Yi1cXHUwMDNlbXV0ZXgpXFxuMzAzNDpcXHR7XFxuMzAzNTpcXHRcXHRzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxID0gdWJsa19nZXRfcXVldWUodWIsIHFfaWQpO1xcbjMwMzY6XFx0XFxuMzAzNzpcXHRcXHRpZiAoIXViLVxcdTAwM2V1bnByaXZpbGVnZWRfZGFlbW9ucyBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG4zMDM4OlxcdFxcdFxcdHViLVxcdTAwM2V1bnByaXZpbGVnZWRfZGFlbW9ucyA9IHRydWU7XFxuMzAzOTpcXHRcXG4zMDQwOlxcdFxcdHVicS1cXHUwMDNlbnJfaW9fcmVhZHkrKztcXG4zMDQxOlxcdFxcdHVibGtfcmVzZXRfaW9fZmxhZ3ModWJxLCBpbyk7XFxuMzA0MjpcXHRcXG4zMDQzOlxcdFxcdC8qIENoZWNrIGlmIHRoaXMgc3BlY2lmaWMgcXVldWUgaXMgbm93IGZ1bGx5IHJlYWR5ICovXFxuMzA0NDpcXHRcXHRpZiAodWJsa19xdWV1ZV9yZWFkeSh1YnEpKSB7XFxuMzA0NTpcXHRcXHRcXHR1Yi1cXHUwMDNlbnJfcXVldWVfcmVhZHkrKztcXG4zMDQ2OlxcdFxcbjMwNDc6XFx0XFx0XFx0LypcXG4zMDQ4OlxcdFxcdFxcdCAqIFJlc2V0IHF1ZXVlIGZsYWdzIGFzIHNvb24gYXMgdGhpcyBxdWV1ZSBpcyByZWFkeS5cXG4zMDQ5OlxcdFxcdFxcdCAqIFRoaXMgY2xlYXJzIHRoZSBjYW5jZWxpbmcgZmxhZywgYWxsb3dpbmcgYmF0Y2ggRkVUQ0ggY29tbWFuZHNcXG4zMDUwOlxcdFxcdFxcdCAqIHRvIHN1Y2NlZWQgZHVyaW5nIHJlY292ZXJ5IHdpdGhvdXQgd2FpdGluZyBmb3IgYWxsIHF1ZXVlcy5cXG4zMDUxOlxcdFxcdFxcdCAqL1xcbjMwNTI6XFx0XFx0XFx0dWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyh1YnEpO1xcbjMwNTM6XFx0XFx0fVxcbjMwNTQ6XFx0XFxuMzA1NTpcXHRcXHQvKiBDaGVjayBpZiBhbGwgcXVldWVzIGFyZSByZWFkeSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDoyOC4xMTU5NDIzMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNzc4NzcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVzZXR0aW5nIGB1YnEtXHUwMDNlZm9yY2VfYWJvcnRgIHRvIGBmYWxzZWAgd2l0aGluIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBzeW1ib2xzOiBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgLiBCdXQgd2FpdC4uLiB3YXNuJ3QgYHVibGtfbWFya19pb19yZWFkeWAgY2FsbGVkIGJ5IGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2A/IFJpZ2h0LCBnb3R0YSBpbmNsdWRlIHRob3NlIGluIHRoZSByZXZpZXcuIExldCdzIG1ha2Ugc3VyZSBJIGxvb2sgYXQgdGhlIGNhbGxzIHRvIGJvdGggYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBzcGVjaWZpY2FsbHkuIEFuZCwgd2FpdCEgV2hhdCBhYm91dCBgdWJsa19jdHJsX3VyaW5nX2NtZGA/IFRoYXQncyB0aGUgY29udHJvbCBjb21tYW5kIGhhbmRsZXIsIGFuZCB0aGUgcmVzZXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgdGhlcmUgdG9vLCBzbyBsZXQncyBtYWtlIHN1cmUgdG8gZXhhbWluZSB0aGF0IGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MzMuMjQzNzMzMDU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU1NDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTYxNT1zdGF0aWMgYm9vbCB1YmxrX3RyeV9idWZfbWF0Y2goc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjY4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjY5OnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzAtXFx0XFx0dTMyIGNtZF9vcCwgc3RydWN0IHVibGtzcnZfY3RybF9jbWQgKmhlYWRlcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ3LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzQ4OnN0YXRpYyBib29sIHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKHUzMiBjbWRfb3ApXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NDkte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NjE6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2Mi1cXHRcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3MS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc3MjpcXHRpZiAodWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAoY21kX29wKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzczLVxcdCAgICBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwMS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgwMjpcXHRcXHRyZXQgPSB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24odWIsIGNtZF9vcCwgXFx1MDAyNmhlYWRlcik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY3RsX2ZvcHMgPSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzMtXFx0Lm9wZW5cXHRcXHQ9IG5vbnNlZWthYmxlX29wZW4sXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4NzQ6XFx0LnVyaW5nX2NtZCAgICAgID0gdWJsa19jdHJsX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3NS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDozMy4yODkyOTA1NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxMDAwOTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHVibGsgQ29udHJvbCBDb21tYW5kIEhhbmRsZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGB1YmxrYCBzdWJzeXN0ZW0gaGFuZGxlcyBjb250cm9sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gdGhlIFVyaW5nIGludGVyZmFjZS4gSSBzZWUgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgdGhlIGNlbnRyYWwgY29tbWFuZCBoYW5kbGVyIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBwb2ludCBvZiBjb250YWN0IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIHR3ZWFraW5nIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYC4gSSBrbm93IHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaXMgXCJyZWFkeSxcIiBzcGVjaWZpY2FsbHkgd2hlbiBgdWJsa19xdWV1ZV9yZWFkeSh1YnEpYCByZXR1cm5zIHRydWUuIFRoYXQgaGFwcGVucyB3aGVuIHRoZSBudW1iZXIgb2YgSS9PcyByZWFkeSB0byBwcm9jZXNzIChgdWJxLVx1MDAzZW5yX2lvX3JlYWR5YCkgZXF1YWxzIHRoZSBxdWV1ZSBkZXB0aCAoYHVicS1cdTAwM2VxX2RlcHRoYCkuIFRoYXQncyBhIGtleSBzdGF0ZS5cblxuU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBhcmUgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19iYXRjaF9wcmVwX2lvYCwgYXMgdGhlc2UgYXJlIHRoZSB0cmlnZ2Vycy4gYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIEkgc2hvdWxkIGJlIHB1dHRpbmcgbW9zdCBvZiBteSBmb2N1cy4gQW5kIG9mIGNvdXJzZSwgYHVibGtfY3RybF91cmluZ19jbWRgIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2luY2UgaXQncyB0aGUgZGV2aWNlIHN0YXRlIGNvbnRyb2xsZXIsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBsaWtlIHN0b3BwaW5nLCBzdGFydGluZywgYW5kIHJlY292ZXJ5IGFyZSBtYW5hZ2VkLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gYGZvcmNlX2Fib3J0YCBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBiZWluZyBzZXQuIEl0J3MgcHJvYmFibHkga2V5IGZvciB1bmRlcnN0YW5kaW5nIGNlcnRhaW4ga2luZHMgb2YgZmFpbHVyZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjM5LjI5OTMwMjUzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0OTY2NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvcmNlX2Fib3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQyPXN0cnVjdCB1YmxrX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNDktXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1MDpcXHRib29sIGZvcmNlX2Fib3J0O1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTEtXFx0Ym9vbCBjYW5jZWxpbmc7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0MT1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNDYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxNDc6XFx0LyogV2l0aCByZWNvdmVyeSBmZWF0dXJlIGVuYWJsZWQsIGZvcmNlX2Fib3J0IGlzIHNldCBpblxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTQ4LVxcdCAqIHVibGtfc3RvcF9kZXYoKSBiZWZvcmUgY2FsbGluZyBkZWxfZ2VuZGlzaygpLiBXZSBoYXZlIHRvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE1Mi1cXHQgKlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTUzOlxcdCAqIE5vdGU6IGZvcmNlX2Fib3J0IGlzIGd1YXJhbnRlZWQgdG8gYmUgc2VlbiBiZWNhdXNlIGl0IGlzIHNldFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTU0LVxcdCAqIGJlZm9yZSByZXF1ZXN0IHF1ZXVlIGlzIHVucWl1ZXNjZWQuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE1Ni1cXHRpZiAodWJsa19ub3Nydl9zaG91bGRfcXVldWVfaW8odWJxKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTU3OlxcdCAgICB1bmxpa2VseShSRUFEX09OQ0UodWJxLVxcdTAwM2Vmb3JjZV9hYm9ydCkpKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTU4LVxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIxNzY9c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgX191YmxrX3F1ZXVlX3JxX2NvbW1vbihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODgtXFx0LypcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4OTpcXHQgKiAtXFx1MDAzZWNhbmNlbGluZyBoYXMgdG8gYmUgaGFuZGxlZCBhZnRlciAtXFx1MDAzZWZvcmNlX2Fib3J0IGFuZCAtXFx1MDAzZWZhaWxfaW9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE5MC1cXHQgKiBpcyBkZWFsdCB3aXRoLCBvdGhlcndpc2UgdGhpcyByZXF1ZXN0IG1heSBub3QgYmUgZmFpbGVkIGluIGNhc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNTE2PXN0YXRpYyB2b2lkIHVibGtfY2hfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTkxLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1Yi1cXHUwMDNlZGV2X2luZm8ubnJfaHdfcXVldWVzOyBpKyspXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1OTI6XFx0XFx0XFx0V1JJVEVfT05DRSh1YmxrX2dldF9xdWV1ZSh1YiwgaSktXFx1MDAzZWZvcmNlX2Fib3J0LCB0cnVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjU5My1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yODI0PXN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX3F1ZXVlKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjgyOS1cXHRzcGluX2xvY2soXFx1MDAyNnVicS1cXHUwMDNlZXZ0c19sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjgzMDpcXHR1YnEtXFx1MDAzZWZvcmNlX2Fib3J0ID0gdHJ1ZTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjgzMS1cXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZ1YnEtXFx1MDAzZWZjbWRfaGVhZCwgXFx1MDAyNmZjbWRfbGlzdCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjkzOT1zdGF0aWMgdm9pZCB1YmxrX3dhaXRfdGFnc2V0X3Jxc19pZGxlKHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk1My1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjk1NDpzdGF0aWMgdm9pZCB1YmxrX2ZvcmNlX2Fib3J0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTU1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTY2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1Yi1cXHUwMDNlZGV2X2luZm8ubnJfaHdfcXVldWVzOyBpKyspXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI5Njc6XFx0XFx0dWJsa19nZXRfcXVldWUodWIsIGkpLVxcdTAwM2Vmb3JjZV9hYm9ydCA9IHRydWU7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5NjgtXFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZSh1Yi1cXHUwMDNldWJfZGlzay1cXHUwMDNlcXVldWUpO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI5ODg9c3RhdGljIHZvaWQgdWJsa19zdG9wX2Rldl91bmxvY2tlZChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5OTYtXFx0aWYgKHVibGtfbm9zcnZfZGV2X3Nob3VsZF9xdWV1ZV9pbyh1YikpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI5OTc6XFx0XFx0dWJsa19mb3JjZV9hYm9ydF9kZXYodWIpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTk4LVxcdGRlbF9nZW5kaXNrKHViLVxcdTAwM2V1Yl9kaXNrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDIxPXN0YXRpYyB2b2lkIHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDI2LVxcdHVicS1cXHUwMDNlZmFpbF9pbyA9IGZhbHNlO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDI3OlxcdHVicS1cXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAyOC19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzg3OD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfYXR0YWNoKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzg4Ni1cXHRzcGluX2xvY2soXFx1MDAyNnVicS1cXHUwMDNlZXZ0c19sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzg4NzpcXHRpZiAodW5saWtlbHkodWJxLVxcdTAwM2Vmb3JjZV9hYm9ydCB8fCB1YnEtXFx1MDAzZWNhbmNlbGluZykpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzg4OC1cXHRcXHRmcmVlID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MzkuNjA0Mjc1MzM5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NzE5MDAyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVQkxLIEZvcmNlIEFib3J0IEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBjYW4gc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIGluIHRoZSBVQkxLIGRyaXZlci4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSdzIHVzaW5nIGBmb3JjZV9hYm9ydGAgaW4gdGhlIGZ1bmN0aW9ucyBgdWJsa19jaF9yZWxlYXNlX3dvcmtfZm5gLCBgdWJsa19iYXRjaF9jYW5jZWxfcXVldWVgLCBhbmQgYHVibGtfZm9yY2VfYWJvcnRfZGV2YC4gQW5kIHRoZW4gaXQncyB1c2VkIHdoZW4gcHJlcGFyaW5nIGFuZCBhdHRhY2hpbmcgcmVxdWVzdHM6IGB1YmxrX3ByZXBfcmVxYCBhbmQgYHVibGtfYmF0Y2hfYXR0YWNoYCByZXNwZWN0aXZlbHkuXG5cblRoZSBrZXkgY2hhbmdlIGhlcmUsIGFuZCB0aGUgYml0IHRoYXQgaGFzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBpcyB0aGUgcmVzZXQgb2YgYGZvcmNlX2Fib3J0YCB3aXRoaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBUaGlzIGlzIHVuZG91YnRlZGx5IGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBhIGdvb2Qgb25lIGF0IHRoYXQuIEl0J3MgYWRkcmVzc2luZyB0aGUgaXNzdWUgb2YgYGZvcmNlX2Fib3J0YCBub3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZCBkdXJpbmcgcmVjb3Zlcnkgc2NlbmFyaW9zLCB3aGljaCB3b3VsZCBjbGVhcmx5IGxlYWQgdG8gcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSBhbHdheXMgYXBwcmVjaWF0ZSBhIHRhcmdldGVkIGJ1ZyBmaXggbGlrZSB0aGlzLlxuXG5UaGUgZmFjdCB0aGF0IGB0ZXN0X3JlY292ZXJfMDMuc2hgIGlzIGJlaW5nIG1vZGlmaWVkIHRlbGxzIG1lIHRoZXkndmUgcHJvYWN0aXZlbHkgY3JlYXRlZCBhIHRlc3QgY2FzZSB0byB2YWxpZGF0ZSB0aGlzIGZpeC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UuIEnigJlsbCBtYWtlIHN1cmUgdG8gcmV2aWV3IHRoaXMgc2VsZi10ZXN0IHZlcnkgY2xvc2VseS5cblxuVGhlIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgYEJMS19ERVZfVUJMS2AgY29uZmlnLCB3aGljaCBpcyB0byBiZSBleHBlY3RlZCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBvdXIgYmFzZXMuIFRoZSBjb3JlIHN5bWJvbHMgaGVyZSBzZWVtIHRvIGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAsIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW7igJl0IGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIExvb2tzIGxpa2UgYEJMS19ERVZfVUJMS2AgcmVsaWVzIG9uIGBJT19VUklOR2AsIHdoaWNoIGlzIHN0YW5kYXJkLiBKdXN0IGEgcXVpY2sgY2hlY2sgYWdhaW4gb24gYEJMS19ERVZfVUJMS2AgdG8gY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6NDYuMTc2MTc3OTk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkxNjIyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfVUJMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6NDYuNjQ1MzQ0NzI2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDAwOTI3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEJMS19ERVZfVUJMS2AgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgQkxLX0RFVl9VQkxLYC4gQmVmb3JlIEkgc3RhcnQgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwOyBJIGNhbid0IGVmZmVjdGl2ZWx5IGV2YWx1YXRlIHRoaXMgY29tcG9uZW50J3Mgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgd2hhdCBpdCBsZWFucyBvbiBhbmQsIGNydWNpYWxseSwgd2hhdCBtaWdodCBiZSBsZWFuaW5nIG9uICppdCouIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2VsZi1jb250YWluZWQgbW9kdWxlLCBvciBzb21ldGhpbmcgdGhhdCdzIGludGVyd292ZW4gd2l0aCBjb3JlIGluZnJhc3RydWN0dXJlLCBkcml2ZXIgZnJhbWV3b3Jrcywgb3IgZXZlbiB1c2Vyc3BhY2UgdXRpbGl0aWVzPyBBIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2sgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50IHRvIGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgbXkgYW5hbHlzaXMuIFdlIG5lZWQgdG8gZmluZCB0aGUgY3JpdGljYWwgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDo1MC41ODU0Mzk5OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyOCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyODpcXHRjb25maWcgQkxLX0RFVl9VQkxLXFxuIDMyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG4gMzMwOlxcdFxcdHNlbGVjdCBJT19VUklOR1xcbiAzMzE6XFx0XFx0aGVscFxcbiAzMzI6XFx0XFx0ICBpb191cmluZyBiYXNlZCB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLiBUb2dldGhlciB3aXRoIHVibGsgc2VydmVyLCB1YmxrXFxuIDMzMzpcXHRcXHQgIGhhcyBiZWVuIHdvcmtpbmcgd2VsbCwgYnV0IGludGVyZmFjZSB3aXRoIHVzZXJzcGFjZSBvciBjb21tYW5kIGRhdGFcXG4gMzM0OlxcdFxcdCAgZGVmaW5pdGlvbiBpc24ndCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcXG4gMzM1OlxcdFxcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cXG4gMzM2OlxcdFxcbiAzMzc6XFx0Y29uZmlnIEJMS0RFVl9VQkxLX0xFR0FDWV9PUENPREVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjUwLjU4NTUwMjUwNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzMzNDAxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsa19jaCBEcml2ZXIncyBJT19VUklORyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVibGtfY2hgIGRyaXZlciBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCBgSU9fVVJJTkdgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0IGV4cGxpY2l0bHkgc2VsZWN0cyBgSU9fVVJJTkdgLCB3aGljaCBpcyBnb29kLiBUaGUgS2NvbmZpZyBlbnRyeSBpc24ndCBkZXBlbmRlbnQgb24gYW55dGhpbmcgb3RoZXIgdGhhbiBgQkxPQ0tgLCB3aGljaCBpcyBwcmV0dHkgbXVjaCBhbHdheXMgZW5hYmxlZC4gU28sIHRoZSBvbmx5IGNvbmZpZyBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgc2VsZWN0ZWQgaXMgYEJMS19ERVZfVUJMS2AuIEVhc3kgZW5vdWdoLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGRvaW5nIHRoaW5ncyB0aGUgXCJyaWdodFwiIHdheSBmb3Iga2VybmVsIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIG5vbi1zdGF0aWMgc28gaXQgY2FuIGJlIHByZWZlcnJlZCBvdmVyIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQWZ0ZXIgYSBjaGVjaywgSSBmaW5kIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBsaXR0bGUgY29uY2VybmluZy4gQnV0IHdhaXQsIGl0ICppcyogYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3Q6XG5cbmBgYGNcbnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcblx0LndyaXRlX2l0ZXIgPSB1YmxrX2NoX3dyaXRlX2l0ZXIsXG5cdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcblx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXG5gYGBcblxuU28sIGl0J3Mgbm90IGJlaW5nIGlubGluZWQgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgb2theS4gU3RpbGwsIGJlc3QgcHJhY3RpY2UgaXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgZXhpc3QuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIGB1YmxrX2Rydi5jYCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHJlcGxhY2UgYHVibGtfY2hfdXJpbmdfY21kYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDo1OC45MTg5MDY3MTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDI0NTI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHVibGtfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6NTguOTYzOTM2OTU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzQzNzg4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSB1YmxrXyBWYXJpYWJsZSBEZWNsYXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgYHVibGtfYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYF5zdGF0aWMgaW50IHVibGtfYCBhbmQganVzdCBgXmludCB1YmxrX2AuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBgc3RhdGljYCBrZXl3b3JkIGlzIHRoZSBrZXkgZGlmZmVyZW50aWF0b3IgaGVyZSwgaW1wbHlpbmcgc2NvcGUgYW5kIGxpbmthZ2UuIEkga25vdyBob3cgdGhlIGNvbXBpbGVyIHRyZWF0cyBlYWNoIG9mIHRob3NlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IHN1cnByaXNpbmcgdXNhZ2Ugb2YgYHVibGtfYCB0aGF0IHdvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSwgb3IgYWJzZW5jZSwgb2YgYHN0YXRpY2AuIFdl4oCZcmUgdGFsa2luZyBhYm91dCBrZXJuZWwgY29kZSBoZXJlLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSByYW1pZmljYXRpb25zIG9mIHRoYXQgZGVjbGFyYXRpb24gaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHNjb3Bpbmcgb3IgbGlua2FnZSBlcnJvcnMgdGhhdCB3b3VsZCBzdXJmYWNlIGxhdGVyIGFzIGEgYnVnLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYSB2ZXJ5IHNwZWNpZmljIHR5cGUgb2YgcG90ZW50aWFsIGlzc3VlLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoYXQgZGVjbGFyYXRpb24uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MDMuNzk4MzE3Nzk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3MDY2NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMTowMy44NDQ4OTQzNzFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODc0MjE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFVibGsgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgdWJsa19kcnYuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHN0cnVjdHVyZS4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBxdWlja2x5IHNjYW4gZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucy4gSSB3YW50IHRvIGlkZW50aWZ5IHdoYXQgcGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSwgYW5kIGFsc28gd2hpY2ggcGFydHMgYXJlIGxpa2VseSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBLbm93aW5nIHRoZSBleHBvc2VkIGludGVyZmFjZSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzdG9yYWdlIHN5c3RlbS4gVGhpcyBpbml0aWFsIHBhc3Mgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMTowNy41NDM2Mzg3NjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDIzMTE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MDcuNTg4NjY1Njc5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjQ1NzU1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNb2R1bGUncyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW4gdGVybXMgb2YgaXRzIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBzZWxmLWNvbnRhaW5lZCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzdGFydC4gSSBjYW4gaW1tZWRpYXRlbHkgc2VlIHRoYXQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzLCB3aGVyZSBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLCBhcmUgdGhlIGZ1bmN0aW9ucyBhc3NpZ25lZCB0byB0aGUgYGZpbGVfb3BlcmF0aW9uc2AgYW5kIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2Agc3RydWN0dXJlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGEgZmV3OiBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgLCBhbmQgYHVibGtfY3RybF91cmluZ19jbWRgLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnRzIEknbSBtaXNzaW5nPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIGB1YmxrX3F1ZXVlX3JxYC4gSXQncyB3b3J0aCBhIGxvb2sgdG8gY29uZmlybSBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMToxMi42MTMyNDMyNDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTcyODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNDI9c3RydWN0IHVibGtfcXVldWUge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2MS1cXHQgKlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNjI6XFx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNjMtXFx0ICogc28gbG9jayBpcyByZXF1aXJlZCBmb3Igc3RvcmluZyByZXF1ZXN0IHRhZyB0byBmaWZvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0MT1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNzUtICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxNzY6c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgX191YmxrX3F1ZXVlX3JxX2NvbW1vbihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjAyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjAzOnN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIwNC1cXHRcXHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMTE6XFx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcXHUwMDI2c2hvdWxkX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMi1cXHRpZiAoIXNob3VsZF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjE5PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19iYXRjaF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjI2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjI3OlxcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXFx1MDAyNnNob3VsZF9xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjgtXFx0aWYgKCFzaG91bGRfcXVldWUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjI0Mz1zdGF0aWMgdm9pZCB1YmxrX2NvbW1pdF9ycXMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjI1NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjI1NjpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3JxcyhzdHJ1Y3QgcnFfbGlzdCAqcnFsaXN0KVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjU3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB1YmxrX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM0NjpcXHQucXVldWVfcnEgICAgICAgPSB1YmxrX3F1ZXVlX3JxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzQ3OlxcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMzQ4LVxcdC5pbml0X2hjdHhcXHQ9IHVibGtfaW5pdF9oY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI3Mjc9c3RhdGljIHZvaWQgdWJsa19zdGFydF9jYW5jZWwoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzM2LVxcdFxcdC8qXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3Mzc6XFx0XFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3MzgtXFx0XFx0ICogdWJxLVxcdTAwM2VjYW5jZWxpbmcgaXMgdmlzaWJsZSB3aGVuIHRoZSBxdWV1ZSByZXN1bWVzLlxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDUtXFx0XFx0ICogRGlzayBub3QgeWV0IGFsbG9jYXRlZCBieSB1YmxrX2N0cmxfc3RhcnRfZGV2KCksIHNvXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NDY6XFx0XFx0ICogdGhlcmUgaXMgbm8gcmVxdWVzdCBxdWV1ZSBhbmQgdWJsa19xdWV1ZV9ycSgpIGNhbm5vdFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzQ3LVxcdFxcdCAqIGJlIHJ1bm5pbmcuICBKdXN0IHNldCB0aGUgZmxhZzsgaWYgc3RhcnRfZGV2IHByb2NlZWRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAxOjEyLjY1ODIxODk1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjExMTI5OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsb2NrIExheWVyIEJ1ZyBSZWxhdGVkIHRvIFVCTEsgUmVjb3ZlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVQkxLIGRyaXZlciBpc3N1ZS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgcmVjb3ZlcnksIGFuZCBzaW5jZSBgdWJsa19xdWV1ZV9ycWAgaXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZW50cnkgcG9pbnQsIGl0IG1ha2VzIHNlbnNlIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgaXNzdWUgb3JpZ2luYXRlcy4gIFRoZSByZWNvdmVyeSBwcm9jZXNzIGl0c2VsZiBpcyBoYW5kbGVkIGJ5IGB1YmxrX2N0cmxfdXJpbmdfY21kYCAoZm9yIGRldmljZSBtYW5hZ2VtZW50KSBhbmQgYHVibGtfY2hfdXJpbmdfY21kYCAoZm9yIGZldGNoaW5nIEkvT3MpLiBUaGF0IHN1Z2dlc3RzIHRoYXQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBtaWdodCBhbHNvIGJlIHJlbGV2YW50IHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggYmF0Y2hlZCBjb21tYW5kcywgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGB1YmxrX3F1ZXVlX3JxYCBpdHNlbGYuXG5cbkknbSB0aGlua2luZyBhYm91dCBmb2N1c2luZyBvbiBgdWJsa19jaF91cmluZ19jbWRgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIFllcywgdGhhdCBsb29rcyBsaWtlIHRoZSByaWdodCBhcHByb2FjaC4gSXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHJlbGV2YW50IHRvIHRoaXMgaXNzdWUuIEFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaGFuZGxlcyBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgY29udHJvbCBkZXZpY2UuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgcGF0Y2guIEFoLCBJIHNlZSwgaXQncyBhIHJlbGF0aXZlbHkgc2ltcGxlIGNoYW5nZS4gSXQncyBhZGRpbmcgYSByZXNldCBvZiB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIHdpdGhpbiB0aGUgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGZ1bmN0aW9uLiBUaGUgZGVzY3JpcHRpb24gbWFrZXMgaXQgY2xlYXI6IHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgd2Fzbid0IGJlaW5nIGNsZWFyZWQgZHVyaW5nIHJlY292ZXJ5LCBwb3RlbnRpYWxseSBjYXVzaW5nIEkvT3MgdG8gYmUgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHRvdWNoaW5nIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIuXG5cbkZyb20gdGhlIGNvbmZpZyBpbmZvcm1hdGlvbiwgSSBzZWUgdGhhdCB0aGlzIGlzIGVuYWJsZWQgYnkgYEJMS19ERVZfVUJMS2AsIHdoaWNoIGFsc28gc2VsZWN0cyBgSU9fVVJJTkdgLiBBbmQgeWVzLCBgQkxLX0RFVl9VQkxLYCBzZWVtcyB0byBiZSB0aGUgb25seSByZWxldmFudCBjb25maWcgaGVyZSwgbG9jYXRlZCBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYC5cblxuT2theSwgSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhpcyBpc3N1ZS4gSSdtIHJlYWR5IHRvIHNldCByZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTYsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAxOjIxLjg2OTM1MTQ0NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjE4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRcIixcbiAgICBcInVibGtfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jdHJsX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3JxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHVibGsgZHJpdmVyIHdoZXJlIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgb2YgYSBxdWV1ZSBpcyBub3QgcmVzZXQgZHVyaW5nIHJlY292ZXJ5LiBUaGlzIGNvdWxkIGxlYWQgdG8gSU9zIGJlaW5nIGluY29ycmVjdGx5IGFib3J0ZWQgYWZ0ZXIgcmVjb3ZlcnkuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgdWJsayBkcml2ZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMToyMS45NDc5NzYxODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTM0ODIzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMToyMS45NDgzODA3NzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzQ5MzA3MzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBhIGJvb2xlYW4gZmxhZyAoYGZvcmNlX2Fib3J0YCkgaW4gdGhlIGB1YmxrX3F1ZXVlYCBzdHJ1Y3R1cmUgdG8gYGZhbHNlYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlIGlzIHB1cmVseSBsb2dpY2FsIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgcG90ZW50aWFsbHkgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpZiB0aGUgZmxhZyBjb250cm9scyBsaWZlY3ljbGUsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q4ZTIxYzA4NjM4OWYwYWZiN2RlOGE0NWY2MDgzMTQzODNkOGY1Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEyOjU5OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi4xYTk1NjQyYjlkYjk0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC0zMDI0LDYgKzMwMjQsNyBAQCBzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4gXHR1YnEtXHUwMDNlY2FuY2VsaW5nID0gZmFsc2U7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlY2FuY2VsX2xvY2spO1xuIFx0dWJxLVx1MDAzZWZhaWxfaW8gPSBmYWxzZTtcbitcdHVicS1cdTAwM2Vmb3JjZV9hYm9ydCA9IGZhbHNlO1xuIH1cbiBcbiAvKiBkZXZpY2UgY2FuIG9ubHkgYmUgc3RhcnRlZCBhZnRlciBhbGwgSU9zIGFyZSByZWFkeSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcbmluZGV4IDI1NTQ4MDVlNWIwMmMuLjkyZjQwMTIxNzhmMDggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcbkBAIC0yOSw2ICsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TVxuIF9jcmVhdGVfYmFja2ZpbGUgMSAxMjhNXG4gX2NyZWF0ZV9iYWNrZmlsZSAyIDEyOE1cbiBcbit1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgLWIgXHUwMDI2XG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxIC1iIFwiJHtVQkxLX0JBQ0tGSUxFU1swXX1cIiBcdTAwMjZcbit1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgc3RyaXBlIC1xIDIgLXIgMSAtYiBcIiR7VUJMS19CQUNLRklMRVNbMV19XCIgXCIke1VCTEtfQkFDS0ZJTEVTWzJdfVwiIFx1MDAyNlxuK3dhaXRcbitcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgXHUwMDI2XG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxIFwiJHtVQkxLX0JBQ0tGSUxFU1swXX1cIiBcdTAwMjZcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgc3RyaXBlIC1xIDIgLXIgMSBcIiR7VUJMS19CQUNLRklMRVNbMV19XCIgXCIke1VCTEtfQkFDS0ZJTEVTWzJdfVwiIFx1MDAyNlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MjEuOTQ4MzgxNDY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0OTMwNDQyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdXBlciBzdHJhaWdodGZvcndhcmQuIEkgc2VlIGl0J3MganVzdCBmbGlwcGluZyB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIGluIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCB0byBgZmFsc2VgLiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vdGhpbmcgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHJlc2V0dGluZyBhIGJvb2xlYW4sIHNvIGl0J3MgYSBsb2dpYyBjaGFuZ2UsIGFuZCBJJ20gbm90IHdvcnJpZWQgYWJvdXQgaW50cm9kdWNpbmcgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSBidWcgaXQncyBmaXhpbmcgaXMganVzdCB0aGF0IGBmb3JjZV9hYm9ydGAgd2Fzbid0IGJlaW5nIHJlc2V0IHByb3Blcmx5LCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBJL08gZmFpbHVyZXMgb3Igb3RoZXIgaW5jb3JyZWN0IGJlaGF2aW9y4oCUZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gZml4LiBCdXQsIGEgYGJvb2wgPSBmYWxzZTtgIGFzc2lnbm1lbnQ/IFllYWgsIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIEtBU0FOLCBvciBldmVuIGp1c3QgZ29vZCB0ZXN0aW5nLCB3b3VsZCBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaWYgYGZvcmNlX2Fib3J0YCBhY3R1YWxseSBjb250cm9scyBsaWZlY3ljbGUsIGFuZCBldmVuIHRoYXQgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IuIFNvLCBOZWVkc0tNU0FOID0gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjQsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MjkuNDQxNDI5NjgxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGEgYm9vbGVhbiBmbGFnIChgZm9yY2VfYWJvcnRgKSBpbiB0aGUgYHVibGtfcXVldWVgIHN0cnVjdHVyZSB0byBgZmFsc2VgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBjaGFuZ2UgaXMgcHVyZWx5IGxvZ2ljYWwgc3RhdGUgbWFuYWdlbWVudC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBwb3RlbnRpYWxseSB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlmIHRoZSBmbGFnIGNvbnRyb2xzIGxpZmVjeWNsZSwgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGEgYm9vbGVhbiBmbGFnIChgZm9yY2VfYWJvcnRgKSBpbiB0aGUgYHVibGtfcXVldWVgIHN0cnVjdHVyZSB0byBgZmFsc2VgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBjaGFuZ2UgaXMgcHVyZWx5IGxvZ2ljYWwgc3RhdGUgbWFuYWdlbWVudC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBwb3RlbnRpYWxseSB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlmIHRoZSBmbGFnIGNvbnRyb2xzIGxpZmVjeWNsZSwgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 12:08:19 +0000 UTC FinishedAt: 2026-08-21 13:01:31 +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": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "20f44e4d-69ac-469d-a072-3414b3d4d01a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ctrl_uring_cmd", "ublk_ch_uring_cmd", "ublk_ch_batch_io_uring_cmd", "ublk_queue_rq" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF9iYXRjaF9pb191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZDhlMjFjMDg2Mzg5ZjBhZmI3ZGU4YTQ1ZjYwODMxNDM4M2Q4ZjVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTI6NTk6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi4xYTk1NjQyYjlkYjk0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC0zMDI0LDYgJiM0MzszMDI0LDcgQEAgc3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxuIFx0dWJxLVx1MDAzZWNhbmNlbGluZyA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWNhbmNlbF9sb2NrKTtcbiBcdHVicS1cdTAwM2VmYWlsX2lvID0gZmFsc2U7XG4mIzQzO1x0dWJxLVx1MDAzZWZvcmNlX2Fib3J0ID0gZmFsc2U7XG4gfVxuIFxuIC8qIGRldmljZSBjYW4gb25seSBiZSBzdGFydGVkIGFmdGVyIGFsbCBJT3MgYXJlIHJlYWR5ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxuaW5kZXggMjU1NDgwNWU1YjAyYy4uOTJmNDAxMjE3OGYwOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxuQEAgLTI5LDYgJiM0MzsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TVxuIF9jcmVhdGVfYmFja2ZpbGUgMSAxMjhNXG4gX2NyZWF0ZV9iYWNrZmlsZSAyIDEyOE1cbiBcbiYjNDM7dWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIC1iIFx1MDAyNlxuJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgLWIgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX1cJiMzNDsgXHUwMDI2XG4mIzQzO3VibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBzdHJpcGUgLXEgMiAtciAxIC1iIFwmIzM0OyR7VUJMS19CQUNLRklMRVNbMV19XCYjMzQ7IFwmIzM0OyR7VUJMS19CQUNLRklMRVNbMl19XCYjMzQ7IFx1MDAyNlxuJiM0Mzt3YWl0XG4mIzQzO1xuIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBudWxsIC1xIDIgLXIgMSBcdTAwMjZcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX1cJiMzNDsgXHUwMDI2XG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1sxXX1cJiMzNDsgXCYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX1cJiMzNDsgXHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF9iYXRjaF9pb191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDhlMjFjMDg2Mzg5ZjBhZmI3ZGU4YTQ1ZjYwODMxNDM4M2Q4ZjVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTI6NTk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGQxN2VkMjY0ZGExYS4uMWE5NTY0MmI5ZGI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtMzAyNCw2ICYjNDM7MzAyNCw3IEBAIHN0YXRpYyB2b2lkIHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSkKIAl1YnEtJmd0O2NhbmNlbGluZyA9IGZhbHNlOwogCXNwaW5fdW5sb2NrKCZhbXA7dWJxLSZndDtjYW5jZWxfbG9jayk7CiAJdWJxLSZndDtmYWlsX2lvID0gZmFsc2U7CiYjNDM7CXVicS0mZ3Q7Zm9yY2VfYWJvcnQgPSBmYWxzZTsKIH0KIAogLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKaW5kZXggMjU1NDgwNWU1YjAyYy4uOTJmNDAxMjE3OGYwOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKQEAgLTI5LDYgJiM0MzsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TQogX2NyZWF0ZV9iYWNrZmlsZSAxIDEyOE0KIF9jcmVhdGVfYmFja2ZpbGUgMiAxMjhNCiAKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgLWIgJmFtcDsKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzBdfSYjMzQ7ICZhbXA7CiYjNDM7dWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwomIzQzO3dhaXQKJiM0MzsKIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBudWxsIC1xIDIgLXIgMSAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX0mIzM0OyAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdWJsa19kcnYuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgYWRkcyBhIGxpbmUgaW4gYHVibGtfZHJ2LmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGFkZGl0aW9uIG9mIGB1YnEtJmd0O2ZvcmNlX2Fib3J0ID0gZmFsc2U7YCBpcyBpbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgcmVzZXR0aW5nIGEgZmxhZyB0aGF0IGNvbnRyb2xzIGZvcmNpbmcgYW4gYWJvcnQgb24gYSBVQkxLIHF1ZXVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgZm9yY2VfYWJvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgbGlrZWx5IHVzZWQgdG8gcHJldmVudCBmdXR1cmUgSU8gdG8gdGhpcyBxdWV1ZSBhZnRlciBzb21lIHR5cGUgb2YgZXJyb3IsIG9yIG1heWJlIGR1cmluZyBhIHJlc2V0IHByb2NlZHVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdGhhdCB1c2VzIGB1YnEtJmd0O2ZvcmNlX2Fib3J0YCB0byBrbm93IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUuIFRoaXMgY2hhbmdlIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgb3IgcGVyaGFwcyBhIG1vcmUgZ3JhY2VmdWwgcmVjb3ZlcnkgbWVjaGFuaXNtIHdpdGhpbiB0aGUgVUJMSyBibG9jayBkcml2ZXIuIE5vdywgdGhlIHByZXNlbmNlIG9mIGEgc2VsZnRlc3Qgc2NyaXB0IGlzIGVuY291cmFnaW5nLiBJdCBob3BlZnVsbHkgY292ZXJzIHNjZW5hcmlvcyB0aGF0IGV4ZXJjaXNlIHRoaXMgbmV3IGZsYWcsIHdoaWNoIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3LiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHVibGsgcXVldWUgaGFuZGxlcyBkaWZmZXJlbnQga2luZHMgb2YgYWJvcnQgY29uZGl0aW9ucywgYW5kIGVuc3VyaW5nIGl0IGNhbiByZWNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMTI9c3RhdGljIHZvaWQgdWJsa19yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8pXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzAyMTpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAyMi17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMzE9c3RhdGljIHZvaWQgdWJsa19tYXJrX2lvX3JlYWR5KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIHUxNiBxX2lkLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlx0XHR1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHVicSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSB1YmxrIElPIEZsYWcgUmVzZXQqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIGRvd24gdGhpcyBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24gY2FsbC4gVGhlIGNvZGUgZmxvdyBzYXlzIGl0IG9yaWdpbmF0ZXMgZnJvbSBgdWJsa19tYXJrX2lvX3JlYWR5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIG9mIHRoaXMgZnVuY3Rpb24uJiMzNDsgU28sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGVyZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBpcyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBpbiB3aGljaCB0aG9zZSBmbGFncyBhcmUgZ2V0dGluZyByZXNldC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gaXQmIzM5O3MgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIHN0YXRlIHRyYW5zaXRpb24gZm9yIEkvTyByZXF1ZXN0cyB3aXRoaW4gdGhlIHVibGsgc3Vic3lzdGVtLCBhbmQgSSBuZWVkIHRoZSBjYWxsaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgdHJhbnNpdGlvbiBpcy4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHByb2JhYmx5IHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZGl0aW9ucyB0aGF0IG5lY2Vzc2l0YXRlIHRoZSByZXNldCwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW50ZW50aW9uIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfbWFya19pb19yZWFkeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzAyMT1zdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMzAtLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDMxOnN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDMyLVx0c3RydWN0IHVibGtfaW8gKmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMjg2PXN0YXRpYyBpbnQgdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzMDItXHRcdHVibGtfYXBwbHlfaW9fYnVmKHViLCBpbywgY21kLCBidWZfYWRkciwgXHUwMDI2YXV0b19idWYsIE5VTEwpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDM6XHRcdHVibGtfbWFya19pb19yZWFkeSh1YiwgcV9pZCwgaW8pO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzMDQtXHR9XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2OTQ9c3RhdGljIGludCB1YmxrX2JhdGNoX3ByZXBfaW8oc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcxOS1cdGlmICghcmV0KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM3MjA6XHRcdHVibGtfbWFya19pb19yZWFkeShkYXRhLVx1MDAzZXViLCB1YnEtXHUwMDNlcV9pZCwgaW8pO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgQ2FsbGVycyoqCgpBbHJpZ2h0LCBzbyBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gIGFyZSB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaW50byB0aGUgY29yZSBvZiB0aGlzLiBDbGVhcmx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLCBgdWJsa2AuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIHRvIHRoZSBLY29uZmlnIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdWJsa2AgaXMgY29uZmlndXJlZC4gV2hhdCBvcHRpb25zIGFyZSBlbmFibGVkPyBXaGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheT8gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IGZpcnN0IGxvb2sgaW50byBob3cgdGhpcyB0aGluZyBpcyBwdXQgdG9nZXRoZXIgYW5kIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBxdWVzdGlvbjoKCioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX1VCTEtgKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19ERVZfVUJMS2AuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICpyZXF1aXJlZCogZm9yIHRoaXMgdG8gZnVuY3Rpb24uICBJdCYjMzk7cyB1bmxpa2VseSB0aGF0IGBCTEtfREVWX1VCTEtgIGlzIGEgY29tcGxldGVseSBpbmRlcGVuZGVudCBtb2R1bGUuICBNeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvOgoKMS4gICoqQ29uc3VsdCBEb2N1bWVudGF0aW9uICZhbXA7IFNvdXJjZToqKiBGaXJzdCwgSSYjMzk7ZCBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMsIGxpa2VseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIG9yIHRoZSBkZXZpY2UgZHJpdmVyIHNlY3Rpb25zLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMsIHJlbGF0ZWQgc3RydWN0dXJlcywgb3IgYW55IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBkZWNsYXJlZCBpbiB0aGUgY29kZSBpdHNlbGYuIFRoZSBpbmNsdWRlIGZpbGVzIHNob3VsZCBvZmZlciBhIHRyZWFzdXJlIHRyb3ZlIG9mIGluZm9ybWF0aW9uLgoKMi4gICoqRXhwbG9yZSBDb25maWd1cmF0aW9uIE9wdGlvbnM6KiogTmV4dCwgSSYjMzk7ZCBpbnZlc3RpZ2F0ZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gKGBLY29uZmlnYCBmaWxlcykuIEkmIzM5O2Qgc2VhcmNoIGZvciBgQkxLX0RFVl9VQkxLYCBhbmQgZXhhbWluZSBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRob3NlIG9wdGlvbnMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IHByb3ZpZGUgY3J1Y2lhbCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIOKAkyB3aGV0aGVyIGl0IHJlcXVpcmVzIG90aGVyIGJsb2NrIGRldmljZSBzdXBwb3J0IChgQkxLX0RFVl9YWFhgKSBvciBnZW5lcmFsIGRldmljZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O2QgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4KCjMuICAqKlRyYWNlIENvZGUgUGF0aHM6KiogSWYgdGhlIGRvY3VtZW50YXRpb24gaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGNsZWFyLCBvciBpZiBJIHdhbnQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZywgSSB3b3VsZCBmb2xsb3cgY29kZSBwYXRocy4gSSYjMzk7ZCBzdGFydCB3aXRoIHRoZSBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBgQkxLX0RFVl9VQkxLYCBhbmQgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB3aGljaCB2YXJpYWJsZXMgYXJlIHVzZWQuICBUaGlzIHdvdWxkIGV4cG9zZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEkmIzM5O2QgdXNlIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB0byBndWlkZSBtZS4gRm9yIGluc3RhbmNlLCBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBsYXllciYjMzk7cyByZXF1ZXN0IHF1ZXVlLCBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgSS9PIHNjaGVkdWxlci4KCjQuICAqKkNvbnNpZGVyIFJlbGF0ZWQgRmVhdHVyZXM6KiogRXZlbiBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpbiB0aGUgY29kZSBmb3IgYEJMS19ERVZfVUJMS2AsIEkmIzM5O2QgdGhpbmsgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGNvbnNpZGVyIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGFjY29tcGxpc2guIEZvciBleGFtcGxlLCBpZiBpdCYjMzk7cyBhICYjMzQ7dXNlci1zcGFjZSBibG9jayBkZXZpY2UsJiMzNDsgSSYjMzk7ZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBpdCBwcm9iYWJseSBoaW5nZXMgb24gY2VydGFpbiB1c2VyLXNwYWNlIGludGVyZmFjZXMgKGxpa2UgY2hhcmFjdGVyIGRldmljZSBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlKSBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtkIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIGFueSBzcGVjaWZpYyBzdG9yYWdlIHRlY2hub2xvZ2llcyBvciBzdWJzeXN0ZW1zLgoKNS4gICoqTG9vayBmb3IgTW9kdWxlIExvYWQgT3JkZXJzL1JlbGF0aW9uc2hpcHM6KiogSSYjMzk7ZCBjb25zaWRlciBob3cgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIGZyb20gdGhhdCwgdGhhdCBtb2R1bGVzIGhhdmUgc3BlY2lmaWMgcmVsYXRpb25zaGlwcy4KCkJhc2ljYWxseSwgSSBhbSBtYXBwaW5nIG91dCBldmVyeSByZWxhdGlvbnNoaXAgSSBjYW4gZmluZC4gSXQgbWlnaHQgdGFrZSBhIGJpdCBvZiBkaWdnaW5nLCBidXQgdGhlIGtlcm5lbCB1c3VhbGx5IG1ha2VzIHRoZXNlIGRlcGVuZGVuY2llcyByZWFzb25hYmx5IGNsZWFyLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGNvbW1lbnRzLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhpcyB3aWxsIHByb2JhYmx5IHJldmVhbCB0aGF0IGl0IGRlcGVuZHMgb24gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzb21lIGtlcm5lbCBjb21wb25lbnRzLiBPbmNlIEkgZ2F0aGVyIGFsbCB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBmb3JtdWxhdGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYEJMS19ERVZfVUJMS2AgYWN0dWFsbHkgcmVxdWlyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYEJMS19ERVZfVUJMS2AgQ29uZmlndXJhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGBCTEtfREVWX1VCTEtgLCB3aGljaCBpcyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSB0aGUgbGluZSBgdWJxLSZndDtmb3JjZV9hYm9ydCA9IGZhbHNlO2Agd2l0aGluIHRoZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFkanVzdG1lbnQg4oCTIHdlJiMzOTtyZSBleHBsaWNpdGx5IHJlc2V0dGluZyBhIGZsYWcsIHdoaWNoIGRlZmluaXRlbHkgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhlIGtleSByZWFzb25pbmcgaXMgdGhlIGJ1ZyBpdCYjMzk7cyBhZGRyZXNzaW5nOiB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IHJlc2V0LCBhbmQgdGhhdCBjb3VsZCBsZWFkIHRvIHNlcmlvdXNseSBpbmNvcnJlY3QgYmVoYXZpb3Ig4oCTIGxpa2UgaW5hcHByb3ByaWF0ZWx5IGFib3J0aW5nIEkvT3MsIHdoaWNoIGlzIGEgYmlnIGRlYWwgaW4gdGVybXMgb2YgZGF0YSBpbnRlZ3JpdHkgYW5kIHBlcmZvcm1hbmNlLgoKYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGl0c2VsZiBpcyBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQmIzM5O3MgZWl0aGVyIGlubGluZWQgb3IgYSBwcmV0dHkgbGVhbiBoZWxwZXIgZnVuY3Rpb24uIFNvLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyBpdCBhY3R1YWxseSBpbmxpbmVkLCBhbmQgaWYgbm90LCBob3cgd2lkZWx5IHVzZWQgaXMgaXQ/IFdlIGtub3cgaXQmIzM5O3MgY2FsbGVkIGJ5IGB1YmxrX21hcmtfaW9fcmVhZHlgLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZW4gdXNlZCB3aXRoaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19iYXRjaF9wcmVwX2lvYC4gU28sIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2AgYXJlIGdvaW5nIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBmb2N1cyBmb3IgYW5hbHl6aW5nIHRoZSBzY29wZSBvZiB0aGlzIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucyBub3cgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2ZldGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDY4PXN0YXRpYyBpbmxpbmUgaW50IHVibGtfY2hlY2tfY21kX29wKHUzMiBjbWRfb3ApXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwODAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzA4MTovKiBNdXN0IHJ1biBiZWZvcmUgdWJsa19maWxsX2lvX2NtZCgpIC8gX191YmxrX2ZldGNoKCkuICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA4Mi1zdGF0aWMgaW5saW5lIGludCB1YmxrX3ZhbGlkYXRlX2lvX2J1Zihjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMjQ3PXN0YXRpYyBpbnQgdWJsa19jaGVja19mZXRjaF9idWYoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YiwgX191NjQgYnVmX2FkZHIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyNjItXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI2MzpzdGF0aWMgaW50IF9fdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI2NC1cdFx0XHRzdHJ1Y3QgdWJsa19pbyAqaW8sIHUxNiBxX2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg1LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMyODY6c3RhdGljIGludCB1YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg3LVx0XHQgICAgICBzdHJ1Y3QgdWJsa19pbyAqaW8sIF9fdTY0IGJ1Zl9hZGRyLCB1MTYgcV9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI5OS1cdGlmICghcmV0KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDA6XHRcdHJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzMwMS1cdGlmICghcmV0KSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNTk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDgtXHRcdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzQwOTpcdFx0cmV0ID0gdWJsa19mZXRjaChjbWQsIHViLCBpbywgYWRkciwgcV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQxMC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzY5ND1zdGF0aWMgaW50IHVibGtfYmF0Y2hfcHJlcF9pbyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzEzLVx0dWJsa19pb19sb2NrKGlvKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNzE0Olx0cmV0ID0gX191YmxrX2ZldGNoKGRhdGEtXHUwMDNlY21kLCBkYXRhLVx1MDAzZXViLCBpbywgdWJxLVx1MDAzZXFfaWQpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MTUtXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBpb191cmluZyBDb21tYW5kIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhlIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBjb21tYW5kcyBzdWJtaXR0ZWQgdmlhIGlvX3VyaW5nIHdpdGhpbiB0aGUgVWJsayAoVW5pdmVyc2FsIEJsb2NrIExheWVyKSBmcmFtZXdvcmsuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgY2VudHJhbCBodWIgd2hlcmUgZXZlcnl0aGluZyBraWNrcyBvZmYuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSBiZWdpbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyBgdWJsa19jaF91cmluZ19jbWRgIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2NoX3VyaW5nX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM0MT1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM1OC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzU5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjAtXHRcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzQ5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICpfX3VibGtfY2hlY2tfYW5kX2dldF9yZXEoc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTIyOnN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI4LVx0aWYgKCF0dy5jYW5jZWwpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpcdFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMC1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MzQ6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0Mi1cdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQzOlx0XHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ0LVx0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDc6XHRyZXR1cm4gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0OC19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQxNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWJsa19jaF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTUwLVx0LndyaXRlX2l0ZXIgPSB1YmxrX2NoX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE1MTpcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTUyLVx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIGJyb2tlbiBkb3duIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZW06CgoqKkRpc3NlY3RpbmcgdGhlIGlvX3VyaW5nIENvbW1hbmQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1YmxrX2NoX3VyaW5nX2NtZGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IG5hbWUgc2NyZWFtcyAmIzM0O3RoaXMgaXMgdGhlIGNvcmUgaGFuZGxlciBmb3IgaW9fdXJpbmcgY29tbWFuZHMmIzM0Oy4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZGlzcGF0Y2hlciwgdGhlIG9yY2hlc3RyYXRvci4gRXZlcnl0aGluZyBmbG93cyB0aHJvdWdoIGhlcmUgZnJvbSB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCBpdCBsb29rcyBsaWtlLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGxheWVyLiBJIHNlZSBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBUaGF0IG5hbWUgaXMgaW50ZXJlc3RpbmcuICYjMzQ7TG9jYWwmIzM0OyBpbXBsaWVzIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCB0aGlzIGhhbmRsZXIsIHBlcmhhcHMgcGVyLUNQVSBvciBwZXItZGV2aWNlIHJlc291cmNlLCBvciBtYXliZSBpdCYjMzk7cyB0aGUgY29yZSB3b3JraG9yc2Ugd2l0aGluIGB1YmxrX2NoX3VyaW5nX2NtZGAuIE15IGd1ZXNzIGlzIHRoZSBsb2NhbCB2ZXJzaW9uIGlzIGdvaW5nIHRvIGhhbmRsZSB0aGUgaGVhdnkgbGlmdGluZyBvZiB0aGUgaW8gY29tbWFuZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgJiMzNDtsb2NhbCYjMzQ7IHJlZmVycyB0byBpbiB0aGlzIGNvbnRleHQuCgpCZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIHNob3VsZCBjaGVjayBgdWJsa19iYXRjaF9wcmVwX2lvYC4gVGhpcyBzb3VuZHMgbGlrZSBhbiBvcHRpbWl6YXRpb24gb3IgcHJlLXByb2Nlc3Npbmcgc3RhZ2UuIFBlcmhhcHMgaXQmIzM5O3MgcHJlcHBpbmcgYmF0Y2hlcyBvZiBJL08gb3BlcmF0aW9ucyBiZWZvcmUgdGhleSBoaXQgdGhlIGNvcmUgaGFuZGxlci4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzdWJzeXN0ZW0gaXMgb3B0aW1pemVkLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIG1lcmdpbmcgb3IgY29hbGVzY2luZyByZXF1ZXN0cywgb3IgcHJlLWNhbGN1bGF0aW5nIHNvbWUgb2YgdGhlIG1ldGFkYXRhIG5lZWRlZCBieSB0aGUgaGFuZGxlci4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2JhdGNoX3ByZXBfaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2ODE9c3RhdGljIHZvaWQgdWJsa19iYXRjaF9yZXZlcnRfcHJlcF9jbWQoc3RydWN0IHVibGtfYmF0Y2hfaW9faXRlciAqaXRlcixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzY5My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNjk0OnN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzY5NS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pb19kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNzI1PXN0YXRpYyBpbnQgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWQoY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzc0Mi1cdG11dGV4X2xvY2soXHUwMDI2ZGF0YS1cdTAwM2V1Yi1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzc0MzpcdHJldCA9IHVibGtfd2Fsa19jbWRfYnVmKFx1MDAyNml0ZXIsIGRhdGEsIHVibGtfYmF0Y2hfcHJlcF9pbyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzc0NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIHVibGsgQmF0Y2ggUHJlcGFyYXRpb24gRmxvdyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEZyb20gdGhlIGNvZGUsIEkgc2VlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsaW5nIGB1YmxrX3dhbGtfY21kX2J1ZmAsIHdoaWNoIGl0c2VsZiB1c2VzIGB1YmxrX2JhdGNoX3ByZXBfaW9gLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kYCBpcyByZXNwb25zaWJsZSBmb3IgcHJlcGFyaW5nIGJhdGNoZXMgb2YgSS9PIG9wZXJhdGlvbnMsIGxpa2VseSBieSBpdGVyYXRpbmcgdGhyb3VnaCBhIGJ1ZmZlciBvZiBjb21tYW5kcy4gVGhlIGZhY3QgdGhhdCBgdWJsa19iYXRjaF9wcmVwX2lvYCBpcyBiZWluZyB1c2VkIG1lYW5zIHRoaXMgcHJlcGFyYXRpb24gcGhhc2UgaGFuZGxlcyB0aGUgY29yZSBwcmUtcHJvY2Vzc2luZyBsb2dpYyBmb3IgdGhlIGJhdGNoIG9mIGNvbW1hbmRzLCBmb3IgZXhhbXBsZSwgY29tbWFuZCB2YWxpZGl0eSBjaGVja3MsIGFuZCBkYXRhIHNldHVwLiBOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhbmQgdGhlICpob3cqLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbuKAmXMgcmVzcG9uc2liaWxpdGllcyBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBJL08gZmxvdy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgYHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kYC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBiYXRjaCBwcmVwYXJhdGlvbiwgYW5kIHdoYXQgYnJvYWRlciBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjk0PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MjQtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzcyNTpzdGF0aWMgaW50IHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kKGNvbnN0IHN0cnVjdCB1YmxrX2JhdGNoX2lvX2RhdGEgKmRhdGEpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcyNi17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM5ODQ9c3RhdGljIGludCB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQwMTMtXHRcdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDAxNDpcdFx0cmV0ID0gdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWQoXHUwMDI2ZGF0YSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDAxNS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSB1YmxrIEkvTyBVcmluZyBCYXRjaCBDb21tYW5kIEhhbmRsaW5nKioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBob3cgdGhpcyBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIGZ1bmN0aW9uIHdvcmtzLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGJhdGNoZWQgY29tbWFuZHMgY29taW5nIGZyb20gaW9fdXJpbmcuIFRoZSBjb2RlIGluZGljYXRlcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY2FsbGluZyBgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWRgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbWFrZXMgc2Vuc2UgdGhhdCBwcmVwYXJpbmcgdGhlIGNvbW1hbmRzIHdvdWxkIGJlIHNlcGFyYXRlZC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCYjMzk7cyBhIGdvb2QgaWRlYSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAgYWN0dWFsbHkgZG9lcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoaXMgZnVuY3Rpb24gaW5zaWRlIGFuZCBvdXQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIHRoZSBiYXRjaGVkIEkvTyBvcGVyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgbWFuYWdpbmcgdGhlc2UgcmVxdWVzdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhhdCBwcmVwYXJhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBjaGFpbiBhbmQgdGhlIHJvbGVzIG9mIGVhY2ggcGllY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zOTU0PXN0YXRpYyBpbnQgdWJsa19oYW5kbGVfbm9uX2JhdGNoX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM5ODMtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzk4NDpzdGF0aWMgaW50IHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zOTg1LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE1NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2JhdGNoX2lvX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNjAtXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTYxOlx0LnVyaW5nX2NtZCA9IHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNjItXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJhdGNoIElPIENvbW1hbmQgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBoYW5kbGVyIGZvciBiYXRjaCBJTyBvcGVyYXRpb25zIHdpdGhpbiBpb191cmluZywgZ290IGl0LiBUaGUga2V5IHBpZWNlcyBJIG5lZWQgdG8gcmVhbGx5IGZvY3VzIG9uIGFyZSBgdWJsa19jaF91cmluZ19jbWRgIGFuZCwgb2YgY291cnNlLCB0aGlzIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAgaXRzZWxmLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCBzaG91bGQgaGFwcGVuLgoKTm93LCBJJiMzOTttIHRyYWNpbmcgdGhlIGZsb3csIGFuZCBJIHNlZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgYmVpbmcgY2FsbGVkIGZyb20gYHVibGtfbWFya19pb19yZWFkeWAuIEFuZCBgdWJsa19tYXJrX2lvX3JlYWR5YCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2AuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBub3JtYWwgcGF0aCwgcHJlcHBpbmcgYW5kIHJlYWR5aW5nIHRoZSBJTyBmb3IgcHJvY2Vzc2luZy4gQnV0IHdhaXQuLi4gdGhpcyBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgaXMgdG9vIGltcG9ydGFudCB0byBqdXN0IHRydXN0IHRoZSBvYnZpb3VzIGNhbGxzLiBJdCBzZWVtcyBsaWtlIEkgYWxzbyByZW1lbWJlciBpdCBiZWluZyBjYWxsZWQgZnJvbSBgdWJsa19jYW5jZWxfcXVldWVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBmb3IgY2xlYW5pbmcgdXAgYW5kIHJlc2V0dGluZyBpbiB0aGUgZXZlbnQgb2YgZXJyb3JzIG9yIGNhbmNlbGxhdGlvbi4gTGV0JiMzOTtzIG5vdCBtYWtlIGFzc3VtcHRpb25zIGhlcmUuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNhbGwgc2l0ZXMgZm9yIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbnRleHRzIGl0JiMzOTtzIHVzZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMTI9c3RhdGljIHZvaWQgdWJsa19yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8pXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzAyMTpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAyMi17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMwMzE9c3RhdGljIHZvaWQgdWJsa19tYXJrX2lvX3JlYWR5KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIHUxNiBxX2lkLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlx0XHR1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHVicSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aCBpcyAqb25seSogZW50ZXJlZCB0aHJvdWdoIGB1YmxrX21hcmtfaW9fcmVhZHlgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEtub3dpbmcgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoYXQgSSBuZWVkIHRvIGxvb2sgYXQgaW1tZWRpYXRlbHkuIE5vdywgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgdWJsa19tYXJrX2lvX3JlYWR5YCBhbmQgZmlndXJlIG91dCAqcHJlY2lzZWx5KiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gVW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgY2FsbGVkLCBhbmQgaXRzIGVmZmVjdHMgb24gdGhlIHN5c3RlbSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzAzMTpcdHN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcbjMwMzI6XHRcdHN0cnVjdCB1YmxrX2lvICppbylcbjMwMzM6XHRcdF9fbXVzdF9ob2xkKFx1MDAyNnViLVx1MDAzZW11dGV4KVxuMzAzNDpcdHtcbjMwMzU6XHRcdHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEgPSB1YmxrX2dldF9xdWV1ZSh1YiwgcV9pZCk7XG4zMDM2Olx0XG4zMDM3Olx0XHRpZiAoIXViLVx1MDAzZXVucHJpdmlsZWdlZF9kYWVtb25zIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjMwMzg6XHRcdFx0dWItXHUwMDNldW5wcml2aWxlZ2VkX2RhZW1vbnMgPSB0cnVlO1xuMzAzOTpcdFxuMzA0MDpcdFx0dWJxLVx1MDAzZW5yX2lvX3JlYWR5JiM0MzsmIzQzOztcbjMwNDE6XHRcdHVibGtfcmVzZXRfaW9fZmxhZ3ModWJxLCBpbyk7XG4zMDQyOlx0XG4zMDQzOlx0XHQvKiBDaGVjayBpZiB0aGlzIHNwZWNpZmljIHF1ZXVlIGlzIG5vdyBmdWxseSByZWFkeSAqL1xuMzA0NDpcdFx0aWYgKHVibGtfcXVldWVfcmVhZHkodWJxKSkge1xuMzA0NTpcdFx0XHR1Yi1cdTAwM2Vucl9xdWV1ZV9yZWFkeSYjNDM7JiM0Mzs7XG4zMDQ2Olx0XG4zMDQ3Olx0XHRcdC8qXG4zMDQ4Olx0XHRcdCAqIFJlc2V0IHF1ZXVlIGZsYWdzIGFzIHNvb24gYXMgdGhpcyBxdWV1ZSBpcyByZWFkeS5cbjMwNDk6XHRcdFx0ICogVGhpcyBjbGVhcnMgdGhlIGNhbmNlbGluZyBmbGFnLCBhbGxvd2luZyBiYXRjaCBGRVRDSCBjb21tYW5kc1xuMzA1MDpcdFx0XHQgKiB0byBzdWNjZWVkIGR1cmluZyByZWNvdmVyeSB3aXRob3V0IHdhaXRpbmcgZm9yIGFsbCBxdWV1ZXMuXG4zMDUxOlx0XHRcdCAqL1xuMzA1MjpcdFx0XHR1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHVicSk7XG4zMDUzOlx0XHR9XG4zMDU0Olx0XG4zMDU1Olx0XHQvKiBDaGVjayBpZiBhbGwgcXVldWVzIGFyZSByZWFkeSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlc2V0dGluZyBgdWJxLSZndDtmb3JjZV9hYm9ydGAgdG8gYGZhbHNlYCB3aXRoaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBzeW1ib2xzOiBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgLiBCdXQgd2FpdC4uLiB3YXNuJiMzOTt0IGB1YmxrX21hcmtfaW9fcmVhZHlgIGNhbGxlZCBieSBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gPyBSaWdodCwgZ290dGEgaW5jbHVkZSB0aG9zZSBpbiB0aGUgcmV2aWV3LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgbG9vayBhdCB0aGUgY2FsbHMgdG8gYm90aCBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIHNwZWNpZmljYWxseS4gQW5kLCB3YWl0ISBXaGF0IGFib3V0IGB1YmxrX2N0cmxfdXJpbmdfY21kYD8gVGhhdCYjMzk7cyB0aGUgY29udHJvbCBjb21tYW5kIGhhbmRsZXIsIGFuZCB0aGUgcmVzZXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgdGhlcmUgdG9vLCBzbyBsZXQmIzM5O3MgbWFrZSBzdXJlIHRvIGV4YW1pbmUgdGhhdCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01NjE1PXN0YXRpYyBib29sIHVibGtfdHJ5X2J1Zl9tYXRjaChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjY4LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU2Njk6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24oc3RydWN0IHVibGtfZGV2aWNlICp1YixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjcwLVx0XHR1MzIgY21kX29wLCBzdHJ1Y3QgdWJsa3Nydl9jdHJsX2NtZCAqaGVhZGVyKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ3LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NDg6c3RhdGljIGJvb2wgdWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAodTMyIGNtZF9vcClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2MC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzYxOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2Mi1cdFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzcxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NzI6XHRpZiAodWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAoY21kX29wKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzczLVx0ICAgIGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODAxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4MDI6XHRcdHJldCA9IHVibGtfY3RybF91cmluZ19jbWRfcGVybWlzc2lvbih1YiwgY21kX29wLCBcdTAwMjZoZWFkZXIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU4NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWJsa19jdGxfZm9wcyA9IHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODczLVx0Lm9wZW5cdFx0PSBub25zZWVrYWJsZV9vcGVuLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4NzQ6XHQudXJpbmdfY21kICAgICAgPSB1YmxrX2N0cmxfdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1YmxrIENvbnRyb2wgQ29tbWFuZCBIYW5kbGVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGB1YmxrYCBzdWJzeXN0ZW0gaGFuZGxlcyBjb250cm9sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gdGhlIFVyaW5nIGludGVyZmFjZS4gSSBzZWUgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgdGhlIGNlbnRyYWwgY29tbWFuZCBoYW5kbGVyIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgY29udGFjdCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZS4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgdHdlYWtpbmcgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBJIGtub3cgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBxdWV1ZSBpcyAmIzM0O3JlYWR5LCYjMzQ7IHNwZWNpZmljYWxseSB3aGVuIGB1YmxrX3F1ZXVlX3JlYWR5KHVicSlgIHJldHVybnMgdHJ1ZS4gVGhhdCBoYXBwZW5zIHdoZW4gdGhlIG51bWJlciBvZiBJL09zIHJlYWR5IHRvIHByb2Nlc3MgKGB1YnEtJmd0O25yX2lvX3JlYWR5YCkgZXF1YWxzIHRoZSBxdWV1ZSBkZXB0aCAoYHVicS0mZ3Q7cV9kZXB0aGApLiBUaGF0JiMzOTtzIGEga2V5IHN0YXRlLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBhcmUgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19iYXRjaF9wcmVwX2lvYCwgYXMgdGhlc2UgYXJlIHRoZSB0cmlnZ2Vycy4gYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIEkgc2hvdWxkIGJlIHB1dHRpbmcgbW9zdCBvZiBteSBmb2N1cy4gQW5kIG9mIGNvdXJzZSwgYHVibGtfY3RybF91cmluZ19jbWRgIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2luY2UgaXQmIzM5O3MgdGhlIGRldmljZSBzdGF0ZSBjb250cm9sbGVyLCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgbGlrZSBzdG9wcGluZywgc3RhcnRpbmcsIGFuZCByZWNvdmVyeSBhcmUgbWFuYWdlZC4KCkkgbmVlZCB0byBkaWcgaW50byBgZm9yY2VfYWJvcnRgIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBzZXQuIEl0JiMzOTtzIHByb2JhYmx5IGtleSBmb3IgdW5kZXJzdGFuZGluZyBjZXJ0YWluIGtpbmRzIG9mIGZhaWx1cmUgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JjZV9hYm9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQyPXN0cnVjdCB1YmxrX3F1ZXVlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQ5LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1MDpcdGJvb2wgZm9yY2VfYWJvcnQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjUxLVx0Ym9vbCBjYW5jZWxpbmc7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIxNDE9c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX3ByZXBfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE0Ni1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTQ3Olx0LyogV2l0aCByZWNvdmVyeSBmZWF0dXJlIGVuYWJsZWQsIGZvcmNlX2Fib3J0IGlzIHNldCBpblxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNDgtXHQgKiB1YmxrX3N0b3BfZGV2KCkgYmVmb3JlIGNhbGxpbmcgZGVsX2dlbmRpc2soKS4gV2UgaGF2ZSB0b1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTUyLVx0ICpcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTUzOlx0ICogTm90ZTogZm9yY2VfYWJvcnQgaXMgZ3VhcmFudGVlZCB0byBiZSBzZWVuIGJlY2F1c2UgaXQgaXMgc2V0XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE1NC1cdCAqIGJlZm9yZSByZXF1ZXN0IHF1ZXVlIGlzIHVucWl1ZXNjZWQuXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNTYtXHRpZiAodWJsa19ub3Nydl9zaG91bGRfcXVldWVfaW8odWJxKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTU3Olx0ICAgIHVubGlrZWx5KFJFQURfT05DRSh1YnEtXHUwMDNlZm9yY2VfYWJvcnQpKSlcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTU4LVx0XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE3Nj1zdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODgtXHQvKlxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxODk6XHQgKiAtXHUwMDNlY2FuY2VsaW5nIGhhcyB0byBiZSBoYW5kbGVkIGFmdGVyIC1cdTAwM2Vmb3JjZV9hYm9ydCBhbmQgLVx1MDAzZWZhaWxfaW9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTkwLVx0ICogaXMgZGVhbHQgd2l0aCwgb3RoZXJ3aXNlIHRoaXMgcmVxdWVzdCBtYXkgbm90IGJlIGZhaWxlZCBpbiBjYXNlXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI1MTY9c3RhdGljIHZvaWQgdWJsa19jaF9yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTkxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1Yi1cdTAwM2VkZXZfaW5mby5ucl9od19xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1OTI6XHRcdFx0V1JJVEVfT05DRSh1YmxrX2dldF9xdWV1ZSh1YiwgaSktXHUwMDNlZm9yY2VfYWJvcnQsIHRydWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OTMtXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI4MjQ9c3RhdGljIHZvaWQgdWJsa19iYXRjaF9jYW5jZWxfcXVldWUoc3RydWN0IHVibGtfcXVldWUgKnVicSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjgyOS1cdHNwaW5fbG9jayhcdTAwMjZ1YnEtXHUwMDNlZXZ0c19sb2NrKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyODMwOlx0dWJxLVx1MDAzZWZvcmNlX2Fib3J0ID0gdHJ1ZTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yODMxLVx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZ1YnEtXHUwMDNlZmNtZF9oZWFkLCBcdTAwMjZmY21kX2xpc3QpO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yOTM5PXN0YXRpYyB2b2lkIHVibGtfd2FpdF90YWdzZXRfcnFzX2lkbGUoc3RydWN0IHVibGtfZGV2aWNlICp1Yilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk1My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyOTU0OnN0YXRpYyB2b2lkIHVibGtfZm9yY2VfYWJvcnRfZGV2KHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk1NS17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5NjYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1Yi1cdTAwM2VkZXZfaW5mby5ucl9od19xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI5Njc6XHRcdHVibGtfZ2V0X3F1ZXVlKHViLCBpKS1cdTAwM2Vmb3JjZV9hYm9ydCA9IHRydWU7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk2OC1cdGJsa19tcV91bnF1aWVzY2VfcXVldWUodWItXHUwMDNldWJfZGlzay1cdTAwM2VxdWV1ZSk7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI5ODg9c3RhdGljIHZvaWQgdWJsa19zdG9wX2Rldl91bmxvY2tlZChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTk2LVx0aWYgKHVibGtfbm9zcnZfZGV2X3Nob3VsZF9xdWV1ZV9pbyh1YikpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjk5NzpcdFx0dWJsa19mb3JjZV9hYm9ydF9kZXYodWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5OTgtXHRkZWxfZ2VuZGlzayh1Yi1cdTAwM2V1Yl9kaXNrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzAyMT1zdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjYtXHR1YnEtXHUwMDNlZmFpbF9pbyA9IGZhbHNlO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwMjc6XHR1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDI4LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzg3OD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfYXR0YWNoKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4ODYtXHRzcGluX2xvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzg4NzpcdGlmICh1bmxpa2VseSh1YnEtXHUwMDNlZm9yY2VfYWJvcnQgfHwgdWJxLVx1MDAzZWNhbmNlbGluZykpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zODg4LVx0XHRmcmVlID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVQkxLIEZvcmNlIEFib3J0IEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIGluIHRoZSBVQkxLIGRyaXZlci4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyB1c2luZyBgZm9yY2VfYWJvcnRgIGluIHRoZSBmdW5jdGlvbnMgYHVibGtfY2hfcmVsZWFzZV93b3JrX2ZuYCwgYHVibGtfYmF0Y2hfY2FuY2VsX3F1ZXVlYCwgYW5kIGB1YmxrX2ZvcmNlX2Fib3J0X2RldmAuIEFuZCB0aGVuIGl0JiMzOTtzIHVzZWQgd2hlbiBwcmVwYXJpbmcgYW5kIGF0dGFjaGluZyByZXF1ZXN0czogYHVibGtfcHJlcF9yZXFgIGFuZCBgdWJsa19iYXRjaF9hdHRhY2hgIHJlc3BlY3RpdmVseS4KClRoZSBrZXkgY2hhbmdlIGhlcmUsIGFuZCB0aGUgYml0IHRoYXQgaGFzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBpcyB0aGUgcmVzZXQgb2YgYGZvcmNlX2Fib3J0YCB3aXRoaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBUaGlzIGlzIHVuZG91YnRlZGx5IGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBhIGdvb2Qgb25lIGF0IHRoYXQuIEl0JiMzOTtzIGFkZHJlc3NpbmcgdGhlIGlzc3VlIG9mIGBmb3JjZV9hYm9ydGAgbm90IGJlaW5nIHByb3Blcmx5IGNsZWFyZWQgZHVyaW5nIHJlY292ZXJ5IHNjZW5hcmlvcywgd2hpY2ggd291bGQgY2xlYXJseSBsZWFkIHRvIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEkgYWx3YXlzIGFwcHJlY2lhdGUgYSB0YXJnZXRlZCBidWcgZml4IGxpa2UgdGhpcy4KClRoZSBmYWN0IHRoYXQgYHRlc3RfcmVjb3Zlcl8wMy5zaGAgaXMgYmVpbmcgbW9kaWZpZWQgdGVsbHMgbWUgdGhleSYjMzk7dmUgcHJvYWN0aXZlbHkgY3JlYXRlZCBhIHRlc3QgY2FzZSB0byB2YWxpZGF0ZSB0aGlzIGZpeC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHJldmlldyB0aGlzIHNlbGYtdGVzdCB2ZXJ5IGNsb3NlbHkuCgpUaGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBgQkxLX0RFVl9VQkxLYCBjb25maWcsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIFRoZSBjb3JlIHN5bWJvbHMgaGVyZSBzZWVtIHRvIGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAsIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVu4oCZdCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkLiBMb29rcyBsaWtlIGBCTEtfREVWX1VCTEtgIHJlbGllcyBvbiBgSU9fVVJJTkdgLCB3aGljaCBpcyBzdGFuZGFyZC4gSnVzdCBhIHF1aWNrIGNoZWNrIGFnYWluIG9uIGBCTEtfREVWX1VCTEtgIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYEJMS19ERVZfVUJMS2AgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBhcm91bmQgYEJMS19ERVZfVUJMS2AuIEJlZm9yZSBJIHN0YXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwOyBJIGNhbiYjMzk7dCBlZmZlY3RpdmVseSBldmFsdWF0ZSB0aGlzIGNvbXBvbmVudCYjMzk7cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhvdXQgdW5kZXJzdGFuZGluZyB3aGF0IGl0IGxlYW5zIG9uIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IG1pZ2h0IGJlIGxlYW5pbmcgb24gKml0Ki4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzZWxmLWNvbnRhaW5lZCBtb2R1bGUsIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIGludGVyd292ZW4gd2l0aCBjb3JlIGluZnJhc3RydWN0dXJlLCBkcml2ZXIgZnJhbWV3b3Jrcywgb3IgZXZlbiB1c2Vyc3BhY2UgdXRpbGl0aWVzPyBBIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2sgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50IHRvIGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgbXkgYW5hbHlzaXMuIFdlIG5lZWQgdG8gZmluZCB0aGUgY3JpdGljYWwgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyODpcdGNvbmZpZyBCTEtfREVWX1VCTEtcbiAzMjk6XHRcdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcJiMzNDtcbiAzMzA6XHRcdHNlbGVjdCBJT19VUklOR1xuIDMzMTpcdFx0aGVscFxuIDMzMjpcdFx0ICBpb191cmluZyBiYXNlZCB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLiBUb2dldGhlciB3aXRoIHVibGsgc2VydmVyLCB1YmxrXG4gMzMzOlx0XHQgIGhhcyBiZWVuIHdvcmtpbmcgd2VsbCwgYnV0IGludGVyZmFjZSB3aXRoIHVzZXJzcGFjZSBvciBjb21tYW5kIGRhdGFcbiAzMzQ6XHRcdCAgZGVmaW5pdGlvbiBpc24mIzM5O3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXG4gMzM1Olx0XHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXG4gMzM2Olx0XG4gMzM3Olx0Y29uZmlnIEJMS0RFVl9VQkxLX0xFR0FDWV9PUENPREVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdWJsa19jaCBEcml2ZXImIzM5O3MgSU9fVVJJTkcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVibGtfY2hgIGRyaXZlciBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCBgSU9fVVJJTkdgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0IGV4cGxpY2l0bHkgc2VsZWN0cyBgSU9fVVJJTkdgLCB3aGljaCBpcyBnb29kLiBUaGUgS2NvbmZpZyBlbnRyeSBpc24mIzM5O3QgZGVwZW5kZW50IG9uIGFueXRoaW5nIG90aGVyIHRoYW4gYEJMT0NLYCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQuIFNvLCB0aGUgb25seSBjb25maWcgaXRlbSB0aGF0IG5lZWRzIHRvIGJlIHNlbGVjdGVkIGlzIGBCTEtfREVWX1VCTEtgLiBFYXN5IGVub3VnaC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGRvaW5nIHRoaW5ncyB0aGUgJiMzNDtyaWdodCYjMzQ7IHdheSBmb3Iga2VybmVsIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIG5vbi1zdGF0aWMgc28gaXQgY2FuIGJlIHByZWZlcnJlZCBvdmVyIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQWZ0ZXIgYSBjaGVjaywgSSBmaW5kIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGNvbmNlcm5pbmcuIEJ1dCB3YWl0LCBpdCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0OgoKYGBgYwpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7Cgkud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlciwKCS51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCwKCS5tbWFwID0gdWJsa19jaF9tbWFwLApgYGAKClNvLCBpdCYjMzk7cyBub3QgYmVpbmcgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgb2theS4gU3RpbGwsIGJlc3QgcHJhY3RpY2UgaXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgZXhpc3QuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIGB1YmxrX2Rydi5jYCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHJlcGxhY2UgYHVibGtfY2hfdXJpbmdfY21kYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVibGtfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIHVibGtfIFZhcmlhYmxlIERlY2xhcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGB1YmxrX2AgdmFyaWFibGUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBec3RhdGljIGludCB1YmxrX2AgYW5kIGp1c3QgYF5pbnQgdWJsa19gLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhlIGBzdGF0aWNgIGtleXdvcmQgaXMgdGhlIGtleSBkaWZmZXJlbnRpYXRvciBoZXJlLCBpbXBseWluZyBzY29wZSBhbmQgbGlua2FnZS4gSSBrbm93IGhvdyB0aGUgY29tcGlsZXIgdHJlYXRzIGVhY2ggb2YgdGhvc2UsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IHN1cnByaXNpbmcgdXNhZ2Ugb2YgYHVibGtfYCB0aGF0IHdvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSwgb3IgYWJzZW5jZSwgb2YgYHN0YXRpY2AuIFdl4oCZcmUgdGFsa2luZyBhYm91dCBrZXJuZWwgY29kZSBoZXJlLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSByYW1pZmljYXRpb25zIG9mIHRoYXQgZGVjbGFyYXRpb24gaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHNjb3Bpbmcgb3IgbGlua2FnZSBlcnJvcnMgdGhhdCB3b3VsZCBzdXJmYWNlIGxhdGVyIGFzIGEgYnVnLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYSB2ZXJ5IHNwZWNpZmljIHR5cGUgb2YgcG90ZW50aWFsIGlzc3VlLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoYXQgZGVjbGFyYXRpb24uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgdWJsa18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBVYmxrIERyaXZlciBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGB1YmxrX2Rydi5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgc3RydWN0dXJlLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBkbyBpcyBxdWlja2x5IHNjYW4gZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucy4gSSB3YW50IHRvIGlkZW50aWZ5IHdoYXQgcGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSwgYW5kIGFsc28gd2hpY2ggcGFydHMgYXJlIGxpa2VseSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBLbm93aW5nIHRoZSBleHBvc2VkIGludGVyZmFjZSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzdG9yYWdlIHN5c3RlbS4gVGhpcyBpbml0aWFsIHBhc3Mgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNb2R1bGUmIzM5O3MgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW4gdGVybXMgb2YgaXRzIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3Mgc2VsZi1jb250YWluZWQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cywgd2hlcmUgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24sIGFyZSB0aGUgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBhbmQgYGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYSBmZXc6IGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAsIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuIE15IG5leHQgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMgSSYjMzk7bSBtaXNzaW5nPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpUbyBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYHVibGtfcXVldWVfcnFgLiBJdCYjMzk7cyB3b3J0aCBhIGxvb2sgdG8gY29uZmlybSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQyPXN0cnVjdCB1YmxrX3F1ZXVlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjYxLVx0ICpcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNjI6XHQgKiBUaGVyZSBhcmUgbXVsdGlwbGUgd3JpdGVyIGZyb20gdWJsa19xdWV1ZV9ycSgpIG9yIHVibGtfcXVldWVfcnFzKCksXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjYzLVx0ICogc28gbG9jayBpcyByZXF1aXJlZCBmb3Igc3RvcmluZyByZXF1ZXN0IHRhZyB0byBmaWZvXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIxNDE9c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX3ByZXBfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE3NS0gKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTc2OnN0YXRpYyBpbmxpbmUgYmxrX3N0YXR1c190IF9fdWJsa19xdWV1ZV9ycV9jb21tb24oc3RydWN0IHVibGtfcXVldWUgKnVicSxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc3LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIwMi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjAzOnN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjA0LVx0XHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjEwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMTE6XHRyZXMgPSBfX3VibGtfcXVldWVfcnFfY29tbW9uKHVicSwgcnEsIFx1MDAyNnNob3VsZF9xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMi1cdGlmICghc2hvdWxkX3F1ZXVlKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjE5PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19iYXRjaF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIyNi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjI3Olx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcdTAwMjZzaG91bGRfcXVldWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjgtXHRpZiAoIXNob3VsZF9xdWV1ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjI0Mz1zdGF0aWMgdm9pZCB1YmxrX2NvbW1pdF9ycXMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyNTUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjI1NjpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3JxcyhzdHJ1Y3QgcnFfbGlzdCAqcnFsaXN0KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyNTcte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB1YmxrX21xX29wcyA9IHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzQ2Olx0LnF1ZXVlX3JxICAgICAgID0gdWJsa19xdWV1ZV9ycSxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzQ3Olx0LnF1ZXVlX3JxcyAgICAgID0gdWJsa19xdWV1ZV9ycXMsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjM0OC1cdC5pbml0X2hjdHhcdD0gdWJsa19pbml0X2hjdHgsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI3Mjc9c3RhdGljIHZvaWQgdWJsa19zdGFydF9jYW5jZWwoc3RydWN0IHVibGtfZGV2aWNlICp1Yilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjczNi1cdFx0LypcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNzM3Olx0XHQgKiBRdWllc2NlIHRvIHNlcmlhbGl6ZSB3aXRoIHVibGtfcXVldWVfcnEoKSwgZW5zdXJpbmdcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzM4LVx0XHQgKiB1YnEtXHUwMDNlY2FuY2VsaW5nIGlzIHZpc2libGUgd2hlbiB0aGUgcXVldWUgcmVzdW1lcy5cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0NS1cdFx0ICogRGlzayBub3QgeWV0IGFsbG9jYXRlZCBieSB1YmxrX2N0cmxfc3RhcnRfZGV2KCksIHNvXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NjpcdFx0ICogdGhlcmUgaXMgbm8gcmVxdWVzdCBxdWV1ZSBhbmQgdWJsa19xdWV1ZV9ycSgpIGNhbm5vdFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDctXHRcdCAqIGJlIHJ1bm5pbmcuICBKdXN0IHNldCB0aGUgZmxhZzsgaWYgc3RhcnRfZGV2IHByb2NlZWRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjU2CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBCdWcgUmVsYXRlZCB0byBVQkxLIFJlY292ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVQkxLIGRyaXZlciBpc3N1ZS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgcmVjb3ZlcnksIGFuZCBzaW5jZSBgdWJsa19xdWV1ZV9ycWAgaXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZW50cnkgcG9pbnQsIGl0IG1ha2VzIHNlbnNlIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgaXNzdWUgb3JpZ2luYXRlcy4gIFRoZSByZWNvdmVyeSBwcm9jZXNzIGl0c2VsZiBpcyBoYW5kbGVkIGJ5IGB1YmxrX2N0cmxfdXJpbmdfY21kYCAoZm9yIGRldmljZSBtYW5hZ2VtZW50KSBhbmQgYHVibGtfY2hfdXJpbmdfY21kYCAoZm9yIGZldGNoaW5nIEkvT3MpLiBUaGF0IHN1Z2dlc3RzIHRoYXQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBtaWdodCBhbHNvIGJlIHJlbGV2YW50IHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggYmF0Y2hlZCBjb21tYW5kcywgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGB1YmxrX3F1ZXVlX3JxYCBpdHNlbGYuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGZvY3VzaW5nIG9uIGB1YmxrX2NoX3VyaW5nX2NtZGAgYXMgYSBzdGFydGluZyBwb2ludC4gWWVzLCB0aGF0IGxvb2tzIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHJlbGV2YW50IHRvIHRoaXMgaXNzdWUuIEFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaGFuZGxlcyBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgY29udHJvbCBkZXZpY2UuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBwYXRjaC4gQWgsIEkgc2VlLCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc2ltcGxlIGNoYW5nZS4gSXQmIzM5O3MgYWRkaW5nIGEgcmVzZXQgb2YgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyB3aXRoaW4gdGhlIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBmdW5jdGlvbi4gVGhlIGRlc2NyaXB0aW9uIG1ha2VzIGl0IGNsZWFyOiB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIHdhc24mIzM5O3QgYmVpbmcgY2xlYXJlZCBkdXJpbmcgcmVjb3ZlcnksIHBvdGVudGlhbGx5IGNhdXNpbmcgSS9PcyB0byBiZSBpbmNvcnJlY3RseSBhYm9ydGVkIGFmdGVyIHJlY292ZXJ5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHRvdWNoaW5nIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIuCgpGcm9tIHRoZSBjb25maWcgaW5mb3JtYXRpb24sIEkgc2VlIHRoYXQgdGhpcyBpcyBlbmFibGVkIGJ5IGBCTEtfREVWX1VCTEtgLCB3aGljaCBhbHNvIHNlbGVjdHMgYElPX1VSSU5HYC4gQW5kIHllcywgYEJMS19ERVZfVUJMS2Agc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmUsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuCgpPa2F5LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhpcyBpc3N1ZS4gSSYjMzk7bSByZWFkeSB0byBzZXQgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHVibGsgZHJpdmVyIHdoZXJlIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgb2YgYSBxdWV1ZSBpcyBub3QgcmVzZXQgZHVyaW5nIHJlY292ZXJ5LiBUaGlzIGNvdWxkIGxlYWQgdG8gSU9zIGJlaW5nIGluY29ycmVjdGx5IGFib3J0ZWQgYWZ0ZXIgcmVjb3ZlcnkuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgdWJsayBkcml2ZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHVibGsgZHJpdmVyIHdoZXJlIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgb2YgYSBxdWV1ZSBpcyBub3QgcmVzZXQgZHVyaW5nIHJlY292ZXJ5LiBUaGlzIGNvdWxkIGxlYWQgdG8gSU9zIGJlaW5nIGluY29ycmVjdGx5IGFib3J0ZWQgYWZ0ZXIgcmVjb3ZlcnkuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgdWJsayBkcml2ZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDhlMjFjMDg2Mzg5ZjBhZmI3ZGU4YTQ1ZjYwODMxNDM4M2Q4ZjVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTI6NTk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGQxN2VkMjY0ZGExYS4uMWE5NTY0MmI5ZGI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtMzAyNCw2ICYjNDM7MzAyNCw3IEBAIHN0YXRpYyB2b2lkIHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSkKIAl1YnEtJmd0O2NhbmNlbGluZyA9IGZhbHNlOwogCXNwaW5fdW5sb2NrKCZhbXA7dWJxLSZndDtjYW5jZWxfbG9jayk7CiAJdWJxLSZndDtmYWlsX2lvID0gZmFsc2U7CiYjNDM7CXVicS0mZ3Q7Zm9yY2VfYWJvcnQgPSBmYWxzZTsKIH0KIAogLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKaW5kZXggMjU1NDgwNWU1YjAyYy4uOTJmNDAxMjE3OGYwOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2gKQEAgLTI5LDYgJiM0MzsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TQogX2NyZWF0ZV9iYWNrZmlsZSAxIDEyOE0KIF9jcmVhdGVfYmFja2ZpbGUgMiAxMjhNCiAKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgLWIgJmFtcDsKJiM0Mzt1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzBdfSYjMzQ7ICZhbXA7CiYjNDM7dWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgLWIgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwomIzQzO3dhaXQKJiM0MzsKIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBudWxsIC1xIDIgLXIgMSAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1swXX0mIzM0OyAmYW1wOwogdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgJiMzNDske1VCTEtfQkFDS0ZJTEVTWzFdfSYjMzQ7ICYjMzQ7JHtVQkxLX0JBQ0tGSUxFU1syXX0mIzM0OyAmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NAoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3VwZXIgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSBpdCYjMzk7cyBqdXN0IGZsaXBwaW5nIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIHRvIGBmYWxzZWAuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm90aGluZyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgZGVmaW5pdGVseSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgcmVzZXR0aW5nIGEgYm9vbGVhbiwgc28gaXQmIzM5O3MgYSBsb2dpYyBjaGFuZ2UsIGFuZCBJJiMzOTttIG5vdCB3b3JyaWVkIGFib3V0IGludHJvZHVjaW5nIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgYnVnIGl0JiMzOTtzIGZpeGluZyBpcyBqdXN0IHRoYXQgYGZvcmNlX2Fib3J0YCB3YXNuJiMzOTt0IGJlaW5nIHJlc2V0IHByb3Blcmx5LCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBJL08gZmFpbHVyZXMgb3Igb3RoZXIgaW5jb3JyZWN0IGJlaGF2aW9y4oCUZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gZml4LiBCdXQsIGEgYGJvb2wgPSBmYWxzZTtgIGFzc2lnbm1lbnQ/IFllYWgsIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIEtBU0FOLCBvciBldmVuIGp1c3QgZ29vZCB0ZXN0aW5nLCB3b3VsZCBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaWYgYGZvcmNlX2Fib3J0YCBhY3R1YWxseSBjb250cm9scyBsaWZlY3ljbGUsIGFuZCBldmVuIHRoYXQgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IuIFNvLCBOZWVkc0tNU0FOID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBhIGJvb2xlYW4gZmxhZyAoYGZvcmNlX2Fib3J0YCkgaW4gdGhlIGB1YmxrX3F1ZXVlYCBzdHJ1Y3R1cmUgdG8gYGZhbHNlYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlIGlzIHB1cmVseSBsb2dpY2FsIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgcG90ZW50aWFsbHkgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpZiB0aGUgZmxhZyBjb250cm9scyBsaWZlY3ljbGUsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjI3Ljc5MzQzMjkzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTY0ODAzNTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRcIixcbiAgICBcInVibGtfcXVldWVfcnFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYSBib29sZWFuIGZsYWcgKGBmb3JjZV9hYm9ydGApIGluIHRoZSBgdWJsa19xdWV1ZWAgc3RydWN0dXJlIHRvIGBmYWxzZWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgbG9naWNhbCBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHBvdGVudGlhbGx5IHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaWYgdGhlIGZsYWcgY29udHJvbHMgbGlmZWN5Y2xlLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB1YmxrIGRyaXZlciB3aGVyZSB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIG9mIGEgcXVldWUgaXMgbm90IHJlc2V0IGR1cmluZyByZWNvdmVyeS4gVGhpcyBjb3VsZCBsZWFkIHRvIElPcyBiZWluZyBpbmNvcnJlY3RseSBhYm9ydGVkIGFmdGVyIHJlY292ZXJ5LiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHVibGsgZHJpdmVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6MjcuNzkzNDM4MDQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcwMzI5MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q4ZTIxYzA4NjM4OWYwYWZiN2RlOGE0NWY2MDgzMTQzODNkOGY1Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo1OToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi4xYTk1NjQyYjlkYjk0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbkBAIC0zMDI0LDYgKzMwMjQsNyBAQCBzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuIFxcdHVicS1cXHUwMDNlY2FuY2VsaW5nID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1YnEtXFx1MDAzZWNhbmNlbF9sb2NrKTtcXG4gXFx0dWJxLVxcdTAwM2VmYWlsX2lvID0gZmFsc2U7XFxuK1xcdHVicS1cXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcXG4gfVxcbiBcXG4gLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxcbmluZGV4IDI1NTQ4MDVlNWIwMmMuLjkyZjQwMTIxNzhmMDggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxcbkBAIC0yOSw2ICsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TVxcbiBfY3JlYXRlX2JhY2tmaWxlIDEgMTI4TVxcbiBfY3JlYXRlX2JhY2tmaWxlIDIgMTI4TVxcbiBcXG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIC1iIFxcdTAwMjZcXG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxIC1iIFxcXCIke1VCTEtfQkFDS0ZJTEVTWzBdfVxcXCIgXFx1MDAyNlxcbit1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgc3RyaXBlIC1xIDIgLXIgMSAtYiBcXFwiJHtVQkxLX0JBQ0tGSUxFU1sxXX1cXFwiIFxcXCIke1VCTEtfQkFDS0ZJTEVTWzJdfVxcXCIgXFx1MDAyNlxcbit3YWl0XFxuK1xcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgXFx1MDAyNlxcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbG9vcCAtcSAyIC1yIDEgXFxcIiR7VUJMS19CQUNLRklMRVNbMF19XFxcIiBcXHUwMDI2XFxuIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBzdHJpcGUgLXEgMiAtciAxIFxcXCIke1VCTEtfQkFDS0ZJTEVTWzFdfVxcXCIgXFxcIiR7VUJMS19CQUNLRklMRVNbMl19XFxcIiBcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjI5LjI2NDM2OTY2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjY4MzYwMzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRcIixcbiAgICBcInVibGtfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkOGUyMWMwODYzODlmMGFmYjdkZThhNDVmNjA4MzE0MzgzZDhmNWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo1OToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggNGQxN2VkMjY0ZGExYS4uMWE5NTY0MmI5ZGI5NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtMzAyNCw2ICszMDI0LDcgQEAgc3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxuIFx0dWJxLVx1MDAzZWNhbmNlbGluZyA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWNhbmNlbF9sb2NrKTtcbiBcdHVicS1cdTAwM2VmYWlsX2lvID0gZmFsc2U7XG4rXHR1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcbiB9XG4gXG4gLyogZGV2aWNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgYWZ0ZXIgYWxsIElPcyBhcmUgcmVhZHkgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoXG5pbmRleCAyNTU0ODA1ZTViMDJjLi45MmY0MDEyMTc4ZjA4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoXG5AQCAtMjksNiArMjksMTEgQEAgX2NyZWF0ZV9iYWNrZmlsZSAwIDI1Nk1cbiBfY3JlYXRlX2JhY2tmaWxlIDEgMTI4TVxuIF9jcmVhdGVfYmFja2ZpbGUgMiAxMjhNXG4gXG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIC1iIFx1MDAyNlxuK3VibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBsb29wIC1xIDIgLXIgMSAtYiBcIiR7VUJMS19CQUNLRklMRVNbMF19XCIgXHUwMDI2XG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgLWIgXCIke1VCTEtfQkFDS0ZJTEVTWzFdfVwiIFwiJHtVQkxLX0JBQ0tGSUxFU1syXX1cIiBcdTAwMjZcbit3YWl0XG4rXG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IG51bGwgLXEgMiAtciAxIFx1MDAyNlxuIHVibGtfcnVuX3F1aWVzY2VfcmVjb3ZlciAtdCBsb29wIC1xIDIgLXIgMSBcIiR7VUJMS19CQUNLRklMRVNbMF19XCIgXHUwMDI2XG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IHN0cmlwZSAtcSAyIC1yIDEgXCIke1VCTEtfQkFDS0ZJTEVTWzFdfVwiIFwiJHtVQkxLX0JBQ0tGSUxFU1syXX1cIiBcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjI5LjI2NDM3MTAwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjAwNzk2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB1YmxrX2Rydi5jIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgYWRkcyBhIGxpbmUgaW4gYHVibGtfZHJ2LmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFnc2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGFkZGl0aW9uIG9mIGB1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtgIGlzIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIHdlJ3JlIHJlc2V0dGluZyBhIGZsYWcgdGhhdCBjb250cm9scyBmb3JjaW5nIGFuIGFib3J0IG9uIGEgVUJMSyBxdWV1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGZvcmNlX2Fib3J0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgbGlrZWx5IHVzZWQgdG8gcHJldmVudCBmdXR1cmUgSU8gdG8gdGhpcyBxdWV1ZSBhZnRlciBzb21lIHR5cGUgb2YgZXJyb3IsIG9yIG1heWJlIGR1cmluZyBhIHJlc2V0IHByb2NlZHVyZS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSB0aGF0IHVzZXMgYHVicS1cdTAwM2Vmb3JjZV9hYm9ydGAgdG8ga25vdyB3aGF0IHRyaWdnZXJzIGl0IGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIGNoYW5nZSBtaWdodCBiZSByZWxhdGVkIHRvIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nIG9yIHBlcmhhcHMgYSBtb3JlIGdyYWNlZnVsIHJlY292ZXJ5IG1lY2hhbmlzbSB3aXRoaW4gdGhlIFVCTEsgYmxvY2sgZHJpdmVyLiBOb3csIHRoZSBwcmVzZW5jZSBvZiBhIHNlbGZ0ZXN0IHNjcmlwdCBpcyBlbmNvdXJhZ2luZy4gSXQgaG9wZWZ1bGx5IGNvdmVycyBzY2VuYXJpb3MgdGhhdCBleGVyY2lzZSB0aGlzIG5ldyBmbGFnLCB3aGljaCBJJ2xsIG5lZWQgdG8gcmV2aWV3LiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHVibGsgcXVldWUgaGFuZGxlcyBkaWZmZXJlbnQga2luZHMgb2YgYWJvcnQgY29uZGl0aW9ucywgYW5kIGVuc3VyaW5nIGl0IGNhbiByZWNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6MzQuMDg0NDU0MTI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzAyOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDEyPXN0YXRpYyB2b2lkIHVibGtfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwMjE6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDMxPXN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlxcdFxcdHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3ModWJxKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjM0LjEzNDE1OTU0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDYzMDI1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgdWJsayBJTyBGbGFnIFJlc2V0KipcblxuQWxyaWdodCwgSSdtIHRyYWNpbmcgZG93biB0aGlzIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBmdW5jdGlvbiBjYWxsLiBUaGUgY29kZSBmbG93IHNheXMgaXQgb3JpZ2luYXRlcyBmcm9tIGB1YmxrX21hcmtfaW9fcmVhZHlgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBvZiB0aGlzIGZ1bmN0aW9uLlwiIFNvLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGVyZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBpcyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBpbiB3aGljaCB0aG9zZSBmbGFncyBhcmUgZ2V0dGluZyByZXNldC4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBzdGF0ZSB0cmFuc2l0aW9uIGZvciBJL08gcmVxdWVzdHMgd2l0aGluIHRoZSB1YmxrIHN1YnN5c3RlbSwgYW5kIEkgbmVlZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHRyYW5zaXRpb24gaXMuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGNvbmRpdGlvbnMgdGhhdCBuZWNlc3NpdGF0ZSB0aGUgcmVzZXQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGludGVudGlvbiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjM3LjY0MDQ2Mzk4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzU3NTQ0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19tYXJrX2lvX3JlYWR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzAyMT1zdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAzMC0vKiBkZXZpY2UgY2FuIG9ubHkgYmUgc3RhcnRlZCBhZnRlciBhbGwgSU9zIGFyZSByZWFkeSAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDMxOnN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAzMi1cXHRzdHJ1Y3QgdWJsa19pbyAqaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzI4Nj1zdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzMDItXFx0XFx0dWJsa19hcHBseV9pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBcXHUwMDI2YXV0b19idWYsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzAzOlxcdFxcdHVibGtfbWFya19pb19yZWFkeSh1YiwgcV9pZCwgaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzA0LVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjk0PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcxOS1cXHRpZiAoIXJldClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzcyMDpcXHRcXHR1YmxrX21hcmtfaW9fcmVhZHkoZGF0YS1cXHUwMDNldWIsIHVicS1cXHUwMDNlcV9pZCwgaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzIxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTozNy45NzYyMjM5NDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMxMTk1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIHVibGsgRHJpdmVyIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBzbyBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gIGFyZSB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaW50byB0aGUgY29yZSBvZiB0aGlzLiBDbGVhcmx5LCB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIsIGB1YmxrYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgdG8gdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1YmxrYCBpcyBjb25maWd1cmVkLiBXaGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQ/IFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5PyBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgZmlyc3QgbG9vayBpbnRvIGhvdyB0aGlzIHRoaW5nIGlzIHB1dCB0b2dldGhlciBhbmQgY29uZmlndXJlZC4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTo0MS45MDc0Mjc0ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMjUyNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zMTU9Y29uZmlnIEJMS19ERVZfUkJEXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMjg6Y29uZmlnIEJMS19ERVZfVUJMS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjU5OjQyLjQwODY4Mzg4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDUxMDc3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBxdWVzdGlvbjpcblxuKipEZWNvbnN0cnVjdGluZyBEZXBlbmRlbmNpZXMgb2YgYEJMS19ERVZfVUJMS2AqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX1VCTEtgLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIGZ1bmN0aW9uLiAgSXQncyB1bmxpa2VseSB0aGF0IGBCTEtfREVWX1VCTEtgIGlzIGEgY29tcGxldGVseSBpbmRlcGVuZGVudCBtb2R1bGUuICBNeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvOlxuXG4xLiAgKipDb25zdWx0IERvY3VtZW50YXRpb24gXHUwMDI2IFNvdXJjZToqKiBGaXJzdCwgSSdkIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcywgbGlrZWx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIgb3IgdGhlIGRldmljZSBkcml2ZXIgc2VjdGlvbnMuIEknZCBiZSBsb29raW5nIGZvciBgI2lmZGVmYCBkaXJlY3RpdmVzLCByZWxhdGVkIHN0cnVjdHVyZXMsIG9yIGFueSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgaW4gdGhlIGNvZGUgaXRzZWxmLiBUaGUgaW5jbHVkZSBmaWxlcyBzaG91bGQgb2ZmZXIgYSB0cmVhc3VyZSB0cm92ZSBvZiBpbmZvcm1hdGlvbi5cblxuMi4gICoqRXhwbG9yZSBDb25maWd1cmF0aW9uIE9wdGlvbnM6KiogTmV4dCwgSSdkIGludmVzdGlnYXRlIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiAoYEtjb25maWdgIGZpbGVzKS4gSSdkIHNlYXJjaCBmb3IgYEJMS19ERVZfVUJMS2AgYW5kIGV4YW1pbmUgaXRzIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaG9zZSBvcHRpb25zIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBwcm92aWRlIGNydWNpYWwgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiDigJMgd2hldGhlciBpdCByZXF1aXJlcyBvdGhlciBibG9jayBkZXZpY2Ugc3VwcG9ydCAoYEJMS19ERVZfWFhYYCkgb3IgZ2VuZXJhbCBkZXZpY2UgZHJpdmVyIGluZnJhc3RydWN0dXJlLiBJJ2QgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy5cblxuMy4gICoqVHJhY2UgQ29kZSBQYXRoczoqKiBJZiB0aGUgZG9jdW1lbnRhdGlvbiBpc24ndCBpbW1lZGlhdGVseSBjbGVhciwgb3IgaWYgSSB3YW50IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcsIEkgd291bGQgZm9sbG93IGNvZGUgcGF0aHMuIEknZCBzdGFydCB3aXRoIHRoZSBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBgQkxLX0RFVl9VQkxLYCBhbmQgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB3aGljaCB2YXJpYWJsZXMgYXJlIHVzZWQuICBUaGlzIHdvdWxkIGV4cG9zZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEknZCB1c2UgbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYXJjaGl0ZWN0dXJlIHRvIGd1aWRlIG1lLiBGb3IgaW5zdGFuY2UsIEknZCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYmxvY2sgbGF5ZXIncyByZXF1ZXN0IHF1ZXVlLCBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgSS9PIHNjaGVkdWxlci5cblxuNC4gICoqQ29uc2lkZXIgUmVsYXRlZCBGZWF0dXJlczoqKiBFdmVuIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gdGhlIGNvZGUgZm9yIGBCTEtfREVWX1VCTEtgLCBJJ2QgdGhpbmsgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGNvbnNpZGVyIHdoYXQgaXQncyB0cnlpbmcgdG8gYWNjb21wbGlzaC4gRm9yIGV4YW1wbGUsIGlmIGl0J3MgYSBcInVzZXItc3BhY2UgYmxvY2sgZGV2aWNlLFwiIEknZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBpdCBwcm9iYWJseSBoaW5nZXMgb24gY2VydGFpbiB1c2VyLXNwYWNlIGludGVyZmFjZXMgKGxpa2UgY2hhcmFjdGVyIGRldmljZSBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlKSBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2QgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgc3RvcmFnZSB0ZWNobm9sb2dpZXMgb3Igc3Vic3lzdGVtcy5cblxuNS4gICoqTG9vayBmb3IgTW9kdWxlIExvYWQgT3JkZXJzL1JlbGF0aW9uc2hpcHM6KiogSSdkIGNvbnNpZGVyIGhvdyBtb2R1bGVzIGFyZSBsb2FkZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgZnJvbSB0aGF0LCB0aGF0IG1vZHVsZXMgaGF2ZSBzcGVjaWZpYyByZWxhdGlvbnNoaXBzLlxuXG5CYXNpY2FsbHksIEkgYW0gbWFwcGluZyBvdXQgZXZlcnkgcmVsYXRpb25zaGlwIEkgY2FuIGZpbmQuIEl0IG1pZ2h0IHRha2UgYSBiaXQgb2YgZGlnZ2luZywgYnV0IHRoZSBrZXJuZWwgdXN1YWxseSBtYWtlcyB0aGVzZSBkZXBlbmRlbmNpZXMgcmVhc29uYWJseSBjbGVhciwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBjb21tZW50cy4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IHRoaXMgd2lsbCBwcm9iYWJseSByZXZlYWwgdGhhdCBpdCBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc29tZSBrZXJuZWwgY29tcG9uZW50cy4gT25jZSBJIGdhdGhlciBhbGwgdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gZm9ybXVsYXRlIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGBCTEtfREVWX1VCTEtgIGFjdHVhbGx5IHJlcXVpcmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6NDguMTEzNzk1MDQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRoZWxwXFxuIDM0MjpcXHRcXHQgIHVibGsgZHJpdmVyIHN0YXJ0ZWQgdG8gdGFrZSBwbGFpbiBjb21tYW5kIGVuY29kaW5nLCB3aGljaCB0dXJucyBvdXRcXG4gMzQzOlxcdFxcdCAgb25lIGJhZCB3YXkuIFRoZSB0cmFkaXRpb25hbCBpb2N0bCBjb21tYW5kIG9wY29kZSBlbmNvZGVzIG1vcmVcXG4gMzQ0OlxcdFxcdCAgaW5mbyBhbmQgYmFzaWNhbGx5IGRlZmluZXMgZWFjaCBjb2RlIHVuaXF1ZWx5LCBzbyBvcGNvZGUgY29uZmxpY3RcXG4gMzQ1OlxcdFxcdCAgaXMgYXZvaWRlZCwgYW5kIGRyaXZlciBjYW4gaGFuZGxlIHdyb25nIGNvbW1hbmQgZWFzaWx5LCBtZWFudGltZSBpdFxcbiAzNDY6XFx0XFx0ICBtYXkgaGVscCBzZWN1cml0eSBzdWJzeXN0ZW0gdG8gYXVkaXQgaW9fdXJpbmcgY29tbWFuZC5cXG4gMzQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTo0OC4xMTM4OTIwNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0Mzc1OTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgQkxLX0RFVl9VQkxLYCBDb25maWd1cmF0aW9uOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGBCTEtfREVWX1VCTEtgLCB3aGljaCBpcyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHRoZSBsaW5lIGB1YnEtXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtgIHdpdGhpbiB0aGUgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhZGp1c3RtZW50IOKAkyB3ZSdyZSBleHBsaWNpdGx5IHJlc2V0dGluZyBhIGZsYWcsIHdoaWNoIGRlZmluaXRlbHkgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhlIGtleSByZWFzb25pbmcgaXMgdGhlIGJ1ZyBpdCdzIGFkZHJlc3Npbmc6IHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSByZXNldCwgYW5kIHRoYXQgY291bGQgbGVhZCB0byBzZXJpb3VzbHkgaW5jb3JyZWN0IGJlaGF2aW9yIOKAkyBsaWtlIGluYXBwcm9wcmlhdGVseSBhYm9ydGluZyBJL09zLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIHRlcm1zIG9mIGRhdGEgaW50ZWdyaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGl0c2VsZiBpcyBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQncyBlaXRoZXIgaW5saW5lZCBvciBhIHByZXR0eSBsZWFuIGhlbHBlciBmdW5jdGlvbi4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIGl0IGFjdHVhbGx5IGlubGluZWQsIGFuZCBpZiBub3QsIGhvdyB3aWRlbHkgdXNlZCBpcyBpdD8gV2Uga25vdyBpdCdzIGNhbGxlZCBieSBgdWJsa19tYXJrX2lvX3JlYWR5YC4gVGhhdCBmdW5jdGlvbiBpcyB0aGVuIHVzZWQgd2l0aGluIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2AuIFNvLCBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gIGFyZSBnb2luZyB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBwb2ludHMgb2YgZm9jdXMgZm9yIGFuYWx5emluZyB0aGUgc2NvcGUgb2YgdGhpcyBmaXguIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucyBub3cgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NTk6NTQuMTU3NjU0Mjg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDA4Mjc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2ZldGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzA2OD1zdGF0aWMgaW5saW5lIGludCB1YmxrX2NoZWNrX2NtZF9vcCh1MzIgY21kX29wKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwODAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwODE6LyogTXVzdCBydW4gYmVmb3JlIHVibGtfZmlsbF9pb19jbWQoKSAvIF9fdWJsa19mZXRjaCgpLiAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDgyLXN0YXRpYyBpbmxpbmUgaW50IHVibGtfdmFsaWRhdGVfaW9fYnVmKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzI0Nz1zdGF0aWMgaW50IHVibGtfY2hlY2tfZmV0Y2hfYnVmKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIF9fdTY0IGJ1Zl9hZGRyKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyNjItXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMyNjM6c3RhdGljIGludCBfX3VibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjY0LVxcdFxcdFxcdHN0cnVjdCB1YmxrX2lvICppbywgdTE2IHFfaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI4NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI4NjpzdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg3LVxcdFxcdCAgICAgIHN0cnVjdCB1YmxrX2lvICppbywgX191NjQgYnVmX2FkZHIsIHUxNiBxX2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyOTktXFx0aWYgKCFyZXQpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDA6XFx0XFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzMwMS1cXHRpZiAoIXJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNTk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQwOC1cXHRcXHRcXHRnb3RvIG91dDtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzQwOTpcXHRcXHRyZXQgPSB1YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBhZGRyLCBxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQxMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2OTQ9c3RhdGljIGludCB1YmxrX2JhdGNoX3ByZXBfaW8oc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzEzLVxcdHVibGtfaW9fbG9jayhpbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM3MTQ6XFx0cmV0ID0gX191YmxrX2ZldGNoKGRhdGEtXFx1MDAzZWNtZCwgZGF0YS1cXHUwMDNldWIsIGlvLCB1YnEtXFx1MDAzZXFfaWQpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzE1LVxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo1OTo1NC4yMTc3MzkyMzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwNDk5NjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIGlvX3VyaW5nIENvbW1hbmQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBjb21tYW5kcyBzdWJtaXR0ZWQgdmlhIGlvX3VyaW5nIHdpdGhpbiB0aGUgVWJsayAoVW5pdmVyc2FsIEJsb2NrIExheWVyKSBmcmFtZXdvcmsuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBjZW50cmFsIGh1YiB3aGVyZSBldmVyeXRoaW5nIGtpY2tzIG9mZi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgcmVhbGx5IGJlZ2lucy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgYHVibGtfY2hfdXJpbmdfY21kYCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjAyLjYyMjczOTA5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMTQyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzQxPXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTgtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTk6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjAtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0OTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyMjpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMC1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDItXFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0MzpcXHRcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0NC1cXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDc6XFx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ4LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTUwLVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTUxOlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE1Mi1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MDIuNjc3OTU5NDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDM2ODk4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIGJyb2tlbiBkb3duIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZW06XG5cbioqRGlzc2VjdGluZyB0aGUgaW9fdXJpbmcgQ29tbWFuZCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB1YmxrX2NoX3VyaW5nX2NtZGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IG5hbWUgc2NyZWFtcyBcInRoaXMgaXMgdGhlIGNvcmUgaGFuZGxlciBmb3IgaW9fdXJpbmcgY29tbWFuZHNcIi4gSXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBkaXNwYXRjaGVyLCB0aGUgb3JjaGVzdHJhdG9yLiBFdmVyeXRoaW5nIGZsb3dzIHRocm91Z2ggaGVyZSBmcm9tIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIGl0IGxvb2tzIGxpa2UuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhIGxheWVyLiBJIHNlZSBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBUaGF0IG5hbWUgaXMgaW50ZXJlc3RpbmcuIFwiTG9jYWxcIiBpbXBsaWVzIHRoZXJlJ3Mgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoaXMgaGFuZGxlciwgcGVyaGFwcyBwZXItQ1BVIG9yIHBlci1kZXZpY2UgcmVzb3VyY2UsIG9yIG1heWJlIGl0J3MgdGhlIGNvcmUgd29ya2hvcnNlIHdpdGhpbiBgdWJsa19jaF91cmluZ19jbWRgLiBNeSBndWVzcyBpcyB0aGUgbG9jYWwgdmVyc2lvbiBpcyBnb2luZyB0byBoYW5kbGUgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgdGhlIGlvIGNvbW1hbmQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgXCJsb2NhbFwiIHJlZmVycyB0byBpbiB0aGlzIGNvbnRleHQuXG5cbkJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIGB1YmxrX2JhdGNoX3ByZXBfaW9gLiBUaGlzIHNvdW5kcyBsaWtlIGFuIG9wdGltaXphdGlvbiBvciBwcmUtcHJvY2Vzc2luZyBzdGFnZS4gUGVyaGFwcyBpdCdzIHByZXBwaW5nIGJhdGNoZXMgb2YgSS9PIG9wZXJhdGlvbnMgYmVmb3JlIHRoZXkgaGl0IHRoZSBjb3JlIGhhbmRsZXIuIEl0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzdWJzeXN0ZW0gaXMgb3B0aW1pemVkLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIG1lcmdpbmcgb3IgY29hbGVzY2luZyByZXF1ZXN0cywgb3IgcHJlLWNhbGN1bGF0aW5nIHNvbWUgb2YgdGhlIG1ldGFkYXRhIG5lZWRlZCBieSB0aGUgaGFuZGxlci4gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDowNi43ODE2NTIwMzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzIxMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfYmF0Y2hfcHJlcF9pb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM2ODE9c3RhdGljIHZvaWQgdWJsa19iYXRjaF9yZXZlcnRfcHJlcF9jbWQoc3RydWN0IHVibGtfYmF0Y2hfaW9faXRlciAqaXRlcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNjkzLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNjk0OnN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM2OTUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNzI1PXN0YXRpYyBpbnQgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWQoY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzQyLVxcdG11dGV4X2xvY2soXFx1MDAyNmRhdGEtXFx1MDAzZXViLVxcdTAwM2VtdXRleCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM3NDM6XFx0cmV0ID0gdWJsa193YWxrX2NtZF9idWYoXFx1MDAyNml0ZXIsIGRhdGEsIHVibGtfYmF0Y2hfcHJlcF9pbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3NDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjA2LjgzNTk3ODI2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTg1ODQyNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIHVibGsgQmF0Y2ggUHJlcGFyYXRpb24gRmxvdyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHRoZSBjb2RlLCBJIHNlZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGluZyBgdWJsa193YWxrX2NtZF9idWZgLCB3aGljaCBpdHNlbGYgdXNlcyBgdWJsa19iYXRjaF9wcmVwX2lvYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZGAgaXMgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyBiYXRjaGVzIG9mIEkvTyBvcGVyYXRpb25zLCBsaWtlbHkgYnkgaXRlcmF0aW5nIHRocm91Z2ggYSBidWZmZXIgb2YgY29tbWFuZHMuIFRoZSBmYWN0IHRoYXQgYHVibGtfYmF0Y2hfcHJlcF9pb2AgaXMgYmVpbmcgdXNlZCBtZWFucyB0aGlzIHByZXBhcmF0aW9uIHBoYXNlIGhhbmRsZXMgdGhlIGNvcmUgcHJlLXByb2Nlc3NpbmcgbG9naWMgZm9yIHRoZSBiYXRjaCBvZiBjb21tYW5kcywgZm9yIGV4YW1wbGUsIGNvbW1hbmQgdmFsaWRpdHkgY2hlY2tzLCBhbmQgZGF0YSBzZXR1cC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqaG93Ki4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHJlc3BvbnNpYmlsaXRpZXMgaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgSS9PIGZsb3cuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjYWxsIHNpdGVzIG9mIGB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZGAuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBiYXRjaCBwcmVwYXJhdGlvbiwgYW5kIHdoYXQgYnJvYWRlciBjb250ZXh0IGl0J3Mgb3BlcmF0aW5nIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjEzLjAyMTgyMzQ5MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3OTYyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19oYW5kbGVfYmF0Y2hfcHJlcF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjk0PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcyNC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzcyNTpzdGF0aWMgaW50IHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kKGNvbnN0IHN0cnVjdCB1YmxrX2JhdGNoX2lvX2RhdGEgKmRhdGEpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM5ODQ9c3RhdGljIGludCB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDAxMy1cXHRcXHRcXHRnb3RvIG91dDtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDAxNDpcXHRcXHRyZXQgPSB1YmxrX2hhbmRsZV9iYXRjaF9wcmVwX2NtZChcXHUwMDI2ZGF0YSk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQwMTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjEzLjA3NTYyNzE1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgzMjQ0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB1YmxrIEkvTyBVcmluZyBCYXRjaCBDb21tYW5kIEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgaG93IHRoaXMgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBiYXRjaGVkIGNvbW1hbmRzIGNvbWluZyBmcm9tIGlvX3VyaW5nLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNhbGxpbmcgYHVibGtfaGFuZGxlX2JhdGNoX3ByZXBfY21kYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1ha2VzIHNlbnNlIHRoYXQgcHJlcGFyaW5nIHRoZSBjb21tYW5kcyB3b3VsZCBiZSBzZXBhcmF0ZWQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCwgaXQncyBhIGdvb2QgaWRlYSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAgYWN0dWFsbHkgZG9lcy4gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyBmdW5jdGlvbiBpbnNpZGUgYW5kIG91dCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb2YgdGhlIGJhdGNoZWQgSS9PIG9wZXJhdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IGl0J3MgbWFuYWdpbmcgdGhlc2UgcmVxdWVzdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhhdCBwcmVwYXJhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBjaGFpbiBhbmQgdGhlIHJvbGVzIG9mIGVhY2ggcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDoxNy41NTg4NzM5ODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzAyMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzk1ND1zdGF0aWMgaW50IHVibGtfaGFuZGxlX25vbl9iYXRjaF9jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM5ODMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM5ODQ6c3RhdGljIGludCB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM5ODUtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfYmF0Y2hfaW9fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTYwLVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTYxOlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE2Mi1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MTcuNjA2MTc4NzAxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NzU2MDY2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCYXRjaCBJTyBDb21tYW5kIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIGNvcmUgaGFuZGxlciBmb3IgYmF0Y2ggSU8gb3BlcmF0aW9ucyB3aXRoaW4gaW9fdXJpbmcsIGdvdCBpdC4gVGhlIGtleSBwaWVjZXMgSSBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiBhcmUgYHVibGtfY2hfdXJpbmdfY21kYCBhbmQsIG9mIGNvdXJzZSwgdGhpcyBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgIGl0c2VsZi4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCBzaG91bGQgaGFwcGVuLlxuXG5Ob3csIEknbSB0cmFjaW5nIHRoZSBmbG93LCBhbmQgSSBzZWUgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGJlaW5nIGNhbGxlZCBmcm9tIGB1YmxrX21hcmtfaW9fcmVhZHlgLiBBbmQgYHVibGtfbWFya19pb19yZWFkeWAsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2JhdGNoX3ByZXBfaW9gLiBUaGF0IG1ha2VzIHNlbnNlIGZvciB0aGUgbm9ybWFsIHBhdGgsIHByZXBwaW5nIGFuZCByZWFkeWluZyB0aGUgSU8gZm9yIHByb2Nlc3NpbmcuIEJ1dCB3YWl0Li4uIHRoaXMgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGlzIHRvbyBpbXBvcnRhbnQgdG8ganVzdCB0cnVzdCB0aGUgb2J2aW91cyBjYWxscy4gSXQgc2VlbXMgbGlrZSBJIGFsc28gcmVtZW1iZXIgaXQgYmVpbmcgY2FsbGVkIGZyb20gYHVibGtfY2FuY2VsX3F1ZXVlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgZm9yIGNsZWFuaW5nIHVwIGFuZCByZXNldHRpbmcgaW4gdGhlIGV2ZW50IG9mIGVycm9ycyBvciBjYW5jZWxsYXRpb24uIExldCdzIG5vdCBtYWtlIGFzc3VtcHRpb25zIGhlcmUuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNhbGwgc2l0ZXMgZm9yIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29udGV4dHMgaXQncyB1c2VkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTkyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjIzLjU4MTc4NzU2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MDIwOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDEyPXN0YXRpYyB2b2lkIHVibGtfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwMjAtLyogcmVzZXQgcGVyLXF1ZXVlIGlvIGZsYWdzICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwMjE6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDMxPXN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDUxLVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDUyOlxcdFxcdHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3ModWJxKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA1My1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjI0LjA4NjgxMzIyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI4NzI0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgdWJsa19tYXJrX2lvX3JlYWR5YCBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyB0aGF0IHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoIGlzICpvbmx5KiBlbnRlcmVkIHRocm91Z2ggYHVibGtfbWFya19pb19yZWFkeWAuIFRoYXQncyB0aGUga2V5LiBLbm93aW5nIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0IEkgbmVlZCB0byBsb29rIGF0IGltbWVkaWF0ZWx5LiBOb3csIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYHVibGtfbWFya19pb19yZWFkeWAgYW5kIGZpZ3VyZSBvdXQgKnByZWNpc2VseSogd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIFVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgY2FsbGVkLCBhbmQgaXRzIGVmZmVjdHMgb24gdGhlIHN5c3RlbSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDoyOC4xMTU1NDAxNTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDMxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDMxOlxcdHN0YXRpYyB2b2lkIHVibGtfbWFya19pb19yZWFkeShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCB1MTYgcV9pZCxcXG4zMDMyOlxcdFxcdHN0cnVjdCB1YmxrX2lvICppbylcXG4zMDMzOlxcdFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZ1Yi1cXHUwMDNlbXV0ZXgpXFxuMzAzNDpcXHR7XFxuMzAzNTpcXHRcXHRzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxID0gdWJsa19nZXRfcXVldWUodWIsIHFfaWQpO1xcbjMwMzY6XFx0XFxuMzAzNzpcXHRcXHRpZiAoIXViLVxcdTAwM2V1bnByaXZpbGVnZWRfZGFlbW9ucyBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG4zMDM4OlxcdFxcdFxcdHViLVxcdTAwM2V1bnByaXZpbGVnZWRfZGFlbW9ucyA9IHRydWU7XFxuMzAzOTpcXHRcXG4zMDQwOlxcdFxcdHVicS1cXHUwMDNlbnJfaW9fcmVhZHkrKztcXG4zMDQxOlxcdFxcdHVibGtfcmVzZXRfaW9fZmxhZ3ModWJxLCBpbyk7XFxuMzA0MjpcXHRcXG4zMDQzOlxcdFxcdC8qIENoZWNrIGlmIHRoaXMgc3BlY2lmaWMgcXVldWUgaXMgbm93IGZ1bGx5IHJlYWR5ICovXFxuMzA0NDpcXHRcXHRpZiAodWJsa19xdWV1ZV9yZWFkeSh1YnEpKSB7XFxuMzA0NTpcXHRcXHRcXHR1Yi1cXHUwMDNlbnJfcXVldWVfcmVhZHkrKztcXG4zMDQ2OlxcdFxcbjMwNDc6XFx0XFx0XFx0LypcXG4zMDQ4OlxcdFxcdFxcdCAqIFJlc2V0IHF1ZXVlIGZsYWdzIGFzIHNvb24gYXMgdGhpcyBxdWV1ZSBpcyByZWFkeS5cXG4zMDQ5OlxcdFxcdFxcdCAqIFRoaXMgY2xlYXJzIHRoZSBjYW5jZWxpbmcgZmxhZywgYWxsb3dpbmcgYmF0Y2ggRkVUQ0ggY29tbWFuZHNcXG4zMDUwOlxcdFxcdFxcdCAqIHRvIHN1Y2NlZWQgZHVyaW5nIHJlY292ZXJ5IHdpdGhvdXQgd2FpdGluZyBmb3IgYWxsIHF1ZXVlcy5cXG4zMDUxOlxcdFxcdFxcdCAqL1xcbjMwNTI6XFx0XFx0XFx0dWJsa19xdWV1ZV9yZXNldF9pb19mbGFncyh1YnEpO1xcbjMwNTM6XFx0XFx0fVxcbjMwNTQ6XFx0XFxuMzA1NTpcXHRcXHQvKiBDaGVjayBpZiBhbGwgcXVldWVzIGFyZSByZWFkeSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDoyOC4xMTU5NDIzMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNzc4NzcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVzZXR0aW5nIGB1YnEtXHUwMDNlZm9yY2VfYWJvcnRgIHRvIGBmYWxzZWAgd2l0aGluIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBzeW1ib2xzOiBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgLiBCdXQgd2FpdC4uLiB3YXNuJ3QgYHVibGtfbWFya19pb19yZWFkeWAgY2FsbGVkIGJ5IGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfYmF0Y2hfcHJlcF9pb2A/IFJpZ2h0LCBnb3R0YSBpbmNsdWRlIHRob3NlIGluIHRoZSByZXZpZXcuIExldCdzIG1ha2Ugc3VyZSBJIGxvb2sgYXQgdGhlIGNhbGxzIHRvIGJvdGggYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBzcGVjaWZpY2FsbHkuIEFuZCwgd2FpdCEgV2hhdCBhYm91dCBgdWJsa19jdHJsX3VyaW5nX2NtZGA/IFRoYXQncyB0aGUgY29udHJvbCBjb21tYW5kIGhhbmRsZXIsIGFuZCB0aGUgcmVzZXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgdGhlcmUgdG9vLCBzbyBsZXQncyBtYWtlIHN1cmUgdG8gZXhhbWluZSB0aGF0IGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MzMuMjQzNzMzMDU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU1NDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTYxNT1zdGF0aWMgYm9vbCB1YmxrX3RyeV9idWZfbWF0Y2goc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjY4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjY5OnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzAtXFx0XFx0dTMyIGNtZF9vcCwgc3RydWN0IHVibGtzcnZfY3RybF9jbWQgKmhlYWRlcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ3LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzQ4OnN0YXRpYyBib29sIHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKHUzMiBjbWRfb3ApXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NDkte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NjE6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2Mi1cXHRcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3MS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc3MjpcXHRpZiAodWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAoY21kX29wKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzczLVxcdCAgICBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwMS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgwMjpcXHRcXHRyZXQgPSB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24odWIsIGNtZF9vcCwgXFx1MDAyNmhlYWRlcik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY3RsX2ZvcHMgPSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzMtXFx0Lm9wZW5cXHRcXHQ9IG5vbnNlZWthYmxlX29wZW4sXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4NzQ6XFx0LnVyaW5nX2NtZCAgICAgID0gdWJsa19jdHJsX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3NS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDozMy4yODkyOTA1NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxMDAwOTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHVibGsgQ29udHJvbCBDb21tYW5kIEhhbmRsZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGB1YmxrYCBzdWJzeXN0ZW0gaGFuZGxlcyBjb250cm9sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gdGhlIFVyaW5nIGludGVyZmFjZS4gSSBzZWUgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgdGhlIGNlbnRyYWwgY29tbWFuZCBoYW5kbGVyIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBwb2ludCBvZiBjb250YWN0IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIHR3ZWFraW5nIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYC4gSSBrbm93IHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaXMgXCJyZWFkeSxcIiBzcGVjaWZpY2FsbHkgd2hlbiBgdWJsa19xdWV1ZV9yZWFkeSh1YnEpYCByZXR1cm5zIHRydWUuIFRoYXQgaGFwcGVucyB3aGVuIHRoZSBudW1iZXIgb2YgSS9PcyByZWFkeSB0byBwcm9jZXNzIChgdWJxLVx1MDAzZW5yX2lvX3JlYWR5YCkgZXF1YWxzIHRoZSBxdWV1ZSBkZXB0aCAoYHVicS1cdTAwM2VxX2RlcHRoYCkuIFRoYXQncyBhIGtleSBzdGF0ZS5cblxuU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBhcmUgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19iYXRjaF9wcmVwX2lvYCwgYXMgdGhlc2UgYXJlIHRoZSB0cmlnZ2Vycy4gYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIEkgc2hvdWxkIGJlIHB1dHRpbmcgbW9zdCBvZiBteSBmb2N1cy4gQW5kIG9mIGNvdXJzZSwgYHVibGtfY3RybF91cmluZ19jbWRgIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2luY2UgaXQncyB0aGUgZGV2aWNlIHN0YXRlIGNvbnRyb2xsZXIsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBsaWtlIHN0b3BwaW5nLCBzdGFydGluZywgYW5kIHJlY292ZXJ5IGFyZSBtYW5hZ2VkLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gYGZvcmNlX2Fib3J0YCBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBiZWluZyBzZXQuIEl0J3MgcHJvYmFibHkga2V5IGZvciB1bmRlcnN0YW5kaW5nIGNlcnRhaW4ga2luZHMgb2YgZmFpbHVyZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjM5LjI5OTMwMjUzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0OTY2NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvcmNlX2Fib3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQyPXN0cnVjdCB1YmxrX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNDktXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1MDpcXHRib29sIGZvcmNlX2Fib3J0O1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTEtXFx0Ym9vbCBjYW5jZWxpbmc7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0MT1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNDYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxNDc6XFx0LyogV2l0aCByZWNvdmVyeSBmZWF0dXJlIGVuYWJsZWQsIGZvcmNlX2Fib3J0IGlzIHNldCBpblxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTQ4LVxcdCAqIHVibGtfc3RvcF9kZXYoKSBiZWZvcmUgY2FsbGluZyBkZWxfZ2VuZGlzaygpLiBXZSBoYXZlIHRvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE1Mi1cXHQgKlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTUzOlxcdCAqIE5vdGU6IGZvcmNlX2Fib3J0IGlzIGd1YXJhbnRlZWQgdG8gYmUgc2VlbiBiZWNhdXNlIGl0IGlzIHNldFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTU0LVxcdCAqIGJlZm9yZSByZXF1ZXN0IHF1ZXVlIGlzIHVucWl1ZXNjZWQuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE1Ni1cXHRpZiAodWJsa19ub3Nydl9zaG91bGRfcXVldWVfaW8odWJxKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMTU3OlxcdCAgICB1bmxpa2VseShSRUFEX09OQ0UodWJxLVxcdTAwM2Vmb3JjZV9hYm9ydCkpKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTU4LVxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIxNzY9c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgX191YmxrX3F1ZXVlX3JxX2NvbW1vbihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODgtXFx0LypcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4OTpcXHQgKiAtXFx1MDAzZWNhbmNlbGluZyBoYXMgdG8gYmUgaGFuZGxlZCBhZnRlciAtXFx1MDAzZWZvcmNlX2Fib3J0IGFuZCAtXFx1MDAzZWZhaWxfaW9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE5MC1cXHQgKiBpcyBkZWFsdCB3aXRoLCBvdGhlcndpc2UgdGhpcyByZXF1ZXN0IG1heSBub3QgYmUgZmFpbGVkIGluIGNhc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNTE2PXN0YXRpYyB2b2lkIHVibGtfY2hfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTkxLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1Yi1cXHUwMDNlZGV2X2luZm8ubnJfaHdfcXVldWVzOyBpKyspXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1OTI6XFx0XFx0XFx0V1JJVEVfT05DRSh1YmxrX2dldF9xdWV1ZSh1YiwgaSktXFx1MDAzZWZvcmNlX2Fib3J0LCB0cnVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjU5My1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yODI0PXN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX3F1ZXVlKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjgyOS1cXHRzcGluX2xvY2soXFx1MDAyNnVicS1cXHUwMDNlZXZ0c19sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjgzMDpcXHR1YnEtXFx1MDAzZWZvcmNlX2Fib3J0ID0gdHJ1ZTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjgzMS1cXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZ1YnEtXFx1MDAzZWZjbWRfaGVhZCwgXFx1MDAyNmZjbWRfbGlzdCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjkzOT1zdGF0aWMgdm9pZCB1YmxrX3dhaXRfdGFnc2V0X3Jxc19pZGxlKHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjk1My1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjk1NDpzdGF0aWMgdm9pZCB1YmxrX2ZvcmNlX2Fib3J0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTU1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTY2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1Yi1cXHUwMDNlZGV2X2luZm8ubnJfaHdfcXVldWVzOyBpKyspXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI5Njc6XFx0XFx0dWJsa19nZXRfcXVldWUodWIsIGkpLVxcdTAwM2Vmb3JjZV9hYm9ydCA9IHRydWU7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5NjgtXFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZSh1Yi1cXHUwMDNldWJfZGlzay1cXHUwMDNlcXVldWUpO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI5ODg9c3RhdGljIHZvaWQgdWJsa19zdG9wX2Rldl91bmxvY2tlZChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI5OTYtXFx0aWYgKHVibGtfbm9zcnZfZGV2X3Nob3VsZF9xdWV1ZV9pbyh1YikpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI5OTc6XFx0XFx0dWJsa19mb3JjZV9hYm9ydF9kZXYodWIpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yOTk4LVxcdGRlbF9nZW5kaXNrKHViLVxcdTAwM2V1Yl9kaXNrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMDIxPXN0YXRpYyB2b2lkIHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3Moc3RydWN0IHVibGtfcXVldWUgKnVicSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMDI2LVxcdHVicS1cXHUwMDNlZmFpbF9pbyA9IGZhbHNlO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDI3OlxcdHVicS1cXHUwMDNlZm9yY2VfYWJvcnQgPSBmYWxzZTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzAyOC19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzg3OD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfYXR0YWNoKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzg4Ni1cXHRzcGluX2xvY2soXFx1MDAyNnVicS1cXHUwMDNlZXZ0c19sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzg4NzpcXHRpZiAodW5saWtlbHkodWJxLVxcdTAwM2Vmb3JjZV9hYm9ydCB8fCB1YnEtXFx1MDAzZWNhbmNlbGluZykpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzg4OC1cXHRcXHRmcmVlID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6MzkuNjA0Mjc1MzM5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NzE5MDAyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVQkxLIEZvcmNlIEFib3J0IEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBjYW4gc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIGluIHRoZSBVQkxLIGRyaXZlci4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSdzIHVzaW5nIGBmb3JjZV9hYm9ydGAgaW4gdGhlIGZ1bmN0aW9ucyBgdWJsa19jaF9yZWxlYXNlX3dvcmtfZm5gLCBgdWJsa19iYXRjaF9jYW5jZWxfcXVldWVgLCBhbmQgYHVibGtfZm9yY2VfYWJvcnRfZGV2YC4gQW5kIHRoZW4gaXQncyB1c2VkIHdoZW4gcHJlcGFyaW5nIGFuZCBhdHRhY2hpbmcgcmVxdWVzdHM6IGB1YmxrX3ByZXBfcmVxYCBhbmQgYHVibGtfYmF0Y2hfYXR0YWNoYCByZXNwZWN0aXZlbHkuXG5cblRoZSBrZXkgY2hhbmdlIGhlcmUsIGFuZCB0aGUgYml0IHRoYXQgaGFzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBpcyB0aGUgcmVzZXQgb2YgYGZvcmNlX2Fib3J0YCB3aXRoaW4gYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgLiBUaGlzIGlzIHVuZG91YnRlZGx5IGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBhIGdvb2Qgb25lIGF0IHRoYXQuIEl0J3MgYWRkcmVzc2luZyB0aGUgaXNzdWUgb2YgYGZvcmNlX2Fib3J0YCBub3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZCBkdXJpbmcgcmVjb3Zlcnkgc2NlbmFyaW9zLCB3aGljaCB3b3VsZCBjbGVhcmx5IGxlYWQgdG8gcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSBhbHdheXMgYXBwcmVjaWF0ZSBhIHRhcmdldGVkIGJ1ZyBmaXggbGlrZSB0aGlzLlxuXG5UaGUgZmFjdCB0aGF0IGB0ZXN0X3JlY292ZXJfMDMuc2hgIGlzIGJlaW5nIG1vZGlmaWVkIHRlbGxzIG1lIHRoZXkndmUgcHJvYWN0aXZlbHkgY3JlYXRlZCBhIHRlc3QgY2FzZSB0byB2YWxpZGF0ZSB0aGlzIGZpeC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UuIEnigJlsbCBtYWtlIHN1cmUgdG8gcmV2aWV3IHRoaXMgc2VsZi10ZXN0IHZlcnkgY2xvc2VseS5cblxuVGhlIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgYEJMS19ERVZfVUJMS2AgY29uZmlnLCB3aGljaCBpcyB0byBiZSBleHBlY3RlZCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBvdXIgYmFzZXMuIFRoZSBjb3JlIHN5bWJvbHMgaGVyZSBzZWVtIHRvIGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX2JhdGNoX2lvX3VyaW5nX2NtZGAsIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW7igJl0IGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIExvb2tzIGxpa2UgYEJMS19ERVZfVUJMS2AgcmVsaWVzIG9uIGBJT19VUklOR2AsIHdoaWNoIGlzIHN0YW5kYXJkLiBKdXN0IGEgcXVpY2sgY2hlY2sgYWdhaW4gb24gYEJMS19ERVZfVUJMS2AgdG8gY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6NDYuMTc2MTc3OTk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkxNjIyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfVUJMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6NDYuNjQ1MzQ0NzI2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDAwOTI3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEJMS19ERVZfVUJMS2AgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgQkxLX0RFVl9VQkxLYC4gQmVmb3JlIEkgc3RhcnQgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwOyBJIGNhbid0IGVmZmVjdGl2ZWx5IGV2YWx1YXRlIHRoaXMgY29tcG9uZW50J3Mgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgd2hhdCBpdCBsZWFucyBvbiBhbmQsIGNydWNpYWxseSwgd2hhdCBtaWdodCBiZSBsZWFuaW5nIG9uICppdCouIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2VsZi1jb250YWluZWQgbW9kdWxlLCBvciBzb21ldGhpbmcgdGhhdCdzIGludGVyd292ZW4gd2l0aCBjb3JlIGluZnJhc3RydWN0dXJlLCBkcml2ZXIgZnJhbWV3b3Jrcywgb3IgZXZlbiB1c2Vyc3BhY2UgdXRpbGl0aWVzPyBBIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2sgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50IHRvIGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgbXkgYW5hbHlzaXMuIFdlIG5lZWQgdG8gZmluZCB0aGUgY3JpdGljYWwgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDo1MC41ODU0Mzk5OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyOCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyODpcXHRjb25maWcgQkxLX0RFVl9VQkxLXFxuIDMyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG4gMzMwOlxcdFxcdHNlbGVjdCBJT19VUklOR1xcbiAzMzE6XFx0XFx0aGVscFxcbiAzMzI6XFx0XFx0ICBpb191cmluZyBiYXNlZCB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLiBUb2dldGhlciB3aXRoIHVibGsgc2VydmVyLCB1YmxrXFxuIDMzMzpcXHRcXHQgIGhhcyBiZWVuIHdvcmtpbmcgd2VsbCwgYnV0IGludGVyZmFjZSB3aXRoIHVzZXJzcGFjZSBvciBjb21tYW5kIGRhdGFcXG4gMzM0OlxcdFxcdCAgZGVmaW5pdGlvbiBpc24ndCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcXG4gMzM1OlxcdFxcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cXG4gMzM2OlxcdFxcbiAzMzc6XFx0Y29uZmlnIEJMS0RFVl9VQkxLX0xFR0FDWV9PUENPREVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAwOjUwLjU4NTUwMjUwNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzMzNDAxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsa19jaCBEcml2ZXIncyBJT19VUklORyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVibGtfY2hgIGRyaXZlciBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCBgSU9fVVJJTkdgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0IGV4cGxpY2l0bHkgc2VsZWN0cyBgSU9fVVJJTkdgLCB3aGljaCBpcyBnb29kLiBUaGUgS2NvbmZpZyBlbnRyeSBpc24ndCBkZXBlbmRlbnQgb24gYW55dGhpbmcgb3RoZXIgdGhhbiBgQkxPQ0tgLCB3aGljaCBpcyBwcmV0dHkgbXVjaCBhbHdheXMgZW5hYmxlZC4gU28sIHRoZSBvbmx5IGNvbmZpZyBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgc2VsZWN0ZWQgaXMgYEJMS19ERVZfVUJMS2AuIEVhc3kgZW5vdWdoLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGRvaW5nIHRoaW5ncyB0aGUgXCJyaWdodFwiIHdheSBmb3Iga2VybmVsIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIG5vbi1zdGF0aWMgc28gaXQgY2FuIGJlIHByZWZlcnJlZCBvdmVyIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQWZ0ZXIgYSBjaGVjaywgSSBmaW5kIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBsaXR0bGUgY29uY2VybmluZy4gQnV0IHdhaXQsIGl0ICppcyogYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3Q6XG5cbmBgYGNcbnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcblx0LndyaXRlX2l0ZXIgPSB1YmxrX2NoX3dyaXRlX2l0ZXIsXG5cdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcblx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXG5gYGBcblxuU28sIGl0J3Mgbm90IGJlaW5nIGlubGluZWQgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgb2theS4gU3RpbGwsIGJlc3QgcHJhY3RpY2UgaXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgZXhpc3QuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIGB1YmxrX2Rydi5jYCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHJlcGxhY2UgYHVibGtfY2hfdXJpbmdfY21kYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMDo1OC45MTg5MDY3MTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDI0NTI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHVibGtfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDA6NTguOTYzOTM2OTU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzQzNzg4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSB1YmxrXyBWYXJpYWJsZSBEZWNsYXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgYHVibGtfYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYF5zdGF0aWMgaW50IHVibGtfYCBhbmQganVzdCBgXmludCB1YmxrX2AuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBgc3RhdGljYCBrZXl3b3JkIGlzIHRoZSBrZXkgZGlmZmVyZW50aWF0b3IgaGVyZSwgaW1wbHlpbmcgc2NvcGUgYW5kIGxpbmthZ2UuIEkga25vdyBob3cgdGhlIGNvbXBpbGVyIHRyZWF0cyBlYWNoIG9mIHRob3NlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IHN1cnByaXNpbmcgdXNhZ2Ugb2YgYHVibGtfYCB0aGF0IHdvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSwgb3IgYWJzZW5jZSwgb2YgYHN0YXRpY2AuIFdl4oCZcmUgdGFsa2luZyBhYm91dCBrZXJuZWwgY29kZSBoZXJlLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSByYW1pZmljYXRpb25zIG9mIHRoYXQgZGVjbGFyYXRpb24gaXMgY3JpdGljYWwgdG8gYXZvaWQgYW55IHNjb3Bpbmcgb3IgbGlua2FnZSBlcnJvcnMgdGhhdCB3b3VsZCBzdXJmYWNlIGxhdGVyIGFzIGEgYnVnLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYSB2ZXJ5IHNwZWNpZmljIHR5cGUgb2YgcG90ZW50aWFsIGlzc3VlLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoYXQgZGVjbGFyYXRpb24uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MDMuNzk4MzE3Nzk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3MDY2NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMTowMy44NDQ4OTQzNzFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODc0MjE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFVibGsgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgdWJsa19kcnYuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHN0cnVjdHVyZS4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBxdWlja2x5IHNjYW4gZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucy4gSSB3YW50IHRvIGlkZW50aWZ5IHdoYXQgcGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSwgYW5kIGFsc28gd2hpY2ggcGFydHMgYXJlIGxpa2VseSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBLbm93aW5nIHRoZSBleHBvc2VkIGludGVyZmFjZSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzdG9yYWdlIHN5c3RlbS4gVGhpcyBpbml0aWFsIHBhc3Mgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMTowNy41NDM2Mzg3NjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDIzMTE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MDcuNTg4NjY1Njc5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjQ1NzU1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNb2R1bGUncyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW4gdGVybXMgb2YgaXRzIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBzZWxmLWNvbnRhaW5lZCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzdGFydC4gSSBjYW4gaW1tZWRpYXRlbHkgc2VlIHRoYXQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzLCB3aGVyZSBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLCBhcmUgdGhlIGZ1bmN0aW9ucyBhc3NpZ25lZCB0byB0aGUgYGZpbGVfb3BlcmF0aW9uc2AgYW5kIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2Agc3RydWN0dXJlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGEgZmV3OiBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRgLCBhbmQgYHVibGtfY3RybF91cmluZ19jbWRgLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnRzIEknbSBtaXNzaW5nPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIGB1YmxrX3F1ZXVlX3JxYC4gSXQncyB3b3J0aCBhIGxvb2sgdG8gY29uZmlybSBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMToxMi42MTMyNDMyNDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTcyODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNDI9c3RydWN0IHVibGtfcXVldWUge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2MS1cXHQgKlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNjI6XFx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNjMtXFx0ICogc28gbG9jayBpcyByZXF1aXJlZCBmb3Igc3RvcmluZyByZXF1ZXN0IHRhZyB0byBmaWZvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0MT1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNzUtICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxNzY6c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgX191YmxrX3F1ZXVlX3JxX2NvbW1vbihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjAyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjAzOnN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIwNC1cXHRcXHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMTE6XFx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcXHUwMDI2c2hvdWxkX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMi1cXHRpZiAoIXNob3VsZF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjE5PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19iYXRjaF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjI2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjI3OlxcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXFx1MDAyNnNob3VsZF9xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjgtXFx0aWYgKCFzaG91bGRfcXVldWUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjI0Mz1zdGF0aWMgdm9pZCB1YmxrX2NvbW1pdF9ycXMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjI1NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjI1NjpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3JxcyhzdHJ1Y3QgcnFfbGlzdCAqcnFsaXN0KVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjU3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB1YmxrX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM0NjpcXHQucXVldWVfcnEgICAgICAgPSB1YmxrX3F1ZXVlX3JxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzQ3OlxcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMzQ4LVxcdC5pbml0X2hjdHhcXHQ9IHVibGtfaW5pdF9oY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI3Mjc9c3RhdGljIHZvaWQgdWJsa19zdGFydF9jYW5jZWwoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzM2LVxcdFxcdC8qXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3Mzc6XFx0XFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3MzgtXFx0XFx0ICogdWJxLVxcdTAwM2VjYW5jZWxpbmcgaXMgdmlzaWJsZSB3aGVuIHRoZSBxdWV1ZSByZXN1bWVzLlxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDUtXFx0XFx0ICogRGlzayBub3QgeWV0IGFsbG9jYXRlZCBieSB1YmxrX2N0cmxfc3RhcnRfZGV2KCksIHNvXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NDY6XFx0XFx0ICogdGhlcmUgaXMgbm8gcmVxdWVzdCBxdWV1ZSBhbmQgdWJsa19xdWV1ZV9ycSgpIGNhbm5vdFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzQ3LVxcdFxcdCAqIGJlIHJ1bm5pbmcuICBKdXN0IHNldCB0aGUgZmxhZzsgaWYgc3RhcnRfZGV2IHByb2NlZWRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAxOjEyLjY1ODIxODk1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjExMTI5OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsb2NrIExheWVyIEJ1ZyBSZWxhdGVkIHRvIFVCTEsgUmVjb3ZlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVQkxLIGRyaXZlciBpc3N1ZS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgcmVjb3ZlcnksIGFuZCBzaW5jZSBgdWJsa19xdWV1ZV9ycWAgaXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgZW50cnkgcG9pbnQsIGl0IG1ha2VzIHNlbnNlIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgaXNzdWUgb3JpZ2luYXRlcy4gIFRoZSByZWNvdmVyeSBwcm9jZXNzIGl0c2VsZiBpcyBoYW5kbGVkIGJ5IGB1YmxrX2N0cmxfdXJpbmdfY21kYCAoZm9yIGRldmljZSBtYW5hZ2VtZW50KSBhbmQgYHVibGtfY2hfdXJpbmdfY21kYCAoZm9yIGZldGNoaW5nIEkvT3MpLiBUaGF0IHN1Z2dlc3RzIHRoYXQgYHVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kYCBtaWdodCBhbHNvIGJlIHJlbGV2YW50IHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggYmF0Y2hlZCBjb21tYW5kcywgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGB1YmxrX3F1ZXVlX3JxYCBpdHNlbGYuXG5cbkknbSB0aGlua2luZyBhYm91dCBmb2N1c2luZyBvbiBgdWJsa19jaF91cmluZ19jbWRgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIFllcywgdGhhdCBsb29rcyBsaWtlIHRoZSByaWdodCBhcHByb2FjaC4gSXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHJlbGV2YW50IHRvIHRoaXMgaXNzdWUuIEFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaGFuZGxlcyBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgY29udHJvbCBkZXZpY2UuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgcGF0Y2guIEFoLCBJIHNlZSwgaXQncyBhIHJlbGF0aXZlbHkgc2ltcGxlIGNoYW5nZS4gSXQncyBhZGRpbmcgYSByZXNldCBvZiB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIHdpdGhpbiB0aGUgYHVibGtfcXVldWVfcmVzZXRfaW9fZmxhZ3NgIGZ1bmN0aW9uLiBUaGUgZGVzY3JpcHRpb24gbWFrZXMgaXQgY2xlYXI6IHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgd2Fzbid0IGJlaW5nIGNsZWFyZWQgZHVyaW5nIHJlY292ZXJ5LCBwb3RlbnRpYWxseSBjYXVzaW5nIEkvT3MgdG8gYmUgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHRvdWNoaW5nIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIuXG5cbkZyb20gdGhlIGNvbmZpZyBpbmZvcm1hdGlvbiwgSSBzZWUgdGhhdCB0aGlzIGlzIGVuYWJsZWQgYnkgYEJMS19ERVZfVUJMS2AsIHdoaWNoIGFsc28gc2VsZWN0cyBgSU9fVVJJTkdgLiBBbmQgeWVzLCBgQkxLX0RFVl9VQkxLYCBzZWVtcyB0byBiZSB0aGUgb25seSByZWxldmFudCBjb25maWcgaGVyZSwgbG9jYXRlZCBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYC5cblxuT2theSwgSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhpcyBpc3N1ZS4gSSdtIHJlYWR5IHRvIHNldCByZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTYsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjAxOjIxLjg2OTM1MTQ0NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjE4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF9iYXRjaF9pb191cmluZ19jbWRcIixcbiAgICBcInVibGtfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgdWJsayBkcml2ZXIgd2hlcmUgdGhlIGBmb3JjZV9hYm9ydGAgZmxhZyBvZiBhIHF1ZXVlIGlzIG5vdCByZXNldCBkdXJpbmcgcmVjb3ZlcnkuIFRoaXMgY291bGQgbGVhZCB0byBJT3MgYmVpbmcgaW5jb3JyZWN0bHkgYWJvcnRlZCBhZnRlciByZWNvdmVyeS4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB1YmxrIGRyaXZlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jdHJsX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfYmF0Y2hfaW9fdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3JxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHVibGsgZHJpdmVyIHdoZXJlIHRoZSBgZm9yY2VfYWJvcnRgIGZsYWcgb2YgYSBxdWV1ZSBpcyBub3QgcmVzZXQgZHVyaW5nIHJlY292ZXJ5LiBUaGlzIGNvdWxkIGxlYWQgdG8gSU9zIGJlaW5nIGluY29ycmVjdGx5IGFib3J0ZWQgYWZ0ZXIgcmVjb3ZlcnkuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgdWJsayBkcml2ZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMToyMS45NDc5NzYxODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTM0ODIzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzowMToyMS45NDgzODA3NzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzQ5MzA3MzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBhIGJvb2xlYW4gZmxhZyAoYGZvcmNlX2Fib3J0YCkgaW4gdGhlIGB1YmxrX3F1ZXVlYCBzdHJ1Y3R1cmUgdG8gYGZhbHNlYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlIGlzIHB1cmVseSBsb2dpY2FsIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgcG90ZW50aWFsbHkgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpZiB0aGUgZmxhZyBjb250cm9scyBsaWZlY3ljbGUsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q4ZTIxYzA4NjM4OWYwYWZiN2RlOGE0NWY2MDgzMTQzODNkOGY1Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEyOjU5OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi4xYTk1NjQyYjlkYjk0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC0zMDI0LDYgKzMwMjQsNyBAQCBzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4gXHR1YnEtXHUwMDNlY2FuY2VsaW5nID0gZmFsc2U7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlY2FuY2VsX2xvY2spO1xuIFx0dWJxLVx1MDAzZWZhaWxfaW8gPSBmYWxzZTtcbitcdHVicS1cdTAwM2Vmb3JjZV9hYm9ydCA9IGZhbHNlO1xuIH1cbiBcbiAvKiBkZXZpY2UgY2FuIG9ubHkgYmUgc3RhcnRlZCBhZnRlciBhbGwgSU9zIGFyZSByZWFkeSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9yZWNvdmVyXzAzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcbmluZGV4IDI1NTQ4MDVlNWIwMmMuLjkyZjQwMTIxNzhmMDggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcmVjb3Zlcl8wMy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3JlY292ZXJfMDMuc2hcbkBAIC0yOSw2ICsyOSwxMSBAQCBfY3JlYXRlX2JhY2tmaWxlIDAgMjU2TVxuIF9jcmVhdGVfYmFja2ZpbGUgMSAxMjhNXG4gX2NyZWF0ZV9iYWNrZmlsZSAyIDEyOE1cbiBcbit1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgLWIgXHUwMDI2XG4rdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxIC1iIFwiJHtVQkxLX0JBQ0tGSUxFU1swXX1cIiBcdTAwMjZcbit1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgc3RyaXBlIC1xIDIgLXIgMSAtYiBcIiR7VUJMS19CQUNLRklMRVNbMV19XCIgXCIke1VCTEtfQkFDS0ZJTEVTWzJdfVwiIFx1MDAyNlxuK3dhaXRcbitcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgbnVsbCAtcSAyIC1yIDEgXHUwMDI2XG4gdWJsa19ydW5fcXVpZXNjZV9yZWNvdmVyIC10IGxvb3AgLXEgMiAtciAxIFwiJHtVQkxLX0JBQ0tGSUxFU1swXX1cIiBcdTAwMjZcbiB1YmxrX3J1bl9xdWllc2NlX3JlY292ZXIgLXQgc3RyaXBlIC1xIDIgLXIgMSBcIiR7VUJMS19CQUNLRklMRVNbMV19XCIgXCIke1VCTEtfQkFDS0ZJTEVTWzJdfVwiIFx1MDAyNlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MjEuOTQ4MzgxNDY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0OTMwNDQyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdXBlciBzdHJhaWdodGZvcndhcmQuIEkgc2VlIGl0J3MganVzdCBmbGlwcGluZyB0aGUgYGZvcmNlX2Fib3J0YCBmbGFnIGluIGB1YmxrX3F1ZXVlX3Jlc2V0X2lvX2ZsYWdzYCB0byBgZmFsc2VgLiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vdGhpbmcgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHJlc2V0dGluZyBhIGJvb2xlYW4sIHNvIGl0J3MgYSBsb2dpYyBjaGFuZ2UsIGFuZCBJJ20gbm90IHdvcnJpZWQgYWJvdXQgaW50cm9kdWNpbmcgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSBidWcgaXQncyBmaXhpbmcgaXMganVzdCB0aGF0IGBmb3JjZV9hYm9ydGAgd2Fzbid0IGJlaW5nIHJlc2V0IHByb3Blcmx5LCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBJL08gZmFpbHVyZXMgb3Igb3RoZXIgaW5jb3JyZWN0IGJlaGF2aW9y4oCUZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gZml4LiBCdXQsIGEgYGJvb2wgPSBmYWxzZTtgIGFzc2lnbm1lbnQ/IFllYWgsIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIEtBU0FOLCBvciBldmVuIGp1c3QgZ29vZCB0ZXN0aW5nLCB3b3VsZCBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaWYgYGZvcmNlX2Fib3J0YCBhY3R1YWxseSBjb250cm9scyBsaWZlY3ljbGUsIGFuZCBldmVuIHRoYXQgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IuIFNvLCBOZWVkc0tNU0FOID0gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjQsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MDE6MjkuNDQxNDI5NjgxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGEgYm9vbGVhbiBmbGFnIChgZm9yY2VfYWJvcnRgKSBpbiB0aGUgYHVibGtfcXVldWVgIHN0cnVjdHVyZSB0byBgZmFsc2VgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBjaGFuZ2UgaXMgcHVyZWx5IGxvZ2ljYWwgc3RhdGUgbWFuYWdlbWVudC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBwb3RlbnRpYWxseSB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlmIHRoZSBmbGFnIGNvbnRyb2xzIGxpZmVjeWNsZSwgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGEgYm9vbGVhbiBmbGFnIChgZm9yY2VfYWJvcnRgKSBpbiB0aGUgYHVibGtfcXVldWVgIHN0cnVjdHVyZSB0byBgZmFsc2VgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBjaGFuZ2UgaXMgcHVyZWx5IGxvZ2ljYWwgc3RhdGUgbWFuYWdlbWVudC4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBwb3RlbnRpYWxseSB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlmIHRoZSBmbGFnIGNvbnRyb2xzIGxpZmVjeWNsZSwgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[1] Phase: Succeeded StartedAt: 2026-08-21 13:01:41 +0000 UTC FinishedAt: 2026-08-21 13:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 13:01:41 +0000 UTC FinishedAt: 2026-08-21 13:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2] Phase: Succeeded StartedAt: 2026-08-21 13:01:41 +0000 UTC FinishedAt: 2026-08-21 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:01:41 +0000 UTC FinishedAt: 2026-08-21 14:28:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:01:41 +0000 UTC FinishedAt: 2026-08-21 13:01:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:01:41 +0000 UTC FinishedAt: 2026-08-21 13:01:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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-workflowhb67p/series-workflowhb67p-convert-artifact-3569345230/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:01:51 +0000 UTC FinishedAt: 2026-08-21 13:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:01:51 +0000 UTC FinishedAt: 2026-08-21 13:22:28 +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:*49f94cbf-2890-481b-bb16-d52c4b1a5ef8,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-workflowhb67p/series-workflowhb67p-convert-artifact-3569345230/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": "3f0aa22e-8067-41c8-94ef-0a732ccd9a98", "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-workflowhb67p/series-workflowhb67p-build-action-1036405556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:01:51 +0000 UTC FinishedAt: 2026-08-21 13:22:18 +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:*49f94cbf-2890-481b-bb16-d52c4b1a5ef8,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-workflowhb67p/series-workflowhb67p-convert-artifact-3569345230/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": "3f0aa22e-8067-41c8-94ef-0a732ccd9a98", "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-workflowhb67p/series-workflowhb67p-build-action-1036405556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:22:28 +0000 UTC FinishedAt: 2026-08-21 13:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:22:28 +0000 UTC FinishedAt: 2026-08-21 13:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:22:28 +0000 UTC FinishedAt: 2026-08-21 13:22:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:22:28 +0000 UTC FinishedAt: 2026-08-21 13:22:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-workflowhb67p/series-workflowhb67p-convert-artifact-2220805569/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:22:39 +0000 UTC FinishedAt: 2026-08-21 13:24:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:22:39 +0000 UTC FinishedAt: 2026-08-21 13:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f0aa22e-8067-41c8-94ef-0a732ccd9a98,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-workflowhb67p/series-workflowhb67p-build-action-1036405556/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-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:24:45 +0000 UTC FinishedAt: 2026-08-21 13:24:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:24:45 +0000 UTC FinishedAt: 2026-08-21 13:24:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:24:45 +0000 UTC FinishedAt: 2026-08-21 13:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:24:45 +0000 UTC FinishedAt: 2026-08-21 13:43:11 +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:*49f94cbf-2890-481b-bb16-d52c4b1a5ef8,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-workflowhb67p/series-workflowhb67p-convert-artifact-2220805569/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": "c5004809-8eb3-4ded-b5d5-20b1c71c945c", "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-workflowhb67p/series-workflowhb67p-build-action-708896589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:24:45 +0000 UTC FinishedAt: 2026-08-21 13:43:01 +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:*49f94cbf-2890-481b-bb16-d52c4b1a5ef8,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-workflowhb67p/series-workflowhb67p-convert-artifact-2220805569/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": "c5004809-8eb3-4ded-b5d5-20b1c71c945c", "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-workflowhb67p/series-workflowhb67p-build-action-708896589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:43:11 +0000 UTC FinishedAt: 2026-08-21 13:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:43:11 +0000 UTC FinishedAt: 2026-08-21 13:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:43:11 +0000 UTC FinishedAt: 2026-08-21 13:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:43:11 +0000 UTC FinishedAt: 2026-08-21 13:45:03 +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:*c5004809-8eb3-4ded-b5d5-20b1c71c945c,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-workflowhb67p/series-workflowhb67p-build-action-708896589/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-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:12 +0000 UTC FinishedAt: 2026-08-21 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:12 +0000 UTC FinishedAt: 2026-08-21 14:28:26 +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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"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:*3f0aa22e-8067-41c8-94ef-0a732ccd9a98,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5004809-8eb3-4ded-b5d5-20b1c71c945c,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-workflowhb67p/series-workflowhb67p-build-action-1036405556/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-workflowhb67p/series-workflowhb67p-build-action-708896589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:12 +0000 UTC FinishedAt: 2026-08-21 13:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:12 +0000 UTC FinishedAt: 2026-08-21 13:45:19 +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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"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-workflowhb67p/series-workflowhb67p-convert-artifact-1547056214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:12 +0000 UTC FinishedAt: 2026-08-21 13:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:12 +0000 UTC FinishedAt: 2026-08-21 13:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:12 +0000 UTC FinishedAt: 2026-08-21 13:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:22 +0000 UTC FinishedAt: 2026-08-21 14:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhb67p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"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":["ublk_ctrl_uring_cmd","ublk_ch_uring_cmd","ublk_ch_batch_io_uring_cmd","ublk_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"20f44e4d-69ac-469d-a072-3414b3d4d01a","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-08-21 13:45:22 +0000 UTC FinishedAt: 2026-08-21 14:28:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f0aa22e-8067-41c8-94ef-0a732ccd9a98,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5004809-8eb3-4ded-b5d5-20b1c71c945c,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-workflowhb67p/series-workflowhb67p-build-action-1036405556/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-workflowhb67p/series-workflowhb67p-build-action-708896589/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-workflowhb67p/series-workflowhb67p-convert-artifact-1547056214/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,}