Name: series-workflowg25fk Phase: Succeeded StartedAt: 2026-07-31 08:33:16 +0000 UTC FinishedAt: 2026-07-31 12:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[0] Phase: Succeeded StartedAt: 2026-07-31 08:33:16 +0000 UTC FinishedAt: 2026-07-31 08:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 08:33:16 +0000 UTC FinishedAt: 2026-07-31 08:37:03 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "f2275ff3-1764-4909-afae-3188337bd296" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xfrm_do_migrate_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggdG8gcHJldmVudCBSQ1Ugd2FybmluZ3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIHNlbmRpbmcgWEZSTSBtaWdyYXRlIHN0YXRlIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIGNvbW1hbmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzU6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTMzMzcsNyAmIzQzOzMzMzcsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggdG8gcHJldmVudCBSQ1Ugd2FybmluZ3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIHNlbmRpbmcgWEZSTSBtaWdyYXRlIHN0YXRlIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIGNvbW1hbmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzU6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjBiYTA2MTRkNjUwZjMgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0zMzM3LDcgJiM0MzszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSB4ZnJtIFBhdGNoIGFuZCBNaWdyYXRpb24gU3RhdGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluc2lkZSB0aGUgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlc2UgbG9ja3MgYXJvdW5kICp0aGF0KiBzcGVjaWZpYyBjYWxsPyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGlzbiYjMzk7dCBhbHdheXMgdGhlIG1vc3QgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGFydCwgc28gaXQgaGFzIG1lIGN1cmlvdXMuCgpUaGUgbmV4dCBzdGVwLCBmb3IgbWUsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBJdCYjMzk7cyBlaXRoZXIgY2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIG9yIHBvc3NpYmx5IHNvbWV3aGVyZSBlbHNlLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBlbHNlLCBzbyBJJiMzOTtsbCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIGFuZCBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYW5kIHdoeSB0aGVzZSBSQ1UgbG9ja3MgYXJlIGJlaW5nIGludHJvZHVjZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoaXMgcGF0Y2ggYWltcyB0byBwcmV2ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgQ2FsbCoqCgpPa2F5LCBzbyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKnVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBkb2VzIHRoaXMgY29kZSBwYXRoIGdldCBhY3RpdmF0ZWQ/KiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyBvciB1bmRlcmx5aW5nIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgbWlncmF0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHRvIHNlZSB3aGF0IHNldHMgdXAgdGhlIGNhbGwuIEkgYmV0IHRoZXJlIGFyZSBzb21lIHJlbGV2YW50IHN5c2N0bHMsIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciBuZXRsaW5rIG1lc3NhZ2VzIHRoYXQgYXJlIGNvbmZpZ3VyaW5nIHRoZSBiZWhhdmlvci4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUyOC0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyOTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MjpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBYRlJNX01TR19NSUdSQVRFX1NUQVRFIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHN0YXRlIG1pZ3JhdGlvbiB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBNeSBmaXJzdCBpbmNsaW5hdGlvbiBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBhbmQgZ2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgSSBuZWVkIHRvIGNoZWNrIG91dCBpbiBpdHMgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byB0aGF0IGAjZWxzZWAgYmxvY2sgYXJvdW5kIGxpbmUgMzUyOC4gSSBoYXZlIGEgaHVuY2ggdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgbG9naWMgZm9yIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2Ygc3RhdGUgbWlncmF0aW9uLCBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIG9yIGEgZmFsbC1iYWNrIHNjZW5hcmlvLCBpcyBsaWtlbHkgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IGJsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MjA6XHRcdHJldHVybiBlcnI7XG4zNTIxOlx0b3V0X3hjOlxuMzUyMjpcdFx0eGMtXHUwMDNla20uc3RhdGUgPSBYRlJNX1NUQVRFX0RFQUQ7XG4zNTIzOlx0XHR4ZnJtX3N0YXRlX3B1dCh4Yyk7XG4zNTI0Olx0XHR4ZnJtX3N0YXRlX3B1dCh4KTtcbjM1MjU6XHRcdHJldHVybiBlcnI7XG4zNTI2Olx0fVxuMzUyNzpcdFxuMzUyODpcdCNlbHNlXG4zNTI5Olx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4zNTMwOlx0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zNTMxOlx0e1xuMzUzMjpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtYRlJNX01TR19NSUdSQVRFX1NUQVRFIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMzUzMzpcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbjM1MzQ6XHR9XG4zNTM1Olx0XG4zNTM2Olx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4zNTM3Olx0XHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zNTM4Olx0e1xuMzUzOTpcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gTWF6ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBsaW5lIDMzNDcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGAjaWZgIHNpdHVhdGlvbiBsb29raW5nIGxpa2UgYXJvdW5kIHRoZXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29kZSBibG9ja3MgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gb3Igb3V0IGF0IHRoYXQgc3BlY2lmaWMgcG9pbnQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBpdCYjMzk7cyB3aXRoaW4gYSBuZXN0ZWQgYCNpZmAgYmxvY2suIElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGFuZCB0aGUgZGVmaW5pbmcgc3ltYm9scyBhY3RpdmUgYXQgdGhhdCBsZXZlbC4KCk15IGdvYWwgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hpY2ggY29tcGlsYXRpb24gcGF0aCB0aGlzIGxpbmUgcG90ZW50aWFsbHkgY29udHJpYnV0ZXMgdG8sIGFuZCBpZiBJIG5lZWQgdG8gYmFjayB1cCBhbmQgdW5kZXJzdGFuZCBhbnkgbG9naWMgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgZGljdGF0ZSB0aGUgYmVoYXZpb3IgYmVpbmcgZXhlY3V0ZWQgaW4gdGhhdCBhcmVhLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIHRvIHNlZSB3aGF0IHRoZSBjb25kaXRpb25hbCByZWZlcnMgdG8sIGFuZCB3aGF0IHZhcmlhYmxlcyBtaWdodCBiZSBnZXR0aW5nIGRlZmluZWQgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwbGF0Zm9ybSwgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE5ODE9c3RhdGljIGludCB2ZXJpZnlfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5ODQtXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfTUFJTjpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5ODU6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5ODYtXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfU1VCOlxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTIzNzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdXNlcnBvbGljeV90eXBlX2F0dHJzaXplKHZvaWQpXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzc4LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzNzk6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzODAtXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzODUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzg2OiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg3LXN0YXRpYyBpbnQgY29weV90b191c2VyX3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzA0Mj1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzExNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMTc6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTM2PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDItXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTQzOiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ0LXN0YXRpYyBpbnQgY29weV90b191c2VyX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyByZWxhdGVkIHRvIGBDT05GSUdfWEZSTV9NSUdSQVRFYC4gUmlnaHQsIGdvdCBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhZGRpbmcgYW4gUkNVIHJlYWQgbG9jayBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gTm93LCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IEhtbSwgeWVhaCwgYWJzb2x1dGVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBmaXggZm9yIHNvbWV0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2FzIHBvdGVudGlhbGx5IGJlaW5nIGNhbGxlZCB3aXRob3V0IHRoZSBhcHByb3ByaWF0ZSBSQ1UgcHJvdGVjdGlvbiDigJMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLCBwcm9iYWJseS4gCgpXYWl0IGEgbWludXRlLCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLi4uIHRoYXQmIzM5O3MgYSBtdWx0aWNhc3QgZnVuY3Rpb24uIE9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29udGV4dCBtYWtlcyBzZW5zZS4gVGltZSB0byBjaGVjayBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEdvdHRhIGNvbmZpcm0gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9ubG1zZ19tdWx0aWNhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0xNTk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyNi0gKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mjc6c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyOC1cdFx0XHRcdCAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjUxND1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MzktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTQwOlx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjU0MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDE6XHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzM0Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2MzI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0OC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NDk6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NTAtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5ODQ9c3RhdGljIGludCB4ZnJtX2V4cF9zdGF0ZV9ub3RpZnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk3LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5ODpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk5LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDAxPXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTQ6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BRVZFTlRTKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTUtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMTc9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNDA6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDQxLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MTAxPXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2Eoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDE1MzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNTQtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzOT1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0FDUVVJUkUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDI1NC19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDM2Mj1zdGF0aWMgaW50IHhmcm1fZXhwX3BvbGljeV9ub3RpZnkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Mzc1Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfRVhQSVJFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzYtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNzg9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3koc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NDEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDQyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NDMtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0OT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2OS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NzA6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDQ3MS1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NTI5PXN0YXRpYyBpbnQgeGZybV9zZW5kX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTQyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUkVQT1JUKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDMtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1Nzc9c3RhdGljIGludCB4ZnJtX3NlbmRfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTk2LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDU5NzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDU5OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGZvciBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHByb3Bvc2VzIGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhcm91bmQgdGhlIGNhbGwgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRoaW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyBhIHNsaWdodCBleWVicm93IHJhaXNlLiBXaHkgbm93PyBXaHkgc3BlY2lmaWNhbGx5IGhlcmU/IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgYSBwcmV0dHkgY29yZSBmdW5jdGlvbiBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHVzZWQgZm9yIHNlbmRpbmcgbmV0bGluayBtZXNzYWdlcyBhYm91dCBzZWN1cml0eSBwb2xpY3kgY2hhbmdlcy4gSSYjMzk7bSByZWFzb25hYmx5IGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlLCBhbmQgbXkgbWVtb3J5IHRlbGxzIG1lIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gcXVpdGUgYSBmZXcgcGxhY2VzICp3aXRob3V0KiBhbiBSQ1UgcmVhZCBsb2NrIGFscmVhZHkgaW4gcGxhY2UuIFRoaXMgc2VlbXMuLi4gaW5jb25zaXN0ZW50LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIG9yIGEgc2lnbiBvZiBpbXByb3BlciB1c2FnZS4gSXQgd2FycmFudHMgZGVlcGVyIGludmVzdGlnYXRpb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIGNhbGwgc2l0ZXMgb2YgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJvcG9zZWQgY2hhbmdlIGlzbiYjMzk7dCBhZGRyZXNzaW5nIGFuIGlzb2xhdGVkIGlzc3VlIHdoaWxlIGxlYXZpbmcgcG90ZW50aWFsbHkgbGFyZ2VyLCBzeXN0ZW1pYyBwcm9ibGVtcyB1bmFkZHJlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGlzdGluZyBsb2NraW5nIGFzc3VtcHRpb25zLCBhbmQgd2hlcmUgYW5kIHdoeSB0aG9zZSBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgdmlvbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MjA6XHRcbjE2MjE6XHRcdHJldHVybiBza2I7XG4xNjIyOlx0fVxuMTYyMzpcdFxuMTYyNDpcdC8qIEEgd3JhcHBlciBmb3Igbmxtc2dfbXVsdGljYXN0KCkgY2hlY2tpbmcgdGhhdCBubHNrIGlzIHN0aWxsIGF2YWlsYWJsZS5cbjE2MjU6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2suXG4xNjI2Olx0ICovXG4xNjI3Olx0c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTYyODpcdFx0XHRcdFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbjE2Mjk6XHR7XG4xNjMwOlx0XHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbjE2MzE6XHRcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbjE2MzI6XHRcbjE2MzM6XHRcdGlmICghbmxzaykge1xuMTYzNDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE2MzU6XHRcdFx0cmV0dXJuIC1FUElQRTtcbjE2MzY6XHRcdH1cbjE2Mzc6XHRcbjE2Mzg6XHRcdHh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbjE2Mzk6XHRcdGlmICh4dHIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gUkNVIFJlYWQgTG9jayBCdWcgRml4KioKCk9rYXksIHNvIHRoZSBjb2RlIGlzIHRocm93aW5nIGEgJiMzNDtNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2smIzM0OyBtZXNzYWdlLiBSaWdodCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgbWlzc2luZyBSQ1UgcmVhZCBsb2NrLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCBtaXNzaW5nIGxvY2tzIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB3aXRoIFJDVSwgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIGF0IGxlYXN0IGFubm95aW5nIFJDVSB3YXJuaW5ncy4gU28sIGZ1enppbmcgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSB1c2VkLiBMZXQmIzM5O3Mgc2VlLi4uIElzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHN0YXRpYz8gWWVwLCBpdCBpcy4gSG1tLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtZWFuIGl0JiMzOTtzIGlzb2xhdGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCB2aWEgYSBgZG9pdGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgeGZybV9saW5rYCB0YWJsZS4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYHhmcm1fbGlua2AgdGFibGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBwYXRoLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBhdGggdG8gdGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzczOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQzLVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0NDpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ1LVx0aW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHN0cnVjdCBubGF0dHIgKiosXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzg0MT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4NDUtXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgmIzQzOzFdO1xubmV0L3hmcm0veGZybV91c2VyLmM6Mzg0NjpcdGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsgKmxpbms7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ3LVx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIE1pZ3JhdGlvbiBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgWEZSTSBtaWdyYXRpb24gcHJvY2Vzcy4gVGhlIG9idmlvdXMgZW50cnkgcG9pbnQgc2VlbXMgdG8gYmUgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgdGhhdOKAmXMgd2hlcmUgdGhlIG5ldGxpbmsgbWVzc2FnZXMga2ljayB0aGluZ3Mgb2ZmLiBOb3csIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gZWl0aGVyIGB4ZnJtX2RvX21pZ3JhdGVgIG9yIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBCdXQgd2FpdCBhIHNlY29uZCwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8KCkFuZCB0aGF0IHJhaXNlcyBhIHF1ZXN0aW9uLCBjYW4gU3l6a2FsbGVyIHJlYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHk/IEl0JiMzOTtzIGdvb2QgZm9yIHN5c2NhbGxzLCB3aGljaCBhcmUgaXRzIGJyZWFkIGFuZCBidXR0ZXIsIGJ1dCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZeKAmXJlIHVzaW5nIGBGb2N1c1N5bWJvbHNgIGhlcmUgdG8gc3RlZXIgaXRzIGNvdmVyYWdlLiBJZGVhbGx5LCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmUgcG9pbnRpbmcgdG8gZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMgb3IgaW5saW5lZC4gVGhhdCB3YXksIHdlIGdldCBhIG11Y2ggYmV0dGVyIGNoYW5jZSBvZiBnb29kIGNvdmVyYWdlLgoKT2theSwgc28gZ29pbmcgYmFjayB0byBgeGZybV91c2VyX3Jjdl9tc2dgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJIG11c3QgY29uZmlybSB3aGV0aGVyIGB4ZnJtX3VzZXJfcmN2X21zZ2AgaXRzZWxmIGlzIHN0YXRpYyBvciBub3QuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIG91ciBlbnRyeSBwb2ludCBzZWxlY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM3ODU9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4NDAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODQxOnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQyLVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5Mjg9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MzItXHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5MzM6XHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTM0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNvbnNpZGVyaW5nIFBhY2tldCBSZWNlcHRpb24gaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCkhtbSwgc28gYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCB0aGUgZGlmZmVyZW50IGVudHJ5IHBvaW50cyBhbmQgcHJvY2Vzc2luZyBwYXRocyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YS4gR2l2ZW4gdGhhdCwgSSB3b25kZXIuLi4gd2hhdCBhYm91dCBgeGZybV9uZXRsaW5rX3JjdmA/IEkgbmVlZCB0byBjb25zaWRlciB0aGF0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLCBpbiB0aGUgY29udGV4dCBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgcmVjZXB0aW9uIHBhdGhzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIHNlY3VyZS4gUGVyaGFwcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIGFuZCBydWxlcyBhcmUgYXBwbGllZC4gR290dGEga2VlcCB0aGlua2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9uZXRsaW5rX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM4NDE9c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTI3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzkyODpzdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTI5LXtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjE2PXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX3VzZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MjAtXHRcdC5ncm91cHNcdD0gWEZSTU5MR1JQX01BWCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MjE6XHRcdC5pbnB1dFx0PSB4ZnJtX25ldGxpbmtfcmN2LFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYyMi1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYEZvY3VzU3ltYm9sc2AqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGJlaGF2aW5nIHN0YXRpY2FsbHksIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0IGEgbWludXRl4oCmIGlmIGBGb2N1c1N5bWJvbHNgIGFyZW4mIzM5O3QgaW5saW5lZCwgdGhleSAqY2FuKiBiZSBzdGF0aWMuIEFuZCBoZXksIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgcHJldHR5IHNpemVhYmxlIGZ1bmN0aW9uLiBJdCYjMzk7cyB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3b3VsZCBvcHRpbWl6ZSBpdCBieSBpbmxpbmluZy4gR2l2ZW4gdGhhdCBhc3N1bXB0aW9uLCBJIHJlYWxseSBzaG91bGQgY2hlY2sgdGhlIGFjdHVhbCBzaXplIG9mIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGp1c3QgdG8gYmUgc3VyZS4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoYXQgaHlwb3RoZXNpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNDc6XHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjMzNDg6XHRcdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjMzNDk6XHR7XG4zMzUwOlx0XHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xuMzM1MTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjMzNTI6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcbjMzNTM6XHRcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xuMzM1NDpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xuMzM1NTpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4zMzU2Olx0XHRpbnQgZXJyO1xuMzM1NzpcdFxuMzM1ODpcdFx0aWYgKCF1bS1cdTAwM2VpZC5zcGkpIHtcbjMzNTk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIFNQSSAweDBcJiMzNDspO1xuMzM2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNjE6XHRcdH1cbjMzNjI6XHRcbjMzNjM6XHRcdGlmICh1bS1cdTAwM2VyZXNlcnZlZCkge1xuMzM2NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Jlc2VydmVkIGZpZWxkIG11c3QgYmUgemVyb1wmIzM0Oyk7XG4zMzY1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzM2NjpcdFx0fVxuMzM2NzpcdFxuMzM2ODpcdFx0aWYgKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XG4zMzY5Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O1Vua25vd24gZmxhZ3M6IDB4JXhcJiMzNDssXG4zMzcwOlx0XHRcdFx0XHQgICB1bS1cdTAwM2VmbGFncyBcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUyk7XG4zMzcxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzM3MjpcdFx0fVxuMzM3MzpcdFxuMzM3NDpcdFx0ZXJyID0gdmVyaWZ5X3hmcm1fZmFtaWx5KHVtLVx1MDAzZW5ld19mYW1pbHksIGV4dGFjayk7XG4zMzc1Olx0XHRpZiAoZXJyKVxuMzM3NjpcdFx0XHRyZXR1cm4gZXJyO1xuMzM3NzpcdFxuMzM3ODpcdFx0aWYgKCEodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcbjMzNzk6XHRcdFx0ZXJyID0gdmVyaWZ5X3NlbGVjdG9yX3ByZWZpeGxlbih1bS1cdTAwM2VuZXdfc2VsLmZhbWlseSxcbjMzODA6XHRcdFx0XHRcdFx0XHRcdTAwMjZ1bS1cdTAwM2VuZXdfc2VsLCBleHRhY2spO1xuMzM4MTpcdFx0XHRpZiAoZXJyKVxuMzM4MjpcdFx0XHRcdHJldHVybiBlcnI7XG4zMzgzOlx0XHR9XG4zMzg0Olx0XG4zMzg1Olx0XHRjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKFx1MDAyNm0sIHVtKTtcbjMzODY6XHRcbjMzODc6XHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG0ub2xkX21hcmsudiBcdTAwMjYgbS5vbGRfbWFyay5tLFxuMzM4ODpcdFx0XHRcdCAgICAgIFx1MDAyNnVtLVx1MDAzZWlkLmRhZGRyLCB1bS1cdTAwM2VpZC5zcGksXG4zMzg5Olx0XHRcdFx0ICAgICAgdW0tXHUwMDNlaWQucHJvdG8sIHVtLVx1MDAzZWlkLmZhbWlseSk7XG4zMzkwOlx0XHRpZiAoIXgpIHtcbjMzOTE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDYW4gbm90IGZpbmQgc3RhdGVcJiMzNDspO1xuMzM5MjpcdFx0XHRyZXR1cm4gLUVTUkNIO1xuMzM5MzpcdFx0fVxuMzM5NDpcdFxuMzM5NTpcdFx0aWYgKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfVVBEQVRFX0gySF9TRUwpIHtcbjMzOTY6XHRcdFx0dTggcHJlZml4bGVuID0gKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xuMzM5NzpcdFxuMzM5ODpcdFx0XHRpZiAoeC1cdTAwM2VzZWwucHJlZml4bGVuX3MgIT0geC1cdTAwM2VzZWwucHJlZml4bGVuX2QgfHxcbjMzOTk6XHRcdFx0ICAgIHgtXHUwMDNlc2VsLnByZWZpeGxlbl9kICE9IHByZWZpeGxlbiB8fFxuMzQwMDpcdFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZXNlbC5kYWRkciwgXHUwMDI2eC1cdTAwM2VpZC5kYWRkciwgeC1cdTAwM2Vwcm9wcy5mYW1pbHkpIHx8XG4zNDAxOlx0XHRcdCAgICAheGZybV9hZGRyX2VxdWFsKFx1MDAyNngtXHUwMDNlc2VsLnNhZGRyLCBcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLCB4LVx1MDAzZXByb3BzLmZhbWlseSkpIHtcbjM0MDI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zNDAzOlx0XHRcdFx0XHQgICAgICAgXCYjMzQ7U0Egc2VsZWN0b3IgaXMgbm90IGEgc2luZ2xlLWhvc3QgbWF0Y2ggZm9yIFNBIGFkZHJlc3Nlc1wmIzM0Oyk7XG4zNDA0Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjM0MDU6XHRcdFx0XHRnb3RvIG91dDtcbjM0MDY6XHRcdFx0fVxuMzQwNzpcdFx0fVxuMzQwODpcdFxuMzQwOTpcdFx0aWYgKGF0dHJzW1hGUk1BX0VOQ0FQXSkge1xuMzQxMDpcdFx0XHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcbjM0MTE6XHRcdFx0aWYgKG0uZW5jYXAtXHUwMDNlZW5jYXBfdHlwZSA9PSAwKSB7XG4zNDEyOlx0XHRcdFx0bS5lbmNhcCA9IE5VTEw7IC8qIHNlbnRpbmVsOiByZW1vdmUgZW5jYXAgKi9cbjM0MTM6XHRcdFx0fSBlbHNlIGlmIChtLmVuY2FwLVx1MDAzZWVuY2FwX3R5cGUgIT0gVURQX0VOQ0FQX0VTUElOVURQKSB7XG4zNDE0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIHR5cGVcJiMzNDspO1xuMzQxNTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDE2Olx0XHRcdFx0Z290byBvdXQ7XG4zNDE3Olx0XHRcdH1cbjM0MTg6XHRcdH0gZWxzZSB7XG4zNDE5Olx0XHRcdG0uZW5jYXAgPSB4LVx1MDAzZWVuY2FwOyAvKiBvbWl0LXRvLWluaGVyaXQgKi9cbjM0MjA6XHRcdH1cbjM0MjE6XHRcbjM0MjI6XHRcdGlmIChhdHRyc1tYRlJNQV9NVElNRVJfVEhSRVNIXSkge1xuMzQyMzpcdFx0XHRlcnIgPSB2ZXJpZnlfbXRpbWVyX3RocmVzaCghIW0uZW5jYXAsIHgtXHUwMDNlZGlyLCBleHRhY2spO1xuMzQyNDpcdFx0XHRpZiAoZXJyKVxuMzQyNTpcdFx0XHRcdGdvdG8gb3V0O1xuMzQyNjpcdFx0fVxuMzQyNzpcdFxuMzQyODpcdFx0aWYgKG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sIDApIFx1MDAyNlx1MDAyNiAhbS5lbmNhcCkge1xuMzQyOTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zNDMwOlx0XHRcdFx0ICAgICAgIFwmIzM0O05BVF9LRUVQQUxJVkVfSU5URVJWQUwgcmVxdWlyZXMgZW5jYXBzdWxhdGlvblwmIzM0Oyk7XG4zNDMxOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDMyOlx0XHRcdGdvdG8gb3V0O1xuMzQzMzpcdFx0fVxuMzQzNDpcdFxuMzQzNTpcdFx0aWYgKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSkge1xuMzQzNjpcdFx0XHRtLnh1byA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSk7XG4zNDM3Olx0XHR9IGVsc2Uge1xuMzQzODpcdFx0XHRib29sIGluaGVyaXRfb2ZmbG9hZCA9ICEodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9DTEVBUl9PRkZMT0FEKTtcbjM0Mzk6XHRcbjM0NDA6XHRcdFx0aWYgKGluaGVyaXRfb2ZmbG9hZCBcdTAwMjZcdTAwMjYgeC1cdTAwM2V4c28uZGV2KSB7XG4zNDQxOlx0XHRcdFx0eHNvX3RvX3h1byhcdTAwMjZ4LVx1MDAzZXhzbywgXHUwMDI2eHVvKTtcbjM0NDI6XHRcdFx0XHRtLnh1byA9IFx1MDAyNnh1bztcbjM0NDM6XHRcdFx0fVxuMzQ0NDpcdFx0fVxuMzQ0NTpcdFxuMzQ0NjpcdFx0aWYgKGF0dHJzW1hGUk1BX01BUktdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnVuY3Rpb24gSW5saW5pbmcgYW5kIENvbmZpZyBEZXBlbmRlbmNpZXMgaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyBwcmV0dHkgc2l6YWJsZSwgc28gaW5saW5pbmcgaXQgc2VlbXMgY29tcGxldGVseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBHaXZlbiBpdHMgc2l6ZSwgaXQgbWFrZXMgc2Vuc2UgdG8gdXNlIGl0IGFzIHRoZSBmb2N1cyBzeW1ib2wgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIEFsc28sIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSBhIGdvb2QgY2FuZGlkYXRlIHRvbywgc28gbGV0JiMzOTtzIGNoZWNrIGl0cyBwcm9wZXJ0aWVzLiBBaCwgZ29vZCwgaXQmIzM5O3Mgc3RhdGljLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgaW5saW5lZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlLCBhbmQgdGhhdCYjMzk7cyBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBUaGlzIHJhaXNlcyB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdCAqbWlnaHQqIGJlIGlubGluZWQuCgpIb3dldmVyLCBhZnRlciBhIGNsb3NlciBsb29rLCBsZXQmIzM5O3Mgc3RpY2sgd2l0aCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhcyB0aGUgZm9jdXMuIFdhaXQgYSBtaW51dGUuLi4gSSByZWNhbGwgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhY3R1YWxseSBjYWxsZWQgaW5kaXJlY3RseSB2aWEgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuIFRoYXQgZGVmaW5pdGl2ZWx5IHJ1bGVzIG91dCBhbnkgY2hhbmNlIG9mIGl0IGJlaW5nIGlubGluZWQsIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIGFsd2F5cyBwcmVjbHVkZSBpbmxpbmluZy4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIENsZWFybHksIGBDT05GSUdfWEZSTV9NSUdSQVRFYCBpcyBhIHByZXJlcXVpc2l0ZS4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSwgdGhvdWdoPyBZZXMsIGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSBpZiBgQ09ORklHX1hGUk1fVVNFUmAgY29tZXMgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipYRlJNIE1pZ3JhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYFhGUk1fTUlHUkFURWAgZmVhdHVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyBgbmV0L3hmcm0vS2NvbmZpZ2AsIHJpZ2h0PyBJJiMzOTtsbCBoZWFkIG92ZXIgdGhlcmUgYW5kIHRha2UgYSBsb29rLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBjbGVhcmx5IGRvY3VtZW50ZWQsIG1heWJlIHdpdGggc29tZSBjb21tZW50cyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIGl0LCB0aGUgc2NlbmFyaW9zIHdoZXJlIGl0JiMzOTtzIHJlbGV2YW50LCBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiBJIGFtIG1pc3NpbmcgYSBsYXJnZXIgY29udGV4dCB0aGF0IEkgaGF2ZSBmb3Jnb3R0ZW4uIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgaW4gdGhlc2UgdHlwZXMgb2YgaW52ZXN0aWdhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFx0ICBTdXBwb3J0IHN1YiBwb2xpY3kgZm9yIGRldmVsb3BlcnMuIEJ5IHVzaW5nIHN1YiBwb2xpY3kgd2l0aCBtYWluXG4gIDU2Olx0XHQgIG9uZSwgdHdvIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIHBhY2tldCBhdCBvbmNlLlxuICA1NzpcdFx0ICBQb2xpY3kgd2hpY2ggbGl2ZXMgc2hvcnRlciB0aW1lIGluIGtlcm5lbCBzaG91bGQgYmUgYSBzdWIuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYwOlx0XG4gIDYxOlx0Y29uZmlnIFhGUk1fTUlHUkFURVxuICA2MjpcdFx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcbiAgNjY6XHRcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxuICA2NzpcdFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cbiAgNjg6XHRcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cbiAgNjk6XHRcbiAgNzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzE6XHRcbiAgNzI6XHRjb25maWcgWEZSTV9TVEFUSVNUSUNTXG4gIDczOlx0XHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbiAgNzQ6XHRcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhGUk0gRGVwZW5kZW5jeSBJbnF1aXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBYRlJNX01JR1JBVEVgIG9wdGlvbiwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYFhGUk1gLiBUaGF0JiMzOTtzIG5vdCBzdXJwcmlzaW5nLCByZWFsbHkuIEJ1dCB3aGF0IGFib3V0IGBYRlJNX1VTRVJgPyBJcyB0aGVyZSBhIGRpcmVjdCBvciBpbmRpcmVjdCByZWxhdGlvbnNoaXAgdGhlcmU/IEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50by4KCkxldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgY2hhbmdlIGlzIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuICBPa2F5LCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgZGV0YWlscyBvbiBob3cgdGhlc2UgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGxpbmtlZCB0b2dldGhlciwgYW5kIHdoZXRoZXIgYFhGUk1fVVNFUmAgbWlnaHQgYmUgaW52b2x2ZWQgd2l0aCBgWEZSTV9NSUdSQVRFYCBpbiBhIHJlbGV2YW50IHdheS4gVGltZSB0byBwYXJzZSB0aGF0IE1ha2VmaWxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSAmIzQzOz0geGZybV9hbGdvLm9cbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICYjNDM7PSB4ZnJtX3VzZXIub1xubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWEZSTSBVc2VyLVNwYWNlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYCBhY3RpdmF0ZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIE15IGluc3RpbmN0cyB0ZWxsIG1lIGl0JiMzOTtzIG5vdCBzaW1wbHkgYW4gaXNvbGF0ZWQgc2V0dGluZy4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBYRlJNX1VTRVJgLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGp1bXAgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBhY3RpdmF0aW9uIGhhcyB3aXRoaW4gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBDT05GSUdfWEZSTV9VU0VSYCBtaWdodCBiZSBnYXRpbmcgc29tZSBvdGhlciBpbXBvcnRhbnQgZmVhdHVyZXMgb3Igc2V0dGluZyB1cCBhIHByZXJlcXVpc2l0ZSBjaGFpbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgY3VycmVudCBhc3N1bXB0aW9ucyBhcmUgcmlnaHQsIG9yIGlmIHRoZXJlJiMzOTtzIG1vcmUgdG8gY29uc2lkZXIgd2l0aCB0aGF0IG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fVVNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEZXBlbmRlbmNpZXMsIERlcGVuZGVuY2llcywgRXZlcnl3aGVyZSEqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYFhGUk1fVVNFUmAgaGVyZS4gSXQgc2VlbXMgcHJldHR5IG9idmlvdXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byByZWx5IG9uIGJvdGggYElORVRgIGFuZCB0aGUgY29yZSBgWEZSTWAgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byBiZSBzdXJlLiBNeSBuZXh0IHN0ZXAgdGhlbiBpcyBzdHJhaWdodGZvcndhcmQ7IGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBleHBsaWNpdGx5IHZlcmlmeSB0aG9zZSBgWEZSTV9VU0VSYCBkZXBlbmRlbmNpZXMuIE5vIGFzc3VtcHRpb25zLCBqdXN0IHNvbGlkIHZlcmlmaWNhdGlvbiwgc28gSSBkb27igJl0IHJ1biBpbnRvIGFueSB1bmV4cGVjdGVkIHBpdGZhbGxzIGxhdGVyIG9uLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICAyMTpcdFxuICAyMjpcdGlmIElORVRcbiAgMjM6XHRjb25maWcgWEZSTV9VU0VSXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4gIDI1Olx0XHRzZWxlY3QgWEZSTV9BTEdPXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAgMjg6XHRcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXHUwMDI2XHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcdTAwMjZcdTAwMjYgXFxcbiAgMzU6XHRcdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuICAzNjpcdFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzc6XHRcdGhlbHBcbiAgMzg6XHRcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXG4gIDM5Olx0XHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjA0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFhGUk0gTWlncmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFhGUk1fVVNFUmAgYW5kIGBYRlJNX01JR1JBVEVgIHNpdHVhdGlvbiwgYW5kIGl0IHNlZW1zIHRoZXkgYm90aCBsaXZlIHdpdGhpbiB0aGUgYGlmIElORVRgIGNvbmRpdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHdlIGRlZmluaXRlbHkgbmVlZCB0byBlbmFibGUgYm90aCBvZiB0aGVtLiBUaGV5JiMzOTtyZSBib3RoIGJvb2wvdHJpc3RhdGUsIHNvIGFkZGluZyB0aGVtIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgpOb3csIHRoZSBjcnVjaWFsIHBhcnQgaXMgaWRlbnRpZnlpbmcgYSBzdWl0YWJsZSBmb2N1cyBzeW1ib2wgZm9yIHN5emthbGxlci4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBCdXQsIHdhaXQsIHRoYXQmIzM5O3MgYSAqc3RhdGljKiBmdW5jdGlvbi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gTHVja2lseSwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlubGluZWQ/IExldCYjMzk7cyBjaGVjay4gQWgsIGdvb2QuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuCgpgYGBjCnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHsKCWludCAoKmRvaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBubG1zZ2hkciAqLCBzdHJ1Y3QgbmxhdHRyICoqLAoJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICopOwoJaW50ICgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKik7CglpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqKTsKCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpubGFfcG9sOwoJaW50IG5sYV9tYXg7Cn0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHsKLi4uCglbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZSB9LAouLi4KfTsKYGBgCgpTaW5jZSBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgaXQgKmNhbm5vdCogYmUgY29tcGxldGVseSBpbmxpbmVkLiBBdCBsZWFzdCBhbiBvdXQtb2YtbGluZSBjb3B5ICptdXN0KiBleGlzdC4gVGhpcyBtZWFucyBpdCB3aWxsIGhhdmUgYSBzeW1ib2wgaW4gdGhlIGtlcm5lbCBpbWFnZSwgc29tZXRoaW5nIGxpa2UgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgb3IgcGVyaGFwcyBgeGZybV9kb19taWdyYXRlX3N0YXRlLmlzcmEuMGAsIGFuZCBzeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgbWF0Y2ggdGhhdC4KCkkmIzM5O20gdGhpbmtpbmcgbm93IGFib3V0IG90aGVyIHBvdGVudGlhbCBmdW5jdGlvbnMsIHN1Y2ggYXMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSXQgKmlzKiBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCwgc28gdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGF0IGl0IGlzIGlubGluZWQuIFRoZW4sIGxldCYjMzk7cyBsb29rIGF0IGB4ZnJtX25sbXNnX211bHRpY2FzdGAuICBZZXMsIGl0IGlzIGV4cGxpY2l0bHkgbWFya2VkIGBpbmxpbmVgLiBTbywgaXQgbG9va3MgbGlrZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgYmVzdCBmb2N1cyBzeW1ib2wuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgY29uc2lkZXJlZC4gT2theSwgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBhbHNvIHN0YXRpYy4gTGV0IG1lIGp1c3QgY2hlY2sgdGhlIHNpemUgb2YgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMyMjpcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuMzMyMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbjMzMjQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4zMzI1Olx0XHRcdFx0XHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXG4zMzI2Olx0e1xuMzMyNzpcdFx0aW50IGVycjtcbjMzMjg6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4zMzI5Olx0XG4zMzMwOlx0XHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUobSwgZGlyKSwgR0ZQX0FUT01JQyk7XG4zMzMxOlx0XHRpZiAoIXNrYilcbjMzMzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMzMzOlx0XG4zMzM0Olx0XHRlcnIgPSBidWlsZF9taWdyYXRlX3N0YXRlKHNrYiwgdW0sIG0sIGRpciwgcG9ydGlkLCBzZXEpO1xuMzMzNTpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMzMzNjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjMzMzc6XHRcdFx0cmV0dXJuIGVycjtcbjMzMzg6XHRcdH1cbjMzMzk6XHRcbjMzNDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMzNDE6XHRcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4zMzQyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMzNDM6XHRcbjMzNDQ6XHRcdHJldHVybiBlcnI7XG4zMzQ1Olx0fVxuMzM0NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc3NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBSQ1UgTG9jayBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGEgcmVsYXRpdmVseSBzbWFsbCBhcmVhLiBUaGUgZnVuY3Rpb24gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hhdCB0aGUgYWN0dWFsIHNjb3BlIG9mIGltcGFjdCBtaWdodCBiZS4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBmdW5jdGlvbiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIGRlY2VudCBzaXplIGFuZCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LgoKTGV0IG1lIGNpcmNsZSBiYWNrIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZm9yIGEgbW9tZW50LiBSaWdodCwgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRoaW4gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24uIEFoLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZml4ISBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgbWlzc2luZyBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBjcml0aWNhbC4gQSBtaXNzaW5nIGxvY2sgaGVyZSBjb3VsZCBlYXNpbHkgbGVhZCB0byBSQ1Ugd2FybmluZ3Mgb3IsIGV2ZW4gd29yc2UsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBkYXRhIGludGVncml0eSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uCgpUbyByZXBsaWNhdGUgdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4KClRoZSBlc3NlbmNlIG9mIHRoZSBmaXggaXMgdG8gaW5zZXJ0IHRoZSBtaXNzaW5nIFJDVSByZWFkIGxvY2sgYXJvdW5kIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2hlbiBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBSQ1UgaXNzdWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBJIHRoaW5rIGl0JiMzOTtzIGltcG9ydGFudCB0byB2ZXJpZnkgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBpbmRlZWQgdGhlIHNvbGUgY2FsbGVyIG9mIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIGF0IGxlYXN0IGZyb20gdGhlIG1haW4gY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwNQoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIGV2aWRlbmNlIHBvaW50cyB0byB0aGlzIGJlaW5nIHRoZSBvbmx5IGNhbGxlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeS4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzLCBhcyB0aGlzIGlzIGEga25vd24gYXJlYSBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4KCmBYRlJNYCBpcyBkZWZpbml0ZWx5IHNlbGVjdGVkIGR1ZSB0byBgSU5FVGAsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3csIGBYRlJNX1VTRVJgIGRlcGVuZHMgb24gYElORVRgIGFzIHdlbGwsIGFzIGV4cGVjdGVkLiBBbmQgb2YgY291cnNlLCBgWEZSTV9NSUdSQVRFYCByZWxpZXMgb24gYFhGUk1gLiBDb25zaWRlcmluZyB0aG9zZSByZWxhdGlvbnNoaXBzLCBpdCBzZWVtcyB0aGF0IHNlbGVjdGluZyBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gc2F0aXNmeSBhbGwgZGVwZW5kZW5jaWVzLgoKVGhhdCBzZWVtcyBsaWtlIGEgc2FmZSBiZXQuIFNvLCBub3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MDguOTEwMTgwNTk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk4MzMzNDcxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCB0byBwcmV2ZW50IFJDVSB3YXJuaW5ncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gc2VuZGluZyBYRlJNIG1pZ3JhdGUgc3RhdGUgbmV0bGluayBtZXNzYWdlcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgY29tbWFuZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MDguOTEwMTg5Njc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIyOTkzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjM1OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4wYmEwNjE0ZDY1MGYzIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMzMzNyw3ICszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTowOS4zNjM0NDg4NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5OTM4MDA2NTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzU6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4wYmEwNjE0ZDY1MGYzIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMzMzNyw3ICszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjA5LjM2MzQ1MDY5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDA3ODAzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIHhmcm0gUGF0Y2ggYW5kIE1pZ3JhdGlvbiBTdGF0ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaW5zaWRlIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoeSB0aGVzZSBsb2NrcyBhcm91bmQgKnRoYXQqIHNwZWNpZmljIGNhbGw/IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXNuJ3QgYWx3YXlzIHRoZSBtb3N0IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhcnQsIHNvIGl0IGhhcyBtZSBjdXJpb3VzLlxuXG5UaGUgbmV4dCBzdGVwLCBmb3IgbWUsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuIEl0J3MgZWl0aGVyIGNhbGxlZCBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLCBvciBwb3NzaWJseSBzb21ld2hlcmUgZWxzZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgZWxzZSwgc28gSSdsbCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIGFuZCBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyBhbmQgd2h5IHRoZXNlIFJDVSBsb2NrcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhpcyBwYXRjaCBhaW1zIHRvIHByZXZlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToxMy43MDQyMzU1NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NjYwMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzIyOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MTE6XFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXFx1MDAyNm0sIHhjLVxcdTAwM2VkaXIsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cXHRcXHRcXHRcXHQgICAgICBubGgtXFx1MDAzZW5sbXNnX3BpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToxMy45NDM5MDA4NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMzMDQwMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgQ2FsbCoqXG5cbk9rYXksIHNvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgZG9lcyB0aGlzIGNvZGUgcGF0aCBnZXQgYWN0aXZhdGVkPyogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24ga25vYnMgb3IgdW5kZXJseWluZyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIG1pZ3JhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHRvIHNlZSB3aGF0IHNldHMgdXAgdGhlIGNhbGwuIEkgYmV0IHRoZXJlIGFyZSBzb21lIHJlbGV2YW50IHN5c2N0bHMsIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciBuZXRsaW5rIG1lc3NhZ2VzIHRoYXQgYXJlIGNvbmZpZ3VyaW5nIHRoZSBiZWhhdmlvci4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjE3LjQ3Njk1NzU0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTU2ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI5OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODI6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjE3LjU2NjUzMTg1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjY2NDc4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFhGUk1fTVNHX01JR1JBVEVfU1RBVEUgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGEgc3RhdGUgbWlncmF0aW9uIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIE15IGZpcnN0IGluY2xpbmF0aW9uIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIGFuZCBnaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZXJlJ3Mgc29tZXRoaW5nIHNwZWNpZmljIEkgbmVlZCB0byBjaGVjayBvdXQgaW4gaXRzIGhhbmRsaW5nLiBJJ20gZ29pbmcgdG8ganVtcCB0byB0aGF0IGAjZWxzZWAgYmxvY2sgYXJvdW5kIGxpbmUgMzUyOC4gSSBoYXZlIGEgaHVuY2ggdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFzcGVjdCBvZiBzdGF0ZSBtaWdyYXRpb24sIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcgb3IgYSBmYWxsLWJhY2sgc2NlbmFyaW8sIGlzIGxpa2VseSBpbXBsZW1lbnRlZC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGF0IGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MjAuNzkzMTgxOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzUyMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjM1MjE6XFx0b3V0X3hjOlxcbjM1MjI6XFx0XFx0eGMtXFx1MDAzZWttLnN0YXRlID0gWEZSTV9TVEFURV9ERUFEO1xcbjM1MjM6XFx0XFx0eGZybV9zdGF0ZV9wdXQoeGMpO1xcbjM1MjQ6XFx0XFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuMzUyNTpcXHRcXHRyZXR1cm4gZXJyO1xcbjM1MjY6XFx0fVxcbjM1Mjc6XFx0XFxuMzUyODpcXHQjZWxzZVxcbjM1Mjk6XFx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMzUzMDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzUzMTpcXHR7XFxuMzUzMjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJYRlJNX01TR19NSUdSQVRFX1NUQVRFIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4zNTMzOlxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuMzUzNDpcXHR9XFxuMzUzNTpcXHRcXG4zNTM2OlxcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbjM1Mzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzUzODpcXHR7XFxuMzUzOTpcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyMC43OTM0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjY5NzU5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIE1hemUqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIGxpbmUgMzM0Ny4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBgI2lmYCBzaXR1YXRpb24gbG9va2luZyBsaWtlIGFyb3VuZCB0aGVyZT9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvZGUgYmxvY2tzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIG9yIG91dCBhdCB0aGF0IHNwZWNpZmljIHBvaW50LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBpdCdzIHdpdGhpbiBhIG5lc3RlZCBgI2lmYCBibG9jay4gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoaWVyYXJjaHkgYW5kIHRoZSBkZWZpbmluZyBzeW1ib2xzIGFjdGl2ZSBhdCB0aGF0IGxldmVsLlxuXG5NeSBnb2FsIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoaWNoIGNvbXBpbGF0aW9uIHBhdGggdGhpcyBsaW5lIHBvdGVudGlhbGx5IGNvbnRyaWJ1dGVzIHRvLCBhbmQgaWYgSSBuZWVkIHRvIGJhY2sgdXAgYW5kIHVuZGVyc3RhbmQgYW55IGxvZ2ljIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGRpY3RhdGUgdGhlIGJlaGF2aW9yIGJlaW5nIGV4ZWN1dGVkIGluIHRoYXQgYXJlYS4gSSB3aWxsIGFsc28gYmUgbG9va2luZyB0byBzZWUgd2hhdCB0aGUgY29uZGl0aW9uYWwgcmVmZXJzIHRvLCBhbmQgd2hhdCB2YXJpYWJsZXMgbWlnaHQgYmUgZ2V0dGluZyBkZWZpbmVkIGluIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcGxhdGZvcm0sIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgc2hvdWxkIGdpdmUgbWUgZW5vdWdoIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjI0LjQ2MDQ0ODgxMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MzY1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0xMjA0PXN0YXRpYyB2b2lkIHhzb190b194dW9faWZpbmRleChjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxNDojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTk4MT1zdGF0aWMgaW50IHZlcmlmeV9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTg0LVxcdGNhc2UgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOlxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5ODU6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTg2LVxcdGNhc2UgWEZSTV9QT0xJQ1lfVFlQRV9TVUI6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzNzgte1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzNzk6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgwLVxcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlKSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzODY6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg3LXN0YXRpYyBpbnQgY29weV90b191c2VyX3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQyPXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzExNzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MzY9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDM6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ0LXN0YXRpYyBpbnQgY29weV90b191c2VyX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MjQuNjU0ODIyNjcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDIzNTUxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIHJlbGF0ZWQgdG8gYENPTkZJR19YRlJNX01JR1JBVEVgLiBSaWdodCwgZ290IGl0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFkZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLiBOb3csIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZz8gSG1tLCB5ZWFoLCBhYnNvbHV0ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZml4IGZvciBzb21ldGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdhcyBwb3RlbnRpYWxseSBiZWluZyBjYWxsZWQgd2l0aG91dCB0aGUgYXBwcm9wcmlhdGUgUkNVIHByb3RlY3Rpb24g4oCTIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbywgcHJvYmFibHkuIFxuXG5XYWl0IGEgbWludXRlLCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLi4uIHRoYXQncyBhIG11bHRpY2FzdCBmdW5jdGlvbi4gT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29udGV4dCBtYWtlcyBzZW5zZS4gVGltZSB0byBjaGVjayBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEdvdHRhIGNvbmZpcm0gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyOC43NTcxODA0NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzc3Mzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25sbXNnX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0xNTk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjI2LSAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mjc6c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjgtXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1MTQ9c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MzktXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDA6XFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzIyPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0MTpcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjMyPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0OC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ5OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NTAtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk4ND1zdGF0aWMgaW50IHhmcm1fZXhwX3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTk4OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5OS19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDAxPXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTQ6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUVWRU5UUyk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxNS19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDE3PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2FfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDQwOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDQxLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQxMDE9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MTUzOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTU0LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzOT1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNTItXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MzpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BQ1FVSVJFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjU0LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNjI9c3RhdGljIGludCB4ZnJtX2V4cF9wb2xpY3lfbm90aWZ5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDM3NTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzYtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDM3OD1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NDI6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQzLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0OT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDY5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NzA6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDcxLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDUyOT1zdGF0aWMgaW50IHhmcm1fc2VuZF9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90byxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU0MjpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9SRVBPUlQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDMtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDU3Nz1zdGF0aWMgaW50IHhmcm1fc2VuZF9tYXBwaW5nKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB4ZnJtX2FkZHJlc3NfdCAqaXBhZGRyLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU5Ni1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTk3OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyOC44NzQ5NjAwNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4ODEzMjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGZvciBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggcHJvcG9zZXMgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFyb3VuZCB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIGEgc2xpZ2h0IGV5ZWJyb3cgcmFpc2UuIFdoeSBub3c/IFdoeSBzcGVjaWZpY2FsbHkgaGVyZT8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbSwgdXNlZCBmb3Igc2VuZGluZyBuZXRsaW5rIG1lc3NhZ2VzIGFib3V0IHNlY3VyaXR5IHBvbGljeSBjaGFuZ2VzLiBJJ20gcmVhc29uYWJseSBmYW1pbGlhciB3aXRoIHRoZSBjb2RlYmFzZSwgYW5kIG15IG1lbW9yeSB0ZWxscyBtZSB0aGF0IGl0J3MgY2FsbGVkIGZyb20gcXVpdGUgYSBmZXcgcGxhY2VzICp3aXRob3V0KiBhbiBSQ1UgcmVhZCBsb2NrIGFscmVhZHkgaW4gcGxhY2UuIFRoaXMgc2VlbXMuLi4gaW5jb25zaXN0ZW50LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIG9yIGEgc2lnbiBvZiBpbXByb3BlciB1c2FnZS4gSXQgd2FycmFudHMgZGVlcGVyIGludmVzdGlnYXRpb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIGNhbGwgc2l0ZXMgb2YgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJvcG9zZWQgY2hhbmdlIGlzbid0IGFkZHJlc3NpbmcgYW4gaXNvbGF0ZWQgaXNzdWUgd2hpbGUgbGVhdmluZyBwb3RlbnRpYWxseSBsYXJnZXIsIHN5c3RlbWljIHByb2JsZW1zIHVuYWRkcmVzc2VkLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGlzdGluZyBsb2NraW5nIGFzc3VtcHRpb25zLCBhbmQgd2hlcmUgYW5kIHdoeSB0aG9zZSBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgdmlvbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTozNy41NjMwOTYyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MjA6XFx0XFxuMTYyMTpcXHRcXHRyZXR1cm4gc2tiO1xcbjE2MjI6XFx0fVxcbjE2MjM6XFx0XFxuMTYyNDpcXHQvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuXFxuMTYyNTpcXHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2suXFxuMTYyNjpcXHQgKi9cXG4xNjI3OlxcdHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNjI4OlxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXFxuMTYyOTpcXHR7XFxuMTYzMDpcXHRcXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXFx1MDAzZXhmcm0ubmxzayk7XFxuMTYzMTpcXHRcXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XFxuMTYzMjpcXHRcXG4xNjMzOlxcdFxcdGlmICghbmxzaykge1xcbjE2MzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTYzNTpcXHRcXHRcXHRyZXR1cm4gLUVQSVBFO1xcbjE2MzY6XFx0XFx0fVxcbjE2Mzc6XFx0XFxuMTYzODpcXHRcXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxuMTYzOTpcXHRcXHRpZiAoeHRyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjM3LjU2MzMyMjE0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIxNDM4NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBSQ1UgUmVhZCBMb2NrIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpcyB0aHJvd2luZyBhIFwiTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrXCIgbWVzc2FnZS4gUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIG1pc3NpbmcgUkNVIHJlYWQgbG9jay4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgbWlzc2luZyBsb2NrcyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgd2l0aCBSQ1UsIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBmb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBhdCBsZWFzdCBhbm5veWluZyBSQ1Ugd2FybmluZ3MuIFNvLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYS5cblxuVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSB1c2VkLiBMZXQncyBzZWUuLi4gSXMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgc3RhdGljPyBZZXAsIGl0IGlzLiBIbW0sIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCdzIGlzb2xhdGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIHZpYSBhIGBkb2l0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIGB4ZnJtX2xpbmtgIHRhYmxlLiBPa2F5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGB4ZnJtX2xpbmtgIHRhYmxlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgcGF0aC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIHRvIHRha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0MS44ODQ3NjQwMjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTIzNzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzczOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYKzFdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ1LVxcdGludCAoKmRvaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBubG1zZ2hkciAqLCBzdHJ1Y3QgbmxhdHRyICoqLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzg0MT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzg0NS1cXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgrMV07XFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzg0NjpcXHRjb25zdCBzdHJ1Y3QgeGZybV9saW5rICpsaW5rO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4NDctXFx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjQyLjAxMDAwNjM0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk5OTIzNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWEZSTSBNaWdyYXRpb24gRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBYRlJNIG1pZ3JhdGlvbiBwcm9jZXNzLiBUaGUgb2J2aW91cyBlbnRyeSBwb2ludCBzZWVtcyB0byBiZSBgeGZybV91c2VyX3Jjdl9tc2dgLCB0aGF04oCZcyB3aGVyZSB0aGUgbmV0bGluayBtZXNzYWdlcyBraWNrIHRoaW5ncyBvZmYuIE5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBlaXRoZXIgYHhmcm1fZG9fbWlncmF0ZWAgb3IgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXNuJ3QgaXQ/XG5cbkFuZCB0aGF0IHJhaXNlcyBhIHF1ZXN0aW9uLCBjYW4gU3l6a2FsbGVyIHJlYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHk/IEl0J3MgZ29vZCBmb3Igc3lzY2FsbHMsIHdoaWNoIGFyZSBpdHMgYnJlYWQgYW5kIGJ1dHRlciwgYnV0IEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdl4oCZcmUgdXNpbmcgYEZvY3VzU3ltYm9sc2AgaGVyZSB0byBzdGVlciBpdHMgY292ZXJhZ2UuIElkZWFsbHksIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBwb2ludGluZyB0byBmdW5jdGlvbnMgdGhhdCBhcmVuJ3Qgc3RhdGljIG9yIGlubGluZWQuIFRoYXQgd2F5LCB3ZSBnZXQgYSBtdWNoIGJldHRlciBjaGFuY2Ugb2YgZ29vZCBjb3ZlcmFnZS5cblxuT2theSwgc28gZ29pbmcgYmFjayB0byBgeGZybV91c2VyX3Jjdl9tc2dgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJIG11c3QgY29uZmlybSB3aGV0aGVyIGB4ZnJtX3VzZXJfcmN2X21zZ2AgaXRzZWxmIGlzIHN0YXRpYyBvciBub3QuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIG91ciBlbnRyeSBwb2ludCBzZWxlY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjQ3LjMwOTkzMjY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM1Njc5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9Mzc4NT1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4NDE6c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQyLVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzkyOD1zdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTMyLVxcdG11dGV4X2xvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX2NmZ19tdXRleCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzkzMzpcXHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcXHUwMDI2eGZybV91c2VyX3Jjdl9tc2cpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MzQtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0Ny42MzM1MDY3NDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzM0NzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgUGFja2V0IFJlY2VwdGlvbiBpbiB0aGUgWEZSTSBTdWJzeXN0ZW0qKlxuXG5IbW0sIHNvIGB4ZnJtX3VzZXJfcmN2X21zZ2AgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCB0aGUgZGlmZmVyZW50IGVudHJ5IHBvaW50cyBhbmQgcHJvY2Vzc2luZyBwYXRocyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YS4gR2l2ZW4gdGhhdCwgSSB3b25kZXIuLi4gd2hhdCBhYm91dCBgeGZybV9uZXRsaW5rX3JjdmA/IEkgbmVlZCB0byBjb25zaWRlciB0aGF0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLCBpbiB0aGUgY29udGV4dCBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgcmVjZXB0aW9uIHBhdGhzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIHNlY3VyZS4gUGVyaGFwcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIGFuZCBydWxlcyBhcmUgYXBwbGllZC4gR290dGEga2VlcCB0aGlua2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjUwLjk1Njg1Nzc0MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4ODY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uZXRsaW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zODQxPXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTI3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5Mjg6c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5Mjkte1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYxNj1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybV91c2VyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MjAtXFx0XFx0Lmdyb3Vwc1xcdD0gWEZSTU5MR1JQX01BWCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjIxOlxcdFxcdC5pbnB1dFxcdD0geGZybV9uZXRsaW5rX3JjdixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjIyLVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjUxLjA1Mzc1MDUxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIyMjMxMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgRm9jdXNTeW1ib2xzYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIGl0J3MgYmVoYXZpbmcgc3RhdGljYWxseSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGXigKYgaWYgYEZvY3VzU3ltYm9sc2AgYXJlbid0IGlubGluZWQsIHRoZXkgKmNhbiogYmUgc3RhdGljLiBBbmQgaGV5LCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIHByZXR0eSBzaXplYWJsZSBmdW5jdGlvbi4gSXQncyB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3b3VsZCBvcHRpbWl6ZSBpdCBieSBpbmxpbmluZy4gR2l2ZW4gdGhhdCBhc3N1bXB0aW9uLCBJIHJlYWxseSBzaG91bGQgY2hlY2sgdGhlIGFjdHVhbCBzaXplIG9mIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGp1c3QgdG8gYmUgc3VyZS4gSXQncyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODc1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NTQuNDc1OTg0NTQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQ3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM0NzpcXHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4zMzQ4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zMzQ5OlxcdHtcXG4zMzUwOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XFxuMzM1MTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4zMzUyOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcXG4zMzUzOlxcdFxcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xcbjMzNTQ6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xcbjMzNTU6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuMzM1NjpcXHRcXHRpbnQgZXJyO1xcbjMzNTc6XFx0XFxuMzM1ODpcXHRcXHRpZiAoIXVtLVxcdTAwM2VpZC5zcGkpIHtcXG4zMzU5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgU1BJIDB4MFxcXCIpO1xcbjMzNjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzM2MTpcXHRcXHR9XFxuMzM2MjpcXHRcXG4zMzYzOlxcdFxcdGlmICh1bS1cXHUwMDNlcmVzZXJ2ZWQpIHtcXG4zMzY0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlc2VydmVkIGZpZWxkIG11c3QgYmUgemVyb1xcXCIpO1xcbjMzNjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzM2NjpcXHRcXHR9XFxuMzM2NzpcXHRcXG4zMzY4OlxcdFxcdGlmICh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XFxuMzM2OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwiVW5rbm93biBmbGFnczogMHgleFxcXCIsXFxuMzM3MDpcXHRcXHRcXHRcXHRcXHQgICB1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKTtcXG4zMzcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNzI6XFx0XFx0fVxcbjMzNzM6XFx0XFxuMzM3NDpcXHRcXHRlcnIgPSB2ZXJpZnlfeGZybV9mYW1pbHkodW0tXFx1MDAzZW5ld19mYW1pbHksIGV4dGFjayk7XFxuMzM3NTpcXHRcXHRpZiAoZXJyKVxcbjMzNzY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzc3OlxcdFxcbjMzNzg6XFx0XFx0aWYgKCEodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSkge1xcbjMzNzk6XFx0XFx0XFx0ZXJyID0gdmVyaWZ5X3NlbGVjdG9yX3ByZWZpeGxlbih1bS1cXHUwMDNlbmV3X3NlbC5mYW1pbHksXFxuMzM4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dW0tXFx1MDAzZW5ld19zZWwsIGV4dGFjayk7XFxuMzM4MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjMzODI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzgzOlxcdFxcdH1cXG4zMzg0OlxcdFxcbjMzODU6XFx0XFx0Y29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShcXHUwMDI2bSwgdW0pO1xcbjMzODY6XFx0XFxuMzM4NzpcXHRcXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtLm9sZF9tYXJrLnYgXFx1MDAyNiBtLm9sZF9tYXJrLm0sXFxuMzM4ODpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuc3BpLFxcbjMzODk6XFx0XFx0XFx0XFx0ICAgICAgdW0tXFx1MDAzZWlkLnByb3RvLCB1bS1cXHUwMDNlaWQuZmFtaWx5KTtcXG4zMzkwOlxcdFxcdGlmICgheCkge1xcbjMzOTE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2FuIG5vdCBmaW5kIHN0YXRlXFxcIik7XFxuMzM5MjpcXHRcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbjMzOTM6XFx0XFx0fVxcbjMzOTQ6XFx0XFxuMzM5NTpcXHRcXHRpZiAodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSB7XFxuMzM5NjpcXHRcXHRcXHR1OCBwcmVmaXhsZW4gPSAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xcbjMzOTc6XFx0XFxuMzM5ODpcXHRcXHRcXHRpZiAoeC1cXHUwMDNlc2VsLnByZWZpeGxlbl9zICE9IHgtXFx1MDAzZXNlbC5wcmVmaXhsZW5fZCB8fFxcbjMzOTk6XFx0XFx0XFx0ICAgIHgtXFx1MDAzZXNlbC5wcmVmaXhsZW5fZCAhPSBwcmVmaXhsZW4gfHxcXG4zNDAwOlxcdFxcdFxcdCAgICAheGZybV9hZGRyX2VxdWFsKFxcdTAwMjZ4LVxcdTAwM2VzZWwuZGFkZHIsIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkciwgeC1cXHUwMDNlcHJvcHMuZmFtaWx5KSB8fFxcbjM0MDE6XFx0XFx0XFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZXNlbC5zYWRkciwgXFx1MDAyNngtXFx1MDAzZXByb3BzLnNhZGRyLCB4LVxcdTAwM2Vwcm9wcy5mYW1pbHkpKSB7XFxuMzQwMjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzQwMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIlNBIHNlbGVjdG9yIGlzIG5vdCBhIHNpbmdsZS1ob3N0IG1hdGNoIGZvciBTQSBhZGRyZXNzZXNcXFwiKTtcXG4zNDA0OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzQwNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zNDA2OlxcdFxcdFxcdH1cXG4zNDA3OlxcdFxcdH1cXG4zNDA4OlxcdFxcbjM0MDk6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX0VOQ0FQXSkge1xcbjM0MTA6XFx0XFx0XFx0bS5lbmNhcCA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX0VOQ0FQXSk7XFxuMzQxMTpcXHRcXHRcXHRpZiAobS5lbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSA9PSAwKSB7XFxuMzQxMjpcXHRcXHRcXHRcXHRtLmVuY2FwID0gTlVMTDsgLyogc2VudGluZWw6IHJlbW92ZSBlbmNhcCAqL1xcbjM0MTM6XFx0XFx0XFx0fSBlbHNlIGlmIChtLmVuY2FwLVxcdTAwM2VlbmNhcF90eXBlICE9IFVEUF9FTkNBUF9FU1BJTlVEUCkge1xcbjM0MTQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiB0eXBlXFxcIik7XFxuMzQxNTpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM0MTY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzQxNzpcXHRcXHRcXHR9XFxuMzQxODpcXHRcXHR9IGVsc2Uge1xcbjM0MTk6XFx0XFx0XFx0bS5lbmNhcCA9IHgtXFx1MDAzZWVuY2FwOyAvKiBvbWl0LXRvLWluaGVyaXQgKi9cXG4zNDIwOlxcdFxcdH1cXG4zNDIxOlxcdFxcbjM0MjI6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX01USU1FUl9USFJFU0hdKSB7XFxuMzQyMzpcXHRcXHRcXHRlcnIgPSB2ZXJpZnlfbXRpbWVyX3RocmVzaCghIW0uZW5jYXAsIHgtXFx1MDAzZWRpciwgZXh0YWNrKTtcXG4zNDI0OlxcdFxcdFxcdGlmIChlcnIpXFxuMzQyNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zNDI2OlxcdFxcdH1cXG4zNDI3OlxcdFxcbjM0Mjg6XFx0XFx0aWYgKG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sIDApIFxcdTAwMjZcXHUwMDI2ICFtLmVuY2FwKSB7XFxuMzQyOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzQzMDpcXHRcXHRcXHRcXHQgICAgICAgXFxcIk5BVF9LRUVQQUxJVkVfSU5URVJWQUwgcmVxdWlyZXMgZW5jYXBzdWxhdGlvblxcXCIpO1xcbjM0MzE6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zNDMyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0MzM6XFx0XFx0fVxcbjM0MzQ6XFx0XFxuMzQzNTpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfT0ZGTE9BRF9ERVZdKSB7XFxuMzQzNjpcXHRcXHRcXHRtLnh1byA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSk7XFxuMzQzNzpcXHRcXHR9IGVsc2Uge1xcbjM0Mzg6XFx0XFx0XFx0Ym9vbCBpbmhlcml0X29mZmxvYWQgPSAhKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9DTEVBUl9PRkZMT0FEKTtcXG4zNDM5OlxcdFxcbjM0NDA6XFx0XFx0XFx0aWYgKGluaGVyaXRfb2ZmbG9hZCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2V4c28uZGV2KSB7XFxuMzQ0MTpcXHRcXHRcXHRcXHR4c29fdG9feHVvKFxcdTAwMjZ4LVxcdTAwM2V4c28sIFxcdTAwMjZ4dW8pO1xcbjM0NDI6XFx0XFx0XFx0XFx0bS54dW8gPSBcXHUwMDI2eHVvO1xcbjM0NDM6XFx0XFx0XFx0fVxcbjM0NDQ6XFx0XFx0fVxcbjM0NDU6XFx0XFxuMzQ0NjpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfTUFSS10pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjU0LjQ3NjI2MTYxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjgzNTkxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBJbmxpbmluZyBhbmQgQ29uZmlnIERlcGVuZGVuY2llcyBpbiB0aGUgWEZSTSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uIOKAkyBpdCdzIHByZXR0eSBzaXphYmxlLCBzbyBpbmxpbmluZyBpdCBzZWVtcyBjb21wbGV0ZWx5IG91dCBvZiB0aGUgcXVlc3Rpb24uIEdpdmVuIGl0cyBzaXplLCBpdCBtYWtlcyBzZW5zZSB0byB1c2UgaXQgYXMgdGhlIGZvY3VzIHN5bWJvbCBmb3IgZnVydGhlciBhbmFseXNpcy4gQWxzbywgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUgdG9vLCBzbyBsZXQncyBjaGVjayBpdHMgcHJvcGVydGllcy4gQWgsIGdvb2QsIGl0J3Mgc3RhdGljLiBOb3csIGxldCdzIHNlZSBpZiBpdCdzIGlubGluZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBvbmx5IGNhbGxlZCBvbmNlLCBhbmQgdGhhdCdzIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIFRoaXMgcmFpc2VzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0ICptaWdodCogYmUgaW5saW5lZC5cblxuSG93ZXZlciwgYWZ0ZXIgYSBjbG9zZXIgbG9vaywgbGV0J3Mgc3RpY2sgd2l0aCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhcyB0aGUgZm9jdXMuIFdhaXQgYSBtaW51dGUuLi4gSSByZWNhbGwgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhY3R1YWxseSBjYWxsZWQgaW5kaXJlY3RseSB2aWEgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuIFRoYXQgZGVmaW5pdGl2ZWx5IHJ1bGVzIG91dCBhbnkgY2hhbmNlIG9mIGl0IGJlaW5nIGlubGluZWQsIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIGFsd2F5cyBwcmVjbHVkZSBpbmxpbmluZy5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBDbGVhcmx5LCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSBwcmVyZXF1aXNpdGUuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UsIHRob3VnaD8gWWVzLCBsZXQncyBpbnZlc3RpZ2F0ZSBpZiBgQ09ORklHX1hGUk1fVVNFUmAgY29tZXMgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjAyLjE1OTg1NTkzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjYyMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX01JR1JBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNjAtXFxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy02Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjowMi4zMjM1MjQxNTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjU4NTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipYRlJNIE1pZ3JhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgWEZSTV9NSUdSQVRFYCBmZWF0dXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFhGUk0gc3Vic3lzdGVtLiBUaGF0J3MgYG5ldC94ZnJtL0tjb25maWdgLCByaWdodD8gSSdsbCBoZWFkIG92ZXIgdGhlcmUgYW5kIHRha2UgYSBsb29rLiBJJ20gaG9waW5nIGl0J3MgY2xlYXJseSBkb2N1bWVudGVkLCBtYXliZSB3aXRoIHNvbWUgY29tbWVudHMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdCwgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCdzIHJlbGV2YW50LCBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcy4gSSdtIGFsc28gbG9va2luZyBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIEkgYW0gbWlzc2luZyBhIGxhcmdlciBjb250ZXh0IHRoYXQgSSBoYXZlIGZvcmdvdHRlbi4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBpbiB0aGVzZSB0eXBlcyBvZiBpbnZlc3RpZ2F0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MDYuMjM2MTEyOTI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU1OlxcdFxcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxcbiAgNTY6XFx0XFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cXG4gIDU3OlxcdFxcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MDpcXHRcXG4gIDYxOlxcdGNvbmZpZyBYRlJNX01JR1JBVEVcXG4gIDYyOlxcdFxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuICA2MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcXG4gIDY2OlxcdFxcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxcbiAgNjc6XFx0XFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cXG4gIDY4OlxcdFxcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzE6XFx0XFxuICA3MjpcXHRjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxuICA3MzpcXHRcXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbiAgNzQ6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MDYuMjM2MzA0MDU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTcxOTcwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBEZXBlbmRlbmN5IElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBYRlJNX01JR1JBVEVgIG9wdGlvbiwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgWEZSTWAuIFRoYXQncyBub3Qgc3VycHJpc2luZywgcmVhbGx5LiBCdXQgd2hhdCBhYm91dCBgWEZSTV9VU0VSYD8gSXMgdGhlcmUgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVsYXRpb25zaGlwIHRoZXJlPyBJdCdzIHdvcnRoIGRpZ2dpbmcgaW50by5cblxuTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGNoYW5nZSBpcyBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiAgT2theSwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgZGV0YWlscyBvbiBob3cgdGhlc2UgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGxpbmtlZCB0b2dldGhlciwgYW5kIHdoZXRoZXIgYFhGUk1fVVNFUmAgbWlnaHQgYmUgaW52b2x2ZWQgd2l0aCBgWEZSTV9NSUdSQVRFYCBpbiBhIHJlbGV2YW50IHdheS4gVGltZSB0byBwYXJzZSB0aGF0IE1ha2VmaWxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MTMuOTkzNTA0NzQ5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMzkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICs9IHhmcm1fYWxnby5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgKz0geGZybV91c2VyLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjoxNC4xMTE2NDkzNzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MDA2ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZSTSBVc2VyLVNwYWNlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHdlIG5lZWQgYENPTkZJR19YRlJNX1VTRVJgIGFjdGl2YXRlZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSBpdCdzIG5vdCBzaW1wbHkgYW4gaXNvbGF0ZWQgc2V0dGluZy4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBYRlJNX1VTRVJgLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGp1bXAgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBhY3RpdmF0aW9uIGhhcyB3aXRoaW4gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBDT05GSUdfWEZSTV9VU0VSYCBtaWdodCBiZSBnYXRpbmcgc29tZSBvdGhlciBpbXBvcnRhbnQgZmVhdHVyZXMgb3Igc2V0dGluZyB1cCBhIHByZXJlcXVpc2l0ZSBjaGFpbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgY3VycmVudCBhc3N1bXB0aW9ucyBhcmUgcmlnaHQsIG9yIGlmIHRoZXJlJ3MgbW9yZSB0byBjb25zaWRlciB3aXRoIHRoYXQgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjIwLjA5MTcyMTU0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxODU4ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MjAuMjIzNTg1OTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDQ4MDIwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMsIEV2ZXJ5d2hlcmUhKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgWEZSTV9VU0VSYCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgb2J2aW91cyB0aGF0IGl0J3MgZ29pbmcgdG8gcmVseSBvbiBib3RoIGBJTkVUYCBhbmQgdGhlIGNvcmUgYFhGUk1gIGZ1bmN0aW9uYWxpdHkuIEl0J3MgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byBiZSBzdXJlLiBNeSBuZXh0IHN0ZXAgdGhlbiBpcyBzdHJhaWdodGZvcndhcmQ7IGxldCdzIGRyaWxsIGRvd24gYW5kIGV4cGxpY2l0bHkgdmVyaWZ5IHRob3NlIGBYRlJNX1VTRVJgIGRlcGVuZGVuY2llcy4gTm8gYXNzdW1wdGlvbnMsIGp1c3Qgc29saWQgdmVyaWZpY2F0aW9uLCBzbyBJIGRvbuKAmXQgcnVuIGludG8gYW55IHVuZXhwZWN0ZWQgcGl0ZmFsbHMgbGF0ZXIgb24uIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjI1LjMyODM5MTc3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDIxOlxcdFxcbiAgMjI6XFx0aWYgSU5FVFxcbiAgMjM6XFx0Y29uZmlnIFhGUk1fVVNFUlxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuICAyNTpcXHRcXHRzZWxlY3QgWEZSTV9BTEdPXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXG4gIDI4OlxcdFxcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuICAzNDpcXHRcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMzU6XFx0XFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbiAgMzY6XFx0XFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcXG4gIDM3OlxcdFxcdGhlbHBcXG4gIDM4OlxcdFxcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXFxuICAzOTpcXHRcXHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjI1LjMyODQ5MjgyNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njg1MzgwODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFhGUk0gTWlncmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBzaXR1YXRpb24sIGFuZCBpdCBzZWVtcyB0aGV5IGJvdGggbGl2ZSB3aXRoaW4gdGhlIGBpZiBJTkVUYCBjb25kaXRpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGJvdGggb2YgdGhlbS4gVGhleSdyZSBib3RoIGJvb2wvdHJpc3RhdGUsIHNvIGFkZGluZyB0aGVtIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cbk5vdywgdGhlIGNydWNpYWwgcGFydCBpcyBpZGVudGlmeWluZyBhIHN1aXRhYmxlIGZvY3VzIHN5bWJvbCBmb3Igc3l6a2FsbGVyLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEJ1dCwgd2FpdCwgdGhhdCdzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIEx1Y2tpbHksIHN5emthbGxlciBkb2VzIHN1cHBvcnQgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZW4ndCBpbmxpbmVkLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaW5saW5lZD8gTGV0J3MgY2hlY2suIEFoLCBnb29kLiBJdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuXG5cbmBgYGNcbnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcblx0aW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHN0cnVjdCBubGF0dHIgKiosXG5cdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKik7XG5cdGludCAoKmR1bXApKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICopO1xuXHRpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqKTtcblx0Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKm5sYV9wb2w7XG5cdGludCBubGFfbWF4O1xufSB4ZnJtX2Rpc3BhdGNoW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLi4uXG5cdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG4uLi5cbn07XG5gYGBcblxuU2luY2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4sIGl0ICpjYW5ub3QqIGJlIGNvbXBsZXRlbHkgaW5saW5lZC4gQXQgbGVhc3QgYW4gb3V0LW9mLWxpbmUgY29weSAqbXVzdCogZXhpc3QuIFRoaXMgbWVhbnMgaXQgd2lsbCBoYXZlIGEgc3ltYm9sIGluIHRoZSBrZXJuZWwgaW1hZ2UsIHNvbWV0aGluZyBsaWtlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIG9yIHBlcmhhcHMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZS5pc3JhLjBgLCBhbmQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IG1hdGNoIHRoYXQuXG5cbkknbSB0aGlua2luZyBub3cgYWJvdXQgb3RoZXIgcG90ZW50aWFsIGZ1bmN0aW9ucywgc3VjaCBhcyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBJdCAqaXMqIGNhbGxlZCBkaXJlY3RseSBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLCBzbyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBpdCBpcyBpbmxpbmVkLiBUaGVuLCBsZXQncyBsb29rIGF0IGB4ZnJtX25sbXNnX211bHRpY2FzdGAuICBZZXMsIGl0IGlzIGV4cGxpY2l0bHkgbWFya2VkIGBpbmxpbmVgLiBTbywgaXQgbG9va3MgbGlrZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgYmVzdCBmb2N1cyBzeW1ib2wuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNvbnNpZGVyZWQuIE9rYXksIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgYWxzbyBzdGF0aWMuIExldCBtZSBqdXN0IGNoZWNrIHRoZSBzaXplIG9mIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MzUuMDEzODc2NDU2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIyLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIyOlxcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbjMzMjM6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuMzMyNTpcXHRcXHRcXHRcXHRcXHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXFxuMzMyNjpcXHR7XFxuMzMyNzpcXHRcXHRpbnQgZXJyO1xcbjMzMjg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4zMzI5OlxcdFxcbjMzMzA6XFx0XFx0c2tiID0gbmxtc2dfbmV3KHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKG0sIGRpciksIEdGUF9BVE9NSUMpO1xcbjMzMzE6XFx0XFx0aWYgKCFza2IpXFxuMzMzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMzMzOlxcdFxcbjMzMzQ6XFx0XFx0ZXJyID0gYnVpbGRfbWlncmF0ZV9zdGF0ZShza2IsIHVtLCBtLCBkaXIsIHBvcnRpZCwgc2VxKTtcXG4zMzM1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzMzNjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4zMzM3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzMzODpcXHRcXHR9XFxuMzMzOTpcXHRcXG4zMzQwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zMzQxOlxcdFxcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuMzM0MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zMzQzOlxcdFxcbjMzNDQ6XFx0XFx0cmV0dXJuIGVycjtcXG4zMzQ1OlxcdH1cXG4zMzQ2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjozNS4wMTQxMDY0NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0NTQ2ODY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBSQ1UgTG9jayBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGEgcmVsYXRpdmVseSBzbWFsbCBhcmVhLiBUaGUgZnVuY3Rpb24gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hhdCB0aGUgYWN0dWFsIHNjb3BlIG9mIGltcGFjdCBtaWdodCBiZS4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBmdW5jdGlvbiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIGRlY2VudCBzaXplIGFuZCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LlxuXG5MZXQgbWUgY2lyY2xlIGJhY2sgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBmb3IgYSBtb21lbnQuIFJpZ2h0LCBpdCdzIGFuIGlubGluZSBmdW5jdGlvbi4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgY2FsbHMgYXJvdW5kIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aGluIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLiBBaCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCEgSXQncyBhZGRyZXNzaW5nIGEgbWlzc2luZyBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBjcml0aWNhbC4gQSBtaXNzaW5nIGxvY2sgaGVyZSBjb3VsZCBlYXNpbHkgbGVhZCB0byBSQ1Ugd2FybmluZ3Mgb3IsIGV2ZW4gd29yc2UsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBkYXRhIGludGVncml0eSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uXG5cblRvIHJlcGxpY2F0ZSB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgZW5hYmxlZCBpbiBteSBjb25maWd1cmF0aW9uLlxuXG5UaGUgZXNzZW5jZSBvZiB0aGUgZml4IGlzIHRvIGluc2VydCB0aGUgbWlzc2luZyBSQ1UgcmVhZCBsb2NrIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdoZW4gaXQncyBjYWxsZWQgZnJvbSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBSQ1UgaXNzdWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBJIHRoaW5rIGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGluZGVlZCB0aGUgc29sZSBjYWxsZXIgb2YgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCwgYXQgbGVhc3QgZnJvbSB0aGUgbWFpbiBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjo0MS41NTk1Nzc4MjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQ0NDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zMzA5PXN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyMjpzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTItXFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6NDEuNjY5MDI3NzM0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NTk0Njk1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBldmlkZW5jZSBwb2ludHMgdG8gdGhpcyBiZWluZyB0aGUgb25seSBjYWxsZXIuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcywgYXMgdGhpcyBpcyBhIGtub3duIGFyZWEgZm9yIHBvdGVudGlhbCBjb25mbGljdHMuXG5cbmBYRlJNYCBpcyBkZWZpbml0ZWx5IHNlbGVjdGVkIGR1ZSB0byBgSU5FVGAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIE5vdywgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAgYXMgd2VsbCwgYXMgZXhwZWN0ZWQuIEFuZCBvZiBjb3Vyc2UsIGBYRlJNX01JR1JBVEVgIHJlbGllcyBvbiBgWEZSTWAuIENvbnNpZGVyaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMsIGl0IHNlZW1zIHRoYXQgc2VsZWN0aW5nIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBzYXRpc2Z5IGFsbCBkZXBlbmRlbmNpZXMuXG5cblRoYXQgc2VlbXMgbGlrZSBhIHNhZmUgYmV0LiBTbywgbm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODA1LCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjQ4LjUyODUwMjA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDA3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggdG8gcHJldmVudCBSQ1Ugd2FybmluZ3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIHNlbmRpbmcgWEZSTSBtaWdyYXRlIHN0YXRlIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 08:33:16 +0000 UTC FinishedAt: 2026-07-31 08:36:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "f2275ff3-1764-4909-afae-3188337bd296" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xfrm_do_migrate_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggdG8gcHJldmVudCBSQ1Ugd2FybmluZ3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIHNlbmRpbmcgWEZSTSBtaWdyYXRlIHN0YXRlIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIGNvbW1hbmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzU6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTMzMzcsNyAmIzQzOzMzMzcsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggdG8gcHJldmVudCBSQ1Ugd2FybmluZ3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIHNlbmRpbmcgWEZSTSBtaWdyYXRlIHN0YXRlIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIGNvbW1hbmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzU6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjBiYTA2MTRkNjUwZjMgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0zMzM3LDcgJiM0MzszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSB4ZnJtIFBhdGNoIGFuZCBNaWdyYXRpb24gU3RhdGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluc2lkZSB0aGUgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlc2UgbG9ja3MgYXJvdW5kICp0aGF0KiBzcGVjaWZpYyBjYWxsPyBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGlzbiYjMzk7dCBhbHdheXMgdGhlIG1vc3QgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGFydCwgc28gaXQgaGFzIG1lIGN1cmlvdXMuCgpUaGUgbmV4dCBzdGVwLCBmb3IgbWUsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBJdCYjMzk7cyBlaXRoZXIgY2FsbGVkIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIG9yIHBvc3NpYmx5IHNvbWV3aGVyZSBlbHNlLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBlbHNlLCBzbyBJJiMzOTtsbCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIGFuZCBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYW5kIHdoeSB0aGVzZSBSQ1UgbG9ja3MgYXJlIGJlaW5nIGludHJvZHVjZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoaXMgcGF0Y2ggYWltcyB0byBwcmV2ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgQ2FsbCoqCgpPa2F5LCBzbyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKnVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBkb2VzIHRoaXMgY29kZSBwYXRoIGdldCBhY3RpdmF0ZWQ/KiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyBvciB1bmRlcmx5aW5nIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgbWlncmF0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHRvIHNlZSB3aGF0IHNldHMgdXAgdGhlIGNhbGwuIEkgYmV0IHRoZXJlIGFyZSBzb21lIHJlbGV2YW50IHN5c2N0bHMsIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciBuZXRsaW5rIG1lc3NhZ2VzIHRoYXQgYXJlIGNvbmZpZ3VyaW5nIHRoZSBiZWhhdmlvci4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUyOC0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyOTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MjpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBYRlJNX01TR19NSUdSQVRFX1NUQVRFIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHN0YXRlIG1pZ3JhdGlvbiB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBNeSBmaXJzdCBpbmNsaW5hdGlvbiBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBhbmQgZ2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgSSBuZWVkIHRvIGNoZWNrIG91dCBpbiBpdHMgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byB0aGF0IGAjZWxzZWAgYmxvY2sgYXJvdW5kIGxpbmUgMzUyOC4gSSBoYXZlIGEgaHVuY2ggdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgbG9naWMgZm9yIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2Ygc3RhdGUgbWlncmF0aW9uLCBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIG9yIGEgZmFsbC1iYWNrIHNjZW5hcmlvLCBpcyBsaWtlbHkgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IGJsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MjA6XHRcdHJldHVybiBlcnI7XG4zNTIxOlx0b3V0X3hjOlxuMzUyMjpcdFx0eGMtXHUwMDNla20uc3RhdGUgPSBYRlJNX1NUQVRFX0RFQUQ7XG4zNTIzOlx0XHR4ZnJtX3N0YXRlX3B1dCh4Yyk7XG4zNTI0Olx0XHR4ZnJtX3N0YXRlX3B1dCh4KTtcbjM1MjU6XHRcdHJldHVybiBlcnI7XG4zNTI2Olx0fVxuMzUyNzpcdFxuMzUyODpcdCNlbHNlXG4zNTI5Olx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4zNTMwOlx0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zNTMxOlx0e1xuMzUzMjpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtYRlJNX01TR19NSUdSQVRFX1NUQVRFIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMzUzMzpcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbjM1MzQ6XHR9XG4zNTM1Olx0XG4zNTM2Olx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4zNTM3Olx0XHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zNTM4Olx0e1xuMzUzOTpcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gTWF6ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBsaW5lIDMzNDcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGAjaWZgIHNpdHVhdGlvbiBsb29raW5nIGxpa2UgYXJvdW5kIHRoZXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29kZSBibG9ja3MgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gb3Igb3V0IGF0IHRoYXQgc3BlY2lmaWMgcG9pbnQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBpdCYjMzk7cyB3aXRoaW4gYSBuZXN0ZWQgYCNpZmAgYmxvY2suIElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGFuZCB0aGUgZGVmaW5pbmcgc3ltYm9scyBhY3RpdmUgYXQgdGhhdCBsZXZlbC4KCk15IGdvYWwgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hpY2ggY29tcGlsYXRpb24gcGF0aCB0aGlzIGxpbmUgcG90ZW50aWFsbHkgY29udHJpYnV0ZXMgdG8sIGFuZCBpZiBJIG5lZWQgdG8gYmFjayB1cCBhbmQgdW5kZXJzdGFuZCBhbnkgbG9naWMgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgZGljdGF0ZSB0aGUgYmVoYXZpb3IgYmVpbmcgZXhlY3V0ZWQgaW4gdGhhdCBhcmVhLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIHRvIHNlZSB3aGF0IHRoZSBjb25kaXRpb25hbCByZWZlcnMgdG8sIGFuZCB3aGF0IHZhcmlhYmxlcyBtaWdodCBiZSBnZXR0aW5nIGRlZmluZWQgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwbGF0Zm9ybSwgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE5ODE9c3RhdGljIGludCB2ZXJpZnlfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5ODQtXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfTUFJTjpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5ODU6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5ODYtXHRjYXNlIFhGUk1fUE9MSUNZX1RZUEVfU1VCOlxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTIzNzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdXNlcnBvbGljeV90eXBlX2F0dHJzaXplKHZvaWQpXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzc4LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzNzk6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzODAtXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzODUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzg2OiNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg3LXN0YXRpYyBpbnQgY29weV90b191c2VyX3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzA0Mj1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzExNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMTc6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTM2PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDItXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTQzOiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ0LXN0YXRpYyBpbnQgY29weV90b191c2VyX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyByZWxhdGVkIHRvIGBDT05GSUdfWEZSTV9NSUdSQVRFYC4gUmlnaHQsIGdvdCBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhZGRpbmcgYW4gUkNVIHJlYWQgbG9jayBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gTm93LCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IEhtbSwgeWVhaCwgYWJzb2x1dGVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBmaXggZm9yIHNvbWV0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2FzIHBvdGVudGlhbGx5IGJlaW5nIGNhbGxlZCB3aXRob3V0IHRoZSBhcHByb3ByaWF0ZSBSQ1UgcHJvdGVjdGlvbiDigJMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLCBwcm9iYWJseS4gCgpXYWl0IGEgbWludXRlLCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLi4uIHRoYXQmIzM5O3MgYSBtdWx0aWNhc3QgZnVuY3Rpb24uIE9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29udGV4dCBtYWtlcyBzZW5zZS4gVGltZSB0byBjaGVjayBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEdvdHRhIGNvbmZpcm0gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9ubG1zZ19tdWx0aWNhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0xNTk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyNi0gKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mjc6c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyOC1cdFx0XHRcdCAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjUxND1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3VzZXJwb2xpY3koc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MzktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTQwOlx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjU0MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDE6XHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzM0Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2MzI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0OC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NDk6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NTAtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5ODQ9c3RhdGljIGludCB4ZnJtX2V4cF9zdGF0ZV9ub3RpZnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk3LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5ODpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTk5LX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDAxPXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTQ6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BRVZFTlRTKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMTUtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMTc9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNDA6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9TQSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDQxLX1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MTAxPXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2Eoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDE1MzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNTQtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzOT1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjUyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0FDUVVJUkUpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDI1NC19XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDM2Mj1zdGF0aWMgaW50IHhmcm1fZXhwX3BvbGljeV9ub3RpZnkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Mzc1Olx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfRVhQSVJFKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzYtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNzg9c3RhdGljIGludCB4ZnJtX25vdGlmeV9wb2xpY3koc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NDEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDQyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NDMtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0OT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ2OS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NzA6XHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDQ3MS1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NTI5PXN0YXRpYyBpbnQgeGZybV9zZW5kX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTQyOlx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUkVQT1JUKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDMtfVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ1Nzc9c3RhdGljIGludCB4ZnJtX3NlbmRfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTk2LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDU5NzpcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDU5OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGZvciBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHByb3Bvc2VzIGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhcm91bmQgdGhlIGNhbGwgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRoaW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyBhIHNsaWdodCBleWVicm93IHJhaXNlLiBXaHkgbm93PyBXaHkgc3BlY2lmaWNhbGx5IGhlcmU/IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgYSBwcmV0dHkgY29yZSBmdW5jdGlvbiBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHVzZWQgZm9yIHNlbmRpbmcgbmV0bGluayBtZXNzYWdlcyBhYm91dCBzZWN1cml0eSBwb2xpY3kgY2hhbmdlcy4gSSYjMzk7bSByZWFzb25hYmx5IGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlLCBhbmQgbXkgbWVtb3J5IHRlbGxzIG1lIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gcXVpdGUgYSBmZXcgcGxhY2VzICp3aXRob3V0KiBhbiBSQ1UgcmVhZCBsb2NrIGFscmVhZHkgaW4gcGxhY2UuIFRoaXMgc2VlbXMuLi4gaW5jb25zaXN0ZW50LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIG9yIGEgc2lnbiBvZiBpbXByb3BlciB1c2FnZS4gSXQgd2FycmFudHMgZGVlcGVyIGludmVzdGlnYXRpb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIGNhbGwgc2l0ZXMgb2YgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJvcG9zZWQgY2hhbmdlIGlzbiYjMzk7dCBhZGRyZXNzaW5nIGFuIGlzb2xhdGVkIGlzc3VlIHdoaWxlIGxlYXZpbmcgcG90ZW50aWFsbHkgbGFyZ2VyLCBzeXN0ZW1pYyBwcm9ibGVtcyB1bmFkZHJlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGlzdGluZyBsb2NraW5nIGFzc3VtcHRpb25zLCBhbmQgd2hlcmUgYW5kIHdoeSB0aG9zZSBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgdmlvbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MjA6XHRcbjE2MjE6XHRcdHJldHVybiBza2I7XG4xNjIyOlx0fVxuMTYyMzpcdFxuMTYyNDpcdC8qIEEgd3JhcHBlciBmb3Igbmxtc2dfbXVsdGljYXN0KCkgY2hlY2tpbmcgdGhhdCBubHNrIGlzIHN0aWxsIGF2YWlsYWJsZS5cbjE2MjU6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2suXG4xNjI2Olx0ICovXG4xNjI3Olx0c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTYyODpcdFx0XHRcdFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcbjE2Mjk6XHR7XG4xNjMwOlx0XHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNleGZybS5ubHNrKTtcbjE2MzE6XHRcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbjE2MzI6XHRcbjE2MzM6XHRcdGlmICghbmxzaykge1xuMTYzNDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE2MzU6XHRcdFx0cmV0dXJuIC1FUElQRTtcbjE2MzY6XHRcdH1cbjE2Mzc6XHRcbjE2Mzg6XHRcdHh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbjE2Mzk6XHRcdGlmICh4dHIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gUkNVIFJlYWQgTG9jayBCdWcgRml4KioKCk9rYXksIHNvIHRoZSBjb2RlIGlzIHRocm93aW5nIGEgJiMzNDtNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2smIzM0OyBtZXNzYWdlLiBSaWdodCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgbWlzc2luZyBSQ1UgcmVhZCBsb2NrLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCBtaXNzaW5nIGxvY2tzIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB3aXRoIFJDVSwgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIGF0IGxlYXN0IGFubm95aW5nIFJDVSB3YXJuaW5ncy4gU28sIGZ1enppbmcgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSB1c2VkLiBMZXQmIzM5O3Mgc2VlLi4uIElzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHN0YXRpYz8gWWVwLCBpdCBpcy4gSG1tLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtZWFuIGl0JiMzOTtzIGlzb2xhdGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCB2aWEgYSBgZG9pdGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgeGZybV9saW5rYCB0YWJsZS4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYHhmcm1fbGlua2AgdGFibGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBwYXRoLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBhdGggdG8gdGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzczOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQzLVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0NDpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ1LVx0aW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHN0cnVjdCBubGF0dHIgKiosXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzg0MT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4NDUtXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgmIzQzOzFdO1xubmV0L3hmcm0veGZybV91c2VyLmM6Mzg0NjpcdGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsgKmxpbms7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ3LVx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIE1pZ3JhdGlvbiBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgWEZSTSBtaWdyYXRpb24gcHJvY2Vzcy4gVGhlIG9idmlvdXMgZW50cnkgcG9pbnQgc2VlbXMgdG8gYmUgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgdGhhdOKAmXMgd2hlcmUgdGhlIG5ldGxpbmsgbWVzc2FnZXMga2ljayB0aGluZ3Mgb2ZmLiBOb3csIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gZWl0aGVyIGB4ZnJtX2RvX21pZ3JhdGVgIG9yIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBCdXQgd2FpdCBhIHNlY29uZCwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8KCkFuZCB0aGF0IHJhaXNlcyBhIHF1ZXN0aW9uLCBjYW4gU3l6a2FsbGVyIHJlYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHk/IEl0JiMzOTtzIGdvb2QgZm9yIHN5c2NhbGxzLCB3aGljaCBhcmUgaXRzIGJyZWFkIGFuZCBidXR0ZXIsIGJ1dCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZeKAmXJlIHVzaW5nIGBGb2N1c1N5bWJvbHNgIGhlcmUgdG8gc3RlZXIgaXRzIGNvdmVyYWdlLiBJZGVhbGx5LCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmUgcG9pbnRpbmcgdG8gZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMgb3IgaW5saW5lZC4gVGhhdCB3YXksIHdlIGdldCBhIG11Y2ggYmV0dGVyIGNoYW5jZSBvZiBnb29kIGNvdmVyYWdlLgoKT2theSwgc28gZ29pbmcgYmFjayB0byBgeGZybV91c2VyX3Jjdl9tc2dgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJIG11c3QgY29uZmlybSB3aGV0aGVyIGB4ZnJtX3VzZXJfcmN2X21zZ2AgaXRzZWxmIGlzIHN0YXRpYyBvciBub3QuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIG91ciBlbnRyeSBwb2ludCBzZWxlY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM3ODU9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4NDAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODQxOnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQyLVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5Mjg9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MzItXHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5MzM6XHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTM0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNvbnNpZGVyaW5nIFBhY2tldCBSZWNlcHRpb24gaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCkhtbSwgc28gYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCB0aGUgZGlmZmVyZW50IGVudHJ5IHBvaW50cyBhbmQgcHJvY2Vzc2luZyBwYXRocyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YS4gR2l2ZW4gdGhhdCwgSSB3b25kZXIuLi4gd2hhdCBhYm91dCBgeGZybV9uZXRsaW5rX3JjdmA/IEkgbmVlZCB0byBjb25zaWRlciB0aGF0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLCBpbiB0aGUgY29udGV4dCBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgcmVjZXB0aW9uIHBhdGhzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIHNlY3VyZS4gUGVyaGFwcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIGFuZCBydWxlcyBhcmUgYXBwbGllZC4gR290dGEga2VlcCB0aGlua2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9uZXRsaW5rX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM4NDE9c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTI3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzkyODpzdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTI5LXtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjE2PXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX3VzZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MjAtXHRcdC5ncm91cHNcdD0gWEZSTU5MR1JQX01BWCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MjE6XHRcdC5pbnB1dFx0PSB4ZnJtX25ldGxpbmtfcmN2LFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYyMi1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYEZvY3VzU3ltYm9sc2AqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGJlaGF2aW5nIHN0YXRpY2FsbHksIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0IGEgbWludXRl4oCmIGlmIGBGb2N1c1N5bWJvbHNgIGFyZW4mIzM5O3QgaW5saW5lZCwgdGhleSAqY2FuKiBiZSBzdGF0aWMuIEFuZCBoZXksIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgcHJldHR5IHNpemVhYmxlIGZ1bmN0aW9uLiBJdCYjMzk7cyB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3b3VsZCBvcHRpbWl6ZSBpdCBieSBpbmxpbmluZy4gR2l2ZW4gdGhhdCBhc3N1bXB0aW9uLCBJIHJlYWxseSBzaG91bGQgY2hlY2sgdGhlIGFjdHVhbCBzaXplIG9mIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGp1c3QgdG8gYmUgc3VyZS4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoYXQgaHlwb3RoZXNpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNDc6XHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjMzNDg6XHRcdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjMzNDk6XHR7XG4zMzUwOlx0XHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xuMzM1MTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjMzNTI6XHRcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcbjMzNTM6XHRcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xuMzM1NDpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xuMzM1NTpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4zMzU2Olx0XHRpbnQgZXJyO1xuMzM1NzpcdFxuMzM1ODpcdFx0aWYgKCF1bS1cdTAwM2VpZC5zcGkpIHtcbjMzNTk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIFNQSSAweDBcJiMzNDspO1xuMzM2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNjE6XHRcdH1cbjMzNjI6XHRcbjMzNjM6XHRcdGlmICh1bS1cdTAwM2VyZXNlcnZlZCkge1xuMzM2NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Jlc2VydmVkIGZpZWxkIG11c3QgYmUgemVyb1wmIzM0Oyk7XG4zMzY1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzM2NjpcdFx0fVxuMzM2NzpcdFxuMzM2ODpcdFx0aWYgKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XG4zMzY5Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O1Vua25vd24gZmxhZ3M6IDB4JXhcJiMzNDssXG4zMzcwOlx0XHRcdFx0XHQgICB1bS1cdTAwM2VmbGFncyBcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUyk7XG4zMzcxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzM3MjpcdFx0fVxuMzM3MzpcdFxuMzM3NDpcdFx0ZXJyID0gdmVyaWZ5X3hmcm1fZmFtaWx5KHVtLVx1MDAzZW5ld19mYW1pbHksIGV4dGFjayk7XG4zMzc1Olx0XHRpZiAoZXJyKVxuMzM3NjpcdFx0XHRyZXR1cm4gZXJyO1xuMzM3NzpcdFxuMzM3ODpcdFx0aWYgKCEodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcbjMzNzk6XHRcdFx0ZXJyID0gdmVyaWZ5X3NlbGVjdG9yX3ByZWZpeGxlbih1bS1cdTAwM2VuZXdfc2VsLmZhbWlseSxcbjMzODA6XHRcdFx0XHRcdFx0XHRcdTAwMjZ1bS1cdTAwM2VuZXdfc2VsLCBleHRhY2spO1xuMzM4MTpcdFx0XHRpZiAoZXJyKVxuMzM4MjpcdFx0XHRcdHJldHVybiBlcnI7XG4zMzgzOlx0XHR9XG4zMzg0Olx0XG4zMzg1Olx0XHRjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKFx1MDAyNm0sIHVtKTtcbjMzODY6XHRcbjMzODc6XHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG0ub2xkX21hcmsudiBcdTAwMjYgbS5vbGRfbWFyay5tLFxuMzM4ODpcdFx0XHRcdCAgICAgIFx1MDAyNnVtLVx1MDAzZWlkLmRhZGRyLCB1bS1cdTAwM2VpZC5zcGksXG4zMzg5Olx0XHRcdFx0ICAgICAgdW0tXHUwMDNlaWQucHJvdG8sIHVtLVx1MDAzZWlkLmZhbWlseSk7XG4zMzkwOlx0XHRpZiAoIXgpIHtcbjMzOTE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDYW4gbm90IGZpbmQgc3RhdGVcJiMzNDspO1xuMzM5MjpcdFx0XHRyZXR1cm4gLUVTUkNIO1xuMzM5MzpcdFx0fVxuMzM5NDpcdFxuMzM5NTpcdFx0aWYgKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfVVBEQVRFX0gySF9TRUwpIHtcbjMzOTY6XHRcdFx0dTggcHJlZml4bGVuID0gKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xuMzM5NzpcdFxuMzM5ODpcdFx0XHRpZiAoeC1cdTAwM2VzZWwucHJlZml4bGVuX3MgIT0geC1cdTAwM2VzZWwucHJlZml4bGVuX2QgfHxcbjMzOTk6XHRcdFx0ICAgIHgtXHUwMDNlc2VsLnByZWZpeGxlbl9kICE9IHByZWZpeGxlbiB8fFxuMzQwMDpcdFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZXNlbC5kYWRkciwgXHUwMDI2eC1cdTAwM2VpZC5kYWRkciwgeC1cdTAwM2Vwcm9wcy5mYW1pbHkpIHx8XG4zNDAxOlx0XHRcdCAgICAheGZybV9hZGRyX2VxdWFsKFx1MDAyNngtXHUwMDNlc2VsLnNhZGRyLCBcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLCB4LVx1MDAzZXByb3BzLmZhbWlseSkpIHtcbjM0MDI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zNDAzOlx0XHRcdFx0XHQgICAgICAgXCYjMzQ7U0Egc2VsZWN0b3IgaXMgbm90IGEgc2luZ2xlLWhvc3QgbWF0Y2ggZm9yIFNBIGFkZHJlc3Nlc1wmIzM0Oyk7XG4zNDA0Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjM0MDU6XHRcdFx0XHRnb3RvIG91dDtcbjM0MDY6XHRcdFx0fVxuMzQwNzpcdFx0fVxuMzQwODpcdFxuMzQwOTpcdFx0aWYgKGF0dHJzW1hGUk1BX0VOQ0FQXSkge1xuMzQxMDpcdFx0XHRtLmVuY2FwID0gbmxhX2RhdGEoYXR0cnNbWEZSTUFfRU5DQVBdKTtcbjM0MTE6XHRcdFx0aWYgKG0uZW5jYXAtXHUwMDNlZW5jYXBfdHlwZSA9PSAwKSB7XG4zNDEyOlx0XHRcdFx0bS5lbmNhcCA9IE5VTEw7IC8qIHNlbnRpbmVsOiByZW1vdmUgZW5jYXAgKi9cbjM0MTM6XHRcdFx0fSBlbHNlIGlmIChtLmVuY2FwLVx1MDAzZWVuY2FwX3R5cGUgIT0gVURQX0VOQ0FQX0VTUElOVURQKSB7XG4zNDE0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIHR5cGVcJiMzNDspO1xuMzQxNTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDE2Olx0XHRcdFx0Z290byBvdXQ7XG4zNDE3Olx0XHRcdH1cbjM0MTg6XHRcdH0gZWxzZSB7XG4zNDE5Olx0XHRcdG0uZW5jYXAgPSB4LVx1MDAzZWVuY2FwOyAvKiBvbWl0LXRvLWluaGVyaXQgKi9cbjM0MjA6XHRcdH1cbjM0MjE6XHRcbjM0MjI6XHRcdGlmIChhdHRyc1tYRlJNQV9NVElNRVJfVEhSRVNIXSkge1xuMzQyMzpcdFx0XHRlcnIgPSB2ZXJpZnlfbXRpbWVyX3RocmVzaCghIW0uZW5jYXAsIHgtXHUwMDNlZGlyLCBleHRhY2spO1xuMzQyNDpcdFx0XHRpZiAoZXJyKVxuMzQyNTpcdFx0XHRcdGdvdG8gb3V0O1xuMzQyNjpcdFx0fVxuMzQyNzpcdFxuMzQyODpcdFx0aWYgKG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sIDApIFx1MDAyNlx1MDAyNiAhbS5lbmNhcCkge1xuMzQyOTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zNDMwOlx0XHRcdFx0ICAgICAgIFwmIzM0O05BVF9LRUVQQUxJVkVfSU5URVJWQUwgcmVxdWlyZXMgZW5jYXBzdWxhdGlvblwmIzM0Oyk7XG4zNDMxOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDMyOlx0XHRcdGdvdG8gb3V0O1xuMzQzMzpcdFx0fVxuMzQzNDpcdFxuMzQzNTpcdFx0aWYgKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSkge1xuMzQzNjpcdFx0XHRtLnh1byA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSk7XG4zNDM3Olx0XHR9IGVsc2Uge1xuMzQzODpcdFx0XHRib29sIGluaGVyaXRfb2ZmbG9hZCA9ICEodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9DTEVBUl9PRkZMT0FEKTtcbjM0Mzk6XHRcbjM0NDA6XHRcdFx0aWYgKGluaGVyaXRfb2ZmbG9hZCBcdTAwMjZcdTAwMjYgeC1cdTAwM2V4c28uZGV2KSB7XG4zNDQxOlx0XHRcdFx0eHNvX3RvX3h1byhcdTAwMjZ4LVx1MDAzZXhzbywgXHUwMDI2eHVvKTtcbjM0NDI6XHRcdFx0XHRtLnh1byA9IFx1MDAyNnh1bztcbjM0NDM6XHRcdFx0fVxuMzQ0NDpcdFx0fVxuMzQ0NTpcdFxuMzQ0NjpcdFx0aWYgKGF0dHJzW1hGUk1BX01BUktdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnVuY3Rpb24gSW5saW5pbmcgYW5kIENvbmZpZyBEZXBlbmRlbmNpZXMgaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyBwcmV0dHkgc2l6YWJsZSwgc28gaW5saW5pbmcgaXQgc2VlbXMgY29tcGxldGVseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBHaXZlbiBpdHMgc2l6ZSwgaXQgbWFrZXMgc2Vuc2UgdG8gdXNlIGl0IGFzIHRoZSBmb2N1cyBzeW1ib2wgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIEFsc28sIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSBhIGdvb2QgY2FuZGlkYXRlIHRvbywgc28gbGV0JiMzOTtzIGNoZWNrIGl0cyBwcm9wZXJ0aWVzLiBBaCwgZ29vZCwgaXQmIzM5O3Mgc3RhdGljLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgaW5saW5lZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlLCBhbmQgdGhhdCYjMzk7cyBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBUaGlzIHJhaXNlcyB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdCAqbWlnaHQqIGJlIGlubGluZWQuCgpIb3dldmVyLCBhZnRlciBhIGNsb3NlciBsb29rLCBsZXQmIzM5O3Mgc3RpY2sgd2l0aCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhcyB0aGUgZm9jdXMuIFdhaXQgYSBtaW51dGUuLi4gSSByZWNhbGwgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhY3R1YWxseSBjYWxsZWQgaW5kaXJlY3RseSB2aWEgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuIFRoYXQgZGVmaW5pdGl2ZWx5IHJ1bGVzIG91dCBhbnkgY2hhbmNlIG9mIGl0IGJlaW5nIGlubGluZWQsIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIGFsd2F5cyBwcmVjbHVkZSBpbmxpbmluZy4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIENsZWFybHksIGBDT05GSUdfWEZSTV9NSUdSQVRFYCBpcyBhIHByZXJlcXVpc2l0ZS4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSwgdGhvdWdoPyBZZXMsIGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSBpZiBgQ09ORklHX1hGUk1fVVNFUmAgY29tZXMgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipYRlJNIE1pZ3JhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYFhGUk1fTUlHUkFURWAgZmVhdHVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyBgbmV0L3hmcm0vS2NvbmZpZ2AsIHJpZ2h0PyBJJiMzOTtsbCBoZWFkIG92ZXIgdGhlcmUgYW5kIHRha2UgYSBsb29rLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBjbGVhcmx5IGRvY3VtZW50ZWQsIG1heWJlIHdpdGggc29tZSBjb21tZW50cyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIGl0LCB0aGUgc2NlbmFyaW9zIHdoZXJlIGl0JiMzOTtzIHJlbGV2YW50LCBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiBJIGFtIG1pc3NpbmcgYSBsYXJnZXIgY29udGV4dCB0aGF0IEkgaGF2ZSBmb3Jnb3R0ZW4uIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgaW4gdGhlc2UgdHlwZXMgb2YgaW52ZXN0aWdhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFx0ICBTdXBwb3J0IHN1YiBwb2xpY3kgZm9yIGRldmVsb3BlcnMuIEJ5IHVzaW5nIHN1YiBwb2xpY3kgd2l0aCBtYWluXG4gIDU2Olx0XHQgIG9uZSwgdHdvIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIHBhY2tldCBhdCBvbmNlLlxuICA1NzpcdFx0ICBQb2xpY3kgd2hpY2ggbGl2ZXMgc2hvcnRlciB0aW1lIGluIGtlcm5lbCBzaG91bGQgYmUgYSBzdWIuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYwOlx0XG4gIDYxOlx0Y29uZmlnIFhGUk1fTUlHUkFURVxuICA2MjpcdFx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcbiAgNjY6XHRcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxuICA2NzpcdFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cbiAgNjg6XHRcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cbiAgNjk6XHRcbiAgNzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzE6XHRcbiAgNzI6XHRjb25maWcgWEZSTV9TVEFUSVNUSUNTXG4gIDczOlx0XHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbiAgNzQ6XHRcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhGUk0gRGVwZW5kZW5jeSBJbnF1aXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBYRlJNX01JR1JBVEVgIG9wdGlvbiwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYFhGUk1gLiBUaGF0JiMzOTtzIG5vdCBzdXJwcmlzaW5nLCByZWFsbHkuIEJ1dCB3aGF0IGFib3V0IGBYRlJNX1VTRVJgPyBJcyB0aGVyZSBhIGRpcmVjdCBvciBpbmRpcmVjdCByZWxhdGlvbnNoaXAgdGhlcmU/IEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50by4KCkxldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgY2hhbmdlIGlzIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuICBPa2F5LCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgZGV0YWlscyBvbiBob3cgdGhlc2UgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGxpbmtlZCB0b2dldGhlciwgYW5kIHdoZXRoZXIgYFhGUk1fVVNFUmAgbWlnaHQgYmUgaW52b2x2ZWQgd2l0aCBgWEZSTV9NSUdSQVRFYCBpbiBhIHJlbGV2YW50IHdheS4gVGltZSB0byBwYXJzZSB0aGF0IE1ha2VmaWxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSAmIzQzOz0geGZybV9hbGdvLm9cbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICYjNDM7PSB4ZnJtX3VzZXIub1xubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWEZSTSBVc2VyLVNwYWNlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYCBhY3RpdmF0ZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIE15IGluc3RpbmN0cyB0ZWxsIG1lIGl0JiMzOTtzIG5vdCBzaW1wbHkgYW4gaXNvbGF0ZWQgc2V0dGluZy4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBYRlJNX1VTRVJgLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGp1bXAgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBhY3RpdmF0aW9uIGhhcyB3aXRoaW4gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBDT05GSUdfWEZSTV9VU0VSYCBtaWdodCBiZSBnYXRpbmcgc29tZSBvdGhlciBpbXBvcnRhbnQgZmVhdHVyZXMgb3Igc2V0dGluZyB1cCBhIHByZXJlcXVpc2l0ZSBjaGFpbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgY3VycmVudCBhc3N1bXB0aW9ucyBhcmUgcmlnaHQsIG9yIGlmIHRoZXJlJiMzOTtzIG1vcmUgdG8gY29uc2lkZXIgd2l0aCB0aGF0IG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fVVNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEZXBlbmRlbmNpZXMsIERlcGVuZGVuY2llcywgRXZlcnl3aGVyZSEqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYFhGUk1fVVNFUmAgaGVyZS4gSXQgc2VlbXMgcHJldHR5IG9idmlvdXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byByZWx5IG9uIGJvdGggYElORVRgIGFuZCB0aGUgY29yZSBgWEZSTWAgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byBiZSBzdXJlLiBNeSBuZXh0IHN0ZXAgdGhlbiBpcyBzdHJhaWdodGZvcndhcmQ7IGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBleHBsaWNpdGx5IHZlcmlmeSB0aG9zZSBgWEZSTV9VU0VSYCBkZXBlbmRlbmNpZXMuIE5vIGFzc3VtcHRpb25zLCBqdXN0IHNvbGlkIHZlcmlmaWNhdGlvbiwgc28gSSBkb27igJl0IHJ1biBpbnRvIGFueSB1bmV4cGVjdGVkIHBpdGZhbGxzIGxhdGVyIG9uLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICAyMTpcdFxuICAyMjpcdGlmIElORVRcbiAgMjM6XHRjb25maWcgWEZSTV9VU0VSXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4gIDI1Olx0XHRzZWxlY3QgWEZSTV9BTEdPXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAgMjg6XHRcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXHUwMDI2XHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcdTAwMjZcdTAwMjYgXFxcbiAgMzU6XHRcdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuICAzNjpcdFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzc6XHRcdGhlbHBcbiAgMzg6XHRcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXG4gIDM5Olx0XHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjA0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFhGUk0gTWlncmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFhGUk1fVVNFUmAgYW5kIGBYRlJNX01JR1JBVEVgIHNpdHVhdGlvbiwgYW5kIGl0IHNlZW1zIHRoZXkgYm90aCBsaXZlIHdpdGhpbiB0aGUgYGlmIElORVRgIGNvbmRpdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHdlIGRlZmluaXRlbHkgbmVlZCB0byBlbmFibGUgYm90aCBvZiB0aGVtLiBUaGV5JiMzOTtyZSBib3RoIGJvb2wvdHJpc3RhdGUsIHNvIGFkZGluZyB0aGVtIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgpOb3csIHRoZSBjcnVjaWFsIHBhcnQgaXMgaWRlbnRpZnlpbmcgYSBzdWl0YWJsZSBmb2N1cyBzeW1ib2wgZm9yIHN5emthbGxlci4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBCdXQsIHdhaXQsIHRoYXQmIzM5O3MgYSAqc3RhdGljKiBmdW5jdGlvbi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gTHVja2lseSwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlubGluZWQ/IExldCYjMzk7cyBjaGVjay4gQWgsIGdvb2QuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuCgpgYGBjCnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHsKCWludCAoKmRvaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBubG1zZ2hkciAqLCBzdHJ1Y3QgbmxhdHRyICoqLAoJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICopOwoJaW50ICgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKik7CglpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqKTsKCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpubGFfcG9sOwoJaW50IG5sYV9tYXg7Cn0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHsKLi4uCglbWEZSTV9NU0dfTUlHUkFURV9TVEFURSAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZSB9LAouLi4KfTsKYGBgCgpTaW5jZSBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgaXQgKmNhbm5vdCogYmUgY29tcGxldGVseSBpbmxpbmVkLiBBdCBsZWFzdCBhbiBvdXQtb2YtbGluZSBjb3B5ICptdXN0KiBleGlzdC4gVGhpcyBtZWFucyBpdCB3aWxsIGhhdmUgYSBzeW1ib2wgaW4gdGhlIGtlcm5lbCBpbWFnZSwgc29tZXRoaW5nIGxpa2UgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgb3IgcGVyaGFwcyBgeGZybV9kb19taWdyYXRlX3N0YXRlLmlzcmEuMGAsIGFuZCBzeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgbWF0Y2ggdGhhdC4KCkkmIzM5O20gdGhpbmtpbmcgbm93IGFib3V0IG90aGVyIHBvdGVudGlhbCBmdW5jdGlvbnMsIHN1Y2ggYXMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSXQgKmlzKiBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCwgc28gdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGF0IGl0IGlzIGlubGluZWQuIFRoZW4sIGxldCYjMzk7cyBsb29rIGF0IGB4ZnJtX25sbXNnX211bHRpY2FzdGAuICBZZXMsIGl0IGlzIGV4cGxpY2l0bHkgbWFya2VkIGBpbmxpbmVgLiBTbywgaXQgbG9va3MgbGlrZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgYmVzdCBmb2N1cyBzeW1ib2wuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgY29uc2lkZXJlZC4gT2theSwgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBhbHNvIHN0YXRpYy4gTGV0IG1lIGp1c3QgY2hlY2sgdGhlIHNpemUgb2YgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMyMjpcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuMzMyMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbjMzMjQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4zMzI1Olx0XHRcdFx0XHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXG4zMzI2Olx0e1xuMzMyNzpcdFx0aW50IGVycjtcbjMzMjg6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4zMzI5Olx0XG4zMzMwOlx0XHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUobSwgZGlyKSwgR0ZQX0FUT01JQyk7XG4zMzMxOlx0XHRpZiAoIXNrYilcbjMzMzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMzMzOlx0XG4zMzM0Olx0XHRlcnIgPSBidWlsZF9taWdyYXRlX3N0YXRlKHNrYiwgdW0sIG0sIGRpciwgcG9ydGlkLCBzZXEpO1xuMzMzNTpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMzMzNjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjMzMzc6XHRcdFx0cmV0dXJuIGVycjtcbjMzMzg6XHRcdH1cbjMzMzk6XHRcbjMzNDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMzNDE6XHRcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4zMzQyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMzNDM6XHRcbjMzNDQ6XHRcdHJldHVybiBlcnI7XG4zMzQ1Olx0fVxuMzM0NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc3NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBSQ1UgTG9jayBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGEgcmVsYXRpdmVseSBzbWFsbCBhcmVhLiBUaGUgZnVuY3Rpb24gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hhdCB0aGUgYWN0dWFsIHNjb3BlIG9mIGltcGFjdCBtaWdodCBiZS4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBmdW5jdGlvbiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIGRlY2VudCBzaXplIGFuZCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LgoKTGV0IG1lIGNpcmNsZSBiYWNrIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgZm9yIGEgbW9tZW50LiBSaWdodCwgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRoaW4gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24uIEFoLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZml4ISBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgbWlzc2luZyBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBjcml0aWNhbC4gQSBtaXNzaW5nIGxvY2sgaGVyZSBjb3VsZCBlYXNpbHkgbGVhZCB0byBSQ1Ugd2FybmluZ3Mgb3IsIGV2ZW4gd29yc2UsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBkYXRhIGludGVncml0eSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uCgpUbyByZXBsaWNhdGUgdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4KClRoZSBlc3NlbmNlIG9mIHRoZSBmaXggaXMgdG8gaW5zZXJ0IHRoZSBtaXNzaW5nIFJDVSByZWFkIGxvY2sgYXJvdW5kIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2hlbiBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBSQ1UgaXNzdWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBJIHRoaW5rIGl0JiMzOTtzIGltcG9ydGFudCB0byB2ZXJpZnkgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBpbmRlZWQgdGhlIHNvbGUgY2FsbGVyIG9mIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAsIGF0IGxlYXN0IGZyb20gdGhlIG1haW4gY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwNQoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIGV2aWRlbmNlIHBvaW50cyB0byB0aGlzIGJlaW5nIHRoZSBvbmx5IGNhbGxlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeS4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzLCBhcyB0aGlzIGlzIGEga25vd24gYXJlYSBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4KCmBYRlJNYCBpcyBkZWZpbml0ZWx5IHNlbGVjdGVkIGR1ZSB0byBgSU5FVGAsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3csIGBYRlJNX1VTRVJgIGRlcGVuZHMgb24gYElORVRgIGFzIHdlbGwsIGFzIGV4cGVjdGVkLiBBbmQgb2YgY291cnNlLCBgWEZSTV9NSUdSQVRFYCByZWxpZXMgb24gYFhGUk1gLiBDb25zaWRlcmluZyB0aG9zZSByZWxhdGlvbnNoaXBzLCBpdCBzZWVtcyB0aGF0IHNlbGVjdGluZyBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gc2F0aXNmeSBhbGwgZGVwZW5kZW5jaWVzLgoKVGhhdCBzZWVtcyBsaWtlIGEgc2FmZSBiZXQuIFNvLCBub3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MDguOTEwMTgwNTk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk4MzMzNDcxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaW4gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYnVnIGZpeCB0byBwcmV2ZW50IFJDVSB3YXJuaW5ncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gc2VuZGluZyBYRlJNIG1pZ3JhdGUgc3RhdGUgbmV0bGluayBtZXNzYWdlcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgY29tbWFuZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MDguOTEwMTg5Njc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIyOTkzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjM1OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4wYmEwNjE0ZDY1MGYzIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMzMzNyw3ICszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTowOS4zNjM0NDg4NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5OTM4MDA2NTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZjdiNDM5ODFlZTZkYjdhM2M4OTJmYWRlY2Q4ZjZmNWRhYjYwMzVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzU6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi4wYmEwNjE0ZDY1MGYzIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMzMzNyw3ICszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjA5LjM2MzQ1MDY5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDA3ODAzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIHhmcm0gUGF0Y2ggYW5kIE1pZ3JhdGlvbiBTdGF0ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaW5zaWRlIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoeSB0aGVzZSBsb2NrcyBhcm91bmQgKnRoYXQqIHNwZWNpZmljIGNhbGw/IGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXNuJ3QgYWx3YXlzIHRoZSBtb3N0IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhcnQsIHNvIGl0IGhhcyBtZSBjdXJpb3VzLlxuXG5UaGUgbmV4dCBzdGVwLCBmb3IgbWUsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuIEl0J3MgZWl0aGVyIGNhbGxlZCBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLCBvciBwb3NzaWJseSBzb21ld2hlcmUgZWxzZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgZWxzZSwgc28gSSdsbCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIGFuZCBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyBhbmQgd2h5IHRoZXNlIFJDVSBsb2NrcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhpcyBwYXRjaCBhaW1zIHRvIHByZXZlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToxMy43MDQyMzU1NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NjYwMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzIyOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MTE6XFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXFx1MDAyNm0sIHhjLVxcdTAwM2VkaXIsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cXHRcXHRcXHRcXHQgICAgICBubGgtXFx1MDAzZW5sbXNnX3BpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToxMy45NDM5MDA4NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMzMDQwMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgQ2FsbCoqXG5cbk9rYXksIHNvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgZG9lcyB0aGlzIGNvZGUgcGF0aCBnZXQgYWN0aXZhdGVkPyogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24ga25vYnMgb3IgdW5kZXJseWluZyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIG1pZ3JhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHRvIHNlZSB3aGF0IHNldHMgdXAgdGhlIGNhbGwuIEkgYmV0IHRoZXJlIGFyZSBzb21lIHJlbGV2YW50IHN5c2N0bHMsIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciBuZXRsaW5rIG1lc3NhZ2VzIHRoYXQgYXJlIGNvbmZpZ3VyaW5nIHRoZSBiZWhhdmlvci4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjE3LjQ3Njk1NzU0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTU2ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI5OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODI6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjE3LjU2NjUzMTg1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjY2NDc4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFhGUk1fTVNHX01JR1JBVEVfU1RBVEUgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGEgc3RhdGUgbWlncmF0aW9uIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIE15IGZpcnN0IGluY2xpbmF0aW9uIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIGFuZCBnaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZXJlJ3Mgc29tZXRoaW5nIHNwZWNpZmljIEkgbmVlZCB0byBjaGVjayBvdXQgaW4gaXRzIGhhbmRsaW5nLiBJJ20gZ29pbmcgdG8ganVtcCB0byB0aGF0IGAjZWxzZWAgYmxvY2sgYXJvdW5kIGxpbmUgMzUyOC4gSSBoYXZlIGEgaHVuY2ggdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFzcGVjdCBvZiBzdGF0ZSBtaWdyYXRpb24sIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcgb3IgYSBmYWxsLWJhY2sgc2NlbmFyaW8sIGlzIGxpa2VseSBpbXBsZW1lbnRlZC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGF0IGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MjAuNzkzMTgxOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzUyMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjM1MjE6XFx0b3V0X3hjOlxcbjM1MjI6XFx0XFx0eGMtXFx1MDAzZWttLnN0YXRlID0gWEZSTV9TVEFURV9ERUFEO1xcbjM1MjM6XFx0XFx0eGZybV9zdGF0ZV9wdXQoeGMpO1xcbjM1MjQ6XFx0XFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuMzUyNTpcXHRcXHRyZXR1cm4gZXJyO1xcbjM1MjY6XFx0fVxcbjM1Mjc6XFx0XFxuMzUyODpcXHQjZWxzZVxcbjM1Mjk6XFx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMzUzMDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzUzMTpcXHR7XFxuMzUzMjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJYRlJNX01TR19NSUdSQVRFX1NUQVRFIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4zNTMzOlxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuMzUzNDpcXHR9XFxuMzUzNTpcXHRcXG4zNTM2OlxcdHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbjM1Mzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzUzODpcXHR7XFxuMzUzOTpcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyMC43OTM0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjY5NzU5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIE1hemUqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIGxpbmUgMzM0Ny4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBgI2lmYCBzaXR1YXRpb24gbG9va2luZyBsaWtlIGFyb3VuZCB0aGVyZT9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvZGUgYmxvY2tzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIG9yIG91dCBhdCB0aGF0IHNwZWNpZmljIHBvaW50LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBpdCdzIHdpdGhpbiBhIG5lc3RlZCBgI2lmYCBibG9jay4gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoaWVyYXJjaHkgYW5kIHRoZSBkZWZpbmluZyBzeW1ib2xzIGFjdGl2ZSBhdCB0aGF0IGxldmVsLlxuXG5NeSBnb2FsIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoaWNoIGNvbXBpbGF0aW9uIHBhdGggdGhpcyBsaW5lIHBvdGVudGlhbGx5IGNvbnRyaWJ1dGVzIHRvLCBhbmQgaWYgSSBuZWVkIHRvIGJhY2sgdXAgYW5kIHVuZGVyc3RhbmQgYW55IGxvZ2ljIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGRpY3RhdGUgdGhlIGJlaGF2aW9yIGJlaW5nIGV4ZWN1dGVkIGluIHRoYXQgYXJlYS4gSSB3aWxsIGFsc28gYmUgbG9va2luZyB0byBzZWUgd2hhdCB0aGUgY29uZGl0aW9uYWwgcmVmZXJzIHRvLCBhbmQgd2hhdCB2YXJpYWJsZXMgbWlnaHQgYmUgZ2V0dGluZyBkZWZpbmVkIGluIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcGxhdGZvcm0sIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgc2hvdWxkIGdpdmUgbWUgZW5vdWdoIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjI0LjQ2MDQ0ODgxMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MzY1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0xMjA0PXN0YXRpYyB2b2lkIHhzb190b194dW9faWZpbmRleChjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxNDojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTk4MT1zdGF0aWMgaW50IHZlcmlmeV9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTg0LVxcdGNhc2UgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOlxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5ODU6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xOTg2LVxcdGNhc2UgWEZSTV9QT0xJQ1lfVFlQRV9TVUI6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzNzgte1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzNzk6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgwLVxcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlKSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzODY6I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzg3LXN0YXRpYyBpbnQgY29weV90b191c2VyX3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQyPXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzExNzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MzY9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDM6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ0LXN0YXRpYyBpbnQgY29weV90b191c2VyX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MjQuNjU0ODIyNjcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDIzNTUxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIHJlbGF0ZWQgdG8gYENPTkZJR19YRlJNX01JR1JBVEVgLiBSaWdodCwgZ290IGl0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFkZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLiBOb3csIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZz8gSG1tLCB5ZWFoLCBhYnNvbHV0ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZml4IGZvciBzb21ldGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdhcyBwb3RlbnRpYWxseSBiZWluZyBjYWxsZWQgd2l0aG91dCB0aGUgYXBwcm9wcmlhdGUgUkNVIHByb3RlY3Rpb24g4oCTIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbywgcHJvYmFibHkuIFxuXG5XYWl0IGEgbWludXRlLCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLi4uIHRoYXQncyBhIG11bHRpY2FzdCBmdW5jdGlvbi4gT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29udGV4dCBtYWtlcyBzZW5zZS4gVGltZSB0byBjaGVjayBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEdvdHRhIGNvbmZpcm0gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyOC43NTcxODA0NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzc3Mzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25sbXNnX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0xNTk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybV9zdGF0ZV9uZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjI2LSAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mjc6c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MjgtXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBwaWQsIHVuc2lnbmVkIGludCBncm91cClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1MTQ9c3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MzktXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDA6XFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9QT0xJQ1kpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1NDEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzIyPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0MTpcXHRlcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjMyPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY0OC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ5OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NTAtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzk4ND1zdGF0aWMgaW50IHhmcm1fZXhwX3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTk4OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzk5OS19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDAxPXN0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwMTQ6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfQUVWRU5UUyk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAxNS19XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDE3PXN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2FfZmx1c2goY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAzOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDQwOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDQxLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQxMDE9c3RhdGljIGludCB4ZnJtX25vdGlmeV9zYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE1Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MTUzOlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX1NBKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTU0LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDIzOT1zdGF0aWMgaW50IHhmcm1fc2VuZF9hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp4dCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNTItXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDI1MzpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9BQ1FVSVJFKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjU0LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQzNjI9c3RhdGljIGludCB4ZnJtX2V4cF9wb2xpY3lfbm90aWZ5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDM3NTpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNzYtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDM3OD1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NDI6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQzLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDQ0OT1zdGF0aWMgaW50IHhmcm1fbm90aWZ5X3BvbGljeV9mbHVzaChjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDY5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0NzA6XFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDcxLVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDUyOT1zdGF0aWMgaW50IHhmcm1fc2VuZF9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90byxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU0MjpcXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9SRVBPUlQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NDMtfVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDU3Nz1zdGF0aWMgaW50IHhmcm1fc2VuZF9tYXBwaW5nKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB4ZnJtX2FkZHJlc3NfdCAqaXBhZGRyLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU5Ni1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NTk3OlxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01BUFBJTkcpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyOC44NzQ5NjAwNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4ODEzMjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGZvciBYRlJNIFN0YXRlIE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggcHJvcG9zZXMgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFyb3VuZCB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIGEgc2xpZ2h0IGV5ZWJyb3cgcmFpc2UuIFdoeSBub3c/IFdoeSBzcGVjaWZpY2FsbHkgaGVyZT8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbSwgdXNlZCBmb3Igc2VuZGluZyBuZXRsaW5rIG1lc3NhZ2VzIGFib3V0IHNlY3VyaXR5IHBvbGljeSBjaGFuZ2VzLiBJJ20gcmVhc29uYWJseSBmYW1pbGlhciB3aXRoIHRoZSBjb2RlYmFzZSwgYW5kIG15IG1lbW9yeSB0ZWxscyBtZSB0aGF0IGl0J3MgY2FsbGVkIGZyb20gcXVpdGUgYSBmZXcgcGxhY2VzICp3aXRob3V0KiBhbiBSQ1UgcmVhZCBsb2NrIGFscmVhZHkgaW4gcGxhY2UuIFRoaXMgc2VlbXMuLi4gaW5jb25zaXN0ZW50LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIG9yIGEgc2lnbiBvZiBpbXByb3BlciB1c2FnZS4gSXQgd2FycmFudHMgZGVlcGVyIGludmVzdGlnYXRpb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIGNhbGwgc2l0ZXMgb2YgYHhmcm1fbmxtc2dfbXVsdGljYXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJvcG9zZWQgY2hhbmdlIGlzbid0IGFkZHJlc3NpbmcgYW4gaXNvbGF0ZWQgaXNzdWUgd2hpbGUgbGVhdmluZyBwb3RlbnRpYWxseSBsYXJnZXIsIHN5c3RlbWljIHByb2JsZW1zIHVuYWRkcmVzc2VkLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGlzdGluZyBsb2NraW5nIGFzc3VtcHRpb25zLCBhbmQgd2hlcmUgYW5kIHdoeSB0aG9zZSBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgdmlvbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTozNy41NjMwOTYyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MjA6XFx0XFxuMTYyMTpcXHRcXHRyZXR1cm4gc2tiO1xcbjE2MjI6XFx0fVxcbjE2MjM6XFx0XFxuMTYyNDpcXHQvKiBBIHdyYXBwZXIgZm9yIG5sbXNnX211bHRpY2FzdCgpIGNoZWNraW5nIHRoYXQgbmxzayBpcyBzdGlsbCBhdmFpbGFibGUuXFxuMTYyNTpcXHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2suXFxuMTYyNjpcXHQgKi9cXG4xNjI3OlxcdHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNjI4OlxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApXFxuMTYyOTpcXHR7XFxuMTYzMDpcXHRcXHRzdHJ1Y3Qgc29jayAqbmxzayA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXFx1MDAzZXhmcm0ubmxzayk7XFxuMTYzMTpcXHRcXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XFxuMTYzMjpcXHRcXG4xNjMzOlxcdFxcdGlmICghbmxzaykge1xcbjE2MzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTYzNTpcXHRcXHRcXHRyZXR1cm4gLUVQSVBFO1xcbjE2MzY6XFx0XFx0fVxcbjE2Mzc6XFx0XFxuMTYzODpcXHRcXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxuMTYzOTpcXHRcXHRpZiAoeHRyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjM3LjU2MzMyMjE0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIxNDM4NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBSQ1UgUmVhZCBMb2NrIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpcyB0aHJvd2luZyBhIFwiTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrXCIgbWVzc2FnZS4gUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIG1pc3NpbmcgUkNVIHJlYWQgbG9jay4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgbWlzc2luZyBsb2NrcyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgd2l0aCBSQ1UsIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBmb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBhdCBsZWFzdCBhbm5veWluZyBSQ1Ugd2FybmluZ3MuIFNvLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYS5cblxuVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmUgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgb3IgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSB1c2VkLiBMZXQncyBzZWUuLi4gSXMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgc3RhdGljPyBZZXAsIGl0IGlzLiBIbW0sIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCdzIGlzb2xhdGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIHZpYSBhIGBkb2l0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIGB4ZnJtX2xpbmtgIHRhYmxlLiBPa2F5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGB4ZnJtX2xpbmtgIHRhYmxlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgcGF0aC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIHRvIHRha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0MS44ODQ3NjQwMjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTIzNzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzczOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYKzFdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ1LVxcdGludCAoKmRvaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBubG1zZ2hkciAqLCBzdHJ1Y3QgbmxhdHRyICoqLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzg0MT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzg0NS1cXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgrMV07XFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzg0NjpcXHRjb25zdCBzdHJ1Y3QgeGZybV9saW5rICpsaW5rO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4NDctXFx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjQyLjAxMDAwNjM0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk5OTIzNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWEZSTSBNaWdyYXRpb24gRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBYRlJNIG1pZ3JhdGlvbiBwcm9jZXNzLiBUaGUgb2J2aW91cyBlbnRyeSBwb2ludCBzZWVtcyB0byBiZSBgeGZybV91c2VyX3Jjdl9tc2dgLCB0aGF04oCZcyB3aGVyZSB0aGUgbmV0bGluayBtZXNzYWdlcyBraWNrIHRoaW5ncyBvZmYuIE5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBlaXRoZXIgYHhmcm1fZG9fbWlncmF0ZWAgb3IgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXNuJ3QgaXQ/XG5cbkFuZCB0aGF0IHJhaXNlcyBhIHF1ZXN0aW9uLCBjYW4gU3l6a2FsbGVyIHJlYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHk/IEl0J3MgZ29vZCBmb3Igc3lzY2FsbHMsIHdoaWNoIGFyZSBpdHMgYnJlYWQgYW5kIGJ1dHRlciwgYnV0IEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdl4oCZcmUgdXNpbmcgYEZvY3VzU3ltYm9sc2AgaGVyZSB0byBzdGVlciBpdHMgY292ZXJhZ2UuIElkZWFsbHksIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBwb2ludGluZyB0byBmdW5jdGlvbnMgdGhhdCBhcmVuJ3Qgc3RhdGljIG9yIGlubGluZWQuIFRoYXQgd2F5LCB3ZSBnZXQgYSBtdWNoIGJldHRlciBjaGFuY2Ugb2YgZ29vZCBjb3ZlcmFnZS5cblxuT2theSwgc28gZ29pbmcgYmFjayB0byBgeGZybV91c2VyX3Jjdl9tc2dgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJIG11c3QgY29uZmlybSB3aGV0aGVyIGB4ZnJtX3VzZXJfcmN2X21zZ2AgaXRzZWxmIGlzIHN0YXRpYyBvciBub3QuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIG91ciBlbnRyeSBwb2ludCBzZWxlY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjQ3LjMwOTkzMjY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM1Njc5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9Mzc4NT1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4NDE6c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQyLVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzkyOD1zdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTMyLVxcdG11dGV4X2xvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX2NmZ19tdXRleCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzkzMzpcXHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcXHUwMDI2eGZybV91c2VyX3Jjdl9tc2cpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MzQtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0Ny42MzM1MDY3NDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzM0NzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgUGFja2V0IFJlY2VwdGlvbiBpbiB0aGUgWEZSTSBTdWJzeXN0ZW0qKlxuXG5IbW0sIHNvIGB4ZnJtX3VzZXJfcmN2X21zZ2AgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCB0aGUgZGlmZmVyZW50IGVudHJ5IHBvaW50cyBhbmQgcHJvY2Vzc2luZyBwYXRocyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YS4gR2l2ZW4gdGhhdCwgSSB3b25kZXIuLi4gd2hhdCBhYm91dCBgeGZybV9uZXRsaW5rX3JjdmA/IEkgbmVlZCB0byBjb25zaWRlciB0aGF0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLCBpbiB0aGUgY29udGV4dCBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgcmVjZXB0aW9uIHBhdGhzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIHNlY3VyZS4gUGVyaGFwcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIGFuZCBydWxlcyBhcmUgYXBwbGllZC4gR290dGEga2VlcCB0aGlua2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjUwLjk1Njg1Nzc0MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4ODY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uZXRsaW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zODQxPXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTI3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5Mjg6c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5Mjkte1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYxNj1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybV91c2VyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MjAtXFx0XFx0Lmdyb3Vwc1xcdD0gWEZSTU5MR1JQX01BWCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjIxOlxcdFxcdC5pbnB1dFxcdD0geGZybV9uZXRsaW5rX3JjdixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjIyLVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjUxLjA1Mzc1MDUxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIyMjMxMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgRm9jdXNTeW1ib2xzYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIGl0J3MgYmVoYXZpbmcgc3RhdGljYWxseSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGXigKYgaWYgYEZvY3VzU3ltYm9sc2AgYXJlbid0IGlubGluZWQsIHRoZXkgKmNhbiogYmUgc3RhdGljLiBBbmQgaGV5LCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIHByZXR0eSBzaXplYWJsZSBmdW5jdGlvbi4gSXQncyB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3b3VsZCBvcHRpbWl6ZSBpdCBieSBpbmxpbmluZy4gR2l2ZW4gdGhhdCBhc3N1bXB0aW9uLCBJIHJlYWxseSBzaG91bGQgY2hlY2sgdGhlIGFjdHVhbCBzaXplIG9mIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGp1c3QgdG8gYmUgc3VyZS4gSXQncyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODc1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NTQuNDc1OTg0NTQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQ3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM0NzpcXHRzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4zMzQ4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zMzQ5OlxcdHtcXG4zMzUwOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0gPSBubG1zZ19kYXRhKG5saCk7XFxuMzM1MTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4zMzUyOlxcdFxcdHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCB4dW8gPSB7fTtcXG4zMzUzOlxcdFxcdHN0cnVjdCB4ZnJtX21pZ3JhdGUgbSA9IHt9O1xcbjMzNTQ6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKnhjO1xcbjMzNTU6XFx0XFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuMzM1NjpcXHRcXHRpbnQgZXJyO1xcbjMzNTc6XFx0XFxuMzM1ODpcXHRcXHRpZiAoIXVtLVxcdTAwM2VpZC5zcGkpIHtcXG4zMzU5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgU1BJIDB4MFxcXCIpO1xcbjMzNjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzM2MTpcXHRcXHR9XFxuMzM2MjpcXHRcXG4zMzYzOlxcdFxcdGlmICh1bS1cXHUwMDNlcmVzZXJ2ZWQpIHtcXG4zMzY0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlc2VydmVkIGZpZWxkIG11c3QgYmUgemVyb1xcXCIpO1xcbjMzNjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzM2NjpcXHRcXHR9XFxuMzM2NzpcXHRcXG4zMzY4OlxcdFxcdGlmICh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XFxuMzM2OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwiVW5rbm93biBmbGFnczogMHgleFxcXCIsXFxuMzM3MDpcXHRcXHRcXHRcXHRcXHQgICB1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKTtcXG4zMzcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNzI6XFx0XFx0fVxcbjMzNzM6XFx0XFxuMzM3NDpcXHRcXHRlcnIgPSB2ZXJpZnlfeGZybV9mYW1pbHkodW0tXFx1MDAzZW5ld19mYW1pbHksIGV4dGFjayk7XFxuMzM3NTpcXHRcXHRpZiAoZXJyKVxcbjMzNzY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzc3OlxcdFxcbjMzNzg6XFx0XFx0aWYgKCEodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSkge1xcbjMzNzk6XFx0XFx0XFx0ZXJyID0gdmVyaWZ5X3NlbGVjdG9yX3ByZWZpeGxlbih1bS1cXHUwMDNlbmV3X3NlbC5mYW1pbHksXFxuMzM4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dW0tXFx1MDAzZW5ld19zZWwsIGV4dGFjayk7XFxuMzM4MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjMzODI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzgzOlxcdFxcdH1cXG4zMzg0OlxcdFxcbjMzODU6XFx0XFx0Y29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShcXHUwMDI2bSwgdW0pO1xcbjMzODY6XFx0XFxuMzM4NzpcXHRcXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtLm9sZF9tYXJrLnYgXFx1MDAyNiBtLm9sZF9tYXJrLm0sXFxuMzM4ODpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuc3BpLFxcbjMzODk6XFx0XFx0XFx0XFx0ICAgICAgdW0tXFx1MDAzZWlkLnByb3RvLCB1bS1cXHUwMDNlaWQuZmFtaWx5KTtcXG4zMzkwOlxcdFxcdGlmICgheCkge1xcbjMzOTE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2FuIG5vdCBmaW5kIHN0YXRlXFxcIik7XFxuMzM5MjpcXHRcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbjMzOTM6XFx0XFx0fVxcbjMzOTQ6XFx0XFxuMzM5NTpcXHRcXHRpZiAodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSB7XFxuMzM5NjpcXHRcXHRcXHR1OCBwcmVmaXhsZW4gPSAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xcbjMzOTc6XFx0XFxuMzM5ODpcXHRcXHRcXHRpZiAoeC1cXHUwMDNlc2VsLnByZWZpeGxlbl9zICE9IHgtXFx1MDAzZXNlbC5wcmVmaXhsZW5fZCB8fFxcbjMzOTk6XFx0XFx0XFx0ICAgIHgtXFx1MDAzZXNlbC5wcmVmaXhsZW5fZCAhPSBwcmVmaXhsZW4gfHxcXG4zNDAwOlxcdFxcdFxcdCAgICAheGZybV9hZGRyX2VxdWFsKFxcdTAwMjZ4LVxcdTAwM2VzZWwuZGFkZHIsIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkciwgeC1cXHUwMDNlcHJvcHMuZmFtaWx5KSB8fFxcbjM0MDE6XFx0XFx0XFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZXNlbC5zYWRkciwgXFx1MDAyNngtXFx1MDAzZXByb3BzLnNhZGRyLCB4LVxcdTAwM2Vwcm9wcy5mYW1pbHkpKSB7XFxuMzQwMjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzQwMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIlNBIHNlbGVjdG9yIGlzIG5vdCBhIHNpbmdsZS1ob3N0IG1hdGNoIGZvciBTQSBhZGRyZXNzZXNcXFwiKTtcXG4zNDA0OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzQwNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zNDA2OlxcdFxcdFxcdH1cXG4zNDA3OlxcdFxcdH1cXG4zNDA4OlxcdFxcbjM0MDk6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX0VOQ0FQXSkge1xcbjM0MTA6XFx0XFx0XFx0bS5lbmNhcCA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX0VOQ0FQXSk7XFxuMzQxMTpcXHRcXHRcXHRpZiAobS5lbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSA9PSAwKSB7XFxuMzQxMjpcXHRcXHRcXHRcXHRtLmVuY2FwID0gTlVMTDsgLyogc2VudGluZWw6IHJlbW92ZSBlbmNhcCAqL1xcbjM0MTM6XFx0XFx0XFx0fSBlbHNlIGlmIChtLmVuY2FwLVxcdTAwM2VlbmNhcF90eXBlICE9IFVEUF9FTkNBUF9FU1BJTlVEUCkge1xcbjM0MTQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiB0eXBlXFxcIik7XFxuMzQxNTpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM0MTY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzQxNzpcXHRcXHRcXHR9XFxuMzQxODpcXHRcXHR9IGVsc2Uge1xcbjM0MTk6XFx0XFx0XFx0bS5lbmNhcCA9IHgtXFx1MDAzZWVuY2FwOyAvKiBvbWl0LXRvLWluaGVyaXQgKi9cXG4zNDIwOlxcdFxcdH1cXG4zNDIxOlxcdFxcbjM0MjI6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX01USU1FUl9USFJFU0hdKSB7XFxuMzQyMzpcXHRcXHRcXHRlcnIgPSB2ZXJpZnlfbXRpbWVyX3RocmVzaCghIW0uZW5jYXAsIHgtXFx1MDAzZWRpciwgZXh0YWNrKTtcXG4zNDI0OlxcdFxcdFxcdGlmIChlcnIpXFxuMzQyNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zNDI2OlxcdFxcdH1cXG4zNDI3OlxcdFxcbjM0Mjg6XFx0XFx0aWYgKG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sIDApIFxcdTAwMjZcXHUwMDI2ICFtLmVuY2FwKSB7XFxuMzQyOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzQzMDpcXHRcXHRcXHRcXHQgICAgICAgXFxcIk5BVF9LRUVQQUxJVkVfSU5URVJWQUwgcmVxdWlyZXMgZW5jYXBzdWxhdGlvblxcXCIpO1xcbjM0MzE6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zNDMyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0MzM6XFx0XFx0fVxcbjM0MzQ6XFx0XFxuMzQzNTpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfT0ZGTE9BRF9ERVZdKSB7XFxuMzQzNjpcXHRcXHRcXHRtLnh1byA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSk7XFxuMzQzNzpcXHRcXHR9IGVsc2Uge1xcbjM0Mzg6XFx0XFx0XFx0Ym9vbCBpbmhlcml0X29mZmxvYWQgPSAhKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9DTEVBUl9PRkZMT0FEKTtcXG4zNDM5OlxcdFxcbjM0NDA6XFx0XFx0XFx0aWYgKGluaGVyaXRfb2ZmbG9hZCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2V4c28uZGV2KSB7XFxuMzQ0MTpcXHRcXHRcXHRcXHR4c29fdG9feHVvKFxcdTAwMjZ4LVxcdTAwM2V4c28sIFxcdTAwMjZ4dW8pO1xcbjM0NDI6XFx0XFx0XFx0XFx0bS54dW8gPSBcXHUwMDI2eHVvO1xcbjM0NDM6XFx0XFx0XFx0fVxcbjM0NDQ6XFx0XFx0fVxcbjM0NDU6XFx0XFxuMzQ0NjpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfTUFSS10pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjU0LjQ3NjI2MTYxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjgzNTkxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBJbmxpbmluZyBhbmQgQ29uZmlnIERlcGVuZGVuY2llcyBpbiB0aGUgWEZSTSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uIOKAkyBpdCdzIHByZXR0eSBzaXphYmxlLCBzbyBpbmxpbmluZyBpdCBzZWVtcyBjb21wbGV0ZWx5IG91dCBvZiB0aGUgcXVlc3Rpb24uIEdpdmVuIGl0cyBzaXplLCBpdCBtYWtlcyBzZW5zZSB0byB1c2UgaXQgYXMgdGhlIGZvY3VzIHN5bWJvbCBmb3IgZnVydGhlciBhbmFseXNpcy4gQWxzbywgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUgdG9vLCBzbyBsZXQncyBjaGVjayBpdHMgcHJvcGVydGllcy4gQWgsIGdvb2QsIGl0J3Mgc3RhdGljLiBOb3csIGxldCdzIHNlZSBpZiBpdCdzIGlubGluZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBvbmx5IGNhbGxlZCBvbmNlLCBhbmQgdGhhdCdzIGZyb20gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIFRoaXMgcmFpc2VzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0ICptaWdodCogYmUgaW5saW5lZC5cblxuSG93ZXZlciwgYWZ0ZXIgYSBjbG9zZXIgbG9vaywgbGV0J3Mgc3RpY2sgd2l0aCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhcyB0aGUgZm9jdXMuIFdhaXQgYSBtaW51dGUuLi4gSSByZWNhbGwgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhY3R1YWxseSBjYWxsZWQgaW5kaXJlY3RseSB2aWEgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuIFRoYXQgZGVmaW5pdGl2ZWx5IHJ1bGVzIG91dCBhbnkgY2hhbmNlIG9mIGl0IGJlaW5nIGlubGluZWQsIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIGFsd2F5cyBwcmVjbHVkZSBpbmxpbmluZy5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBDbGVhcmx5LCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSBwcmVyZXF1aXNpdGUuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UsIHRob3VnaD8gWWVzLCBsZXQncyBpbnZlc3RpZ2F0ZSBpZiBgQ09ORklHX1hGUk1fVVNFUmAgY29tZXMgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjAyLjE1OTg1NTkzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjYyMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX01JR1JBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNjAtXFxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy02Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjowMi4zMjM1MjQxNTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjU4NTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipYRlJNIE1pZ3JhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgWEZSTV9NSUdSQVRFYCBmZWF0dXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFhGUk0gc3Vic3lzdGVtLiBUaGF0J3MgYG5ldC94ZnJtL0tjb25maWdgLCByaWdodD8gSSdsbCBoZWFkIG92ZXIgdGhlcmUgYW5kIHRha2UgYSBsb29rLiBJJ20gaG9waW5nIGl0J3MgY2xlYXJseSBkb2N1bWVudGVkLCBtYXliZSB3aXRoIHNvbWUgY29tbWVudHMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdCwgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCdzIHJlbGV2YW50LCBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcy4gSSdtIGFsc28gbG9va2luZyBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIEkgYW0gbWlzc2luZyBhIGxhcmdlciBjb250ZXh0IHRoYXQgSSBoYXZlIGZvcmdvdHRlbi4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBpbiB0aGVzZSB0eXBlcyBvZiBpbnZlc3RpZ2F0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MDYuMjM2MTEyOTI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU1OlxcdFxcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxcbiAgNTY6XFx0XFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cXG4gIDU3OlxcdFxcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MDpcXHRcXG4gIDYxOlxcdGNvbmZpZyBYRlJNX01JR1JBVEVcXG4gIDYyOlxcdFxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuICA2MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcXG4gIDY2OlxcdFxcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxcbiAgNjc6XFx0XFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cXG4gIDY4OlxcdFxcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzE6XFx0XFxuICA3MjpcXHRjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxuICA3MzpcXHRcXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbiAgNzQ6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MDYuMjM2MzA0MDU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTcxOTcwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBEZXBlbmRlbmN5IElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBYRlJNX01JR1JBVEVgIG9wdGlvbiwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgWEZSTWAuIFRoYXQncyBub3Qgc3VycHJpc2luZywgcmVhbGx5LiBCdXQgd2hhdCBhYm91dCBgWEZSTV9VU0VSYD8gSXMgdGhlcmUgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVsYXRpb25zaGlwIHRoZXJlPyBJdCdzIHdvcnRoIGRpZ2dpbmcgaW50by5cblxuTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGNoYW5nZSBpcyBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiAgT2theSwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgZGV0YWlscyBvbiBob3cgdGhlc2UgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGxpbmtlZCB0b2dldGhlciwgYW5kIHdoZXRoZXIgYFhGUk1fVVNFUmAgbWlnaHQgYmUgaW52b2x2ZWQgd2l0aCBgWEZSTV9NSUdSQVRFYCBpbiBhIHJlbGV2YW50IHdheS4gVGltZSB0byBwYXJzZSB0aGF0IE1ha2VmaWxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MTMuOTkzNTA0NzQ5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMzkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICs9IHhmcm1fYWxnby5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgKz0geGZybV91c2VyLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjoxNC4xMTE2NDkzNzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MDA2ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZSTSBVc2VyLVNwYWNlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHdlIG5lZWQgYENPTkZJR19YRlJNX1VTRVJgIGFjdGl2YXRlZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSBpdCdzIG5vdCBzaW1wbHkgYW4gaXNvbGF0ZWQgc2V0dGluZy4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBYRlJNX1VTRVJgLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGp1bXAgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBhY3RpdmF0aW9uIGhhcyB3aXRoaW4gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBDT05GSUdfWEZSTV9VU0VSYCBtaWdodCBiZSBnYXRpbmcgc29tZSBvdGhlciBpbXBvcnRhbnQgZmVhdHVyZXMgb3Igc2V0dGluZyB1cCBhIHByZXJlcXVpc2l0ZSBjaGFpbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgY3VycmVudCBhc3N1bXB0aW9ucyBhcmUgcmlnaHQsIG9yIGlmIHRoZXJlJ3MgbW9yZSB0byBjb25zaWRlciB3aXRoIHRoYXQgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjIwLjA5MTcyMTU0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxODU4ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MjAuMjIzNTg1OTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDQ4MDIwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMsIEV2ZXJ5d2hlcmUhKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgWEZSTV9VU0VSYCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgb2J2aW91cyB0aGF0IGl0J3MgZ29pbmcgdG8gcmVseSBvbiBib3RoIGBJTkVUYCBhbmQgdGhlIGNvcmUgYFhGUk1gIGZ1bmN0aW9uYWxpdHkuIEl0J3MgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byBiZSBzdXJlLiBNeSBuZXh0IHN0ZXAgdGhlbiBpcyBzdHJhaWdodGZvcndhcmQ7IGxldCdzIGRyaWxsIGRvd24gYW5kIGV4cGxpY2l0bHkgdmVyaWZ5IHRob3NlIGBYRlJNX1VTRVJgIGRlcGVuZGVuY2llcy4gTm8gYXNzdW1wdGlvbnMsIGp1c3Qgc29saWQgdmVyaWZpY2F0aW9uLCBzbyBJIGRvbuKAmXQgcnVuIGludG8gYW55IHVuZXhwZWN0ZWQgcGl0ZmFsbHMgbGF0ZXIgb24uIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjI1LjMyODM5MTc3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDIxOlxcdFxcbiAgMjI6XFx0aWYgSU5FVFxcbiAgMjM6XFx0Y29uZmlnIFhGUk1fVVNFUlxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuICAyNTpcXHRcXHRzZWxlY3QgWEZSTV9BTEdPXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXG4gIDI4OlxcdFxcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuICAzNDpcXHRcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMzU6XFx0XFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbiAgMzY6XFx0XFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcXG4gIDM3OlxcdFxcdGhlbHBcXG4gIDM4OlxcdFxcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXFxuICAzOTpcXHRcXHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjI1LjMyODQ5MjgyNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njg1MzgwODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFhGUk0gTWlncmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBzaXR1YXRpb24sIGFuZCBpdCBzZWVtcyB0aGV5IGJvdGggbGl2ZSB3aXRoaW4gdGhlIGBpZiBJTkVUYCBjb25kaXRpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGJvdGggb2YgdGhlbS4gVGhleSdyZSBib3RoIGJvb2wvdHJpc3RhdGUsIHNvIGFkZGluZyB0aGVtIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cbk5vdywgdGhlIGNydWNpYWwgcGFydCBpcyBpZGVudGlmeWluZyBhIHN1aXRhYmxlIGZvY3VzIHN5bWJvbCBmb3Igc3l6a2FsbGVyLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIEJ1dCwgd2FpdCwgdGhhdCdzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIEx1Y2tpbHksIHN5emthbGxlciBkb2VzIHN1cHBvcnQgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZW4ndCBpbmxpbmVkLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaW5saW5lZD8gTGV0J3MgY2hlY2suIEFoLCBnb29kLiBJdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRvaXRgIHdpdGhpbiB0aGUgYHhmcm1fbGlua2AgdGFibGUuXG5cbmBgYGNcbnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcblx0aW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHN0cnVjdCBubGF0dHIgKiosXG5cdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKik7XG5cdGludCAoKmR1bXApKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICopO1xuXHRpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqKTtcblx0Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKm5sYV9wb2w7XG5cdGludCBubGFfbWF4O1xufSB4ZnJtX2Rpc3BhdGNoW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLi4uXG5cdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG4uLi5cbn07XG5gYGBcblxuU2luY2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4sIGl0ICpjYW5ub3QqIGJlIGNvbXBsZXRlbHkgaW5saW5lZC4gQXQgbGVhc3QgYW4gb3V0LW9mLWxpbmUgY29weSAqbXVzdCogZXhpc3QuIFRoaXMgbWVhbnMgaXQgd2lsbCBoYXZlIGEgc3ltYm9sIGluIHRoZSBrZXJuZWwgaW1hZ2UsIHNvbWV0aGluZyBsaWtlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIG9yIHBlcmhhcHMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZS5pc3JhLjBgLCBhbmQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IG1hdGNoIHRoYXQuXG5cbkknbSB0aGlua2luZyBub3cgYWJvdXQgb3RoZXIgcG90ZW50aWFsIGZ1bmN0aW9ucywgc3VjaCBhcyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBJdCAqaXMqIGNhbGxlZCBkaXJlY3RseSBmcm9tIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLCBzbyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBpdCBpcyBpbmxpbmVkLiBUaGVuLCBsZXQncyBsb29rIGF0IGB4ZnJtX25sbXNnX211bHRpY2FzdGAuICBZZXMsIGl0IGlzIGV4cGxpY2l0bHkgbWFya2VkIGBpbmxpbmVgLiBTbywgaXQgbG9va3MgbGlrZSBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyB0aGUgYmVzdCBmb2N1cyBzeW1ib2wuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNvbnNpZGVyZWQuIE9rYXksIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgYWxzbyBzdGF0aWMuIExldCBtZSBqdXN0IGNoZWNrIHRoZSBzaXplIG9mIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6MzUuMDEzODc2NDU2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIyLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIyOlxcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbjMzMjM6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuMzMyNTpcXHRcXHRcXHRcXHRcXHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXFxuMzMyNjpcXHR7XFxuMzMyNzpcXHRcXHRpbnQgZXJyO1xcbjMzMjg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4zMzI5OlxcdFxcbjMzMzA6XFx0XFx0c2tiID0gbmxtc2dfbmV3KHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKG0sIGRpciksIEdGUF9BVE9NSUMpO1xcbjMzMzE6XFx0XFx0aWYgKCFza2IpXFxuMzMzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMzMzOlxcdFxcbjMzMzQ6XFx0XFx0ZXJyID0gYnVpbGRfbWlncmF0ZV9zdGF0ZShza2IsIHVtLCBtLCBkaXIsIHBvcnRpZCwgc2VxKTtcXG4zMzM1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzMzNjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4zMzM3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzMzODpcXHRcXHR9XFxuMzMzOTpcXHRcXG4zMzQwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zMzQxOlxcdFxcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuMzM0MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zMzQzOlxcdFxcbjMzNDQ6XFx0XFx0cmV0dXJuIGVycjtcXG4zMzQ1OlxcdH1cXG4zMzQ2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjozNS4wMTQxMDY0NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0NTQ2ODY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBSQ1UgTG9jayBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGEgcmVsYXRpdmVseSBzbWFsbCBhcmVhLiBUaGUgZnVuY3Rpb24gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hhdCB0aGUgYWN0dWFsIHNjb3BlIG9mIGltcGFjdCBtaWdodCBiZS4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBmdW5jdGlvbiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpcyBhIGRlY2VudCBzaXplIGFuZCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LlxuXG5MZXQgbWUgY2lyY2xlIGJhY2sgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBmb3IgYSBtb21lbnQuIFJpZ2h0LCBpdCdzIGFuIGlubGluZSBmdW5jdGlvbi4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgY2FsbHMgYXJvdW5kIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aGluIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLiBBaCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCEgSXQncyBhZGRyZXNzaW5nIGEgbWlzc2luZyBSQ1UgcmVhZCBsb2NrLCB3aGljaCBpcyBjcml0aWNhbC4gQSBtaXNzaW5nIGxvY2sgaGVyZSBjb3VsZCBlYXNpbHkgbGVhZCB0byBSQ1Ugd2FybmluZ3Mgb3IsIGV2ZW4gd29yc2UsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBkYXRhIGludGVncml0eSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uXG5cblRvIHJlcGxpY2F0ZSB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgZW5hYmxlZCBpbiBteSBjb25maWd1cmF0aW9uLlxuXG5UaGUgZXNzZW5jZSBvZiB0aGUgZml4IGlzIHRvIGluc2VydCB0aGUgbWlzc2luZyBSQ1UgcmVhZCBsb2NrIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdoZW4gaXQncyBjYWxsZWQgZnJvbSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBSQ1UgaXNzdWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBJIHRoaW5rIGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGluZGVlZCB0aGUgc29sZSBjYWxsZXIgb2YgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCwgYXQgbGVhc3QgZnJvbSB0aGUgbWFpbiBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNjo0MS41NTk1Nzc4MjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQ0NDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zMzA5PXN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyMjpzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlxcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFxcdTAwMjZtLCB4Yy1cXHUwMDNlZGlyLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTItXFx0XFx0XFx0XFx0ICAgICAgbmxoLVxcdTAwM2VubG1zZ19waWQsIG5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzY6NDEuNjY5MDI3NzM0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NTk0Njk1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBldmlkZW5jZSBwb2ludHMgdG8gdGhpcyBiZWluZyB0aGUgb25seSBjYWxsZXIuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcywgYXMgdGhpcyBpcyBhIGtub3duIGFyZWEgZm9yIHBvdGVudGlhbCBjb25mbGljdHMuXG5cbmBYRlJNYCBpcyBkZWZpbml0ZWx5IHNlbGVjdGVkIGR1ZSB0byBgSU5FVGAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIE5vdywgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAgYXMgd2VsbCwgYXMgZXhwZWN0ZWQuIEFuZCBvZiBjb3Vyc2UsIGBYRlJNX01JR1JBVEVgIHJlbGllcyBvbiBgWEZSTWAuIENvbnNpZGVyaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMsIGl0IHNlZW1zIHRoYXQgc2VsZWN0aW5nIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBzYXRpc2Z5IGFsbCBkZXBlbmRlbmNpZXMuXG5cblRoYXQgc2VlbXMgbGlrZSBhIHNhZmUgYmV0LiBTbywgbm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODA1LCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM2OjQ4LjUyODUwMjA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDA3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4IHRvIHByZXZlbnQgUkNVIHdhcm5pbmdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBzZW5kaW5nIFhGUk0gbWlncmF0ZSBzdGF0ZSBuZXRsaW5rIG1lc3NhZ2VzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgWEZSTV9NU0dfTUlHUkFURV9TVEFURWAgbmV0bGluayBjb21tYW5kLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggdG8gcHJldmVudCBSQ1Ugd2FybmluZ3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIHNlbmRpbmcgWEZSTSBtaWdyYXRlIHN0YXRlIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[1] Phase: Succeeded StartedAt: 2026-07-31 08:37:04 +0000 UTC FinishedAt: 2026-07-31 08:37:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 08:37:04 +0000 UTC FinishedAt: 2026-07-31 08:37:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2] Phase: Succeeded StartedAt: 2026-07-31 08:37:04 +0000 UTC FinishedAt: 2026-07-31 12:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 08:37:08 +0000 UTC FinishedAt: 2026-07-31 12:44:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 08:37:08 +0000 UTC FinishedAt: 2026-07-31 08:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 08:37:08 +0000 UTC FinishedAt: 2026-07-31 08:37:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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-workflowg25fk/series-workflowg25fk-convert-artifact-4004856548/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 08:38:02 +0000 UTC FinishedAt: 2026-07-31 09:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 08:38:02 +0000 UTC FinishedAt: 2026-07-31 09:09:19 +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:*ba741f10-f303-4042-b95d-bf7f3c9db2ee,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-workflowg25fk/series-workflowg25fk-convert-artifact-4004856548/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": "5d953823-2bd4-4fe2-bf6b-b36122b3dd23", "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-workflowg25fk/series-workflowg25fk-build-action-434168610/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 08:38:03 +0000 UTC FinishedAt: 2026-07-31 09:09:07 +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:*ba741f10-f303-4042-b95d-bf7f3c9db2ee,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-workflowg25fk/series-workflowg25fk-convert-artifact-4004856548/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": "5d953823-2bd4-4fe2-bf6b-b36122b3dd23", "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-workflowg25fk/series-workflowg25fk-build-action-434168610/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:09:19 +0000 UTC FinishedAt: 2026-07-31 09:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:09:19 +0000 UTC FinishedAt: 2026-07-31 09:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:09:19 +0000 UTC FinishedAt: 2026-07-31 09:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:09:19 +0000 UTC FinishedAt: 2026-07-31 09:09:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-workflowg25fk/series-workflowg25fk-convert-artifact-4199916771/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:09:40 +0000 UTC FinishedAt: 2026-07-31 09:11:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:09:40 +0000 UTC FinishedAt: 2026-07-31 09:11:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5d953823-2bd4-4fe2-bf6b-b36122b3dd23,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-workflowg25fk/series-workflowg25fk-build-action-434168610/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-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:11:42 +0000 UTC FinishedAt: 2026-07-31 09:11:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:11:42 +0000 UTC FinishedAt: 2026-07-31 09:11:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:11:42 +0000 UTC FinishedAt: 2026-07-31 09:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:11:42 +0000 UTC FinishedAt: 2026-07-31 09:39:10 +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:*ba741f10-f303-4042-b95d-bf7f3c9db2ee,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-workflowg25fk/series-workflowg25fk-convert-artifact-4199916771/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": "dc015a2e-d352-4f1b-b156-2ff930282530", "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-workflowg25fk/series-workflowg25fk-build-action-2288710039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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-31 09:11:42 +0000 UTC FinishedAt: 2026-07-31 09:38:49 +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:*ba741f10-f303-4042-b95d-bf7f3c9db2ee,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-workflowg25fk/series-workflowg25fk-convert-artifact-4199916771/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": "dc015a2e-d352-4f1b-b156-2ff930282530", "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-workflowg25fk/series-workflowg25fk-build-action-2288710039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:39:10 +0000 UTC FinishedAt: 2026-07-31 09:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:39:10 +0000 UTC FinishedAt: 2026-07-31 09:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:39:10 +0000 UTC FinishedAt: 2026-07-31 09:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:39:10 +0000 UTC FinishedAt: 2026-07-31 09:41:04 +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:*dc015a2e-d352-4f1b-b156-2ff930282530,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-workflowg25fk/series-workflowg25fk-build-action-2288710039/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-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:14 +0000 UTC FinishedAt: 2026-07-31 12:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:14 +0000 UTC FinishedAt: 2026-07-31 12:44:33 +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":null,"focus_symbols":["xfrm_do_migrate_state"],"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:*5d953823-2bd4-4fe2-bf6b-b36122b3dd23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dc015a2e-d352-4f1b-b156-2ff930282530,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-workflowg25fk/series-workflowg25fk-build-action-434168610/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-workflowg25fk/series-workflowg25fk-build-action-2288710039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:14 +0000 UTC FinishedAt: 2026-07-31 09:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:14 +0000 UTC FinishedAt: 2026-07-31 09:41:18 +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":null,"focus_symbols":["xfrm_do_migrate_state"],"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-workflowg25fk/series-workflowg25fk-convert-artifact-3063566076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:14 +0000 UTC FinishedAt: 2026-07-31 09:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:14 +0000 UTC FinishedAt: 2026-07-31 09:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:14 +0000 UTC FinishedAt: 2026-07-31 09:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:24 +0000 UTC FinishedAt: 2026-07-31 12:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg25fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"f2275ff3-1764-4909-afae-3188337bd296","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 09:41:24 +0000 UTC FinishedAt: 2026-07-31 12:44:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5d953823-2bd4-4fe2-bf6b-b36122b3dd23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dc015a2e-d352-4f1b-b156-2ff930282530,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-workflowg25fk/series-workflowg25fk-build-action-434168610/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-workflowg25fk/series-workflowg25fk-build-action-2288710039/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-workflowg25fk/series-workflowg25fk-convert-artifact-3063566076/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,}