Name: series-workflowh29qc Phase: Succeeded StartedAt: 2026-07-30 23:23:51 +0000 UTC FinishedAt: 2026-07-31 00:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[0] Phase: Succeeded StartedAt: 2026-07-30 23:23:51 +0000 UTC FinishedAt: 2026-07-30 23:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 23:23:51 +0000 UTC FinishedAt: 2026-07-30 23:41:07 +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": "26cb8ebbfaf713c82e142d08828d4d765057633b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "26cb8ebbfaf713c82e142d08828d4d765057633b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "e574df81-b807-4f6b-bfb9-a9967e079927" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_send", "io_recv", "io_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fc2VuZCYjMzQ7LAogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGlvX2J1bmRsZV9uYnVmc2Agd2hlcmUgYG1pbl90KGludCwgLi4uKWAgY291bGQgdHJ1bmNhdGUgb3Igc2lnbi1leHRlbmQgYGlvdl9sZW5gIGlmIGl0IGV4Y2VlZHMgYElOVF9NQVhgLCBsZWFkaW5nIHRvIG5lZ2F0aXZlIHZhbHVlcyBvciBpbmNvcnJlY3QgbGVuZ3Rocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIG5ldHdvcmsgb3BlcmF0aW9ucy4gVGhlIGFmZmVjdGVkIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOWYwZTcxZmM2YzI5YjIwYTMwNGY1ZmIzOTRmOTUyOTA5NDNmYjBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjM6NDA6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggMDBhN2RmODAzYjk5Yi4uZThhMDY2ZjhhOWUzMyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9uZXQuY1xuQEAgLTUwMCw3ICYjNDM7NTAwLDcgQEAgc3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcbiBcdC8qIHNob3J0IHRyYW5zZmVyLCBjb3VudCBzZWdtZW50cyAqL1xuIFx0bmJ1ZnMgPSAwO1xuIFx0ZG8ge1xuLVx0XHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcbiYjNDM7XHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO1xuIFxuIFx0XHRuYnVmcyYjNDM7JiM0Mzs7XG4gXHRcdHJldCAtPSB0aGlzX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5ZjBlNzFmYzZjMjliMjBhMzA0ZjVmYjM5NGY5NTI5MDk0M2ZiMGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAyMzo0MDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmMKaW5kZXggMDBhN2RmODAzYjk5Yi4uZThhMDY2ZjhhOWUzMyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbmV0LmMKQEAgLTUwMCw3ICYjNDM7NTAwLDcgQEAgc3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldCkKIAkvKiBzaG9ydCB0cmFuc2ZlciwgY291bnQgc2VnbWVudHMgKi8KIAluYnVmcyA9IDA7CiAJZG8gewotCQlpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTsKJiM0MzsJCXNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpOwogCiAJCW5idWZzJiM0MzsmIzQzOzsKIAkJcmV0IC09IHRoaXNfbGVuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBtb2RpZnlpbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJIHNlZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSB0eXBlIGRlY2xhcmF0aW9uIGZvciBgdGhpc19sZW5gIHdpdGhpbiBhIGBtaW5fdGAgY2FsbC4gT3JpZ2luYWxseSwgaXQgd2FzIGFuIGBpbnRgLCBidXQgaXQmIzM5O3Mgbm93IGEgYHNpemVfdGAuIFRoZSByZWxldmFudCBsaW5lIGlzOiBgaW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YCB3aGljaCBoYXMgYmVjb21lIGBzaXplX3QgdGhpc19sZW4gPSBtaW5fdChzaXplX3QsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBpbnRlcmVzdGluZyB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgdG8gYSBgc2l6ZV90YCBmb3IgdGhlIG1pbmltdW0gY2FsY3VsYXRpb24uIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgc2l6ZSBiZWluZyBoYW5kbGVkIGhlcmUgbWlnaHQgaGF2ZSBncm93bi4gQ291bGQgYmUgcmVsYXRlZCB0byBsYXJnZXIgbmV0d29yayBidWZmZXJzIG9yIHBvdGVudGlhbGx5IGhhbmRsaW5nIHNpemVzIHRoYXQgZXhjZWVkIHRoZSBjYXBhY2l0eSBvZiBhIHNpZ25lZCBpbnRlZ2VyLiBJIG5lZWQgdG8gZGlnIGludG8gYGlvX2J1bmRsZV9uYnVmc2AgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgYW5kIGNvbnRleHQgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgd2hhdCBgaW92W25idWZzXS5pb3ZfbGVuYCBhbmQgYHJldGAgcmVwcmVzZW50IGluIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2J1bmRsZV9uYnVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTQ2Nz1zdGF0aWMgdm9pZCBpb19yZXFfbXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDgwLSAqL1xuaW9fdXJpbmcvbmV0LmM6NDgxOnN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG5pb191cmluZy9uZXQuYy00ODIte1xuLS1cbmlvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MTYtXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJTX0NPTU1JVClcbmlvX3VyaW5nL25ldC5jOjUxNzpcdFx0aW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBpb19idW5kbGVfbmJ1ZnMoa21zZywgbGVuKSk7XG5pb191cmluZy9uZXQuYy01MTgtXHRyZXR1cm4gSU9VX1JFVFJZO1xuLS1cbmlvX3VyaW5nL25ldC5jPTUyMT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTMzLVxuaW9fdXJpbmcvbmV0LmM6NTM0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTM1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg4Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTA5LVxuaW9fdXJpbmcvbmV0LmM6OTEwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG5pb191cmluZy9uZXQuYy05MTEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElPX1VSSU5HIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIG5ldHdvcmtpbmcgY29kZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGlzIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHByb2JhYmx5IGltcGx5aW5nIGl0JiMzOTtzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBmaWxlLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgaW9fbmV0X2tidWZfcmVjeWxlYCwgYGlvX3NlbmRfZmluaXNoYCwgYW5kIGBpb19yZWN2X2ZpbmlzaGAuCgpXYWl0IGEgbWludXRlLi4uIGBpb19uZXRfa2J1Zl9yZWN5bGVgPyBUaGF0JiMzOTtzIGdvdCBteSBhdHRlbnRpb24uIFRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLCBzbyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGV4YW1pbmUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYnVmZmVycyBhcmUgYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIGFyZSBhY3R1YWxseSBkb2luZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB1c2UgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gYnVuZGxlIGFuZCByZWN5Y2xlIHRoZSBuZXQgYnVmZmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcyNS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzo3MjY6XHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsKSlcbmlvX3VyaW5nL25ldC5jLTcyNy1cdFx0Z290byByZXRyeV9idW5kbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGlvX3VyaW5nL25ldC5jYCBmb3IgTmV0d29yayBJL08gRWZmaWNpZW5jeSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGBpb191cmluZ2AgaXMgaGFuZGxpbmcgbmV0d29yayBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIGZ1bmN0aW9ucyB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB0aGVzZSBmdW5jdGlvbnM6IGhvdyB0aGV5JiMzOTtyZSBlbnF1ZXVpbmcgcmVxdWVzdHMsIGhvdyB0aGUgY29tcGxldGlvbiBpcyBoYW5kbGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgdGhleSYjMzk7cmUgbWluaW1pemluZyBjb250ZXh0IHN3aXRjaGVzIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb21tb24gcGl0ZmFsbHMgdGhhdCBJIGFscmVhZHkga25vdywgc3VjaCBhcyBlbnN1cmluZyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzLCBhbmQgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHN5c3RlbSBjYWxscy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhleSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgZmxhZ3MgdG8gbWF4aW1pemUgcGVyZm9ybWFuY2UgKGUuZy4sIGBNU0dfTk9TSUdOQUxgLCBgTVNHX01PUkVgKS4gSSYjMzk7bSBhbHNvIGtlZW5seSBpbnRlcmVzdGVkIGluIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5IG1pZ2h0IGhhdmUgaW1wbGVtZW50ZWQgLSB0aGluZ3MgbGlrZSBwcmUtdG91Y2hpbmcgcGFnZXMsIGNvYWxlc2NpbmcgcmVxdWVzdHMsIG9yIHplcm8tY29weSB0ZWNobmlxdWVzIC0gYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSBjYW4gcXVpY2tseSBpZGVudGlmeS4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG1vc3QgZWZmaWNpZW50IGltcGxlbWVudGF0aW9ucyB0aGF0IGFkaGVyZSB0byB0aGUgaW9fdXJpbmcgcGhpbG9zb3BoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MjkwPXN0YXRpYyBpbnQgaW9fbXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0zNDItXG5pb191cmluZy9uZXQuYzozNDM6dm9pZCBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbmlvX3VyaW5nL25ldC5jLTM0NC17XG4tLVxuaW9fdXJpbmcvbmV0LmMtMzQ5LVxuaW9fdXJpbmcvbmV0LmM6MzUwOnN0YXRpYyBpbnQgaW9fc2VuZF9zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtMzUxLXtcbi0tXG5pb191cmluZy9uZXQuYy0zOTUtXG5pb191cmluZy9uZXQuYzozOTY6c3RhdGljIGludCBpb19zZW5kbXNnX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0zOTcte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQyMy1cbmlvX3VyaW5nL25ldC5jOjQyNDppbnQgaW9fc2VuZG1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy00MjUte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQ2MC1cdGlmIChyZXEtXHUwMDNlb3Bjb2RlICE9IElPUklOR19PUF9TRU5ETVNHKVxuaW9fdXJpbmcvbmV0LmM6NDYxOlx0XHRyZXR1cm4gaW9fc2VuZF9zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy00NjItXHRpZiAodW5saWtlbHkoc3FlLVx1MDAzZWFkZHIyIHx8IHNxZS1cdTAwM2VmaWxlX2luZGV4KSlcbmlvX3VyaW5nL25ldC5jLTQ2My1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9uZXQuYzo0NjQ6XHRyZXR1cm4gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy00NjUtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTU1OC1cbmlvX3VyaW5nL25ldC5jOjU1OTppbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtNTYwLXtcbi0tXG5pb191cmluZy9uZXQuYy02MDctXG5pb191cmluZy9uZXQuYzo2MDg6c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbmlvX3VyaW5nL25ldC5jLTYwOS1cdFx0XHRcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNjU1LVxuaW9fdXJpbmcvbmV0LmM6NjU2OmludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy02NTcte1xuLS1cbmlvX3VyaW5nL25ldC5jLTY4OS1cdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbmlvX3VyaW5nL25ldC5jOjY5MDpcdFx0cmV0ID0gaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHJlcSwgaXNzdWVfZmxhZ3MsIFx1MDAyNnNlbCwga21zZyk7XG5pb191cmluZy9uZXQuYy02OTEtXHRcdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzI1LVx0c2VsLnZhbCA9IHJldDtcbmlvX3VyaW5nL25ldC5jOjcyNjpcdGlmICghaW9fc2VuZF9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwpKVxuaW9fdXJpbmcvbmV0LmMtNzI3LVx0XHRnb3RvIHJldHJ5X2J1bmRsZTtcbi0tXG5pb191cmluZy9uZXQuYz0xMzI1PWludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMzU5LVxuaW9fdXJpbmcvbmV0LmM6MTM2MDp2b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbmlvX3VyaW5nL25ldC5jLTEzNjEte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEzNzYtXG5pb191cmluZy9uZXQuYzoxMzc3OmludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL25ldC5jLTEzNzgte1xuLS1cbmlvX3VyaW5nL25ldC5jLTE0MzItXHRpZiAocmVxLVx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORF9aQykge1xuaW9fdXJpbmcvbmV0LmM6MTQzMzpcdFx0cmV0ID0gaW9fc2VuZF9zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy0xNDM0LVx0fSBlbHNlIHtcbi0tXG5pb191cmluZy9uZXQuYy0xNDM2LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvbmV0LmM6MTQzNzpcdFx0cmV0ID0gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy0xNDM4LVx0fVxuLS1cbmlvX3VyaW5nL25ldC5jPTE0NTc9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pb191cmluZy9uZXQuYy0xNDk5LVxuaW9fdXJpbmcvbmV0LmM6MTUwMDpzdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtMTUwMS1cdFx0XHQgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTUyOS1cbmlvX3VyaW5nL25ldC5jOjE1MzA6aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTE1MzEte1xuLS1cbmlvX3VyaW5nL25ldC5jLTE1NDctXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JTVBPUlRfQlVGRkVSKSB7XG5pb191cmluZy9uZXQuYzoxNTQ4Olx0XHRyZXQgPSBpb19zZW5kX3pjX2ltcG9ydChyZXEsIGttc2csIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTE1NDktXHRcdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE1ODktXHQgKiBJZiB3ZSYjMzk7cmUgaW4gaW8td3Egd2UgY2FuJiMzOTt0IHJlbHkgb24gdHcgb3JkZXJpbmcgZ3VhcmFudGVlcywgZGVmZXJcbmlvX3VyaW5nL25ldC5jOjE1OTA6XHQgKiBmbHVzaGluZyBub3RpZiB0byBpb19zZW5kX3pjX2NsZWFudXAoKVxuaW9fdXJpbmcvbmV0LmMtMTU5MS1cdCAqL1xuLS1cbmlvX3VyaW5nL25ldC5jLTE2MDAtXG5pb191cmluZy9uZXQuYzoxNjAxOnZvaWQgaW9fc2VuZHJlY3ZfZmFpbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbmlvX3VyaW5nL25ldC5jLTE2MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBIFRob3VnaHQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGlvX2J1bmRsZV9uYnVmc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hhbmdpbmcgYGludCB0aGlzX2xlbiA9IG1pbl90KGludCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO2AgdG8gYHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgYSBzdHJhaWdodGZvcndhcmQgdHlwZSBjaGFuZ2UuIGBpb3ZfbGVuYCBpcyBhIGBzaXplX3RgLCBzbyB1c2luZyBgaW50YCB0aGVyZSBpcyBqdXN0IGFza2luZyBmb3IgdHJvdWJsZS4mIzM0OwoKQW5kIHRoZW4gaXQgaGl0cyBtZTogdGhpcyBpcyBtb3JlIHRoYW4ganVzdCB0aWR5aW5nIHVwLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBiZWNhdXNlIGBpb3ZfbGVuYCBpcyBhIGBzaXplX3RgISBSaWdodCBub3csIHRoYXQgYG1pbl90KGludCwgLi4uKWAgaXMgdHJ1bmNhdGluZyBvciwgZXZlbiB3b3JzZSwgc2lnbi1leHRlbmRpbmcgbGFyZ2VyLXRoYW4tYElOVF9NQVhgIHZhbHVlcyBvZiBgaW92X2xlbmAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gV2FpdCBhIG1pbnV0ZS4uLiBgcmV0YCBpcyBhbiBgaW50YC4gT2theS4gU28gdGhlIG9yaWdpbmFsIGNvZGUgd2FzICpjYXN0aW5nKiBgaW92X2xlbmAgdG8gYW4gYGludGAgd2l0aGluIHRoZSBgbWluX3RgIGZ1bmN0aW9uLiBJZiBgaW92X2xlbmAgaXMgbWFzc2l2ZSwgaXQgYmVjb21lcyBuZWdhdGl2ZSwgYW5kIGBtaW5fdGAgaXMgcGlja2luZyB0aGUgKm5lZ2F0aXZlKiBsZW5ndGguIFRoYXQmIzM5O3MgY2xlYXJseSB3cm9uZy4gU28sIHRoaXMgZml4IGFjdHVhbGx5IHByZXZlbnRzIHRoZSB3cm9uZyBjYWxjdWxhdGlvbi4gQmluZ28sIGEgcmVhbCBidWcgZml4LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBgaW9fYnVuZGxlX25idWZzYCBpcyBjYWxsZWQgYnkgYGlvX3NlbmRfZmluaXNoYCBhbmQgYGlvX3JlY3ZfZmluaXNoYC4gVGhvc2UgYXJlIGNhbGxlZCBieSBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YC4gQWxyaWdodCwgc28gdGhlIGtleSBlbnRyeSBwb2ludHMgYWZmZWN0ZWQgaGVyZSBhcmUgZGVmaW5pdGVseSBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YC4gQnV0IHdhaXQsIGFyZSB3ZSBjb21wbGV0ZWx5IHN1cmU/IGBpb19zZW5kbXNnYCBhbmQgYGlvX3JlY3Ztc2dgIG1pZ2h0IGFsc28gYmUgdXNpbmcgdGhlc2UhIE5lZWQgdG8gdmVyaWZ5LiBMZXQmIzM5O3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlvX3NlbmRfZmluaXNoYC4gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcyNS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzo3MjY6XHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsKSlcbmlvX3VyaW5nL25ldC5jLTcyNy1cdFx0Z290byByZXRyeV9idW5kbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBpb19yZWN2X2ZpbmlzaGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgaW9fcmVjdl9maW5pc2hgIGFuZCB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCBieSBpZGVudGlmeWluZyBhbGwgdGhlIGZ1bmN0aW9ucyBvciBtb2R1bGVzIHRoYXQgZGlyZWN0bHkgaW52b2tlIGl0LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGZvciBhIGZldyByZWFzb25zLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkOyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyBhcmUga2V5LiBTZWNvbmRseSwgSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGF0dGVybnMgaW4gaXRzIHVzYWdlIOKAkyBhcmUgY2VydGFpbiBtb2R1bGVzIG9yIHByb3RvY29scyByZWx5aW5nIG9uIGl0IG1vcmUgdGhhbiBvdGhlcnM/IEZpbmFsbHksIGEgdGhvcm91Z2ggY2FsbGVyIGFuYWx5c2lzIGlzIGVzc2VudGlhbCBmb3IgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgZXZlbiByZWZhY3RvcmluZywgZXNwZWNpYWxseSBpZiB0aGUgZnVuY3Rpb24gaXMgY29tcGxleCBvciBwZXJmb3JtYW5jZS1jcml0aWNhbC4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgemVybyBpbiBvbiBhbnkgcG90ZW50aWFsIGhvdHNwb3RzIG9yIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIG15IGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2X2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTgxMT1pbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4tLVxuaW9fdXJpbmcvbmV0LmMtODgyLSAqL1xuaW9fdXJpbmcvbmV0LmM6ODgzOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTg4NC1cdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYz0xMDUwPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTEzMC1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMTMxOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbmlvX3VyaW5nL25ldC5jLTExMzItXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuLS1cbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMjkwLVx0c2VsLnZhbCA9IHJldDtcbmlvX3VyaW5nL25ldC5jOjEyOTE6XHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxuaW9fdXJpbmcvbmV0LmMtMTI5Mi1cdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBJL08gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgbmV0d29yayBJL08gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkgc2VlIHRoYXQgYGlvX3NlbmRgLCBgaW9fcmVjdm1zZ2AsIGFuZCBgaW9fcmVjdmAg4oCTIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXBwZWFyIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBtZW50YWwgbWFwIGhpZ2hsaWdodHMgdGhvc2UgYXMgdGhlIGtleSBmb2N1cyBzeW1ib2xzOiBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nIGZlZWxzIHNsaWdodGx5IG9mZi4gSSB0aG91Z2h0IGBpb19zZW5kbXNnYCB3b3VsZCB1dGlsaXplIGEgY29tcGxldGlvbiBmdW5jdGlvbiwgbGlrZWx5IGBpb19zZW5kX2ZpbmlzaGAsIHNpbWlsYXIgdG8gc29tZSBvdGhlciBwYXR0ZXJucyBJJiMzOTt2ZSBzZWVuIGluIHRoaXMga2luZCBvZiBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbi4gSSBzaG91bGQgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gb3BlbiB1cCBgaW9fdXJpbmcvbmV0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGlvX3NlbmRtc2dgIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBnZXQgdGhlIGFuc3dlciBkaXJlY3RseSBmcm9tIHRoZSBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTI5MD1zdGF0aWMgaW50IGlvX21zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtMzQyLVxuaW9fdXJpbmcvbmV0LmM6MzQzOnZvaWQgaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9uZXQuYy0zNDQte1xuLS1cbmlvX3VyaW5nL25ldC5jPTM1MD1zdGF0aWMgaW50IGlvX3NlbmRfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9uZXQuYy0zOTUtXG5pb191cmluZy9uZXQuYzozOTY6c3RhdGljIGludCBpb19zZW5kbXNnX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0zOTcte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQyMy1cbmlvX3VyaW5nL25ldC5jOjQyNDppbnQgaW9fc2VuZG1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy00MjUte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQ2My1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9uZXQuYzo0NjQ6XHRyZXR1cm4gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy00NjUtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTUyMT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTU4LVxuaW9fdXJpbmcvbmV0LmM6NTU5OmludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy01NjAte1xuLS1cbmlvX3VyaW5nL25ldC5jPTEzNzc9aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE0MzYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9uZXQuYzoxNDM3Olx0XHRyZXQgPSBpb19zZW5kbXNnX3NldHVwKHJlcSwgc3FlKTtcbmlvX3VyaW5nL25ldC5jLTE0MzgtXHR9XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTUwMD1zdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE1MjktXG5pb191cmluZy9uZXQuYzoxNTMwOmludCBpb19zZW5kbXNnX3pjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy0xNTMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gaW9fc2VuZG1zZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBpb19zZW5kbXNnYCBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCBuZXR3b3JrIGludGVyYWN0aW9ucyBhbmQgY29uY3VycmVudCBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBzY2F0dGVyLWdhdGhlciBsaXN0cywgZXJyb3IgcHJvcGFnYXRpb24sIGFuZCB0aGUgd2hvbGUgSS9PIHZlY3RvciBwcm9jZXNzaW5nLiBJcyBpdCB1c2luZyBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgbGlrZSBkaXJlY3QgSS9PIG9yIHByZWZldGNoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucywgYW5kIG1vc3QgaW1wb3J0YW50bHkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucyAoZXNwZWNpYWxseSB3aXRoIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucyksIGFuZCBhbnkgZ290Y2hhcyB0aGF0IG1pZ2h0IGxlYWQgdG8gcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBkYXRhIGNvcnJ1cHRpb24uIE15IG1haW4gY29uY2VybnMgYXJlOiByZWxpYWJpbGl0eSwgZWZmaWNpZW5jeSwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHBsYXlzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBvdmVyYWxsIEkvTyBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1OTpcdGludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gNTYwOlx0e1xuIDU2MTpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA1NjI6XHRcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cgPSByZXEtXHUwMDNlYXN5bmNfZGF0YTtcbiA1NjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gNTY0Olx0XHR1bnNpZ25lZCBmbGFncztcbiA1NjU6XHRcdGludCBtaW5fcmV0ID0gMDtcbiA1NjY6XHRcdGludCByZXQ7XG4gNTY3Olx0XG4gNTY4Olx0XHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVx1MDAzZWZpbGUpO1xuIDU2OTpcdFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcbiA1NzA6XHRcdFx0cmV0dXJuIC1FTk9UU09DSztcbiA1NzE6XHRcbiA1NzI6XHRcdGlmICghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcdTAwMjZcdTAwMjZcbiA1NzM6XHRcdCAgICAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUKSlcbiA1NzQ6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gNTc1Olx0XG4gNTc2Olx0XHRmbGFncyA9IHNyLVx1MDAzZW1zZ19mbGFncztcbiA1Nzc6XHRcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbiA1Nzg6XHRcdFx0ZmxhZ3MgfD0gTVNHX0RPTlRXQUlUO1xuIDU3OTpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfV0FJVEFMTClcbiA1ODA6XHRcdFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKTtcbiA1ODE6XHRcbiA1ODI6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19jb250cm9sX3VzZXIgPSBzci1cdTAwM2Vtc2dfY29udHJvbDtcbiA1ODM6XHRcbiA1ODQ6XHRcdHJldCA9IF9fc3lzX3NlbmRtc2dfc29jayhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgZmxhZ3MpO1xuIDU4NTpcdFxuIDU4NjpcdFx0aWYgKHJldCBcdTAwM2MgbWluX3JldCkge1xuIDU4NzpcdFx0XHRpZiAocmV0ID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpXG4gNTg4Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gNTg5Olx0XHRcdGlmIChyZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlvX25ldF9yZXRyeShzb2NrLCBmbGFncykpIHtcbiA1OTA6XHRcdFx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfY29udHJvbGxlbiA9IDA7XG4gNTkxOlx0XHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2wgPSBOVUxMO1xuIDU5MjpcdFx0XHRcdHNyLVx1MDAzZWRvbmVfaW8gJiM0Mzs9IHJldDtcbiA1OTM6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiA1OTQ6XHRcdFx0fVxuIDU5NTpcdFx0XHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcbiA1OTY6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4gNTk3Olx0XHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuIDU5ODpcdFx0fVxuIDU5OTpcdFx0aW9fcmVxX21zZ19jbGVhbnVwKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIDYwMDpcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gNjAxOlx0XHRcdHJldCAmIzQzOz0gc3ItXHUwMDNlZG9uZV9pbztcbiA2MDI6XHRcdGVsc2UgaWYgKHNyLVx1MDAzZWRvbmVfaW8pXG4gNjAzOlx0XHRcdHJldCA9IHNyLVx1MDAzZWRvbmVfaW87XG4gNjA0Olx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gNjA1Olx0XHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xuIDYwNjpcdH1cbiA2MDc6XHRcbiA2MDg6XHRzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGlvX3NlbmRtc2dgIFdvcmtmbG93IGFuZCBJZGVudGlmeWluZyBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGlvX3NlbmRtc2dgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBjYWxsaW5nIGBpb19zZW5kX2ZpbmlzaGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zIGhlcmUsIHNvIHRoZSBzaWduaWZpY2FudCBmb2N1cyBzeW1ib2xzIHNlZW0gdG8gYmUgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUsIGVzcGVjaWFsbHkgaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4KCldhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgc2VlaW5nIGBpb19idW5kbGVfbmJ1ZnNgIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYnVuZGxlcy4gVGhhdCBhZGRzIGEgbmV3IGRpbWVuc2lvbiB0byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayBgaW9fc2VuZGAsIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgIG5vdy4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBmbG93PyBgQ09ORklHX0lPX1VSSU5HYCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB3aGV0aGVyIGl0IHBsYXlzIGEgcm9sZSBvciBpZiB0aGVyZSBhcmUgb3RoZXIsIG1vcmUgc3BlY2lhbGl6ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTQtXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzYtXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTkzOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSU9fVVJJTkcgYW5kIFBvdGVudGlhbCBOZXR3b3JrIEJ1ZyBGaXhlcyoqCgpPa2F5LCBzbyBgSU9fVVJJTkdgIGlzIGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGF0IGxlYXN0IGluIHRoZSBnZW5lcmFsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoaW5ncy4gTXkgZm9jdXMgbm93IGlzIG9uIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgaW9fdXJpbmcvbmV0LmNgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4IHNwZWNpZmljYWxseS4gSXQgbG9va3MgbGlrZSBgbWluX3QoaW50LCAuLi4pYCB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGBtaW5fdChzaXplX3QsIC4uLilgIHdpdGhpbiBgaW9fYnVuZGxlX25idWZzYC4KClRoZSBrZXkgc3ltYm9scyBoZXJlLCB0aGUgb25lcyBJIHdhbnQgdG8gdHJhY2sgZG93biwgYXJlIGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLiBIYW5nIG9u4oCmIGRvZXMgYGlvX3JlY3Ztc2dgIGFjdHVhbGx5IGNhbGwgYGlvX3JlY3ZfZmluaXNoYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MgZGlnIGludG8gYGlvX3JlY3Ztc2dgIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgIGFuZCBjb25maXJtIHRoYXQgY2FsbGluZyBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIHRoZSBidWcmIzM5O3MgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDUwOlx0aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbjEwNTE6XHR7XG4xMDUyOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuMTA1MzpcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuMTA1NDpcdFx0c3RydWN0IGlvX2JyX3NlbCBzZWwgPSB7IH07XG4xMDU1Olx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTA1NjpcdFx0dW5zaWduZWQgZmxhZ3M7XG4xMDU3Olx0XHRpbnQgcmV0LCBtaW5fcmV0ID0gMDtcbjEwNTg6XHRcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcbjEwNTk6XHRcdGJvb2wgbXNob3RfZmluaXNoZWQgPSB0cnVlO1xuMTA2MDpcdFxuMTA2MTpcdFx0c29jayA9IHNvY2tfZnJvbV9maWxlKHJlcS1cdTAwM2VmaWxlKTtcbjEwNjI6XHRcdGlmICh1bmxpa2VseSghc29jaykpXG4xMDYzOlx0XHRcdHJldHVybiAtRU5PVFNPQ0s7XG4xMDY0Olx0XG4xMDY1Olx0XHRpZiAoIShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX1BPTExFRCkgXHUwMDI2XHUwMDI2XG4xMDY2Olx0XHQgICAgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCkpXG4xMDY3Olx0XHRcdHJldHVybiAtRUFHQUlOO1xuMTA2ODpcdFxuMTA2OTpcdFx0ZmxhZ3MgPSBzci1cdTAwM2Vtc2dfZmxhZ3M7XG4xMDcwOlx0XHRpZiAoZm9yY2Vfbm9uYmxvY2spXG4xMDcxOlx0XHRcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcbjEwNzI6XHRcbjEwNzM6XHRyZXRyeV9tdWx0aXNob3Q6XG4xMDc0Olx0XHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xuMTA3NTpcdFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xuMTA3NjpcdFx0XHRzaXplX3QgbGVuID0gc3ItXHUwMDNlbGVuO1xuMTA3NzpcdFxuMTA3ODpcdFx0XHRzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXHUwMDI2bGVuLCBzci1cdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcbjEwNzk6XHRcdFx0aWYgKCFzZWwuYWRkcilcbjEwODA6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xMDgxOlx0XG4xMDgyOlx0XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuMTA4MzpcdFx0XHRcdHJldCA9IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoa21zZywgc3IsIFx1MDAyNnNlbC5hZGRyLCBcdTAwMjZsZW4pO1xuMTA4NDpcdFx0XHRcdGlmIChyZXQpIHtcbjEwODU6XHRcdFx0XHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuMTA4NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjEwODc6XHRcdFx0XHR9XG4xMDg4Olx0XHRcdH1cbjEwODk6XHRcbjEwOTA6XHRcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBzZWwuYWRkciwgbGVuKTtcbjEwOTE6XHRcdH1cbjEwOTI6XHRcbjEwOTM6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19nZXRfaW5xID0gMTtcbjEwOTQ6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcbjEwOTU6XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuMTA5NjpcdFx0XHRyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsXG4xMDk3Olx0XHRcdFx0XHRcdCAgIFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcbjEwOTg6XHRcdH0gZWxzZSB7XG4xMDk5Olx0XHRcdC8qIGRpc2FibGUgcGFydGlhbCByZXRyeSBmb3IgcmVjdm1zZyB3aXRoIGNtc2cgYXR0YWNoZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqUmV2aWV3aW5nIHRoZSBgaW9fcmVjdm1zZ2AgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBsb29rZWQgYXQgdGhlIGluaXRpYWwgcGFydCBvZiBgaW9fcmVjdm1zZ2AsIGJ1dCBsZXQmIzM5O3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHN1YnRsZXRpZXMgdGhhdCBtaWdodCBiZSBsdXJraW5nIGluIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGp1ZGdlbWVudHMsIHNvLCBsZXQmIzM5O3MgbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBleGVjdXRpb24uIEdvdHRhIGtlZXAgdGhpcyBjbGVhbiBhbmQgZWZmaWNpZW50LCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZXhwbG9yZWQgaXQgYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwgXHUwMDI2XHUwMDI2ICFrbXNnLVx1MDAzZW1zZy5tc2dfY29udHJvbGxlbilcbjExMDE6XHRcdFx0XHRtaW5fcmV0ID0gaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpO1xuMTEwMjpcdFxuMTEwMzpcdFx0XHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXHUwMDI2a21zZy1cdTAwM2Vtc2csIHNyLVx1MDAzZXVtc2csXG4xMTA0Olx0XHRcdFx0XHRcdCBrbXNnLVx1MDAzZXVhZGRyLCBmbGFncyk7XG4xMTA1Olx0XHR9XG4xMTA2Olx0XG4xMTA3Olx0XHRpZiAocmV0IFx1MDAzYyBtaW5fcmV0KSB7XG4xMTA4Olx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgZm9yY2Vfbm9uYmxvY2spIHtcbjExMDk6XHRcdFx0XHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcbjExMTA6XHRcdFx0XHRyZXR1cm4gSU9VX1JFVFJZO1xuMTExMTpcdFx0XHR9XG4xMTEyOlx0XHRcdGlmIChyZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlvX25ldF9yZXRyeShzb2NrLCBmbGFncykpIHtcbjExMTM6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSByZXQ7XG4xMTE0Olx0XHRcdFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcbjExMTU6XHRcdFx0fVxuMTExNjpcdFx0XHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcbjExMTc6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4xMTE4Olx0XHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuMTExOTpcdFx0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKSBcdTAwMjZcdTAwMjYgKGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyBcdTAwMjYgKE1TR19UUlVOQyB8IE1TR19DVFJVTkMpKSkge1xuMTEyMDpcdFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbjExMjE6XHRcdH1cbjExMjI6XHRcbjExMjM6XHRcdGlmIChyZXQgXHUwMDNlIDApXG4xMTI0Olx0XHRcdHJldCAmIzQzOz0gc3ItXHUwMDNlZG9uZV9pbztcbjExMjU6XHRcdGVsc2UgaWYgKHNyLVx1MDAzZWRvbmVfaW8pXG4xMTI2Olx0XHRcdHJldCA9IHNyLVx1MDAzZWRvbmVfaW87XG4xMTI3Olx0XHRlbHNlXG4xMTI4Olx0XHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuMTEyOTpcdFxuMTEzMDpcdFx0c2VsLnZhbCA9IHJldDtcbjExMzE6XHRcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4xMTMyOlx0XHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuMTEzMzpcdFxuMTEzNDpcdFx0cmV0dXJuIHNlbC52YWw7XG4xMTM1Olx0fVxuMTEzNjpcdFxuMTEzNzpcdHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuMTEzODpcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuMTEzOTpcdHtcbjExNDA6XHRcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4xMTQxOlx0XHRpbnQgcmV0O1xuMTE0MjpcdFxuMTE0MzpcdFx0LypcbjExNDQ6XHRcdCAqIElmIHRoZSByaW5nIGlzbiYjMzk7dCBsb2NrZWQsIHRoZW4gZG9uJiMzOTt0IHVzZSB0aGUgcGVlayBpbnRlcmZhY2VcbjExNDU6XHRcdCAqIHRvIGdyYWIgbXVsdGlwbGUgYnVmZmVycyBhcyB3ZSB3aWxsIGxvY2svdW5sb2NrIGJldHdlZW5cbjExNDY6XHRcdCAqIHRoaXMgc2VsZWN0aW9uIGFuZCBwb3N0aW5nIHRoZSBidWZmZXJzLlxuMTE0NzpcdFx0ICovXG4xMTQ4Olx0XHRpZiAoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkgXHUwMDI2XHUwMDI2XG4xMTQ5Olx0XHQgICAgc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgSS9PIENvbXBsZXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBvdXIgYXN5bmNocm9ub3VzIEkvTyBvcGVyYXRpb25zIGNvbXBsZXRlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgaW9fcmVjdm1zZ2AgcGF0aCwgYW5kIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGl0ICpkb2VzKiBjYWxsIGBpb19yZWN2X2ZpbmlzaGAuIEdvb2QuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHBhcmFsbGVsIG9uIHRoZSBzZW5kIHNpZGUuIEkmIzM5O20gYXNraW5nIG15c2VsZiwgZG9lcyBgaW9fc2VuZG1zZ2AgdHJpZ2dlciBhIHNpbWlsYXIgZmluaXNoaW5nIGZ1bmN0aW9uLCBsaWtlIGBpb19zZW5kX2ZpbmlzaGA/IEhvbGQgb24uLi4gSSBqdXN0IHJldmlld2VkIGBpb19zZW5kbXNnYCBhbmQsIG5vLCBpdCBkb2VzbiYjMzk7dC4gT2theSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEJ1dCB3aGF0IGFib3V0IHRoZSBzaW1wbGVyIGBpb19zZW5kYD8gQWggeWVzLCBgaW9fc2VuZGAgZG9lcyBoYXZlIGl0cyBvd24gZmluaXNoaW5nIGNhbGwuIE5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBmb2N1cyB0byB0aGUgemVyby1jb3B5IHNlbmQgcm91dGluZXMuIEkgbmVlZCB0byBjaGVjayBob3cgYGlvX3NlbmRfemNgIGFuZCBgaW9fc2VuZG1zZ196Y2AgaGFuZGxlIHRoZWlyIGNvbXBsZXRpb24gc3RlcHMgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgdGhlIHBhdGhzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHplcm8tY29weSBwYXRocyBiZWhhdmUgY29uc2lzdGVudGx5IHdpdGggdGhlIG5vcm1hbCBzZW5kIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcyNS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzo3MjY6XHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsKSlcbmlvX3VyaW5nL25ldC5jLTcyNy1cdFx0Z290byByZXRyeV9idW5kbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk15IEFuYWx5c2lzIG9mIEkvTyBGdW5jdGlvbiBDYWxsIFJlbGF0aW9uc2hpcHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBjbGVhciBwYXR0ZXJuIGhlcmUsIGZvY3VzaW5nIG9uIGhvdyB0aGVzZSBsb3ctbGV2ZWwgSS9PIGZ1bmN0aW9ucyBpbnRlcmFjdC4gYGlvX3NlbmRgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYGlvX3NlbmRfZmluaXNoYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIE9uIHRoZSByZWNlaXZpbmcgZW5kLCBgaW9fcmVjdm1zZ2AgYW5kIGBpb19yZWN2YCBib3RoIHNlZW0gdG8gdHJpZ2dlciBgaW9fcmVjdl9maW5pc2hgLiBUaGF04oCZcyBsb2dpY2FsLCB0aGUgZmluaXNoIHJvdXRpbmVzIGFyZSBjYWxsZWQgYWZ0ZXIgdGhlIGNvcmUgb3BlcmF0aW9uLgoKTm93IHRoZSBjdXJ2ZWJhbGwuIEkmIzM5O20gbm90aW5nIHRoYXQgYGlvX2J1bmRsZV9uYnVmc2AgaXMgYWxzbyBpbnZva2VkIGJ5IGBpb19uZXRfa2J1Zl9yZWN5bGVgLiBUaGF0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0IHJlcXVpcmVzIGNhcmVmdWwgdGhvdWdodC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgaGFzIHRvIGJlIHRyYWNpbmcgYmFjayB0byBmaW5kICp3aG8qIGNhbGxzIGBpb19uZXRfa2J1Zl9yZWN5bGVgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhpcyBgaW9fYnVuZGxlX25idWZzYCBmdW5jdGlvbiBoYXMgdG8gZG8gd2l0aCB0aGluZ3MuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwb2ludCBvZiBvcHRpbWl6YXRpb24gb3IgYSBzb3VyY2Ugb2YgY29udGVudGlvbiBJIHNob3VsZCBiZSB0cmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fbmV0X2tidWZfcmVjeWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9NDgxPXN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTExLVxuaW9fdXJpbmcvbmV0LmM6NTEyOnN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcvbmV0LmMtNTEzLVx0XHRcdCAgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCBsZW4pXG4tLVxuaW9fdXJpbmcvbmV0LmM9NjU2PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzEzLVx0XHRcdHNyLVx1MDAzZWRvbmVfaW8gJiM0Mzs9IHJldDtcbmlvX3VyaW5nL25ldC5jOjcxNDpcdFx0XHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xuaW9fdXJpbmcvbmV0LmMtNzE1LVx0XHR9XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTA1MD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMTMtXHRcdFx0c3ItXHUwMDNlZG9uZV9pbyAmIzQzOz0gcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTExNDpcdFx0XHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xuaW9fdXJpbmcvbmV0LmMtMTExNS1cdFx0fVxuLS1cbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMjcxLVx0XHRcdHNyLVx1MDAzZWRvbmVfaW8gJiM0Mzs9IHJldDtcbmlvX3VyaW5nL25ldC5jOjEyNzI6XHRcdFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcbmlvX3VyaW5nL25ldC5jLTEyNzMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NDkKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSS9PIFVyaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBoZXJlIOKAkyBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4gVGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMgZm9yIHRoaXMgSS9PIFVyaW5nIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSBjcml0aWNhbCB0byB0aGlzLCBzbyBJIHdpbGwgY2hlY2sgZm9yIGFueSBzZWNvbmRhcnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBvciByZWxhdGVkIGFzcGVjdHMuIFRoZSBjb3JlIGNvbmZpZyB0byBiZSBhd2FyZSBvZiBpcyBgSU9fVVJJTkdgLCBvYnZpb3VzbHkuCgpGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgZ2VudWluZSB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgc2VlbXMgYHRoaXNfbGVuYCBjb3VsZCBiZWNvbWUgbmVnYXRpdmUgaWYgYGlvdl9sZW5gIGV4Y2VlZHMgYElOVF9NQVhgLCBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBhYnNvbHV0ZWx5IG5lZWRzIGZpeGluZy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGJ1ZyBhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICp3b3J0aCBmdXp6aW5nKiwgc28gSSB3aWxsIGJlIHNldHRpbmcgdGhhdCB0byB0cnVlLiBUaGlzIHBhdGNoIHNob3VsZCBiZSB0ZXN0ZWQgdGhvcm91Z2hseS4KClVsdGltYXRlbHksIEkmIzM5O20gZ29pbmcgdG8gY2VudGVyIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AsIGFuZCBJJiMzOTtsbCBlbnN1cmUgdGhlIGBJT19VUklOR2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGR1cmluZyBteSB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjA1LjI4ODg0OTk0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjY5MzQ3NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fc2VuZFwiLFxuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBpb19idW5kbGVfbmJ1ZnNgIHdoZXJlIGBtaW5fdChpbnQsIC4uLilgIGNvdWxkIHRydW5jYXRlIG9yIHNpZ24tZXh0ZW5kIGBpb3ZfbGVuYCBpZiBpdCBleGNlZWRzIGBJTlRfTUFYYCwgbGVhZGluZyB0byBuZWdhdGl2ZSB2YWx1ZXMgb3IgaW5jb3JyZWN0IGxlbmd0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuIFRoZSBhZmZlY3RlZCBmdW5jdGlvbiBpcyB1c2VkIGJ5IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDowNS4yODg4NjY3MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTcwOTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM5ZjBlNzFmYzZjMjliMjBhMzA0ZjVmYjM5NGY5NTI5MDk0M2ZiMGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMjM6NDA6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xcbmluZGV4IDAwYTdkZjgwM2I5OWIuLmU4YTA2NmY4YTllMzMgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcXG4rKysgYi9pb191cmluZy9uZXQuY1xcbkBAIC01MDAsNyArNTAwLDcgQEAgc3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG4gXFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXFxuIFxcdG5idWZzID0gMDtcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcXG4rXFx0XFx0c2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XFxuIFxcbiBcXHRcXHRuYnVmcysrO1xcbiBcXHRcXHRyZXQgLT0gdGhpc19sZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjA1Ljc4NTI3ODk3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwNzcyOTA2NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fc2VuZFwiLFxuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBpb19idW5kbGVfbmJ1ZnNgIHdoZXJlIGBtaW5fdChpbnQsIC4uLilgIGNvdWxkIHRydW5jYXRlIG9yIHNpZ24tZXh0ZW5kIGBpb3ZfbGVuYCBpZiBpdCBleGNlZWRzIGBJTlRfTUFYYCwgbGVhZGluZyB0byBuZWdhdGl2ZSB2YWx1ZXMgb3IgaW5jb3JyZWN0IGxlbmd0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuIFRoZSBhZmZlY3RlZCBmdW5jdGlvbiBpcyB1c2VkIGJ5IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOWYwZTcxZmM2YzI5YjIwYTMwNGY1ZmIzOTRmOTUyOTA5NDNmYjBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjM6NDA6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXG5pbmRleCAwMGE3ZGY4MDNiOTliLi5lOGEwNjZmOGE5ZTMzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcbisrKyBiL2lvX3VyaW5nL25ldC5jXG5AQCAtNTAwLDcgKzUwMCw3IEBAIHN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG4gXHQvKiBzaG9ydCB0cmFuc2ZlciwgY291bnQgc2VnbWVudHMgKi9cbiBcdG5idWZzID0gMDtcbiBcdGRvIHtcbi1cdFx0aW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XG4rXHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO1xuIFxuIFx0XHRuYnVmcysrO1xuIFx0XHRyZXQgLT0gdGhpc19sZW47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDowNS43ODUyODA0MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg0NDQ5ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggd2l0aGluIGBpb191cmluZy9uZXQuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUncyBtb2RpZnlpbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJIHNlZSB0aGV5J3ZlIGNoYW5nZWQgdGhlIHR5cGUgZGVjbGFyYXRpb24gZm9yIGB0aGlzX2xlbmAgd2l0aGluIGEgYG1pbl90YCBjYWxsLiBPcmlnaW5hbGx5LCBpdCB3YXMgYW4gYGludGAsIGJ1dCBpdCdzIG5vdyBhIGBzaXplX3RgLiBUaGUgcmVsZXZhbnQgbGluZSBpczogYGludCB0aGlzX2xlbiA9IG1pbl90KGludCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO2Agd2hpY2ggaGFzIGJlY29tZSBgc2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyBpbnRlcmVzdGluZyB0aGV5J3JlIHN3aXRjaGluZyB0byBhIGBzaXplX3RgIGZvciB0aGUgbWluaW11bSBjYWxjdWxhdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBzaXplIGJlaW5nIGhhbmRsZWQgaGVyZSBtaWdodCBoYXZlIGdyb3duLiBDb3VsZCBiZSByZWxhdGVkIHRvIGxhcmdlciBuZXR3b3JrIGJ1ZmZlcnMgb3IgcG90ZW50aWFsbHkgaGFuZGxpbmcgc2l6ZXMgdGhhdCBleGNlZWQgdGhlIGNhcGFjaXR5IG9mIGEgc2lnbmVkIGludGVnZXIuIEkgbmVlZCB0byBkaWcgaW50byBgaW9fYnVuZGxlX25idWZzYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBhbmQgY29udGV4dCBiZXR0ZXIuIEknbGwgbmVlZCB0byBleGFtaW5lIHdoYXQgYGlvdltuYnVmc10uaW92X2xlbmAgYW5kIGByZXRgIHJlcHJlc2VudCBpbiB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjEwLjA2OTczMjMyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTk0MzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19idW5kbGVfbmJ1ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NDY3PXN0YXRpYyB2b2lkIGlvX3JlcV9tc2dfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQ4MC0gKi9cXG5pb191cmluZy9uZXQuYzo0ODE6c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG5pb191cmluZy9uZXQuYy00ODIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NTEyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTE2LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuaW9fdXJpbmcvbmV0LmM6NTE3OlxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbmlvX3VyaW5nL25ldC5jLTUxOC1cXHRyZXR1cm4gSU9VX1JFVFJZO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NTIxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUzMy1cXG5pb191cmluZy9uZXQuYzo1MzQ6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUzNS1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg4Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy05MDktXFxuaW9fdXJpbmcvbmV0LmM6OTEwOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XFxuaW9fdXJpbmcvbmV0LmMtOTExLVxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MTAuMTM1NjgyODc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3Njc0Mjc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPX1VSSU5HIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGlvX3VyaW5nYCBuZXR3b3JraW5nIGNvZGUuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbSBmb2N1c2luZyBvbiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGlzIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZywgcHJvYmFibHkgaW1wbHlpbmcgaXQncyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgZmlsZS4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgaW9fbmV0X2tidWZfcmVjeWxlYCwgYGlvX3NlbmRfZmluaXNoYCwgYW5kIGBpb19yZWN2X2ZpbmlzaGAuXG5cbldhaXQgYSBtaW51dGUuLi4gYGlvX25ldF9rYnVmX3JlY3lsZWA/IFRoYXQncyBnb3QgbXkgYXR0ZW50aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YCBhcmUgYWN0dWFsbHkgZG9pbmcuIExldCdzIHNlZSBob3cgdGhleSB1c2UgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gYnVuZGxlIGFuZCByZWN5Y2xlIHRoZSBuZXQgYnVmZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDoxMy42MTI0Mjg1MjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwNzkwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NTEyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTIwLVxcbmlvX3VyaW5nL25ldC5jOjUyMTpzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNTIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzI1LVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6NzI2OlxcdGlmICghaW9fc2VuZF9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsKSlcXG5pb191cmluZy9uZXQuYy03MjctXFx0XFx0Z290byByZXRyeV9idW5kbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjEzLjY3OTUxMTkyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDE2NzA1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGlvX3VyaW5nL25ldC5jYCBmb3IgTmV0d29yayBJL08gRWZmaWNpZW5jeSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgYGlvX3VyaW5nYCBpcyBoYW5kbGluZyBuZXR3b3JrIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAgZnVuY3Rpb25zIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zOiBob3cgdGhleSdyZSBlbnF1ZXVpbmcgcmVxdWVzdHMsIGhvdyB0aGUgY29tcGxldGlvbiBpcyBoYW5kbGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgdGhleSdyZSBtaW5pbWl6aW5nIGNvbnRleHQgc3dpdGNoZXMgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UuIEknbSBsb29raW5nIGZvciB0aGUgY29tbW9uIHBpdGZhbGxzIHRoYXQgSSBhbHJlYWR5IGtub3csIHN1Y2ggYXMgZW5zdXJpbmcgcHJvcGVyIGVycm9yIGhhbmRsaW5nLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcywgYW5kIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzeXN0ZW0gY2FsbHMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhleSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgZmxhZ3MgdG8gbWF4aW1pemUgcGVyZm9ybWFuY2UgKGUuZy4sIGBNU0dfTk9TSUdOQUxgLCBgTVNHX01PUkVgKS4gSSdtIGFsc28ga2Vlbmx5IGludGVyZXN0ZWQgaW4gYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCAtIHRoaW5ncyBsaWtlIHByZS10b3VjaGluZyBwYWdlcywgY29hbGVzY2luZyByZXF1ZXN0cywgb3IgemVyby1jb3B5IHRlY2huaXF1ZXMgLSBhbmQsIG9mIGNvdXJzZSwgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIGNhbiBxdWlja2x5IGlkZW50aWZ5LiBFc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhZGhlcmUgdG8gdGhlIGlvX3VyaW5nIHBoaWxvc29waHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDoxNy4xODExODQyMzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODczMzcwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0yOTA9c3RhdGljIGludCBpb19tc2dfY29weV9oZHIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmlvbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMzQyLVxcbmlvX3VyaW5nL25ldC5jOjM0Mzp2b2lkIGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbmlvX3VyaW5nL25ldC5jLTM0NC17XFxuLS1cXG5pb191cmluZy9uZXQuYy0zNDktXFxuaW9fdXJpbmcvbmV0LmM6MzUwOnN0YXRpYyBpbnQgaW9fc2VuZF9zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTM1MS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0zOTUtXFxuaW9fdXJpbmcvbmV0LmM6Mzk2OnN0YXRpYyBpbnQgaW9fc2VuZG1zZ19zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTM5Ny17XFxuLS1cXG5pb191cmluZy9uZXQuYy00MjMtXFxuaW9fdXJpbmcvbmV0LmM6NDI0OmludCBpb19zZW5kbXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9uZXQuYy00MjUte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDYwLVxcdGlmIChyZXEtXFx1MDAzZW9wY29kZSAhPSBJT1JJTkdfT1BfU0VORE1TRylcXG5pb191cmluZy9uZXQuYzo0NjE6XFx0XFx0cmV0dXJuIGlvX3NlbmRfc2V0dXAocmVxLCBzcWUpO1xcbmlvX3VyaW5nL25ldC5jLTQ2Mi1cXHRpZiAodW5saWtlbHkoc3FlLVxcdTAwM2VhZGRyMiB8fCBzcWUtXFx1MDAzZWZpbGVfaW5kZXgpKVxcbmlvX3VyaW5nL25ldC5jLTQ2My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9uZXQuYzo0NjQ6XFx0cmV0dXJuIGlvX3NlbmRtc2dfc2V0dXAocmVxLCBzcWUpO1xcbmlvX3VyaW5nL25ldC5jLTQ2NS19XFxuLS1cXG5pb191cmluZy9uZXQuYz01MTI9c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuLS1cXG5pb191cmluZy9uZXQuYy01MjAtXFxuaW9fdXJpbmcvbmV0LmM6NTIxOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9uZXQuYy01MjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTU4LVxcbmlvX3VyaW5nL25ldC5jOjU1OTppbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTU2MC17XFxuLS1cXG5pb191cmluZy9uZXQuYy02MDctXFxuaW9fdXJpbmcvbmV0LmM6NjA4OnN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXFxuaW9fdXJpbmcvbmV0LmMtNjA5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYy02NTUtXFxuaW9fdXJpbmcvbmV0LmM6NjU2OmludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtNjU3LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTY4OS1cXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuaW9fdXJpbmcvbmV0LmM6NjkwOlxcdFxcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcXHUwMDI2c2VsLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy02OTEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcyNS1cXHRzZWwudmFsID0gcmV0O1xcbmlvX3VyaW5nL25ldC5jOjcyNjpcXHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCkpXFxuaW9fdXJpbmcvbmV0LmMtNzI3LVxcdFxcdGdvdG8gcmV0cnlfYnVuZGxlO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTMyNT1pbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzU5LVxcbmlvX3VyaW5nL25ldC5jOjEzNjA6dm9pZCBpb19zZW5kX3pjX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtMTM2MS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzc2LVxcbmlvX3VyaW5nL25ldC5jOjEzNzc6aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTEzNzgte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTQzMi1cXHRpZiAocmVxLVxcdTAwM2VvcGNvZGUgPT0gSU9SSU5HX09QX1NFTkRfWkMpIHtcXG5pb191cmluZy9uZXQuYzoxNDMzOlxcdFxcdHJldCA9IGlvX3NlbmRfc2V0dXAocmVxLCBzcWUpO1xcbmlvX3VyaW5nL25ldC5jLTE0MzQtXFx0fSBlbHNlIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0MzYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvbmV0LmM6MTQzNzpcXHRcXHRyZXQgPSBpb19zZW5kbXNnX3NldHVwKHJlcSwgc3FlKTtcXG5pb191cmluZy9uZXQuYy0xNDM4LVxcdH1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE0NTc9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0OTktXFxuaW9fdXJpbmcvbmV0LmM6MTUwMDpzdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTE1MDEtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTUyOS1cXG5pb191cmluZy9uZXQuYzoxNTMwOmludCBpb19zZW5kbXNnX3pjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTUzMS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0xNTQ3LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xcbmlvX3VyaW5nL25ldC5jOjE1NDg6XFx0XFx0cmV0ID0gaW9fc2VuZF96Y19pbXBvcnQocmVxLCBrbXNnLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTU0OS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE1ODktXFx0ICogSWYgd2UncmUgaW4gaW8td3Egd2UgY2FuJ3QgcmVseSBvbiB0dyBvcmRlcmluZyBndWFyYW50ZWVzLCBkZWZlclxcbmlvX3VyaW5nL25ldC5jOjE1OTA6XFx0ICogZmx1c2hpbmcgbm90aWYgdG8gaW9fc2VuZF96Y19jbGVhbnVwKClcXG5pb191cmluZy9uZXQuYy0xNTkxLVxcdCAqL1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTYwMC1cXG5pb191cmluZy9uZXQuYzoxNjAxOnZvaWQgaW9fc2VuZHJlY3ZfZmFpbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy9uZXQuYy0xNjAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MTcuMjY4NTI1MDI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5NDM1MzY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgVGhvdWdodCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGlvX2J1bmRsZV9uYnVmc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyBgaW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YCB0byBgc2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBhIHN0cmFpZ2h0Zm9yd2FyZCB0eXBlIGNoYW5nZS4gYGlvdl9sZW5gIGlzIGEgYHNpemVfdGAsIHNvIHVzaW5nIGBpbnRgIHRoZXJlIGlzIGp1c3QgYXNraW5nIGZvciB0cm91YmxlLlwiXG5cbkFuZCB0aGVuIGl0IGhpdHMgbWU6IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgdGlkeWluZyB1cC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgYmVjYXVzZSBgaW92X2xlbmAgaXMgYSBgc2l6ZV90YCEgUmlnaHQgbm93LCB0aGF0IGBtaW5fdChpbnQsIC4uLilgIGlzIHRydW5jYXRpbmcgb3IsIGV2ZW4gd29yc2UsIHNpZ24tZXh0ZW5kaW5nIGxhcmdlci10aGFuLWBJTlRfTUFYYCB2YWx1ZXMgb2YgYGlvdl9sZW5gLiBUaGF0J3MgYSBjbGFzc2ljIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gV2FpdCBhIG1pbnV0ZS4uLiBgcmV0YCBpcyBhbiBgaW50YC4gT2theS4gU28gdGhlIG9yaWdpbmFsIGNvZGUgd2FzICpjYXN0aW5nKiBgaW92X2xlbmAgdG8gYW4gYGludGAgd2l0aGluIHRoZSBgbWluX3RgIGZ1bmN0aW9uLiBJZiBgaW92X2xlbmAgaXMgbWFzc2l2ZSwgaXQgYmVjb21lcyBuZWdhdGl2ZSwgYW5kIGBtaW5fdGAgaXMgcGlja2luZyB0aGUgKm5lZ2F0aXZlKiBsZW5ndGguIFRoYXQncyBjbGVhcmx5IHdyb25nLiBTbywgdGhpcyBmaXggYWN0dWFsbHkgcHJldmVudHMgdGhlIHdyb25nIGNhbGN1bGF0aW9uLiBCaW5nbywgYSByZWFsIGJ1ZyBmaXguXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gYGlvX2J1bmRsZV9uYnVmc2AgaXMgY2FsbGVkIGJ5IGBpb19zZW5kX2ZpbmlzaGAgYW5kIGBpb19yZWN2X2ZpbmlzaGAuIFRob3NlIGFyZSBjYWxsZWQgYnkgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIEFscmlnaHQsIHNvIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFmZmVjdGVkIGhlcmUgYXJlIGRlZmluaXRlbHkgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIEJ1dCB3YWl0LCBhcmUgd2UgY29tcGxldGVseSBzdXJlPyBgaW9fc2VuZG1zZ2AgYW5kIGBpb19yZWN2bXNnYCBtaWdodCBhbHNvIGJlIHVzaW5nIHRoZXNlISBOZWVkIHRvIHZlcmlmeS4gTGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlvX3NlbmRfZmluaXNoYC4gTGV0J3MgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MjMuMDYyODgzODg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxMDI4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NTEyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTIwLVxcbmlvX3VyaW5nL25ldC5jOjUyMTpzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNTIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzI1LVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6NzI2OlxcdGlmICghaW9fc2VuZF9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsKSlcXG5pb191cmluZy9uZXQuYy03MjctXFx0XFx0Z290byByZXRyeV9idW5kbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjIzLjE4Mjk5NDQwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkxNTc4Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpb19yZWN2X2ZpbmlzaGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBpb19yZWN2X2ZpbmlzaGAgYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIGFsbCB0aGUgZnVuY3Rpb25zIG9yIG1vZHVsZXMgdGhhdCBkaXJlY3RseSBpbnZva2UgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgZm9yIGEgZmV3IHJlYXNvbnMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQ7IGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb21wb25lbnRzIGFyZSBrZXkuIFNlY29uZGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBwYXR0ZXJucyBpbiBpdHMgdXNhZ2Ug4oCTIGFyZSBjZXJ0YWluIG1vZHVsZXMgb3IgcHJvdG9jb2xzIHJlbHlpbmcgb24gaXQgbW9yZSB0aGFuIG90aGVycz8gRmluYWxseSwgYSB0aG9yb3VnaCBjYWxsZXIgYW5hbHlzaXMgaXMgZXNzZW50aWFsIGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBldmVuIHJlZmFjdG9yaW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBmdW5jdGlvbiBpcyBjb21wbGV4IG9yIHBlcmZvcm1hbmNlLWNyaXRpY2FsLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSB6ZXJvIGluIG9uIGFueSBwb3RlbnRpYWwgaG90c3BvdHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjI2LjE3NDU3NjQ2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTUyODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTgxMT1pbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy04ODItICovXFxuaW9fdXJpbmcvbmV0LmM6ODgzOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9uZXQuYy04ODQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTA1MD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzMC1cXHRzZWwudmFsID0gcmV0O1xcbmlvX3VyaW5nL25ldC5jOjExMzE6XFx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFxcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXFxuaW9fdXJpbmcvbmV0LmMtMTEzMi1cXHRcXHRnb3RvIHJldHJ5X211bHRpc2hvdDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTAtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjkxOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbmlvX3VyaW5nL25ldC5jLTEyOTItXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjI2LjM4NjczNDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTI3NDU4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgSS9PIENhbGxzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBuZXR3b3JrIEkvTyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gSSBzZWUgdGhhdCBgaW9fc2VuZGAsIGBpb19yZWN2bXNnYCwgYW5kIGBpb19yZWN2YCDigJMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhcHBlYXIgdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IG1lbnRhbCBtYXAgaGlnaGxpZ2h0cyB0aG9zZSBhcyB0aGUga2V5IGZvY3VzIHN5bWJvbHM6IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBmZWVscyBzbGlnaHRseSBvZmYuIEkgdGhvdWdodCBgaW9fc2VuZG1zZ2Agd291bGQgdXRpbGl6ZSBhIGNvbXBsZXRpb24gZnVuY3Rpb24sIGxpa2VseSBgaW9fc2VuZF9maW5pc2hgLCBzaW1pbGFyIHRvIHNvbWUgb3RoZXIgcGF0dGVybnMgSSd2ZSBzZWVuIGluIHRoaXMga2luZCBvZiBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbi4gSSBzaG91bGQgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gb3BlbiB1cCBgaW9fdXJpbmcvbmV0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGlvX3NlbmRtc2dgIGltcGxlbWVudGF0aW9uLiBJJ2xsIGdldCB0aGUgYW5zd2VyIGRpcmVjdGx5IGZyb20gdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTk5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzAuMzM5NDg0MjU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxMTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTI5MD1zdGF0aWMgaW50IGlvX21zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0zNDItXFxuaW9fdXJpbmcvbmV0LmM6MzQzOnZvaWQgaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtMzQ0LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTM1MD1zdGF0aWMgaW50IGlvX3NlbmRfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTM5NS1cXG5pb191cmluZy9uZXQuYzozOTY6c3RhdGljIGludCBpb19zZW5kbXNnX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtMzk3LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQyMy1cXG5pb191cmluZy9uZXQuYzo0MjQ6aW50IGlvX3NlbmRtc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTQyNS17XFxuLS1cXG5pb191cmluZy9uZXQuYy00NjMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvbmV0LmM6NDY0OlxcdHJldHVybiBpb19zZW5kbXNnX3NldHVwKHJlcSwgc3FlKTtcXG5pb191cmluZy9uZXQuYy00NjUtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NTIxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTU1OC1cXG5pb191cmluZy9uZXQuYzo1NTk6aW50IGlvX3NlbmRtc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy01NjAte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTM3Nz1pbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDM2LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL25ldC5jOjE0Mzc6XFx0XFx0cmV0ID0gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XFxuaW9fdXJpbmcvbmV0LmMtMTQzOC1cXHR9XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNTAwPXN0YXRpYyBpbnQgaW9fc2VuZF96Y19pbXBvcnQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNTI5LVxcbmlvX3VyaW5nL25ldC5jOjE1MzA6aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xNTMxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzAuMzk0NDAxMDU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODk2MTU5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gaW9fc2VuZG1zZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGlvX3NlbmRtc2dgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbXBsZXggbmV0d29yayBpbnRlcmFjdGlvbnMgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBzY2F0dGVyLWdhdGhlciBsaXN0cywgZXJyb3IgcHJvcGFnYXRpb24sIGFuZCB0aGUgd2hvbGUgSS9PIHZlY3RvciBwcm9jZXNzaW5nLiBJcyBpdCB1c2luZyBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgbGlrZSBkaXJlY3QgSS9PIG9yIHByZWZldGNoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucywgYW5kIG1vc3QgaW1wb3J0YW50bHkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zIChlc3BlY2lhbGx5IHdpdGggbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zKSwgYW5kIGFueSBnb3RjaGFzIHRoYXQgbWlnaHQgbGVhZCB0byBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBvciBldmVuIGRhdGEgY29ycnVwdGlvbi4gTXkgbWFpbiBjb25jZXJucyBhcmU6IHJlbGlhYmlsaXR5LCBlZmZpY2llbmN5LCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGxheXMgd2l0aCB0aGUga2VybmVsJ3Mgb3ZlcmFsbCBJL08gc3Vic3lzdGVtLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDozMy42ODQwMTkxNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1OTpcXHRpbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiA1NjA6XFx0e1xcbiA1NjE6XFx0XFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4gNTYyOlxcdFxcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuIDU2MzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbiA1NjQ6XFx0XFx0dW5zaWduZWQgZmxhZ3M7XFxuIDU2NTpcXHRcXHRpbnQgbWluX3JldCA9IDA7XFxuIDU2NjpcXHRcXHRpbnQgcmV0O1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVxcdTAwM2VmaWxlKTtcXG4gNTY5OlxcdFxcdGlmICh1bmxpa2VseSghc29jaykpXFxuIDU3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1RTT0NLO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRpZiAoIShyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcXHUwMDI2XFx1MDAyNlxcbiA1NzM6XFx0XFx0ICAgIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCkpXFxuIDU3NDpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTc1OlxcdFxcbiA1NzY6XFx0XFx0ZmxhZ3MgPSBzci1cXHUwMDNlbXNnX2ZsYWdzO1xcbiA1Nzc6XFx0XFx0aWYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcXG4gNTc4OlxcdFxcdFxcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcXG4gNTc5OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKVxcbiA1ODA6XFx0XFx0XFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpO1xcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2NvbnRyb2xfdXNlciA9IHNyLVxcdTAwM2Vtc2dfY29udHJvbDtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0cmV0ID0gX19zeXNfc2VuZG1zZ19zb2NrKHNvY2ssIFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2csIGZsYWdzKTtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG4gNTg3OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcXG4gNTg4OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiA1ODk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xcbiA1OTA6XFx0XFx0XFx0XFx0a21zZy1cXHUwMDNlbXNnLm1zZ19jb250cm9sbGVuID0gMDtcXG4gNTkxOlxcdFxcdFxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfY29udHJvbCA9IE5VTEw7XFxuIDU5MjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuIDU5MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTk0OlxcdFxcdFxcdH1cXG4gNTk1OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKVxcbiA1OTY6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbiA1OTc6XFx0XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuIDU5ODpcXHRcXHR9XFxuIDU5OTpcXHRcXHRpb19yZXFfbXNnX2NsZWFudXAocmVxLCBpc3N1ZV9mbGFncyk7XFxuIDYwMDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuIDYwMTpcXHRcXHRcXHRyZXQgKz0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDYwMjpcXHRcXHRlbHNlIGlmIChzci1cXHUwMDNlZG9uZV9pbylcXG4gNjAzOlxcdFxcdFxcdHJldCA9IHNyLVxcdTAwM2Vkb25lX2lvO1xcbiA2MDQ6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbiA2MDU6XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4gNjA2OlxcdH1cXG4gNjA3OlxcdFxcbiA2MDg6XFx0c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzMuNjg0MTM4OTY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTE0NDY2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW9fc2VuZG1zZ2AgV29ya2Zsb3cgYW5kIElkZW50aWZ5aW5nIEtleSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGlvX3NlbmRtc2dgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcncyBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gSXQgZG9lc24ndCBsb29rIGxpa2UgaXQncyBjYWxsaW5nIGBpb19zZW5kX2ZpbmlzaGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zIGhlcmUsIHNvIHRoZSBzaWduaWZpY2FudCBmb2N1cyBzeW1ib2xzIHNlZW0gdG8gYmUgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUsIGVzcGVjaWFsbHkgaW4gdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuV2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciBzZWVpbmcgYGlvX2J1bmRsZV9uYnVmc2AgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBidW5kbGVzLiBUaGF0IGFkZHMgYSBuZXcgZGltZW5zaW9uIHRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSBoYW5kbGVkLiBHaXZlbiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIGNoZWNrIGBpb19zZW5kYCwgYGlvX3JlY3ZgIGFuZCBgaW9fcmVjdm1zZ2Agbm93LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBmbG93PyBgQ09ORklHX0lPX1VSSU5HYCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHdoZXRoZXIgaXQgcGxheXMgYSByb2xlIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgbW9yZSBzcGVjaWFsaXplZCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjM3LjQ5NTU4NzQyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1OTc0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNC1cXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxNi1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzNi1cXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5MzgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzcuNTgzMTkwMDA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzAyNTY3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJT19VUklORyBhbmQgUG90ZW50aWFsIE5ldHdvcmsgQnVnIEZpeGVzKipcblxuT2theSwgc28gYElPX1VSSU5HYCBpcyBsaWtlbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhdCBsZWFzdCBpbiB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhpbmdzLiBNeSBmb2N1cyBub3cgaXMgb24gdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBpb191cmluZy9uZXQuY2AuIFRoaXMgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXggc3BlY2lmaWNhbGx5LiBJdCBsb29rcyBsaWtlIGBtaW5fdChpbnQsIC4uLilgIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYG1pbl90KHNpemVfdCwgLi4uKWAgd2l0aGluIGBpb19idW5kbGVfbmJ1ZnNgLlxuXG5UaGUga2V5IHN5bWJvbHMgaGVyZSwgdGhlIG9uZXMgSSB3YW50IHRvIHRyYWNrIGRvd24sIGFyZSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4gSGFuZyBvbuKApiBkb2VzIGBpb19yZWN2bXNnYCBhY3R1YWxseSBjYWxsIGBpb19yZWN2X2ZpbmlzaGA/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTGV0J3MgZGlnIGludG8gYGlvX3JlY3Ztc2dgIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgIGFuZCBjb25maXJtIHRoYXQgY2FsbGluZyBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIHRoZSBidWcncyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6NDEuNTUzNDQ5OTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDUwOlxcdGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuMTA1MTpcXHR7XFxuMTA1MjpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbjEwNTM6XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyA9IHJlcS1cXHUwMDNlYXN5bmNfZGF0YTtcXG4xMDU0OlxcdFxcdHN0cnVjdCBpb19icl9zZWwgc2VsID0geyB9O1xcbjEwNTU6XFx0XFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4xMDU2OlxcdFxcdHVuc2lnbmVkIGZsYWdzO1xcbjEwNTc6XFx0XFx0aW50IHJldCwgbWluX3JldCA9IDA7XFxuMTA1ODpcXHRcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbjEwNTk6XFx0XFx0Ym9vbCBtc2hvdF9maW5pc2hlZCA9IHRydWU7XFxuMTA2MDpcXHRcXG4xMDYxOlxcdFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtXFx1MDAzZWZpbGUpO1xcbjEwNjI6XFx0XFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcXG4xMDYzOlxcdFxcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdGlmICghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9QT0xMRUQpIFxcdTAwMjZcXHUwMDI2XFxuMTA2NjpcXHRcXHQgICAgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUKSlcXG4xMDY3OlxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRmbGFncyA9IHNyLVxcdTAwM2Vtc2dfZmxhZ3M7XFxuMTA3MDpcXHRcXHRpZiAoZm9yY2Vfbm9uYmxvY2spXFxuMTA3MTpcXHRcXHRcXHRmbGFncyB8PSBNU0dfRE9OVFdBSVQ7XFxuMTA3MjpcXHRcXG4xMDczOlxcdHJldHJ5X211bHRpc2hvdDpcXG4xMDc0OlxcdFxcdHNlbC5idWZfbGlzdCA9IE5VTEw7XFxuMTA3NTpcXHRcXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuMTA3NjpcXHRcXHRcXHRzaXplX3QgbGVuID0gc3ItXFx1MDAzZWxlbjtcXG4xMDc3OlxcdFxcbjEwNzg6XFx0XFx0XFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFxcdTAwMjZsZW4sIHNyLVxcdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcXG4xMDc5OlxcdFxcdFxcdGlmICghc2VsLmFkZHIpXFxuMTA4MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XFxuMTA4MzpcXHRcXHRcXHRcXHRyZXQgPSBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KGttc2csIHNyLCBcXHUwMDI2c2VsLmFkZHIsIFxcdTAwMjZsZW4pO1xcbjEwODQ6XFx0XFx0XFx0XFx0aWYgKHJldCkge1xcbjEwODU6XFx0XFx0XFx0XFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuMTA4NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEwODc6XFx0XFx0XFx0XFx0fVxcbjEwODg6XFx0XFx0XFx0fVxcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgc2VsLmFkZHIsIGxlbik7XFxuMTA5MTpcXHRcXHR9XFxuMTA5MjpcXHRcXG4xMDkzOlxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfZ2V0X2lucSA9IDE7XFxuMTA5NDpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xcbjEwOTU6XFx0XFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcXG4xMDk2OlxcdFxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG4xMDk3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2hvdF9maW5pc2hlZCk7XFxuMTA5ODpcXHRcXHR9IGVsc2Uge1xcbjEwOTk6XFx0XFx0XFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDo0MS41NTM2MTc5NjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMTk4OTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipSZXZpZXdpbmcgdGhlIGBpb19yZWN2bXNnYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBsb29rZWQgYXQgdGhlIGluaXRpYWwgcGFydCBvZiBgaW9fcmVjdm1zZ2AsIGJ1dCBsZXQncyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBzdWJ0bGV0aWVzIHRoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBqdWRnZW1lbnRzLCBzbywgbGV0J3MgbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBleGVjdXRpb24uIEdvdHRhIGtlZXAgdGhpcyBjbGVhbiBhbmQgZWZmaWNpZW50LCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGV4cGxvcmVkIGl0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjQ0LjM4NTYwOTk5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfV0FJVEFMTCBcXHUwMDI2XFx1MDAyNiAha21zZy1cXHUwMDNlbXNnLm1zZ19jb250cm9sbGVuKVxcbjExMDE6XFx0XFx0XFx0XFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRcXHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXFx1MDAyNmttc2ctXFx1MDAzZW1zZywgc3ItXFx1MDAzZXVtc2csXFxuMTEwNDpcXHRcXHRcXHRcXHRcXHRcXHQga21zZy1cXHUwMDNldWFkZHIsIGZsYWdzKTtcXG4xMTA1OlxcdFxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG4xMTA4OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiBmb3JjZV9ub25ibG9jaykge1xcbjExMDk6XFx0XFx0XFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuMTExMDpcXHRcXHRcXHRcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbjExMTE6XFx0XFx0XFx0fVxcbjExMTI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xcbjExMTM6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWRvbmVfaW8gKz0gcmV0O1xcbjExMTQ6XFx0XFx0XFx0XFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcXG4xMTE1OlxcdFxcdFxcdH1cXG4xMTE2OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKVxcbjExMTc6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjExMTg6XFx0XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuMTExOTpcXHRcXHR9IGVsc2UgaWYgKChmbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKSBcXHUwMDI2XFx1MDAyNiAoa21zZy1cXHUwMDNlbXNnLm1zZ19mbGFncyBcXHUwMDI2IChNU0dfVFJVTkMgfCBNU0dfQ1RSVU5DKSkpIHtcXG4xMTIwOlxcdFxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbjExMjE6XFx0XFx0fVxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4xMTI0OlxcdFxcdFxcdHJldCArPSBzci1cXHUwMDNlZG9uZV9pbztcXG4xMTI1OlxcdFxcdGVsc2UgaWYgKHNyLVxcdTAwM2Vkb25lX2lvKVxcbjExMjY6XFx0XFx0XFx0cmV0ID0gc3ItXFx1MDAzZWRvbmVfaW87XFxuMTEyNzpcXHRcXHRlbHNlXFxuMTEyODpcXHRcXHRcXHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcXG4xMTI5OlxcdFxcbjExMzA6XFx0XFx0c2VsLnZhbCA9IHJldDtcXG4xMTMxOlxcdFxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbjExMzI6XFx0XFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdHJldHVybiBzZWwudmFsO1xcbjExMzU6XFx0fVxcbjExMzY6XFx0XFxuMTEzNzpcXHRzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4xMTM4OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbjExMzk6XFx0e1xcbjExNDA6XFx0XFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4xMTQxOlxcdFxcdGludCByZXQ7XFxuMTE0MjpcXHRcXG4xMTQzOlxcdFxcdC8qXFxuMTE0NDpcXHRcXHQgKiBJZiB0aGUgcmluZyBpc24ndCBsb2NrZWQsIHRoZW4gZG9uJ3QgdXNlIHRoZSBwZWVrIGludGVyZmFjZVxcbjExNDU6XFx0XFx0ICogdG8gZ3JhYiBtdWx0aXBsZSBidWZmZXJzIGFzIHdlIHdpbGwgbG9jay91bmxvY2sgYmV0d2VlblxcbjExNDY6XFx0XFx0ICogdGhpcyBzZWxlY3Rpb24gYW5kIHBvc3RpbmcgdGhlIGJ1ZmZlcnMuXFxuMTE0NzpcXHRcXHQgKi9cXG4xMTQ4OlxcdFxcdGlmICghKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkgXFx1MDAyNlxcdTAwMjZcXG4xMTQ5OlxcdFxcdCAgICBzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjQ0LjM4NTc3MzcyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgwODg0ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgSS9PIENvbXBsZXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgb3VyIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9ucyBjb21wbGV0ZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgaW9fcmVjdm1zZ2AgcGF0aCwgYW5kIEkndmUgY29uZmlybWVkIHRoYXQgaXQgKmRvZXMqIGNhbGwgYGlvX3JlY3ZfZmluaXNoYC4gR29vZC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcGFyYWxsZWwgb24gdGhlIHNlbmQgc2lkZS4gSSdtIGFza2luZyBteXNlbGYsIGRvZXMgYGlvX3NlbmRtc2dgIHRyaWdnZXIgYSBzaW1pbGFyIGZpbmlzaGluZyBmdW5jdGlvbiwgbGlrZSBgaW9fc2VuZF9maW5pc2hgPyBIb2xkIG9uLi4uIEkganVzdCByZXZpZXdlZCBgaW9fc2VuZG1zZ2AgYW5kLCBubywgaXQgZG9lc24ndC4gT2theSwgdGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci4gQnV0IHdoYXQgYWJvdXQgdGhlIHNpbXBsZXIgYGlvX3NlbmRgPyBBaCB5ZXMsIGBpb19zZW5kYCBkb2VzIGhhdmUgaXRzIG93biBmaW5pc2hpbmcgY2FsbC4gTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgdG8gdGhlIHplcm8tY29weSBzZW5kIHJvdXRpbmVzLiBJIG5lZWQgdG8gY2hlY2sgaG93IGBpb19zZW5kX3pjYCBhbmQgYGlvX3NlbmRtc2dfemNgIGhhbmRsZSB0aGVpciBjb21wbGV0aW9uIHN0ZXBzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgYWxsIHRoZSBwYXRocyBhdmFpbGFibGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSB6ZXJvLWNvcHkgcGF0aHMgYmVoYXZlIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBub3JtYWwgc2VuZCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjQ3Ljg2NjY2MTM1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDU5OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NlbmRfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUyMC1cXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTUyMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYz02NTY9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcyNS1cXHRzZWwudmFsID0gcmV0O1xcbmlvX3VyaW5nL25ldC5jOjcyNjpcXHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCkpXFxuaW9fdXJpbmcvbmV0LmMtNzI3LVxcdFxcdGdvdG8gcmV0cnlfYnVuZGxlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDo0Ny45NzQxMjU1NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMTE0MDkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBBbmFseXNpcyBvZiBJL08gRnVuY3Rpb24gQ2FsbCBSZWxhdGlvbnNoaXBzKipcblxuQWxyaWdodCwgc28gSSdtIHNlZWluZyBhIGNsZWFyIHBhdHRlcm4gaGVyZSwgZm9jdXNpbmcgb24gaG93IHRoZXNlIGxvdy1sZXZlbCBJL08gZnVuY3Rpb25zIGludGVyYWN0LiBgaW9fc2VuZGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYWxscyBgaW9fc2VuZF9maW5pc2hgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gT24gdGhlIHJlY2VpdmluZyBlbmQsIGBpb19yZWN2bXNnYCBhbmQgYGlvX3JlY3ZgIGJvdGggc2VlbSB0byB0cmlnZ2VyIGBpb19yZWN2X2ZpbmlzaGAuIFRoYXTigJlzIGxvZ2ljYWwsIHRoZSBmaW5pc2ggcm91dGluZXMgYXJlIGNhbGxlZCBhZnRlciB0aGUgY29yZSBvcGVyYXRpb24uXG5cbk5vdyB0aGUgY3VydmViYWxsLiBJJ20gbm90aW5nIHRoYXQgYGlvX2J1bmRsZV9uYnVmc2AgaXMgYWxzbyBpbnZva2VkIGJ5IGBpb19uZXRfa2J1Zl9yZWN5bGVgLiBUaGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgYmFzZWQgb24gdGhlIG5hbWluZywgaXQgcmVxdWlyZXMgY2FyZWZ1bCB0aG91Z2h0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHJlbGF0aW9uc2hpcCBiZXR0ZXIuIE15IG5leHQgc3RlcCBoYXMgdG8gYmUgdHJhY2luZyBiYWNrIHRvIGZpbmQgKndobyogY2FsbHMgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBkZXRlcm1pbmUgd2hhdCB0aGlzIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uIGhhcyB0byBkbyB3aXRoIHRoaW5ncy4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIG9wdGltaXphdGlvbiBvciBhIHNvdXJjZSBvZiBjb250ZW50aW9uIEkgc2hvdWxkIGJlIHRyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjUxLjcwNTI2OTg2N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4ODMxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fbmV0X2tidWZfcmVjeWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTQ4MT1zdGF0aWMgaW50IGlvX2J1bmRsZV9uYnVmcyhzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgcmV0KVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTExLVxcbmlvX3VyaW5nL25ldC5jOjUxMjpzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9uZXQuYy01MTMtXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbilcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzEzLVxcdFxcdFxcdHNyLVxcdTAwM2Vkb25lX2lvICs9IHJldDtcXG5pb191cmluZy9uZXQuYzo3MTQ6XFx0XFx0XFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcXG5pb191cmluZy9uZXQuYy03MTUtXFx0XFx0fVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTA1MD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExMy1cXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTExNDpcXHRcXHRcXHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xcbmlvX3VyaW5nL25ldC5jLTExMTUtXFx0XFx0fVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTIwOT1pbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTI3MS1cXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTI3MjpcXHRcXHRcXHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xcbmlvX3VyaW5nL25ldC5jLTEyNzMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDo1MS43ODAxNjgzNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTM1NDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEkvTyBVcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgZnVuY3Rpb25zIGhlcmUg4oCTIGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyBmb3IgdGhpcyBJL08gVXJpbmcgcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVsc2UgY3JpdGljYWwgdG8gdGhpcywgc28gSSB3aWxsIGNoZWNrIGZvciBhbnkgc2Vjb25kYXJ5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgb3IgcmVsYXRlZCBhc3BlY3RzLiBUaGUgY29yZSBjb25maWcgdG8gYmUgYXdhcmUgb2YgaXMgYElPX1VSSU5HYCwgb2J2aW91c2x5LlxuXG5Gcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgZ2VudWluZSB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgc2VlbXMgYHRoaXNfbGVuYCBjb3VsZCBiZWNvbWUgbmVnYXRpdmUgaWYgYGlvdl9sZW5gIGV4Y2VlZHMgYElOVF9NQVhgLCBhbmQgdGhhdCdzIHNvbWV0aGluZyB0aGF0IGFic29sdXRlbHkgbmVlZHMgZml4aW5nLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcgYW5kIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICp3b3J0aCBmdXp6aW5nKiwgc28gSSB3aWxsIGJlIHNldHRpbmcgdGhhdCB0byB0cnVlLiBUaGlzIHBhdGNoIHNob3VsZCBiZSB0ZXN0ZWQgdGhvcm91Z2hseS5cblxuVWx0aW1hdGVseSwgSSdtIGdvaW5nIHRvIGNlbnRlciBteSBmdXp6aW5nIGVmZm9ydHMgYXJvdW5kIGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLCBhbmQgSSdsbCBlbnN1cmUgdGhlIGBJT19VUklOR2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGR1cmluZyBteSB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU0OSwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6NTYuNDExNTI3Mjc2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NjU0MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 23:23:51 +0000 UTC FinishedAt: 2026-07-30 23:40:57 +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": "26cb8ebbfaf713c82e142d08828d4d765057633b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "26cb8ebbfaf713c82e142d08828d4d765057633b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "e574df81-b807-4f6b-bfb9-a9967e079927" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_send", "io_recv", "io_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fc2VuZCYjMzQ7LAogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGlvX2J1bmRsZV9uYnVmc2Agd2hlcmUgYG1pbl90KGludCwgLi4uKWAgY291bGQgdHJ1bmNhdGUgb3Igc2lnbi1leHRlbmQgYGlvdl9sZW5gIGlmIGl0IGV4Y2VlZHMgYElOVF9NQVhgLCBsZWFkaW5nIHRvIG5lZ2F0aXZlIHZhbHVlcyBvciBpbmNvcnJlY3QgbGVuZ3Rocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIG5ldHdvcmsgb3BlcmF0aW9ucy4gVGhlIGFmZmVjdGVkIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOWYwZTcxZmM2YzI5YjIwYTMwNGY1ZmIzOTRmOTUyOTA5NDNmYjBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjM6NDA6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggMDBhN2RmODAzYjk5Yi4uZThhMDY2ZjhhOWUzMyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9uZXQuY1xuQEAgLTUwMCw3ICYjNDM7NTAwLDcgQEAgc3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcbiBcdC8qIHNob3J0IHRyYW5zZmVyLCBjb3VudCBzZWdtZW50cyAqL1xuIFx0bmJ1ZnMgPSAwO1xuIFx0ZG8ge1xuLVx0XHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcbiYjNDM7XHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO1xuIFxuIFx0XHRuYnVmcyYjNDM7JiM0Mzs7XG4gXHRcdHJldCAtPSB0aGlzX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5ZjBlNzFmYzZjMjliMjBhMzA0ZjVmYjM5NGY5NTI5MDk0M2ZiMGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAyMzo0MDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmMKaW5kZXggMDBhN2RmODAzYjk5Yi4uZThhMDY2ZjhhOWUzMyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbmV0LmMKQEAgLTUwMCw3ICYjNDM7NTAwLDcgQEAgc3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldCkKIAkvKiBzaG9ydCB0cmFuc2ZlciwgY291bnQgc2VnbWVudHMgKi8KIAluYnVmcyA9IDA7CiAJZG8gewotCQlpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTsKJiM0MzsJCXNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpOwogCiAJCW5idWZzJiM0MzsmIzQzOzsKIAkJcmV0IC09IHRoaXNfbGVuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBtb2RpZnlpbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJIHNlZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSB0eXBlIGRlY2xhcmF0aW9uIGZvciBgdGhpc19sZW5gIHdpdGhpbiBhIGBtaW5fdGAgY2FsbC4gT3JpZ2luYWxseSwgaXQgd2FzIGFuIGBpbnRgLCBidXQgaXQmIzM5O3Mgbm93IGEgYHNpemVfdGAuIFRoZSByZWxldmFudCBsaW5lIGlzOiBgaW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YCB3aGljaCBoYXMgYmVjb21lIGBzaXplX3QgdGhpc19sZW4gPSBtaW5fdChzaXplX3QsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBpbnRlcmVzdGluZyB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgdG8gYSBgc2l6ZV90YCBmb3IgdGhlIG1pbmltdW0gY2FsY3VsYXRpb24uIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgc2l6ZSBiZWluZyBoYW5kbGVkIGhlcmUgbWlnaHQgaGF2ZSBncm93bi4gQ291bGQgYmUgcmVsYXRlZCB0byBsYXJnZXIgbmV0d29yayBidWZmZXJzIG9yIHBvdGVudGlhbGx5IGhhbmRsaW5nIHNpemVzIHRoYXQgZXhjZWVkIHRoZSBjYXBhY2l0eSBvZiBhIHNpZ25lZCBpbnRlZ2VyLiBJIG5lZWQgdG8gZGlnIGludG8gYGlvX2J1bmRsZV9uYnVmc2AgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgYW5kIGNvbnRleHQgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgd2hhdCBgaW92W25idWZzXS5pb3ZfbGVuYCBhbmQgYHJldGAgcmVwcmVzZW50IGluIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2J1bmRsZV9uYnVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTQ2Nz1zdGF0aWMgdm9pZCBpb19yZXFfbXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDgwLSAqL1xuaW9fdXJpbmcvbmV0LmM6NDgxOnN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG5pb191cmluZy9uZXQuYy00ODIte1xuLS1cbmlvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MTYtXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJTX0NPTU1JVClcbmlvX3VyaW5nL25ldC5jOjUxNzpcdFx0aW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBpb19idW5kbGVfbmJ1ZnMoa21zZywgbGVuKSk7XG5pb191cmluZy9uZXQuYy01MTgtXHRyZXR1cm4gSU9VX1JFVFJZO1xuLS1cbmlvX3VyaW5nL25ldC5jPTUyMT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTMzLVxuaW9fdXJpbmcvbmV0LmM6NTM0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTM1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg4Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtOTA5LVxuaW9fdXJpbmcvbmV0LmM6OTEwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG5pb191cmluZy9uZXQuYy05MTEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElPX1VSSU5HIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIG5ldHdvcmtpbmcgY29kZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGlzIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHByb2JhYmx5IGltcGx5aW5nIGl0JiMzOTtzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBmaWxlLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgaW9fbmV0X2tidWZfcmVjeWxlYCwgYGlvX3NlbmRfZmluaXNoYCwgYW5kIGBpb19yZWN2X2ZpbmlzaGAuCgpXYWl0IGEgbWludXRlLi4uIGBpb19uZXRfa2J1Zl9yZWN5bGVgPyBUaGF0JiMzOTtzIGdvdCBteSBhdHRlbnRpb24uIFRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLCBzbyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGV4YW1pbmUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYnVmZmVycyBhcmUgYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIGFyZSBhY3R1YWxseSBkb2luZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB1c2UgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gYnVuZGxlIGFuZCByZWN5Y2xlIHRoZSBuZXQgYnVmZmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcyNS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzo3MjY6XHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsKSlcbmlvX3VyaW5nL25ldC5jLTcyNy1cdFx0Z290byByZXRyeV9idW5kbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGlvX3VyaW5nL25ldC5jYCBmb3IgTmV0d29yayBJL08gRWZmaWNpZW5jeSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGBpb191cmluZ2AgaXMgaGFuZGxpbmcgbmV0d29yayBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIGZ1bmN0aW9ucyB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB0aGVzZSBmdW5jdGlvbnM6IGhvdyB0aGV5JiMzOTtyZSBlbnF1ZXVpbmcgcmVxdWVzdHMsIGhvdyB0aGUgY29tcGxldGlvbiBpcyBoYW5kbGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgdGhleSYjMzk7cmUgbWluaW1pemluZyBjb250ZXh0IHN3aXRjaGVzIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb21tb24gcGl0ZmFsbHMgdGhhdCBJIGFscmVhZHkga25vdywgc3VjaCBhcyBlbnN1cmluZyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzLCBhbmQgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHN5c3RlbSBjYWxscy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhleSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgZmxhZ3MgdG8gbWF4aW1pemUgcGVyZm9ybWFuY2UgKGUuZy4sIGBNU0dfTk9TSUdOQUxgLCBgTVNHX01PUkVgKS4gSSYjMzk7bSBhbHNvIGtlZW5seSBpbnRlcmVzdGVkIGluIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5IG1pZ2h0IGhhdmUgaW1wbGVtZW50ZWQgLSB0aGluZ3MgbGlrZSBwcmUtdG91Y2hpbmcgcGFnZXMsIGNvYWxlc2NpbmcgcmVxdWVzdHMsIG9yIHplcm8tY29weSB0ZWNobmlxdWVzIC0gYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSBjYW4gcXVpY2tseSBpZGVudGlmeS4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG1vc3QgZWZmaWNpZW50IGltcGxlbWVudGF0aW9ucyB0aGF0IGFkaGVyZSB0byB0aGUgaW9fdXJpbmcgcGhpbG9zb3BoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MjkwPXN0YXRpYyBpbnQgaW9fbXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0zNDItXG5pb191cmluZy9uZXQuYzozNDM6dm9pZCBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbmlvX3VyaW5nL25ldC5jLTM0NC17XG4tLVxuaW9fdXJpbmcvbmV0LmMtMzQ5LVxuaW9fdXJpbmcvbmV0LmM6MzUwOnN0YXRpYyBpbnQgaW9fc2VuZF9zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtMzUxLXtcbi0tXG5pb191cmluZy9uZXQuYy0zOTUtXG5pb191cmluZy9uZXQuYzozOTY6c3RhdGljIGludCBpb19zZW5kbXNnX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0zOTcte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQyMy1cbmlvX3VyaW5nL25ldC5jOjQyNDppbnQgaW9fc2VuZG1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy00MjUte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQ2MC1cdGlmIChyZXEtXHUwMDNlb3Bjb2RlICE9IElPUklOR19PUF9TRU5ETVNHKVxuaW9fdXJpbmcvbmV0LmM6NDYxOlx0XHRyZXR1cm4gaW9fc2VuZF9zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy00NjItXHRpZiAodW5saWtlbHkoc3FlLVx1MDAzZWFkZHIyIHx8IHNxZS1cdTAwM2VmaWxlX2luZGV4KSlcbmlvX3VyaW5nL25ldC5jLTQ2My1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9uZXQuYzo0NjQ6XHRyZXR1cm4gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy00NjUtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTU1OC1cbmlvX3VyaW5nL25ldC5jOjU1OTppbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtNTYwLXtcbi0tXG5pb191cmluZy9uZXQuYy02MDctXG5pb191cmluZy9uZXQuYzo2MDg6c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbmlvX3VyaW5nL25ldC5jLTYwOS1cdFx0XHRcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNjU1LVxuaW9fdXJpbmcvbmV0LmM6NjU2OmludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy02NTcte1xuLS1cbmlvX3VyaW5nL25ldC5jLTY4OS1cdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbmlvX3VyaW5nL25ldC5jOjY5MDpcdFx0cmV0ID0gaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHJlcSwgaXNzdWVfZmxhZ3MsIFx1MDAyNnNlbCwga21zZyk7XG5pb191cmluZy9uZXQuYy02OTEtXHRcdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzI1LVx0c2VsLnZhbCA9IHJldDtcbmlvX3VyaW5nL25ldC5jOjcyNjpcdGlmICghaW9fc2VuZF9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwpKVxuaW9fdXJpbmcvbmV0LmMtNzI3LVx0XHRnb3RvIHJldHJ5X2J1bmRsZTtcbi0tXG5pb191cmluZy9uZXQuYz0xMzI1PWludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMzU5LVxuaW9fdXJpbmcvbmV0LmM6MTM2MDp2b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbmlvX3VyaW5nL25ldC5jLTEzNjEte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEzNzYtXG5pb191cmluZy9uZXQuYzoxMzc3OmludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL25ldC5jLTEzNzgte1xuLS1cbmlvX3VyaW5nL25ldC5jLTE0MzItXHRpZiAocmVxLVx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfU0VORF9aQykge1xuaW9fdXJpbmcvbmV0LmM6MTQzMzpcdFx0cmV0ID0gaW9fc2VuZF9zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy0xNDM0LVx0fSBlbHNlIHtcbi0tXG5pb191cmluZy9uZXQuYy0xNDM2LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvbmV0LmM6MTQzNzpcdFx0cmV0ID0gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy0xNDM4LVx0fVxuLS1cbmlvX3VyaW5nL25ldC5jPTE0NTc9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pb191cmluZy9uZXQuYy0xNDk5LVxuaW9fdXJpbmcvbmV0LmM6MTUwMDpzdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtMTUwMS1cdFx0XHQgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTUyOS1cbmlvX3VyaW5nL25ldC5jOjE1MzA6aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTE1MzEte1xuLS1cbmlvX3VyaW5nL25ldC5jLTE1NDctXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JTVBPUlRfQlVGRkVSKSB7XG5pb191cmluZy9uZXQuYzoxNTQ4Olx0XHRyZXQgPSBpb19zZW5kX3pjX2ltcG9ydChyZXEsIGttc2csIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTE1NDktXHRcdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE1ODktXHQgKiBJZiB3ZSYjMzk7cmUgaW4gaW8td3Egd2UgY2FuJiMzOTt0IHJlbHkgb24gdHcgb3JkZXJpbmcgZ3VhcmFudGVlcywgZGVmZXJcbmlvX3VyaW5nL25ldC5jOjE1OTA6XHQgKiBmbHVzaGluZyBub3RpZiB0byBpb19zZW5kX3pjX2NsZWFudXAoKVxuaW9fdXJpbmcvbmV0LmMtMTU5MS1cdCAqL1xuLS1cbmlvX3VyaW5nL25ldC5jLTE2MDAtXG5pb191cmluZy9uZXQuYzoxNjAxOnZvaWQgaW9fc2VuZHJlY3ZfZmFpbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbmlvX3VyaW5nL25ldC5jLTE2MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBIFRob3VnaHQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGlvX2J1bmRsZV9uYnVmc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hhbmdpbmcgYGludCB0aGlzX2xlbiA9IG1pbl90KGludCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO2AgdG8gYHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgYSBzdHJhaWdodGZvcndhcmQgdHlwZSBjaGFuZ2UuIGBpb3ZfbGVuYCBpcyBhIGBzaXplX3RgLCBzbyB1c2luZyBgaW50YCB0aGVyZSBpcyBqdXN0IGFza2luZyBmb3IgdHJvdWJsZS4mIzM0OwoKQW5kIHRoZW4gaXQgaGl0cyBtZTogdGhpcyBpcyBtb3JlIHRoYW4ganVzdCB0aWR5aW5nIHVwLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBiZWNhdXNlIGBpb3ZfbGVuYCBpcyBhIGBzaXplX3RgISBSaWdodCBub3csIHRoYXQgYG1pbl90KGludCwgLi4uKWAgaXMgdHJ1bmNhdGluZyBvciwgZXZlbiB3b3JzZSwgc2lnbi1leHRlbmRpbmcgbGFyZ2VyLXRoYW4tYElOVF9NQVhgIHZhbHVlcyBvZiBgaW92X2xlbmAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gV2FpdCBhIG1pbnV0ZS4uLiBgcmV0YCBpcyBhbiBgaW50YC4gT2theS4gU28gdGhlIG9yaWdpbmFsIGNvZGUgd2FzICpjYXN0aW5nKiBgaW92X2xlbmAgdG8gYW4gYGludGAgd2l0aGluIHRoZSBgbWluX3RgIGZ1bmN0aW9uLiBJZiBgaW92X2xlbmAgaXMgbWFzc2l2ZSwgaXQgYmVjb21lcyBuZWdhdGl2ZSwgYW5kIGBtaW5fdGAgaXMgcGlja2luZyB0aGUgKm5lZ2F0aXZlKiBsZW5ndGguIFRoYXQmIzM5O3MgY2xlYXJseSB3cm9uZy4gU28sIHRoaXMgZml4IGFjdHVhbGx5IHByZXZlbnRzIHRoZSB3cm9uZyBjYWxjdWxhdGlvbi4gQmluZ28sIGEgcmVhbCBidWcgZml4LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBgaW9fYnVuZGxlX25idWZzYCBpcyBjYWxsZWQgYnkgYGlvX3NlbmRfZmluaXNoYCBhbmQgYGlvX3JlY3ZfZmluaXNoYC4gVGhvc2UgYXJlIGNhbGxlZCBieSBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YC4gQWxyaWdodCwgc28gdGhlIGtleSBlbnRyeSBwb2ludHMgYWZmZWN0ZWQgaGVyZSBhcmUgZGVmaW5pdGVseSBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YC4gQnV0IHdhaXQsIGFyZSB3ZSBjb21wbGV0ZWx5IHN1cmU/IGBpb19zZW5kbXNnYCBhbmQgYGlvX3JlY3Ztc2dgIG1pZ2h0IGFsc28gYmUgdXNpbmcgdGhlc2UhIE5lZWQgdG8gdmVyaWZ5LiBMZXQmIzM5O3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlvX3NlbmRfZmluaXNoYC4gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcyNS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzo3MjY6XHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsKSlcbmlvX3VyaW5nL25ldC5jLTcyNy1cdFx0Z290byByZXRyeV9idW5kbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBpb19yZWN2X2ZpbmlzaGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgaW9fcmVjdl9maW5pc2hgIGFuZCB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCBieSBpZGVudGlmeWluZyBhbGwgdGhlIGZ1bmN0aW9ucyBvciBtb2R1bGVzIHRoYXQgZGlyZWN0bHkgaW52b2tlIGl0LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGZvciBhIGZldyByZWFzb25zLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkOyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyBhcmUga2V5LiBTZWNvbmRseSwgSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGF0dGVybnMgaW4gaXRzIHVzYWdlIOKAkyBhcmUgY2VydGFpbiBtb2R1bGVzIG9yIHByb3RvY29scyByZWx5aW5nIG9uIGl0IG1vcmUgdGhhbiBvdGhlcnM/IEZpbmFsbHksIGEgdGhvcm91Z2ggY2FsbGVyIGFuYWx5c2lzIGlzIGVzc2VudGlhbCBmb3IgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgZXZlbiByZWZhY3RvcmluZywgZXNwZWNpYWxseSBpZiB0aGUgZnVuY3Rpb24gaXMgY29tcGxleCBvciBwZXJmb3JtYW5jZS1jcml0aWNhbC4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgemVybyBpbiBvbiBhbnkgcG90ZW50aWFsIGhvdHNwb3RzIG9yIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIG15IGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2X2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTgxMT1pbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4tLVxuaW9fdXJpbmcvbmV0LmMtODgyLSAqL1xuaW9fdXJpbmcvbmV0LmM6ODgzOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTg4NC1cdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYz0xMDUwPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTEzMC1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMTMxOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbmlvX3VyaW5nL25ldC5jLTExMzItXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuLS1cbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMjkwLVx0c2VsLnZhbCA9IHJldDtcbmlvX3VyaW5nL25ldC5jOjEyOTE6XHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxuaW9fdXJpbmcvbmV0LmMtMTI5Mi1cdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBJL08gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgbmV0d29yayBJL08gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkgc2VlIHRoYXQgYGlvX3NlbmRgLCBgaW9fcmVjdm1zZ2AsIGFuZCBgaW9fcmVjdmAg4oCTIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXBwZWFyIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBtZW50YWwgbWFwIGhpZ2hsaWdodHMgdGhvc2UgYXMgdGhlIGtleSBmb2N1cyBzeW1ib2xzOiBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nIGZlZWxzIHNsaWdodGx5IG9mZi4gSSB0aG91Z2h0IGBpb19zZW5kbXNnYCB3b3VsZCB1dGlsaXplIGEgY29tcGxldGlvbiBmdW5jdGlvbiwgbGlrZWx5IGBpb19zZW5kX2ZpbmlzaGAsIHNpbWlsYXIgdG8gc29tZSBvdGhlciBwYXR0ZXJucyBJJiMzOTt2ZSBzZWVuIGluIHRoaXMga2luZCBvZiBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbi4gSSBzaG91bGQgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gb3BlbiB1cCBgaW9fdXJpbmcvbmV0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGlvX3NlbmRtc2dgIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBnZXQgdGhlIGFuc3dlciBkaXJlY3RseSBmcm9tIHRoZSBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTI5MD1zdGF0aWMgaW50IGlvX21zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtMzQyLVxuaW9fdXJpbmcvbmV0LmM6MzQzOnZvaWQgaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9uZXQuYy0zNDQte1xuLS1cbmlvX3VyaW5nL25ldC5jPTM1MD1zdGF0aWMgaW50IGlvX3NlbmRfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9uZXQuYy0zOTUtXG5pb191cmluZy9uZXQuYzozOTY6c3RhdGljIGludCBpb19zZW5kbXNnX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0zOTcte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQyMy1cbmlvX3VyaW5nL25ldC5jOjQyNDppbnQgaW9fc2VuZG1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy00MjUte1xuLS1cbmlvX3VyaW5nL25ldC5jLTQ2My1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9uZXQuYzo0NjQ6XHRyZXR1cm4gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XG5pb191cmluZy9uZXQuYy00NjUtfVxuLS1cbmlvX3VyaW5nL25ldC5jPTUyMT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTU4LVxuaW9fdXJpbmcvbmV0LmM6NTU5OmludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy01NjAte1xuLS1cbmlvX3VyaW5nL25ldC5jPTEzNzc9aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE0MzYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9uZXQuYzoxNDM3Olx0XHRyZXQgPSBpb19zZW5kbXNnX3NldHVwKHJlcSwgc3FlKTtcbmlvX3VyaW5nL25ldC5jLTE0MzgtXHR9XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTUwMD1zdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE1MjktXG5pb191cmluZy9uZXQuYzoxNTMwOmludCBpb19zZW5kbXNnX3pjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy0xNTMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gaW9fc2VuZG1zZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBpb19zZW5kbXNnYCBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCBuZXR3b3JrIGludGVyYWN0aW9ucyBhbmQgY29uY3VycmVudCBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBzY2F0dGVyLWdhdGhlciBsaXN0cywgZXJyb3IgcHJvcGFnYXRpb24sIGFuZCB0aGUgd2hvbGUgSS9PIHZlY3RvciBwcm9jZXNzaW5nLiBJcyBpdCB1c2luZyBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgbGlrZSBkaXJlY3QgSS9PIG9yIHByZWZldGNoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucywgYW5kIG1vc3QgaW1wb3J0YW50bHkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucyAoZXNwZWNpYWxseSB3aXRoIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucyksIGFuZCBhbnkgZ290Y2hhcyB0aGF0IG1pZ2h0IGxlYWQgdG8gcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBkYXRhIGNvcnJ1cHRpb24uIE15IG1haW4gY29uY2VybnMgYXJlOiByZWxpYWJpbGl0eSwgZWZmaWNpZW5jeSwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHBsYXlzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBvdmVyYWxsIEkvTyBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1OTpcdGludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gNTYwOlx0e1xuIDU2MTpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA1NjI6XHRcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cgPSByZXEtXHUwMDNlYXN5bmNfZGF0YTtcbiA1NjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gNTY0Olx0XHR1bnNpZ25lZCBmbGFncztcbiA1NjU6XHRcdGludCBtaW5fcmV0ID0gMDtcbiA1NjY6XHRcdGludCByZXQ7XG4gNTY3Olx0XG4gNTY4Olx0XHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVx1MDAzZWZpbGUpO1xuIDU2OTpcdFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcbiA1NzA6XHRcdFx0cmV0dXJuIC1FTk9UU09DSztcbiA1NzE6XHRcbiA1NzI6XHRcdGlmICghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcdTAwMjZcdTAwMjZcbiA1NzM6XHRcdCAgICAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUKSlcbiA1NzQ6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gNTc1Olx0XG4gNTc2Olx0XHRmbGFncyA9IHNyLVx1MDAzZW1zZ19mbGFncztcbiA1Nzc6XHRcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbiA1Nzg6XHRcdFx0ZmxhZ3MgfD0gTVNHX0RPTlRXQUlUO1xuIDU3OTpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfV0FJVEFMTClcbiA1ODA6XHRcdFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKTtcbiA1ODE6XHRcbiA1ODI6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19jb250cm9sX3VzZXIgPSBzci1cdTAwM2Vtc2dfY29udHJvbDtcbiA1ODM6XHRcbiA1ODQ6XHRcdHJldCA9IF9fc3lzX3NlbmRtc2dfc29jayhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgZmxhZ3MpO1xuIDU4NTpcdFxuIDU4NjpcdFx0aWYgKHJldCBcdTAwM2MgbWluX3JldCkge1xuIDU4NzpcdFx0XHRpZiAocmV0ID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSykpXG4gNTg4Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gNTg5Olx0XHRcdGlmIChyZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlvX25ldF9yZXRyeShzb2NrLCBmbGFncykpIHtcbiA1OTA6XHRcdFx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfY29udHJvbGxlbiA9IDA7XG4gNTkxOlx0XHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2wgPSBOVUxMO1xuIDU5MjpcdFx0XHRcdHNyLVx1MDAzZWRvbmVfaW8gJiM0Mzs9IHJldDtcbiA1OTM6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiA1OTQ6XHRcdFx0fVxuIDU5NTpcdFx0XHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcbiA1OTY6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4gNTk3Olx0XHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuIDU5ODpcdFx0fVxuIDU5OTpcdFx0aW9fcmVxX21zZ19jbGVhbnVwKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIDYwMDpcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gNjAxOlx0XHRcdHJldCAmIzQzOz0gc3ItXHUwMDNlZG9uZV9pbztcbiA2MDI6XHRcdGVsc2UgaWYgKHNyLVx1MDAzZWRvbmVfaW8pXG4gNjAzOlx0XHRcdHJldCA9IHNyLVx1MDAzZWRvbmVfaW87XG4gNjA0Olx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gNjA1Olx0XHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xuIDYwNjpcdH1cbiA2MDc6XHRcbiA2MDg6XHRzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGlvX3NlbmRtc2dgIFdvcmtmbG93IGFuZCBJZGVudGlmeWluZyBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGlvX3NlbmRtc2dgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBjYWxsaW5nIGBpb19zZW5kX2ZpbmlzaGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zIGhlcmUsIHNvIHRoZSBzaWduaWZpY2FudCBmb2N1cyBzeW1ib2xzIHNlZW0gdG8gYmUgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUsIGVzcGVjaWFsbHkgaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4KCldhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgc2VlaW5nIGBpb19idW5kbGVfbmJ1ZnNgIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYnVuZGxlcy4gVGhhdCBhZGRzIGEgbmV3IGRpbWVuc2lvbiB0byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayBgaW9fc2VuZGAsIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgIG5vdy4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBmbG93PyBgQ09ORklHX0lPX1VSSU5HYCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB3aGV0aGVyIGl0IHBsYXlzIGEgcm9sZSBvciBpZiB0aGVyZSBhcmUgb3RoZXIsIG1vcmUgc3BlY2lhbGl6ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTQtXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzYtXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTkzOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSU9fVVJJTkcgYW5kIFBvdGVudGlhbCBOZXR3b3JrIEJ1ZyBGaXhlcyoqCgpPa2F5LCBzbyBgSU9fVVJJTkdgIGlzIGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGF0IGxlYXN0IGluIHRoZSBnZW5lcmFsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoaW5ncy4gTXkgZm9jdXMgbm93IGlzIG9uIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgaW9fdXJpbmcvbmV0LmNgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4IHNwZWNpZmljYWxseS4gSXQgbG9va3MgbGlrZSBgbWluX3QoaW50LCAuLi4pYCB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGBtaW5fdChzaXplX3QsIC4uLilgIHdpdGhpbiBgaW9fYnVuZGxlX25idWZzYC4KClRoZSBrZXkgc3ltYm9scyBoZXJlLCB0aGUgb25lcyBJIHdhbnQgdG8gdHJhY2sgZG93biwgYXJlIGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLiBIYW5nIG9u4oCmIGRvZXMgYGlvX3JlY3Ztc2dgIGFjdHVhbGx5IGNhbGwgYGlvX3JlY3ZfZmluaXNoYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MgZGlnIGludG8gYGlvX3JlY3Ztc2dgIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgIGFuZCBjb25maXJtIHRoYXQgY2FsbGluZyBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIHRoZSBidWcmIzM5O3MgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDUwOlx0aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbjEwNTE6XHR7XG4xMDUyOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuMTA1MzpcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuMTA1NDpcdFx0c3RydWN0IGlvX2JyX3NlbCBzZWwgPSB7IH07XG4xMDU1Olx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTA1NjpcdFx0dW5zaWduZWQgZmxhZ3M7XG4xMDU3Olx0XHRpbnQgcmV0LCBtaW5fcmV0ID0gMDtcbjEwNTg6XHRcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSztcbjEwNTk6XHRcdGJvb2wgbXNob3RfZmluaXNoZWQgPSB0cnVlO1xuMTA2MDpcdFxuMTA2MTpcdFx0c29jayA9IHNvY2tfZnJvbV9maWxlKHJlcS1cdTAwM2VmaWxlKTtcbjEwNjI6XHRcdGlmICh1bmxpa2VseSghc29jaykpXG4xMDYzOlx0XHRcdHJldHVybiAtRU5PVFNPQ0s7XG4xMDY0Olx0XG4xMDY1Olx0XHRpZiAoIShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX1BPTExFRCkgXHUwMDI2XHUwMDI2XG4xMDY2Olx0XHQgICAgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCkpXG4xMDY3Olx0XHRcdHJldHVybiAtRUFHQUlOO1xuMTA2ODpcdFxuMTA2OTpcdFx0ZmxhZ3MgPSBzci1cdTAwM2Vtc2dfZmxhZ3M7XG4xMDcwOlx0XHRpZiAoZm9yY2Vfbm9uYmxvY2spXG4xMDcxOlx0XHRcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcbjEwNzI6XHRcbjEwNzM6XHRyZXRyeV9tdWx0aXNob3Q6XG4xMDc0Olx0XHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xuMTA3NTpcdFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xuMTA3NjpcdFx0XHRzaXplX3QgbGVuID0gc3ItXHUwMDNlbGVuO1xuMTA3NzpcdFxuMTA3ODpcdFx0XHRzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXHUwMDI2bGVuLCBzci1cdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcbjEwNzk6XHRcdFx0aWYgKCFzZWwuYWRkcilcbjEwODA6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xMDgxOlx0XG4xMDgyOlx0XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuMTA4MzpcdFx0XHRcdHJldCA9IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoa21zZywgc3IsIFx1MDAyNnNlbC5hZGRyLCBcdTAwMjZsZW4pO1xuMTA4NDpcdFx0XHRcdGlmIChyZXQpIHtcbjEwODU6XHRcdFx0XHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuMTA4NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjEwODc6XHRcdFx0XHR9XG4xMDg4Olx0XHRcdH1cbjEwODk6XHRcbjEwOTA6XHRcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBzZWwuYWRkciwgbGVuKTtcbjEwOTE6XHRcdH1cbjEwOTI6XHRcbjEwOTM6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19nZXRfaW5xID0gMTtcbjEwOTQ6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcbjEwOTU6XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuMTA5NjpcdFx0XHRyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsXG4xMDk3Olx0XHRcdFx0XHRcdCAgIFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcbjEwOTg6XHRcdH0gZWxzZSB7XG4xMDk5Olx0XHRcdC8qIGRpc2FibGUgcGFydGlhbCByZXRyeSBmb3IgcmVjdm1zZyB3aXRoIGNtc2cgYXR0YWNoZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqUmV2aWV3aW5nIHRoZSBgaW9fcmVjdm1zZ2AgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBsb29rZWQgYXQgdGhlIGluaXRpYWwgcGFydCBvZiBgaW9fcmVjdm1zZ2AsIGJ1dCBsZXQmIzM5O3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHN1YnRsZXRpZXMgdGhhdCBtaWdodCBiZSBsdXJraW5nIGluIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGp1ZGdlbWVudHMsIHNvLCBsZXQmIzM5O3MgbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBleGVjdXRpb24uIEdvdHRhIGtlZXAgdGhpcyBjbGVhbiBhbmQgZWZmaWNpZW50LCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZXhwbG9yZWQgaXQgYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwgXHUwMDI2XHUwMDI2ICFrbXNnLVx1MDAzZW1zZy5tc2dfY29udHJvbGxlbilcbjExMDE6XHRcdFx0XHRtaW5fcmV0ID0gaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpO1xuMTEwMjpcdFxuMTEwMzpcdFx0XHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXHUwMDI2a21zZy1cdTAwM2Vtc2csIHNyLVx1MDAzZXVtc2csXG4xMTA0Olx0XHRcdFx0XHRcdCBrbXNnLVx1MDAzZXVhZGRyLCBmbGFncyk7XG4xMTA1Olx0XHR9XG4xMTA2Olx0XG4xMTA3Olx0XHRpZiAocmV0IFx1MDAzYyBtaW5fcmV0KSB7XG4xMTA4Olx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgZm9yY2Vfbm9uYmxvY2spIHtcbjExMDk6XHRcdFx0XHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcbjExMTA6XHRcdFx0XHRyZXR1cm4gSU9VX1JFVFJZO1xuMTExMTpcdFx0XHR9XG4xMTEyOlx0XHRcdGlmIChyZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlvX25ldF9yZXRyeShzb2NrLCBmbGFncykpIHtcbjExMTM6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSByZXQ7XG4xMTE0Olx0XHRcdFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcbjExMTU6XHRcdFx0fVxuMTExNjpcdFx0XHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcbjExMTc6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4xMTE4Olx0XHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuMTExOTpcdFx0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKSBcdTAwMjZcdTAwMjYgKGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyBcdTAwMjYgKE1TR19UUlVOQyB8IE1TR19DVFJVTkMpKSkge1xuMTEyMDpcdFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbjExMjE6XHRcdH1cbjExMjI6XHRcbjExMjM6XHRcdGlmIChyZXQgXHUwMDNlIDApXG4xMTI0Olx0XHRcdHJldCAmIzQzOz0gc3ItXHUwMDNlZG9uZV9pbztcbjExMjU6XHRcdGVsc2UgaWYgKHNyLVx1MDAzZWRvbmVfaW8pXG4xMTI2Olx0XHRcdHJldCA9IHNyLVx1MDAzZWRvbmVfaW87XG4xMTI3Olx0XHRlbHNlXG4xMTI4Olx0XHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuMTEyOTpcdFxuMTEzMDpcdFx0c2VsLnZhbCA9IHJldDtcbjExMzE6XHRcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4xMTMyOlx0XHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuMTEzMzpcdFxuMTEzNDpcdFx0cmV0dXJuIHNlbC52YWw7XG4xMTM1Olx0fVxuMTEzNjpcdFxuMTEzNzpcdHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuMTEzODpcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuMTEzOTpcdHtcbjExNDA6XHRcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4xMTQxOlx0XHRpbnQgcmV0O1xuMTE0MjpcdFxuMTE0MzpcdFx0LypcbjExNDQ6XHRcdCAqIElmIHRoZSByaW5nIGlzbiYjMzk7dCBsb2NrZWQsIHRoZW4gZG9uJiMzOTt0IHVzZSB0aGUgcGVlayBpbnRlcmZhY2VcbjExNDU6XHRcdCAqIHRvIGdyYWIgbXVsdGlwbGUgYnVmZmVycyBhcyB3ZSB3aWxsIGxvY2svdW5sb2NrIGJldHdlZW5cbjExNDY6XHRcdCAqIHRoaXMgc2VsZWN0aW9uIGFuZCBwb3N0aW5nIHRoZSBidWZmZXJzLlxuMTE0NzpcdFx0ICovXG4xMTQ4Olx0XHRpZiAoIShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkgXHUwMDI2XHUwMDI2XG4xMTQ5Olx0XHQgICAgc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgSS9PIENvbXBsZXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBvdXIgYXN5bmNocm9ub3VzIEkvTyBvcGVyYXRpb25zIGNvbXBsZXRlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgaW9fcmVjdm1zZ2AgcGF0aCwgYW5kIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGl0ICpkb2VzKiBjYWxsIGBpb19yZWN2X2ZpbmlzaGAuIEdvb2QuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHBhcmFsbGVsIG9uIHRoZSBzZW5kIHNpZGUuIEkmIzM5O20gYXNraW5nIG15c2VsZiwgZG9lcyBgaW9fc2VuZG1zZ2AgdHJpZ2dlciBhIHNpbWlsYXIgZmluaXNoaW5nIGZ1bmN0aW9uLCBsaWtlIGBpb19zZW5kX2ZpbmlzaGA/IEhvbGQgb24uLi4gSSBqdXN0IHJldmlld2VkIGBpb19zZW5kbXNnYCBhbmQsIG5vLCBpdCBkb2VzbiYjMzk7dC4gT2theSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEJ1dCB3aGF0IGFib3V0IHRoZSBzaW1wbGVyIGBpb19zZW5kYD8gQWggeWVzLCBgaW9fc2VuZGAgZG9lcyBoYXZlIGl0cyBvd24gZmluaXNoaW5nIGNhbGwuIE5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBmb2N1cyB0byB0aGUgemVyby1jb3B5IHNlbmQgcm91dGluZXMuIEkgbmVlZCB0byBjaGVjayBob3cgYGlvX3NlbmRfemNgIGFuZCBgaW9fc2VuZG1zZ196Y2AgaGFuZGxlIHRoZWlyIGNvbXBsZXRpb24gc3RlcHMgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgdGhlIHBhdGhzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHplcm8tY29weSBwYXRocyBiZWhhdmUgY29uc2lzdGVudGx5IHdpdGggdGhlIG5vcm1hbCBzZW5kIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy01MjAtXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNTIyLVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcyNS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzo3MjY6XHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsKSlcbmlvX3VyaW5nL25ldC5jLTcyNy1cdFx0Z290byByZXRyeV9idW5kbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk15IEFuYWx5c2lzIG9mIEkvTyBGdW5jdGlvbiBDYWxsIFJlbGF0aW9uc2hpcHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBjbGVhciBwYXR0ZXJuIGhlcmUsIGZvY3VzaW5nIG9uIGhvdyB0aGVzZSBsb3ctbGV2ZWwgSS9PIGZ1bmN0aW9ucyBpbnRlcmFjdC4gYGlvX3NlbmRgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYGlvX3NlbmRfZmluaXNoYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIE9uIHRoZSByZWNlaXZpbmcgZW5kLCBgaW9fcmVjdm1zZ2AgYW5kIGBpb19yZWN2YCBib3RoIHNlZW0gdG8gdHJpZ2dlciBgaW9fcmVjdl9maW5pc2hgLiBUaGF04oCZcyBsb2dpY2FsLCB0aGUgZmluaXNoIHJvdXRpbmVzIGFyZSBjYWxsZWQgYWZ0ZXIgdGhlIGNvcmUgb3BlcmF0aW9uLgoKTm93IHRoZSBjdXJ2ZWJhbGwuIEkmIzM5O20gbm90aW5nIHRoYXQgYGlvX2J1bmRsZV9uYnVmc2AgaXMgYWxzbyBpbnZva2VkIGJ5IGBpb19uZXRfa2J1Zl9yZWN5bGVgLiBUaGF0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0IHJlcXVpcmVzIGNhcmVmdWwgdGhvdWdodC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgaGFzIHRvIGJlIHRyYWNpbmcgYmFjayB0byBmaW5kICp3aG8qIGNhbGxzIGBpb19uZXRfa2J1Zl9yZWN5bGVgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhpcyBgaW9fYnVuZGxlX25idWZzYCBmdW5jdGlvbiBoYXMgdG8gZG8gd2l0aCB0aGluZ3MuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwb2ludCBvZiBvcHRpbWl6YXRpb24gb3IgYSBzb3VyY2Ugb2YgY29udGVudGlvbiBJIHNob3VsZCBiZSB0cmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fbmV0X2tidWZfcmVjeWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9NDgxPXN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTExLVxuaW9fdXJpbmcvbmV0LmM6NTEyOnN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcvbmV0LmMtNTEzLVx0XHRcdCAgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCBsZW4pXG4tLVxuaW9fdXJpbmcvbmV0LmM9NjU2PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzEzLVx0XHRcdHNyLVx1MDAzZWRvbmVfaW8gJiM0Mzs9IHJldDtcbmlvX3VyaW5nL25ldC5jOjcxNDpcdFx0XHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xuaW9fdXJpbmcvbmV0LmMtNzE1LVx0XHR9XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTA1MD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMTMtXHRcdFx0c3ItXHUwMDNlZG9uZV9pbyAmIzQzOz0gcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTExNDpcdFx0XHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xuaW9fdXJpbmcvbmV0LmMtMTExNS1cdFx0fVxuLS1cbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMjcxLVx0XHRcdHNyLVx1MDAzZWRvbmVfaW8gJiM0Mzs9IHJldDtcbmlvX3VyaW5nL25ldC5jOjEyNzI6XHRcdFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcbmlvX3VyaW5nL25ldC5jLTEyNzMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NDkKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSS9PIFVyaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBoZXJlIOKAkyBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4gVGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMgZm9yIHRoaXMgSS9PIFVyaW5nIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSBjcml0aWNhbCB0byB0aGlzLCBzbyBJIHdpbGwgY2hlY2sgZm9yIGFueSBzZWNvbmRhcnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBvciByZWxhdGVkIGFzcGVjdHMuIFRoZSBjb3JlIGNvbmZpZyB0byBiZSBhd2FyZSBvZiBpcyBgSU9fVVJJTkdgLCBvYnZpb3VzbHkuCgpGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgZ2VudWluZSB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgc2VlbXMgYHRoaXNfbGVuYCBjb3VsZCBiZWNvbWUgbmVnYXRpdmUgaWYgYGlvdl9sZW5gIGV4Y2VlZHMgYElOVF9NQVhgLCBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBhYnNvbHV0ZWx5IG5lZWRzIGZpeGluZy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGJ1ZyBhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICp3b3J0aCBmdXp6aW5nKiwgc28gSSB3aWxsIGJlIHNldHRpbmcgdGhhdCB0byB0cnVlLiBUaGlzIHBhdGNoIHNob3VsZCBiZSB0ZXN0ZWQgdGhvcm91Z2hseS4KClVsdGltYXRlbHksIEkmIzM5O20gZ29pbmcgdG8gY2VudGVyIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AsIGFuZCBJJiMzOTtsbCBlbnN1cmUgdGhlIGBJT19VUklOR2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGR1cmluZyBteSB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjA1LjI4ODg0OTk0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjY5MzQ3NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fc2VuZFwiLFxuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBpb19idW5kbGVfbmJ1ZnNgIHdoZXJlIGBtaW5fdChpbnQsIC4uLilgIGNvdWxkIHRydW5jYXRlIG9yIHNpZ24tZXh0ZW5kIGBpb3ZfbGVuYCBpZiBpdCBleGNlZWRzIGBJTlRfTUFYYCwgbGVhZGluZyB0byBuZWdhdGl2ZSB2YWx1ZXMgb3IgaW5jb3JyZWN0IGxlbmd0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuIFRoZSBhZmZlY3RlZCBmdW5jdGlvbiBpcyB1c2VkIGJ5IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDowNS4yODg4NjY3MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTcwOTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM5ZjBlNzFmYzZjMjliMjBhMzA0ZjVmYjM5NGY5NTI5MDk0M2ZiMGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMjM6NDA6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xcbmluZGV4IDAwYTdkZjgwM2I5OWIuLmU4YTA2NmY4YTllMzMgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcXG4rKysgYi9pb191cmluZy9uZXQuY1xcbkBAIC01MDAsNyArNTAwLDcgQEAgc3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG4gXFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXFxuIFxcdG5idWZzID0gMDtcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcXG4rXFx0XFx0c2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XFxuIFxcbiBcXHRcXHRuYnVmcysrO1xcbiBcXHRcXHRyZXQgLT0gdGhpc19sZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjA1Ljc4NTI3ODk3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwNzcyOTA2NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fc2VuZFwiLFxuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBpb19idW5kbGVfbmJ1ZnNgIHdoZXJlIGBtaW5fdChpbnQsIC4uLilgIGNvdWxkIHRydW5jYXRlIG9yIHNpZ24tZXh0ZW5kIGBpb3ZfbGVuYCBpZiBpdCBleGNlZWRzIGBJTlRfTUFYYCwgbGVhZGluZyB0byBuZWdhdGl2ZSB2YWx1ZXMgb3IgaW5jb3JyZWN0IGxlbmd0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuIFRoZSBhZmZlY3RlZCBmdW5jdGlvbiBpcyB1c2VkIGJ5IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOWYwZTcxZmM2YzI5YjIwYTMwNGY1ZmIzOTRmOTUyOTA5NDNmYjBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjM6NDA6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXG5pbmRleCAwMGE3ZGY4MDNiOTliLi5lOGEwNjZmOGE5ZTMzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcbisrKyBiL2lvX3VyaW5nL25ldC5jXG5AQCAtNTAwLDcgKzUwMCw3IEBAIHN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG4gXHQvKiBzaG9ydCB0cmFuc2ZlciwgY291bnQgc2VnbWVudHMgKi9cbiBcdG5idWZzID0gMDtcbiBcdGRvIHtcbi1cdFx0aW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XG4rXHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO1xuIFxuIFx0XHRuYnVmcysrO1xuIFx0XHRyZXQgLT0gdGhpc19sZW47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDowNS43ODUyODA0MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg0NDQ5ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggd2l0aGluIGBpb191cmluZy9uZXQuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUncyBtb2RpZnlpbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJIHNlZSB0aGV5J3ZlIGNoYW5nZWQgdGhlIHR5cGUgZGVjbGFyYXRpb24gZm9yIGB0aGlzX2xlbmAgd2l0aGluIGEgYG1pbl90YCBjYWxsLiBPcmlnaW5hbGx5LCBpdCB3YXMgYW4gYGludGAsIGJ1dCBpdCdzIG5vdyBhIGBzaXplX3RgLiBUaGUgcmVsZXZhbnQgbGluZSBpczogYGludCB0aGlzX2xlbiA9IG1pbl90KGludCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO2Agd2hpY2ggaGFzIGJlY29tZSBgc2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyBpbnRlcmVzdGluZyB0aGV5J3JlIHN3aXRjaGluZyB0byBhIGBzaXplX3RgIGZvciB0aGUgbWluaW11bSBjYWxjdWxhdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBzaXplIGJlaW5nIGhhbmRsZWQgaGVyZSBtaWdodCBoYXZlIGdyb3duLiBDb3VsZCBiZSByZWxhdGVkIHRvIGxhcmdlciBuZXR3b3JrIGJ1ZmZlcnMgb3IgcG90ZW50aWFsbHkgaGFuZGxpbmcgc2l6ZXMgdGhhdCBleGNlZWQgdGhlIGNhcGFjaXR5IG9mIGEgc2lnbmVkIGludGVnZXIuIEkgbmVlZCB0byBkaWcgaW50byBgaW9fYnVuZGxlX25idWZzYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBhbmQgY29udGV4dCBiZXR0ZXIuIEknbGwgbmVlZCB0byBleGFtaW5lIHdoYXQgYGlvdltuYnVmc10uaW92X2xlbmAgYW5kIGByZXRgIHJlcHJlc2VudCBpbiB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjEwLjA2OTczMjMyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTk0MzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19idW5kbGVfbmJ1ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NDY3PXN0YXRpYyB2b2lkIGlvX3JlcV9tc2dfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQ4MC0gKi9cXG5pb191cmluZy9uZXQuYzo0ODE6c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG5pb191cmluZy9uZXQuYy00ODIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NTEyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTE2LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuaW9fdXJpbmcvbmV0LmM6NTE3OlxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbmlvX3VyaW5nL25ldC5jLTUxOC1cXHRyZXR1cm4gSU9VX1JFVFJZO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NTIxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUzMy1cXG5pb191cmluZy9uZXQuYzo1MzQ6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUzNS1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg4Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy05MDktXFxuaW9fdXJpbmcvbmV0LmM6OTEwOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XFxuaW9fdXJpbmcvbmV0LmMtOTExLVxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MTAuMTM1NjgyODc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3Njc0Mjc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPX1VSSU5HIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGlvX3VyaW5nYCBuZXR3b3JraW5nIGNvZGUuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbSBmb2N1c2luZyBvbiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGlzIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZywgcHJvYmFibHkgaW1wbHlpbmcgaXQncyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgZmlsZS4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgaW9fbmV0X2tidWZfcmVjeWxlYCwgYGlvX3NlbmRfZmluaXNoYCwgYW5kIGBpb19yZWN2X2ZpbmlzaGAuXG5cbldhaXQgYSBtaW51dGUuLi4gYGlvX25ldF9rYnVmX3JlY3lsZWA/IFRoYXQncyBnb3QgbXkgYXR0ZW50aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YCBhcmUgYWN0dWFsbHkgZG9pbmcuIExldCdzIHNlZSBob3cgdGhleSB1c2UgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gYnVuZGxlIGFuZCByZWN5Y2xlIHRoZSBuZXQgYnVmZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDoxMy42MTI0Mjg1MjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwNzkwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NTEyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTIwLVxcbmlvX3VyaW5nL25ldC5jOjUyMTpzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNTIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzI1LVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6NzI2OlxcdGlmICghaW9fc2VuZF9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsKSlcXG5pb191cmluZy9uZXQuYy03MjctXFx0XFx0Z290byByZXRyeV9idW5kbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjEzLjY3OTUxMTkyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDE2NzA1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGlvX3VyaW5nL25ldC5jYCBmb3IgTmV0d29yayBJL08gRWZmaWNpZW5jeSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgYGlvX3VyaW5nYCBpcyBoYW5kbGluZyBuZXR3b3JrIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAgZnVuY3Rpb25zIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zOiBob3cgdGhleSdyZSBlbnF1ZXVpbmcgcmVxdWVzdHMsIGhvdyB0aGUgY29tcGxldGlvbiBpcyBoYW5kbGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgdGhleSdyZSBtaW5pbWl6aW5nIGNvbnRleHQgc3dpdGNoZXMgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UuIEknbSBsb29raW5nIGZvciB0aGUgY29tbW9uIHBpdGZhbGxzIHRoYXQgSSBhbHJlYWR5IGtub3csIHN1Y2ggYXMgZW5zdXJpbmcgcHJvcGVyIGVycm9yIGhhbmRsaW5nLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcywgYW5kIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzeXN0ZW0gY2FsbHMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhleSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgZmxhZ3MgdG8gbWF4aW1pemUgcGVyZm9ybWFuY2UgKGUuZy4sIGBNU0dfTk9TSUdOQUxgLCBgTVNHX01PUkVgKS4gSSdtIGFsc28ga2Vlbmx5IGludGVyZXN0ZWQgaW4gYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCAtIHRoaW5ncyBsaWtlIHByZS10b3VjaGluZyBwYWdlcywgY29hbGVzY2luZyByZXF1ZXN0cywgb3IgemVyby1jb3B5IHRlY2huaXF1ZXMgLSBhbmQsIG9mIGNvdXJzZSwgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIGNhbiBxdWlja2x5IGlkZW50aWZ5LiBFc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhZGhlcmUgdG8gdGhlIGlvX3VyaW5nIHBoaWxvc29waHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDoxNy4xODExODQyMzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODczMzcwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0yOTA9c3RhdGljIGludCBpb19tc2dfY29weV9oZHIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmlvbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMzQyLVxcbmlvX3VyaW5nL25ldC5jOjM0Mzp2b2lkIGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbmlvX3VyaW5nL25ldC5jLTM0NC17XFxuLS1cXG5pb191cmluZy9uZXQuYy0zNDktXFxuaW9fdXJpbmcvbmV0LmM6MzUwOnN0YXRpYyBpbnQgaW9fc2VuZF9zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTM1MS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0zOTUtXFxuaW9fdXJpbmcvbmV0LmM6Mzk2OnN0YXRpYyBpbnQgaW9fc2VuZG1zZ19zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTM5Ny17XFxuLS1cXG5pb191cmluZy9uZXQuYy00MjMtXFxuaW9fdXJpbmcvbmV0LmM6NDI0OmludCBpb19zZW5kbXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9uZXQuYy00MjUte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDYwLVxcdGlmIChyZXEtXFx1MDAzZW9wY29kZSAhPSBJT1JJTkdfT1BfU0VORE1TRylcXG5pb191cmluZy9uZXQuYzo0NjE6XFx0XFx0cmV0dXJuIGlvX3NlbmRfc2V0dXAocmVxLCBzcWUpO1xcbmlvX3VyaW5nL25ldC5jLTQ2Mi1cXHRpZiAodW5saWtlbHkoc3FlLVxcdTAwM2VhZGRyMiB8fCBzcWUtXFx1MDAzZWZpbGVfaW5kZXgpKVxcbmlvX3VyaW5nL25ldC5jLTQ2My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9uZXQuYzo0NjQ6XFx0cmV0dXJuIGlvX3NlbmRtc2dfc2V0dXAocmVxLCBzcWUpO1xcbmlvX3VyaW5nL25ldC5jLTQ2NS19XFxuLS1cXG5pb191cmluZy9uZXQuYz01MTI9c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuLS1cXG5pb191cmluZy9uZXQuYy01MjAtXFxuaW9fdXJpbmcvbmV0LmM6NTIxOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9uZXQuYy01MjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTU4LVxcbmlvX3VyaW5nL25ldC5jOjU1OTppbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTU2MC17XFxuLS1cXG5pb191cmluZy9uZXQuYy02MDctXFxuaW9fdXJpbmcvbmV0LmM6NjA4OnN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXFxuaW9fdXJpbmcvbmV0LmMtNjA5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYy02NTUtXFxuaW9fdXJpbmcvbmV0LmM6NjU2OmludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtNjU3LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTY4OS1cXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuaW9fdXJpbmcvbmV0LmM6NjkwOlxcdFxcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcXHUwMDI2c2VsLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy02OTEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcyNS1cXHRzZWwudmFsID0gcmV0O1xcbmlvX3VyaW5nL25ldC5jOjcyNjpcXHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCkpXFxuaW9fdXJpbmcvbmV0LmMtNzI3LVxcdFxcdGdvdG8gcmV0cnlfYnVuZGxlO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTMyNT1pbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzU5LVxcbmlvX3VyaW5nL25ldC5jOjEzNjA6dm9pZCBpb19zZW5kX3pjX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtMTM2MS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzc2LVxcbmlvX3VyaW5nL25ldC5jOjEzNzc6aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTEzNzgte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTQzMi1cXHRpZiAocmVxLVxcdTAwM2VvcGNvZGUgPT0gSU9SSU5HX09QX1NFTkRfWkMpIHtcXG5pb191cmluZy9uZXQuYzoxNDMzOlxcdFxcdHJldCA9IGlvX3NlbmRfc2V0dXAocmVxLCBzcWUpO1xcbmlvX3VyaW5nL25ldC5jLTE0MzQtXFx0fSBlbHNlIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0MzYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvbmV0LmM6MTQzNzpcXHRcXHRyZXQgPSBpb19zZW5kbXNnX3NldHVwKHJlcSwgc3FlKTtcXG5pb191cmluZy9uZXQuYy0xNDM4LVxcdH1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE0NTc9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0OTktXFxuaW9fdXJpbmcvbmV0LmM6MTUwMDpzdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTE1MDEtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTUyOS1cXG5pb191cmluZy9uZXQuYzoxNTMwOmludCBpb19zZW5kbXNnX3pjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTUzMS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0xNTQ3LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xcbmlvX3VyaW5nL25ldC5jOjE1NDg6XFx0XFx0cmV0ID0gaW9fc2VuZF96Y19pbXBvcnQocmVxLCBrbXNnLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTU0OS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE1ODktXFx0ICogSWYgd2UncmUgaW4gaW8td3Egd2UgY2FuJ3QgcmVseSBvbiB0dyBvcmRlcmluZyBndWFyYW50ZWVzLCBkZWZlclxcbmlvX3VyaW5nL25ldC5jOjE1OTA6XFx0ICogZmx1c2hpbmcgbm90aWYgdG8gaW9fc2VuZF96Y19jbGVhbnVwKClcXG5pb191cmluZy9uZXQuYy0xNTkxLVxcdCAqL1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTYwMC1cXG5pb191cmluZy9uZXQuYzoxNjAxOnZvaWQgaW9fc2VuZHJlY3ZfZmFpbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy9uZXQuYy0xNjAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MTcuMjY4NTI1MDI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5NDM1MzY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgVGhvdWdodCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGlvX2J1bmRsZV9uYnVmc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyBgaW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YCB0byBgc2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBhIHN0cmFpZ2h0Zm9yd2FyZCB0eXBlIGNoYW5nZS4gYGlvdl9sZW5gIGlzIGEgYHNpemVfdGAsIHNvIHVzaW5nIGBpbnRgIHRoZXJlIGlzIGp1c3QgYXNraW5nIGZvciB0cm91YmxlLlwiXG5cbkFuZCB0aGVuIGl0IGhpdHMgbWU6IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgdGlkeWluZyB1cC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgYmVjYXVzZSBgaW92X2xlbmAgaXMgYSBgc2l6ZV90YCEgUmlnaHQgbm93LCB0aGF0IGBtaW5fdChpbnQsIC4uLilgIGlzIHRydW5jYXRpbmcgb3IsIGV2ZW4gd29yc2UsIHNpZ24tZXh0ZW5kaW5nIGxhcmdlci10aGFuLWBJTlRfTUFYYCB2YWx1ZXMgb2YgYGlvdl9sZW5gLiBUaGF0J3MgYSBjbGFzc2ljIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gV2FpdCBhIG1pbnV0ZS4uLiBgcmV0YCBpcyBhbiBgaW50YC4gT2theS4gU28gdGhlIG9yaWdpbmFsIGNvZGUgd2FzICpjYXN0aW5nKiBgaW92X2xlbmAgdG8gYW4gYGludGAgd2l0aGluIHRoZSBgbWluX3RgIGZ1bmN0aW9uLiBJZiBgaW92X2xlbmAgaXMgbWFzc2l2ZSwgaXQgYmVjb21lcyBuZWdhdGl2ZSwgYW5kIGBtaW5fdGAgaXMgcGlja2luZyB0aGUgKm5lZ2F0aXZlKiBsZW5ndGguIFRoYXQncyBjbGVhcmx5IHdyb25nLiBTbywgdGhpcyBmaXggYWN0dWFsbHkgcHJldmVudHMgdGhlIHdyb25nIGNhbGN1bGF0aW9uLiBCaW5nbywgYSByZWFsIGJ1ZyBmaXguXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gYGlvX2J1bmRsZV9uYnVmc2AgaXMgY2FsbGVkIGJ5IGBpb19zZW5kX2ZpbmlzaGAgYW5kIGBpb19yZWN2X2ZpbmlzaGAuIFRob3NlIGFyZSBjYWxsZWQgYnkgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIEFscmlnaHQsIHNvIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFmZmVjdGVkIGhlcmUgYXJlIGRlZmluaXRlbHkgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIEJ1dCB3YWl0LCBhcmUgd2UgY29tcGxldGVseSBzdXJlPyBgaW9fc2VuZG1zZ2AgYW5kIGBpb19yZWN2bXNnYCBtaWdodCBhbHNvIGJlIHVzaW5nIHRoZXNlISBOZWVkIHRvIHZlcmlmeS4gTGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlvX3NlbmRfZmluaXNoYC4gTGV0J3MgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MjMuMDYyODgzODg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxMDI4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NTEyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTIwLVxcbmlvX3VyaW5nL25ldC5jOjUyMTpzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNTIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzI1LVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6NzI2OlxcdGlmICghaW9fc2VuZF9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsKSlcXG5pb191cmluZy9uZXQuYy03MjctXFx0XFx0Z290byByZXRyeV9idW5kbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjIzLjE4Mjk5NDQwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkxNTc4Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpb19yZWN2X2ZpbmlzaGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBpb19yZWN2X2ZpbmlzaGAgYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIGFsbCB0aGUgZnVuY3Rpb25zIG9yIG1vZHVsZXMgdGhhdCBkaXJlY3RseSBpbnZva2UgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgZm9yIGEgZmV3IHJlYXNvbnMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQ7IGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb21wb25lbnRzIGFyZSBrZXkuIFNlY29uZGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBwYXR0ZXJucyBpbiBpdHMgdXNhZ2Ug4oCTIGFyZSBjZXJ0YWluIG1vZHVsZXMgb3IgcHJvdG9jb2xzIHJlbHlpbmcgb24gaXQgbW9yZSB0aGFuIG90aGVycz8gRmluYWxseSwgYSB0aG9yb3VnaCBjYWxsZXIgYW5hbHlzaXMgaXMgZXNzZW50aWFsIGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBldmVuIHJlZmFjdG9yaW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBmdW5jdGlvbiBpcyBjb21wbGV4IG9yIHBlcmZvcm1hbmNlLWNyaXRpY2FsLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSB6ZXJvIGluIG9uIGFueSBwb3RlbnRpYWwgaG90c3BvdHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjI2LjE3NDU3NjQ2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTUyODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTgxMT1pbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy04ODItICovXFxuaW9fdXJpbmcvbmV0LmM6ODgzOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9uZXQuYy04ODQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTA1MD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzMC1cXHRzZWwudmFsID0gcmV0O1xcbmlvX3VyaW5nL25ldC5jOjExMzE6XFx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFxcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXFxuaW9fdXJpbmcvbmV0LmMtMTEzMi1cXHRcXHRnb3RvIHJldHJ5X211bHRpc2hvdDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTAtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjkxOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbmlvX3VyaW5nL25ldC5jLTEyOTItXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjI2LjM4NjczNDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTI3NDU4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgSS9PIENhbGxzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBuZXR3b3JrIEkvTyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gSSBzZWUgdGhhdCBgaW9fc2VuZGAsIGBpb19yZWN2bXNnYCwgYW5kIGBpb19yZWN2YCDigJMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhcHBlYXIgdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IG1lbnRhbCBtYXAgaGlnaGxpZ2h0cyB0aG9zZSBhcyB0aGUga2V5IGZvY3VzIHN5bWJvbHM6IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBmZWVscyBzbGlnaHRseSBvZmYuIEkgdGhvdWdodCBgaW9fc2VuZG1zZ2Agd291bGQgdXRpbGl6ZSBhIGNvbXBsZXRpb24gZnVuY3Rpb24sIGxpa2VseSBgaW9fc2VuZF9maW5pc2hgLCBzaW1pbGFyIHRvIHNvbWUgb3RoZXIgcGF0dGVybnMgSSd2ZSBzZWVuIGluIHRoaXMga2luZCBvZiBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbi4gSSBzaG91bGQgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gb3BlbiB1cCBgaW9fdXJpbmcvbmV0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGlvX3NlbmRtc2dgIGltcGxlbWVudGF0aW9uLiBJJ2xsIGdldCB0aGUgYW5zd2VyIGRpcmVjdGx5IGZyb20gdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTk5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzAuMzM5NDg0MjU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxMTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTI5MD1zdGF0aWMgaW50IGlvX21zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0zNDItXFxuaW9fdXJpbmcvbmV0LmM6MzQzOnZvaWQgaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtMzQ0LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTM1MD1zdGF0aWMgaW50IGlvX3NlbmRfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTM5NS1cXG5pb191cmluZy9uZXQuYzozOTY6c3RhdGljIGludCBpb19zZW5kbXNnX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtMzk3LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQyMy1cXG5pb191cmluZy9uZXQuYzo0MjQ6aW50IGlvX3NlbmRtc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTQyNS17XFxuLS1cXG5pb191cmluZy9uZXQuYy00NjMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvbmV0LmM6NDY0OlxcdHJldHVybiBpb19zZW5kbXNnX3NldHVwKHJlcSwgc3FlKTtcXG5pb191cmluZy9uZXQuYy00NjUtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NTIxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTU1OC1cXG5pb191cmluZy9uZXQuYzo1NTk6aW50IGlvX3NlbmRtc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy01NjAte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTM3Nz1pbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDM2LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL25ldC5jOjE0Mzc6XFx0XFx0cmV0ID0gaW9fc2VuZG1zZ19zZXR1cChyZXEsIHNxZSk7XFxuaW9fdXJpbmcvbmV0LmMtMTQzOC1cXHR9XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNTAwPXN0YXRpYyBpbnQgaW9fc2VuZF96Y19pbXBvcnQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNTI5LVxcbmlvX3VyaW5nL25ldC5jOjE1MzA6aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xNTMxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzAuMzk0NDAxMDU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODk2MTU5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gaW9fc2VuZG1zZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGlvX3NlbmRtc2dgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbXBsZXggbmV0d29yayBpbnRlcmFjdGlvbnMgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBzY2F0dGVyLWdhdGhlciBsaXN0cywgZXJyb3IgcHJvcGFnYXRpb24sIGFuZCB0aGUgd2hvbGUgSS9PIHZlY3RvciBwcm9jZXNzaW5nLiBJcyBpdCB1c2luZyBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgbGlrZSBkaXJlY3QgSS9PIG9yIHByZWZldGNoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgY29uZGl0aW9ucywgYW5kIG1vc3QgaW1wb3J0YW50bHkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zIChlc3BlY2lhbGx5IHdpdGggbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zKSwgYW5kIGFueSBnb3RjaGFzIHRoYXQgbWlnaHQgbGVhZCB0byBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBvciBldmVuIGRhdGEgY29ycnVwdGlvbi4gTXkgbWFpbiBjb25jZXJucyBhcmU6IHJlbGlhYmlsaXR5LCBlZmZpY2llbmN5LCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGxheXMgd2l0aCB0aGUga2VybmVsJ3Mgb3ZlcmFsbCBJL08gc3Vic3lzdGVtLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDozMy42ODQwMTkxNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1OTpcXHRpbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiA1NjA6XFx0e1xcbiA1NjE6XFx0XFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4gNTYyOlxcdFxcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuIDU2MzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbiA1NjQ6XFx0XFx0dW5zaWduZWQgZmxhZ3M7XFxuIDU2NTpcXHRcXHRpbnQgbWluX3JldCA9IDA7XFxuIDU2NjpcXHRcXHRpbnQgcmV0O1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVxcdTAwM2VmaWxlKTtcXG4gNTY5OlxcdFxcdGlmICh1bmxpa2VseSghc29jaykpXFxuIDU3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1RTT0NLO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRpZiAoIShyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcXHUwMDI2XFx1MDAyNlxcbiA1NzM6XFx0XFx0ICAgIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCkpXFxuIDU3NDpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTc1OlxcdFxcbiA1NzY6XFx0XFx0ZmxhZ3MgPSBzci1cXHUwMDNlbXNnX2ZsYWdzO1xcbiA1Nzc6XFx0XFx0aWYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcXG4gNTc4OlxcdFxcdFxcdGZsYWdzIHw9IE1TR19ET05UV0FJVDtcXG4gNTc5OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKVxcbiA1ODA6XFx0XFx0XFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpO1xcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2NvbnRyb2xfdXNlciA9IHNyLVxcdTAwM2Vtc2dfY29udHJvbDtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0cmV0ID0gX19zeXNfc2VuZG1zZ19zb2NrKHNvY2ssIFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2csIGZsYWdzKTtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG4gNTg3OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKSlcXG4gNTg4OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiA1ODk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xcbiA1OTA6XFx0XFx0XFx0XFx0a21zZy1cXHUwMDNlbXNnLm1zZ19jb250cm9sbGVuID0gMDtcXG4gNTkxOlxcdFxcdFxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfY29udHJvbCA9IE5VTEw7XFxuIDU5MjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuIDU5MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTk0OlxcdFxcdFxcdH1cXG4gNTk1OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKVxcbiA1OTY6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbiA1OTc6XFx0XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuIDU5ODpcXHRcXHR9XFxuIDU5OTpcXHRcXHRpb19yZXFfbXNnX2NsZWFudXAocmVxLCBpc3N1ZV9mbGFncyk7XFxuIDYwMDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuIDYwMTpcXHRcXHRcXHRyZXQgKz0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDYwMjpcXHRcXHRlbHNlIGlmIChzci1cXHUwMDNlZG9uZV9pbylcXG4gNjAzOlxcdFxcdFxcdHJldCA9IHNyLVxcdTAwM2Vkb25lX2lvO1xcbiA2MDQ6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbiA2MDU6XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4gNjA2OlxcdH1cXG4gNjA3OlxcdFxcbiA2MDg6XFx0c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzMuNjg0MTM4OTY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTE0NDY2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW9fc2VuZG1zZ2AgV29ya2Zsb3cgYW5kIElkZW50aWZ5aW5nIEtleSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGlvX3NlbmRtc2dgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcncyBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gSXQgZG9lc24ndCBsb29rIGxpa2UgaXQncyBjYWxsaW5nIGBpb19zZW5kX2ZpbmlzaGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zIGhlcmUsIHNvIHRoZSBzaWduaWZpY2FudCBmb2N1cyBzeW1ib2xzIHNlZW0gdG8gYmUgYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGFuZCBgaW9fcmVjdm1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUsIGVzcGVjaWFsbHkgaW4gdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuV2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciBzZWVpbmcgYGlvX2J1bmRsZV9uYnVmc2AgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBidW5kbGVzLiBUaGF0IGFkZHMgYSBuZXcgZGltZW5zaW9uIHRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSBoYW5kbGVkLiBHaXZlbiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIGNoZWNrIGBpb19zZW5kYCwgYGlvX3JlY3ZgIGFuZCBgaW9fcmVjdm1zZ2Agbm93LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBmbG93PyBgQ09ORklHX0lPX1VSSU5HYCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHdoZXRoZXIgaXQgcGxheXMgYSByb2xlIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgbW9yZSBzcGVjaWFsaXplZCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjM3LjQ5NTU4NzQyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1OTc0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNC1cXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxNi1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzNi1cXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5MzgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6MzcuNTgzMTkwMDA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzAyNTY3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJT19VUklORyBhbmQgUG90ZW50aWFsIE5ldHdvcmsgQnVnIEZpeGVzKipcblxuT2theSwgc28gYElPX1VSSU5HYCBpcyBsaWtlbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhdCBsZWFzdCBpbiB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhpbmdzLiBNeSBmb2N1cyBub3cgaXMgb24gdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBpb191cmluZy9uZXQuY2AuIFRoaXMgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXggc3BlY2lmaWNhbGx5LiBJdCBsb29rcyBsaWtlIGBtaW5fdChpbnQsIC4uLilgIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYG1pbl90KHNpemVfdCwgLi4uKWAgd2l0aGluIGBpb19idW5kbGVfbmJ1ZnNgLlxuXG5UaGUga2V5IHN5bWJvbHMgaGVyZSwgdGhlIG9uZXMgSSB3YW50IHRvIHRyYWNrIGRvd24sIGFyZSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC4gSGFuZyBvbuKApiBkb2VzIGBpb19yZWN2bXNnYCBhY3R1YWxseSBjYWxsIGBpb19yZWN2X2ZpbmlzaGA/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTGV0J3MgZGlnIGludG8gYGlvX3JlY3Ztc2dgIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgIGFuZCBjb25maXJtIHRoYXQgY2FsbGluZyBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIHRoZSBidWcncyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6NDEuNTUzNDQ5OTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDUwOlxcdGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuMTA1MTpcXHR7XFxuMTA1MjpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbjEwNTM6XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyA9IHJlcS1cXHUwMDNlYXN5bmNfZGF0YTtcXG4xMDU0OlxcdFxcdHN0cnVjdCBpb19icl9zZWwgc2VsID0geyB9O1xcbjEwNTU6XFx0XFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4xMDU2OlxcdFxcdHVuc2lnbmVkIGZsYWdzO1xcbjEwNTc6XFx0XFx0aW50IHJldCwgbWluX3JldCA9IDA7XFxuMTA1ODpcXHRcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbjEwNTk6XFx0XFx0Ym9vbCBtc2hvdF9maW5pc2hlZCA9IHRydWU7XFxuMTA2MDpcXHRcXG4xMDYxOlxcdFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtXFx1MDAzZWZpbGUpO1xcbjEwNjI6XFx0XFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcXG4xMDYzOlxcdFxcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdGlmICghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9QT0xMRUQpIFxcdTAwMjZcXHUwMDI2XFxuMTA2NjpcXHRcXHQgICAgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUKSlcXG4xMDY3OlxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRmbGFncyA9IHNyLVxcdTAwM2Vtc2dfZmxhZ3M7XFxuMTA3MDpcXHRcXHRpZiAoZm9yY2Vfbm9uYmxvY2spXFxuMTA3MTpcXHRcXHRcXHRmbGFncyB8PSBNU0dfRE9OVFdBSVQ7XFxuMTA3MjpcXHRcXG4xMDczOlxcdHJldHJ5X211bHRpc2hvdDpcXG4xMDc0OlxcdFxcdHNlbC5idWZfbGlzdCA9IE5VTEw7XFxuMTA3NTpcXHRcXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuMTA3NjpcXHRcXHRcXHRzaXplX3QgbGVuID0gc3ItXFx1MDAzZWxlbjtcXG4xMDc3OlxcdFxcbjEwNzg6XFx0XFx0XFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFxcdTAwMjZsZW4sIHNyLVxcdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcXG4xMDc5OlxcdFxcdFxcdGlmICghc2VsLmFkZHIpXFxuMTA4MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XFxuMTA4MzpcXHRcXHRcXHRcXHRyZXQgPSBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KGttc2csIHNyLCBcXHUwMDI2c2VsLmFkZHIsIFxcdTAwMjZsZW4pO1xcbjEwODQ6XFx0XFx0XFx0XFx0aWYgKHJldCkge1xcbjEwODU6XFx0XFx0XFx0XFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuMTA4NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEwODc6XFx0XFx0XFx0XFx0fVxcbjEwODg6XFx0XFx0XFx0fVxcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgc2VsLmFkZHIsIGxlbik7XFxuMTA5MTpcXHRcXHR9XFxuMTA5MjpcXHRcXG4xMDkzOlxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfZ2V0X2lucSA9IDE7XFxuMTA5NDpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xcbjEwOTU6XFx0XFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcXG4xMDk2OlxcdFxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG4xMDk3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2hvdF9maW5pc2hlZCk7XFxuMTA5ODpcXHRcXHR9IGVsc2Uge1xcbjEwOTk6XFx0XFx0XFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDo0MS41NTM2MTc5NjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMTk4OTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipSZXZpZXdpbmcgdGhlIGBpb19yZWN2bXNnYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBsb29rZWQgYXQgdGhlIGluaXRpYWwgcGFydCBvZiBgaW9fcmVjdm1zZ2AsIGJ1dCBsZXQncyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBzdWJ0bGV0aWVzIHRoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBqdWRnZW1lbnRzLCBzbywgbGV0J3MgbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBleGVjdXRpb24uIEdvdHRhIGtlZXAgdGhpcyBjbGVhbiBhbmQgZWZmaWNpZW50LCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGV4cGxvcmVkIGl0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjQ0LjM4NTYwOTk5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfV0FJVEFMTCBcXHUwMDI2XFx1MDAyNiAha21zZy1cXHUwMDNlbXNnLm1zZ19jb250cm9sbGVuKVxcbjExMDE6XFx0XFx0XFx0XFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRcXHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXFx1MDAyNmttc2ctXFx1MDAzZW1zZywgc3ItXFx1MDAzZXVtc2csXFxuMTEwNDpcXHRcXHRcXHRcXHRcXHRcXHQga21zZy1cXHUwMDNldWFkZHIsIGZsYWdzKTtcXG4xMTA1OlxcdFxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG4xMTA4OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiBmb3JjZV9ub25ibG9jaykge1xcbjExMDk6XFx0XFx0XFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuMTExMDpcXHRcXHRcXHRcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbjExMTE6XFx0XFx0XFx0fVxcbjExMTI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xcbjExMTM6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWRvbmVfaW8gKz0gcmV0O1xcbjExMTQ6XFx0XFx0XFx0XFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcXG4xMTE1OlxcdFxcdFxcdH1cXG4xMTE2OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKVxcbjExMTc6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjExMTg6XFx0XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuMTExOTpcXHRcXHR9IGVsc2UgaWYgKChmbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKSBcXHUwMDI2XFx1MDAyNiAoa21zZy1cXHUwMDNlbXNnLm1zZ19mbGFncyBcXHUwMDI2IChNU0dfVFJVTkMgfCBNU0dfQ1RSVU5DKSkpIHtcXG4xMTIwOlxcdFxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbjExMjE6XFx0XFx0fVxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4xMTI0OlxcdFxcdFxcdHJldCArPSBzci1cXHUwMDNlZG9uZV9pbztcXG4xMTI1OlxcdFxcdGVsc2UgaWYgKHNyLVxcdTAwM2Vkb25lX2lvKVxcbjExMjY6XFx0XFx0XFx0cmV0ID0gc3ItXFx1MDAzZWRvbmVfaW87XFxuMTEyNzpcXHRcXHRlbHNlXFxuMTEyODpcXHRcXHRcXHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcXG4xMTI5OlxcdFxcbjExMzA6XFx0XFx0c2VsLnZhbCA9IHJldDtcXG4xMTMxOlxcdFxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbjExMzI6XFx0XFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdHJldHVybiBzZWwudmFsO1xcbjExMzU6XFx0fVxcbjExMzY6XFx0XFxuMTEzNzpcXHRzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4xMTM4OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbjExMzk6XFx0e1xcbjExNDA6XFx0XFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4xMTQxOlxcdFxcdGludCByZXQ7XFxuMTE0MjpcXHRcXG4xMTQzOlxcdFxcdC8qXFxuMTE0NDpcXHRcXHQgKiBJZiB0aGUgcmluZyBpc24ndCBsb2NrZWQsIHRoZW4gZG9uJ3QgdXNlIHRoZSBwZWVrIGludGVyZmFjZVxcbjExNDU6XFx0XFx0ICogdG8gZ3JhYiBtdWx0aXBsZSBidWZmZXJzIGFzIHdlIHdpbGwgbG9jay91bmxvY2sgYmV0d2VlblxcbjExNDY6XFx0XFx0ICogdGhpcyBzZWxlY3Rpb24gYW5kIHBvc3RpbmcgdGhlIGJ1ZmZlcnMuXFxuMTE0NzpcXHRcXHQgKi9cXG4xMTQ4OlxcdFxcdGlmICghKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkgXFx1MDAyNlxcdTAwMjZcXG4xMTQ5OlxcdFxcdCAgICBzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjQ0LjM4NTc3MzcyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgwODg0ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgSS9PIENvbXBsZXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgb3VyIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9ucyBjb21wbGV0ZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgaW9fcmVjdm1zZ2AgcGF0aCwgYW5kIEkndmUgY29uZmlybWVkIHRoYXQgaXQgKmRvZXMqIGNhbGwgYGlvX3JlY3ZfZmluaXNoYC4gR29vZC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcGFyYWxsZWwgb24gdGhlIHNlbmQgc2lkZS4gSSdtIGFza2luZyBteXNlbGYsIGRvZXMgYGlvX3NlbmRtc2dgIHRyaWdnZXIgYSBzaW1pbGFyIGZpbmlzaGluZyBmdW5jdGlvbiwgbGlrZSBgaW9fc2VuZF9maW5pc2hgPyBIb2xkIG9uLi4uIEkganVzdCByZXZpZXdlZCBgaW9fc2VuZG1zZ2AgYW5kLCBubywgaXQgZG9lc24ndC4gT2theSwgdGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci4gQnV0IHdoYXQgYWJvdXQgdGhlIHNpbXBsZXIgYGlvX3NlbmRgPyBBaCB5ZXMsIGBpb19zZW5kYCBkb2VzIGhhdmUgaXRzIG93biBmaW5pc2hpbmcgY2FsbC4gTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgdG8gdGhlIHplcm8tY29weSBzZW5kIHJvdXRpbmVzLiBJIG5lZWQgdG8gY2hlY2sgaG93IGBpb19zZW5kX3pjYCBhbmQgYGlvX3NlbmRtc2dfemNgIGhhbmRsZSB0aGVpciBjb21wbGV0aW9uIHN0ZXBzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgYWxsIHRoZSBwYXRocyBhdmFpbGFibGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSB6ZXJvLWNvcHkgcGF0aHMgYmVoYXZlIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBub3JtYWwgc2VuZCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjQ3Ljg2NjY2MTM1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDU5OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NlbmRfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTUxMj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUyMC1cXG5pb191cmluZy9uZXQuYzo1MjE6c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTUyMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYz02NTY9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcyNS1cXHRzZWwudmFsID0gcmV0O1xcbmlvX3VyaW5nL25ldC5jOjcyNjpcXHRpZiAoIWlvX3NlbmRfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCkpXFxuaW9fdXJpbmcvbmV0LmMtNzI3LVxcdFxcdGdvdG8gcmV0cnlfYnVuZGxlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDo0Ny45NzQxMjU1NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMTE0MDkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBBbmFseXNpcyBvZiBJL08gRnVuY3Rpb24gQ2FsbCBSZWxhdGlvbnNoaXBzKipcblxuQWxyaWdodCwgc28gSSdtIHNlZWluZyBhIGNsZWFyIHBhdHRlcm4gaGVyZSwgZm9jdXNpbmcgb24gaG93IHRoZXNlIGxvdy1sZXZlbCBJL08gZnVuY3Rpb25zIGludGVyYWN0LiBgaW9fc2VuZGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYWxscyBgaW9fc2VuZF9maW5pc2hgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gT24gdGhlIHJlY2VpdmluZyBlbmQsIGBpb19yZWN2bXNnYCBhbmQgYGlvX3JlY3ZgIGJvdGggc2VlbSB0byB0cmlnZ2VyIGBpb19yZWN2X2ZpbmlzaGAuIFRoYXTigJlzIGxvZ2ljYWwsIHRoZSBmaW5pc2ggcm91dGluZXMgYXJlIGNhbGxlZCBhZnRlciB0aGUgY29yZSBvcGVyYXRpb24uXG5cbk5vdyB0aGUgY3VydmViYWxsLiBJJ20gbm90aW5nIHRoYXQgYGlvX2J1bmRsZV9uYnVmc2AgaXMgYWxzbyBpbnZva2VkIGJ5IGBpb19uZXRfa2J1Zl9yZWN5bGVgLiBUaGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgYmFzZWQgb24gdGhlIG5hbWluZywgaXQgcmVxdWlyZXMgY2FyZWZ1bCB0aG91Z2h0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHJlbGF0aW9uc2hpcCBiZXR0ZXIuIE15IG5leHQgc3RlcCBoYXMgdG8gYmUgdHJhY2luZyBiYWNrIHRvIGZpbmQgKndobyogY2FsbHMgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBkZXRlcm1pbmUgd2hhdCB0aGlzIGBpb19idW5kbGVfbmJ1ZnNgIGZ1bmN0aW9uIGhhcyB0byBkbyB3aXRoIHRoaW5ncy4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIG9wdGltaXphdGlvbiBvciBhIHNvdXJjZSBvZiBjb250ZW50aW9uIEkgc2hvdWxkIGJlIHRyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIzOjQwOjUxLjcwNTI2OTg2N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4ODMxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fbmV0X2tidWZfcmVjeWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTQ4MT1zdGF0aWMgaW50IGlvX2J1bmRsZV9uYnVmcyhzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgcmV0KVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTExLVxcbmlvX3VyaW5nL25ldC5jOjUxMjpzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9uZXQuYy01MTMtXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbilcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTY1Nj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzEzLVxcdFxcdFxcdHNyLVxcdTAwM2Vkb25lX2lvICs9IHJldDtcXG5pb191cmluZy9uZXQuYzo3MTQ6XFx0XFx0XFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcXG5pb191cmluZy9uZXQuYy03MTUtXFx0XFx0fVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTA1MD1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExMy1cXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTExNDpcXHRcXHRcXHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xcbmlvX3VyaW5nL25ldC5jLTExMTUtXFx0XFx0fVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTIwOT1pbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTI3MS1cXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTI3MjpcXHRcXHRcXHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xcbmlvX3VyaW5nL25ldC5jLTEyNzMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMzo0MDo1MS43ODAxNjgzNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTM1NDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEkvTyBVcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgZnVuY3Rpb25zIGhlcmUg4oCTIGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyBmb3IgdGhpcyBJL08gVXJpbmcgcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVsc2UgY3JpdGljYWwgdG8gdGhpcywgc28gSSB3aWxsIGNoZWNrIGZvciBhbnkgc2Vjb25kYXJ5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgb3IgcmVsYXRlZCBhc3BlY3RzLiBUaGUgY29yZSBjb25maWcgdG8gYmUgYXdhcmUgb2YgaXMgYElPX1VSSU5HYCwgb2J2aW91c2x5LlxuXG5Gcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgZ2VudWluZSB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgc2VlbXMgYHRoaXNfbGVuYCBjb3VsZCBiZWNvbWUgbmVnYXRpdmUgaWYgYGlvdl9sZW5gIGV4Y2VlZHMgYElOVF9NQVhgLCBhbmQgdGhhdCdzIHNvbWV0aGluZyB0aGF0IGFic29sdXRlbHkgbmVlZHMgZml4aW5nLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcgYW5kIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICp3b3J0aCBmdXp6aW5nKiwgc28gSSB3aWxsIGJlIHNldHRpbmcgdGhhdCB0byB0cnVlLiBUaGlzIHBhdGNoIHNob3VsZCBiZSB0ZXN0ZWQgdGhvcm91Z2hseS5cblxuVWx0aW1hdGVseSwgSSdtIGdvaW5nIHRvIGNlbnRlciBteSBmdXp6aW5nIGVmZm9ydHMgYXJvdW5kIGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBhbmQgYGlvX3JlY3Ztc2dgLCBhbmQgSSdsbCBlbnN1cmUgdGhlIGBJT19VUklOR2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGR1cmluZyBteSB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU0OSwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjM6NDA6NTYuNDExNTI3Mjc2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NjU0MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgaW9fYnVuZGxlX25idWZzYCB3aGVyZSBgbWluX3QoaW50LCAuLi4pYCBjb3VsZCB0cnVuY2F0ZSBvciBzaWduLWV4dGVuZCBgaW92X2xlbmAgaWYgaXQgZXhjZWVkcyBgSU5UX01BWGAsIGxlYWRpbmcgdG8gbmVnYXRpdmUgdmFsdWVzIG9yIGluY29ycmVjdCBsZW5ndGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiBUaGUgYWZmZWN0ZWQgZnVuY3Rpb24gaXMgdXNlZCBieSBgaW9fc2VuZGAsIGBpb19yZWN2YCwgYW5kIGBpb19yZWN2bXNnYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[1] Phase: Succeeded StartedAt: 2026-07-30 23:41:07 +0000 UTC FinishedAt: 2026-07-30 23:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 23:41:07 +0000 UTC FinishedAt: 2026-07-30 23:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2] Phase: Succeeded StartedAt: 2026-07-30 23:41:07 +0000 UTC FinishedAt: 2026-07-31 00:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:41:07 +0000 UTC FinishedAt: 2026-07-31 00:57:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:41:07 +0000 UTC FinishedAt: 2026-07-30 23:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:41:07 +0000 UTC FinishedAt: 2026-07-30 23:41:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-workflowh29qc/series-workflowh29qc-convert-artifact-1652683343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:41:17 +0000 UTC FinishedAt: 2026-07-30 23:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:41:17 +0000 UTC FinishedAt: 2026-07-30 23:57:12 +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:*1e6acfd5-0fb7-4130-b3c5-6305185df52b,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-workflowh29qc/series-workflowh29qc-convert-artifact-1652683343/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": "dafd3d22-b0d9-404a-a774-b2f9be8c7894", "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-workflowh29qc/series-workflowh29qc-build-action-604291477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:41:17 +0000 UTC FinishedAt: 2026-07-30 23:57:02 +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:*1e6acfd5-0fb7-4130-b3c5-6305185df52b,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-workflowh29qc/series-workflowh29qc-convert-artifact-1652683343/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": "dafd3d22-b0d9-404a-a774-b2f9be8c7894", "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-workflowh29qc/series-workflowh29qc-build-action-604291477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:57:12 +0000 UTC FinishedAt: 2026-07-30 23:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:57:12 +0000 UTC FinishedAt: 2026-07-30 23:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:57:12 +0000 UTC FinishedAt: 2026-07-30 23:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:57:12 +0000 UTC FinishedAt: 2026-07-30 23:57:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-workflowh29qc/series-workflowh29qc-convert-artifact-3417834910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:57:22 +0000 UTC FinishedAt: 2026-07-30 23:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:57:22 +0000 UTC FinishedAt: 2026-07-30 23:59:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dafd3d22-b0d9-404a-a774-b2f9be8c7894,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-workflowh29qc/series-workflowh29qc-build-action-604291477/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-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:59:26 +0000 UTC FinishedAt: 2026-07-30 23:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:59:26 +0000 UTC FinishedAt: 2026-07-30 23:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:59:26 +0000 UTC FinishedAt: 2026-07-31 00:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:59:26 +0000 UTC FinishedAt: 2026-07-31 00:15:37 +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:*1e6acfd5-0fb7-4130-b3c5-6305185df52b,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-workflowh29qc/series-workflowh29qc-convert-artifact-3417834910/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": "40db0ae0-690d-4004-902c-60b189a27e60", "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-workflowh29qc/series-workflowh29qc-build-action-3551638386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-30 23:59:26 +0000 UTC FinishedAt: 2026-07-31 00:15:27 +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:*1e6acfd5-0fb7-4130-b3c5-6305185df52b,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-workflowh29qc/series-workflowh29qc-convert-artifact-3417834910/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": "40db0ae0-690d-4004-902c-60b189a27e60", "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-workflowh29qc/series-workflowh29qc-build-action-3551638386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:15:37 +0000 UTC FinishedAt: 2026-07-31 00:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:15:37 +0000 UTC FinishedAt: 2026-07-31 00:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:15:37 +0000 UTC FinishedAt: 2026-07-31 00:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:15:37 +0000 UTC FinishedAt: 2026-07-31 00:17:22 +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:*40db0ae0-690d-4004-902c-60b189a27e60,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-workflowh29qc/series-workflowh29qc-build-action-3551638386/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-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:32 +0000 UTC FinishedAt: 2026-07-31 00:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:32 +0000 UTC FinishedAt: 2026-07-31 00:57:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"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:*dafd3d22-b0d9-404a-a774-b2f9be8c7894,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40db0ae0-690d-4004-902c-60b189a27e60,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-workflowh29qc/series-workflowh29qc-build-action-604291477/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-workflowh29qc/series-workflowh29qc-build-action-3551638386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:32 +0000 UTC FinishedAt: 2026-07-31 00:17:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:32 +0000 UTC FinishedAt: 2026-07-31 00:17:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"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-workflowh29qc/series-workflowh29qc-convert-artifact-692759715/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:32 +0000 UTC FinishedAt: 2026-07-31 00:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:32 +0000 UTC FinishedAt: 2026-07-31 00:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:33 +0000 UTC FinishedAt: 2026-07-31 00:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:43 +0000 UTC FinishedAt: 2026-07-31 00:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh29qc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_send","io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"26cb8ebbfaf713c82e142d08828d4d765057633b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"e574df81-b807-4f6b-bfb9-a9967e079927","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-07-31 00:17:43 +0000 UTC FinishedAt: 2026-07-31 00:57:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dafd3d22-b0d9-404a-a774-b2f9be8c7894,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40db0ae0-690d-4004-902c-60b189a27e60,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-workflowh29qc/series-workflowh29qc-build-action-604291477/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-workflowh29qc/series-workflowh29qc-build-action-3551638386/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-workflowh29qc/series-workflowh29qc-convert-artifact-692759715/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,}