Name: series-workflow7vptv Phase: Succeeded StartedAt: 2026-08-02 18:34:38 +0000 UTC FinishedAt: 2026-08-02 22:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[0] Phase: Succeeded StartedAt: 2026-08-02 18:34:38 +0000 UTC FinishedAt: 2026-08-02 18:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 18:34:38 +0000 UTC FinishedAt: 2026-08-02 18:37:10 +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": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "e61e071b-9c74-46de-bb34-1c7614217014" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ubh_bforget", "ufs_setattr", "ufs_evict_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VGU19GUyYjMzQ7LAogICAgJiMzNDtVRlNfRlNfV1JJVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmhfYmZvcmdldCYjMzQ7LAogICAgJiMzNDt1ZnNfc2V0YXR0ciYjMzQ7LAogICAgJiMzNDt1ZnNfZXZpY3RfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxODozNjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy91ZnMvdXRpbC5jIGIvZnMvdWZzL3V0aWwuY1xuaW5kZXggZGZmNmY3NDYxOGRlZi4uNjAzZDgwYjkzMDY2ZCAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Vmcy91dGlsLmNcbkBAIC0xMTcsOCAmIzQzOzExNyw5IEBAIHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4gXHR1bnNpZ25lZCBpO1xuIFx0aWYgKCF1YmgpIFxuIFx0XHRyZXR1cm47XG4tXHRmb3IgKCBpID0gMDsgaSBcdTAwM2MgdWJoLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOyApIGlmICggdWJoLVx1MDAzZWJoW2ldICkgXG4tXHRcdGJmb3JnZXQgKHViaC1cdTAwM2ViaFtpXSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdWJoLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJmb3JnZXQodWJoLVx1MDAzZWJoW2ldKTtcbiYjNDM7XHRrZnJlZSh1YmgpO1xuIH1cbiAgXG4gaW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VGU19GUyYjMzQ7LAogICAgJiMzNDtVRlNfRlNfV1JJVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmhfYmZvcmdldCYjMzQ7LAogICAgJiMzNDt1ZnNfc2V0YXR0ciYjMzQ7LAogICAgJiMzNDt1ZnNfZXZpY3RfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxODozNjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Vmcy91dGlsLmMgYi9mcy91ZnMvdXRpbC5jCmluZGV4IGRmZjZmNzQ2MThkZWYuLjYwM2Q4MGI5MzA2NmQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWZzL3V0aWwuYwpAQCAtMTE3LDggJiM0MzsxMTcsOSBAQCB2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKQogCXVuc2lnbmVkIGk7CiAJaWYgKCF1YmgpIAogCQlyZXR1cm47Ci0JZm9yICggaSA9IDA7IGkgJmx0OyB1YmgtJmd0O2NvdW50OyBpJiM0MzsmIzQzOyApIGlmICggdWJoLSZndDtiaFtpXSApIAotCQliZm9yZ2V0ICh1YmgtJmd0O2JoW2ldKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHViaC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJYmZvcmdldCh1YmgtJmd0O2JoW2ldKTsKJiM0MzsJa2ZyZWUodWJoKTsKIH0KICAKIGludCB1YmhfYnVmZmVyX2RpcnR5IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVGUyBQYXRjaDogdWJoX2Jmb3JnZXQgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGZzL3Vmcy91dGlsLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgdWJoX2Jmb3JnZXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBpZiAodWJoLSZndDtiaFtpXSlgIGNoZWNrIHdpdGhpbiB0aGUgbG9vcCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBrZnJlZSh1YmgpYCBhdCB0aGUgZW5kLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBmaXhpbmcgc29tZXRoaW5nLCBtYXliZSBhIG1lbW9yeSBsZWFrLCBvciBhIHBvdGVudGlhbCBidWcgaW52b2x2aW5nIG51bGwgYmxvY2sgaGVhZGVycy4gVGhlIHJlbW92YWwgb2YgdGhlIGNoZWNrIHN1Z2dlc3RzIHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgYmVlbiBvdmVybHkgY2F1dGlvdXMgb3IgaGFuZGxpbmcgYSBzY2VuYXJpbyB0aGF0JiMzOTtzIG5vIGxvbmdlciByZWxldmFudCwgb3Igd2FzIGJ1Z2d5IGluIGl0c2VsZi4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgYGZzL3Vmcy91dGlsLmNgIGRpcmVjdGx5IGFuZCB0aGVuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGBncmVwcGVyYCBhbmQgc2VlIHdoZXJlIGV4YWN0bHkgYHViaF9iZm9yZ2V0YCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJoX2Jmb3JnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL2lub2RlLmM9OTYxPXN0YXRpYyB2b2lkIGZyZWVfZnVsbF9icmFuY2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGluZF9ibG9jaywgaW50IGRlcHRoKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTk4OS1cbmZzL3Vmcy9pbm9kZS5jOjk5MDpcdHViaF9iZm9yZ2V0KHViaCk7XG5mcy91ZnMvaW5vZGUuYy05OTEtXHR1ZnNfZnJlZV9ibG9ja3MoaW5vZGUsIGluZF9ibG9jaywgdXNwaS1cdTAwM2VzX2ZwYik7XG4tLVxuZnMvdWZzL3V0aWwuYz0xMDI9dm9pZCB1Ymhfc3luY19ibG9jayhzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICp1YmgpXG4tLVxuZnMvdWZzL3V0aWwuYy0xMTQtXG5mcy91ZnMvdXRpbC5jOjExNTp2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxuZnMvdWZzL3V0aWwuYy0xMTYte1xuLS1cbmZzL3Vmcy91dGlsLmg9MjY2PWV4dGVybiB2b2lkIHViaF9zeW5jX2Jsb2NrKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XG5mcy91ZnMvdXRpbC5oOjI2NzpleHRlcm4gdm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcbmZzL3Vmcy91dGlsLmgtMjY4LWV4dGVybiBpbnQgIHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVRlMgQmxvY2sgRGVhbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGB1YmhfYmZvcmdldGAgdXNlZCB3aXRoaW4gYGZzL3Vmcy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IGluc2lkZSB0aGUgYGZyZWVfZnVsbF9icmFuY2hgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSByZWFjaCBgZnJlZV9mdWxsX2JyYW5jaGAuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZnMvdWZzL2lub2RlLmNgIGRpcmVjdGx5LiBSaWdodCwgSSBzZWUgdGhhdCBgZnJlZV9mdWxsX2JyYW5jaGAgaXMgY2FsbGVkIGZyb20gYHVmc190cnVuY2F0ZV9ibG9ja3NgLiBUaGF04oCZcyBhIGtleSBjb25uZWN0aW9uIOKAkyBmaWxlIHRydW5jYXRpb24gY2FuIHBvdGVudGlhbGx5IGxlYWQgdG8gdGhpcyBibG9jayBkZWFsbG9jYXRpb24uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIFVGUy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBidWlsZCBmbGFncyBvciBrZXJuZWwgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB0aGlzIGNvZGUgcGF0aCBvciBpdHMgYmVoYXZpb3I/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3Vmcy9LY29uZmlnOjI6Y29uZmlnIFVGU19GU1xuZnMvdWZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChyZWFkIG9ubHkpXCYjMzQ7XG4tLVxuZnMvdWZzL0tjb25maWctMzEtXG5mcy91ZnMvS2NvbmZpZzozMjpjb25maWcgVUZTX0ZTX1dSSVRFXG5mcy91ZnMvS2NvbmZpZy0zMy1cdGJvb2wgXCYjMzQ7VUZTIGZpbGUgc3lzdGVtIHdyaXRlIHN1cHBvcnQgKERBTkdFUk9VUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVUZTIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gYW5kIExvY2F0aW9uIERpc2NvdmVyeSoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYXJlIGBVRlNfRlNgIGFuZCBgVUZTX0ZTX1dSSVRFYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdGhvc2UmIzM5O2xsIGxpa2VseSBlbmFibGUgYW5kIGNvbnRyb2wgd3JpdGUgc3VwcG9ydCBmb3IgdGhlIFVGUyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gZ29vZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGNvcnJlY3QuIE5vdywgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoZSBgdWJoX2Jmb3JnZXRgIGZ1bmN0aW9u4oCmIHRoYXQmIzM5O3MgaW4gYGZzL3Vmcy91dGlsLmNgLiBSaWdodCwgdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSBidWlsZCBzeXN0ZW0uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBmcy91ZnMvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIHdpcmVkIHVwIHByb3Blcmx5LCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QsIGFuZCB0aG9zZSBtb2R1bGVzIGFyZSBnZXR0aW5nIGNvbXBpbGVkIHdpdGggdGhlIHJpZ2h0IGZsYWdzLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgcGljayB1cCB0aGVzZSBzcGVjaWZpYyBjb21wb25lbnRzLiBTaG91bGRuJiMzOTt0IHRha2UgbG9uZyB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBidWlsdCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9NYWtlZmlsZS01LVxuZnMvdWZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1VGU19GUykgJiM0Mzs9IHVmcy5vXG5mcy91ZnMvTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjA4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIFVGUyBGaWxlIFN5c3RlbSBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19VRlNfRlNgIGlzIGEgcHJlcmVxdWlzaXRlIGhlcmUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBteSB0cmFpbiBvZiB0aG91Z2h0IHNoaWZ0cy4gSSByZWNhbGwgYGZyZWVfZnVsbF9icmFuY2hgIGlzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoLiBTcGVjaWZpY2FsbHksIEkga25vdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGVpdGhlciBgdWZzX3RydW5jYXRlYCBvciBwb3RlbnRpYWxseSBldmVuIGB1ZnNfZXZpY3RfaW5vZGVgLi4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGljaCBmdW5jdGlvbnMgY2FsbCB3aGljaCwgaW4gd2hpY2ggY2lyY3Vtc3RhbmNlcy4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuCgpPa2F5LCBJIG5lZWQgdG8gY2hlY2sgYGZzL3Vmcy9pbm9kZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBgZnJlZV9mdWxsX2JyYW5jaGAgd291bGQgYmUgZGVmaW5lZCwgc28gSSBuZWVkIHRvIGdvIGxvb2sgdGhyb3VnaCB0aGUgY29kZSBpbiB0aGF0IGZpbGUuIEkgY2FuIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGZyZWVfZnVsbF9icmFuY2hgIGFuZCB0aGUgdHJ1bmNhdGlvbiBvciBldmljdGlvbiBvZiBhbiBpbm9kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnJlZV9mdWxsX2JyYW5jaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Vmcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9pbm9kZS5jPTg4Mz1zdGF0aWMgdm9pZCB1ZnNfdHJ1bmNfZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvdWZzL2lub2RlLmMtOTYwLVxuZnMvdWZzL2lub2RlLmM6OTYxOnN0YXRpYyB2b2lkIGZyZWVfZnVsbF9icmFuY2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGluZF9ibG9jaywgaW50IGRlcHRoKVxuZnMvdWZzL2lub2RlLmMtOTYyLXtcbi0tXG5mcy91ZnMvaW5vZGUuYy05NzUtXHRcdFx0aWYgKGJsb2NrKVxuZnMvdWZzL2lub2RlLmM6OTc2Olx0XHRcdFx0ZnJlZV9mdWxsX2JyYW5jaChpbm9kZSwgYmxvY2ssIGRlcHRoKTtcbmZzL3Vmcy9pbm9kZS5jLTk3Ny1cdFx0fVxuLS1cbmZzL3Vmcy9pbm9kZS5jPTk5ND1zdGF0aWMgdm9pZCBmcmVlX2JyYW5jaF90YWlsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGZyb20sIHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKnViaCwgaW50IGRlcHRoKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTEwMDgtXHRcdFx0XHR1YmhfbWFya19idWZmZXJfZGlydHkodWJoKTtcbmZzL3Vmcy9pbm9kZS5jOjEwMDk6XHRcdFx0XHRmcmVlX2Z1bGxfYnJhbmNoKGlub2RlLCBibG9jaywgZGVwdGgpO1xuZnMvdWZzL2lub2RlLmMtMTAxMC1cdFx0XHR9XG4tLVxuZnMvdWZzL2lub2RlLmM9MTEwMT1zdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvdWZzL2lub2RlLmMtMTE1Ni1cdFx0XHR3cml0ZV9zZXF1bmxvY2soXHUwMDI2dWZzaS1cdTAwM2VtZXRhX2xvY2spO1xuZnMvdWZzL2lub2RlLmM6MTE1NzpcdFx0XHRmcmVlX2Z1bGxfYnJhbmNoKGlub2RlLCBibG9jaywgaSAtIFVGU19JTkRfQkxPQ0sgJiM0MzsgMSk7XG5mcy91ZnMvaW5vZGUuYy0xMTU4LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRlMgRmlsZSBTeXN0ZW0gTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSBoZXJlLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgb25lLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBibG9jayBtb2RpZmljYXRpb25zLCBJJiMzOTttIGFzc3VtaW5nIGBVRlNfRlNfV1JJVEVgIGxpa2VseSBpbmRpY2F0ZXMgd3JpdGUgc3VwcG9ydCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB3aGV0aGVyIGBVRlNfRlNfV1JJVEVgIGlzIGEgcmVxdWlyZW1lbnQgZm9yIGB1YmhfYmZvcmdldGAsIGJ1dCBsZXQgbWUgY2hlY2sgd2hlcmUgdGhhdCByZXNpZGVzLi4uYWgsIGBmcy91ZnMvdXRpbC5jYC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGB1dGlsLmNgIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGBVRlNfRlNgIG9yIHdoZXRoZXIgaXQgaGFzIGNvbmRpdGlvbmFsIHBhcnRzLiBJdCBsb29rcyBsaWtlIGl0IGlzLiBCdXQsIEkgcmVtZW1iZXIgdGhhdCBgZnJlZV9mdWxsX2JyYW5jaGAgaXMgaW4gYGlub2RlLmNgLiBUaGVyZWZvcmUsIGxldCBtZSBzZWUgaWYgYGZyZWVfZnVsbF9icmFuY2hgIGlzIHByb3RlY3RlZCB3aXRoIGFuIGAjaWZkZWYgQ09ORklHX1VGU19GU19XUklURWAgb3Igbm90LiBUaGlzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGltcGFjdCBvZiB0aGlzIG5ldyBjb2RlIGFuZCBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19VRlNfRlNfV1JJVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBVRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIFVGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBmcy91ZnMvaW5vZGUuY2AsIHNob3VsZCBoYXZlIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19VRlNfRlNfV1JJVEVgLiBCdXQgaXQmIzM5O3Mgbm90IGxvb2tpbmcgbGlrZSBpdCYjMzk7cyB0aGVyZS4gVGhhdCYjMzk7cyB1bnVzdWFsLCBhbmQgaXQmIzM5O3MgbWFraW5nIG1lIHdvbmRlciBpZiBJJiMzOTttIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlIG9yIGlmIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW50IG1lY2hhbmlzbSBhdCBwbGF5LiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gd2hlcmUgdGhpcyB3cml0ZSBjb25maWd1cmF0aW9uIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIG5leHQgcGxhY2UgdG8gY2hlY2sgd291bGQgYmUgdGhlIGBmcy91ZnMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBpcyBzZXQsIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZGl0aW9uYWwgbGlua2luZyBnb2luZyBvbiB0aGF0IEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVUZTX0ZTX1dSSVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFVGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVUZTIGFuZCB3cml0ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZSB3cml0ZSBiZWhhdmlvciBpcyBjb250cm9sbGVkIG9yIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwgZm9yIHRoZSBVRlMgZmlsZXN5c3RlbS4gUmlnaHQsIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBjb3JlIFVGUyBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIHN1cGVyYmxvY2sgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0uIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYGZzL3Vmcy9zdXBlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgZmVhdHVyZXMsIGluY2x1ZGluZyB3cml0ZSBvcGVyYXRpb25zLiBBbmQsIHNpbmNlIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluIHRoZSB3cml0ZSBjYXBhYmlsaXRpZXMgc3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ09ORklHX1VGU19GU19XUklURWAuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBjb25maWd1cmF0aW9uIHN5bWJvbCB0byBjaGVjayBmb3IuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyBkZWZpbmVkIG9yIHVzZWQsIGFuZCBpZiBzbywgaG93IGl0IGFmZmVjdHMgdGhlIFVGUyB3cml0ZSBvcGVyYXRpb25zLiBUaW1lIHRvIGdldCBkaWdnaW5nIGluIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVUZTX0ZTX1dSSVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvc3VwZXIuYz03MTY9c3RhdGljIGludCB1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvdWZzL3N1cGVyLmMtNzM4LVxuZnMvdWZzL3N1cGVyLmM6NzM5OiNpZm5kZWYgQ09ORklHX1VGU19GU19XUklURVxuZnMvdWZzL3N1cGVyLmMtNzQwLVx0aWYgKCFzYl9yZG9ubHkoc2IpKSB7XG4tLVxuZnMvdWZzL3N1cGVyLmM9MTIzOD1zdGF0aWMgaW50IHVmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvdWZzL3N1cGVyLmMtMTI3OS1cdCAqL1xuZnMvdWZzL3N1cGVyLmM6MTI4MDojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcbmZzL3Vmcy9zdXBlci5jLTEyODEtXHRcdHByX2VycihcJiMzNDt1ZnMgd2FzIGNvbXBpbGVkIHdpdGggcmVhZC1vbmx5IHN1cHBvcnQsIGNhbiYjMzk7dCBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGVcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipVRlMgV3JpdGUgQWNjZXNzIGFuZCBCbG9jayBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1vdW50aW5nIGEgVUZTIGZpbGVzeXN0ZW0gaW4gcmVhZC13cml0ZSBtb2RlLiBUbyBkbyB0aGF0LCBJIGtub3cgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYENPTkZJR19VRlNfRlNfV1JJVEVgLiBUaGF0JiMzOTtzIHRoZSBrZXksIGJlY2F1c2Ugd2l0aG91dCB3cml0ZSBhY2Nlc3MsIEkgY2FuJiMzOTt0IHRyaWdnZXIgdGhlIG9wZXJhdGlvbnMgSSBuZWVkIGZvciBwcm9wZXIgZmlsZSB0cnVuY2F0aW9uIGFuZCBmcmVlaW5nIHVwIHRob3NlIHVzZWQgYmxvY2tzLiBNYWtlcyBzZW5zZS4gVHJ1bmNhdGlvbiByZWxpZXMgb24gYmVpbmcgYWJsZSB0byBhY3R1YWxseSBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0mIzM5O3MgbWV0YWRhdGEuCgpOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgY3J1Y2lhbCBiaXRzIGZvciB0aGlzPyBBaCwgeWVzLCB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBmb3IgZm9yZ2V0dGluZyBvciByZWxlYXNpbmcgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gYmUsIHNvIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBmcy91ZnMvdXRpbC5jYCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgaXQgd29ya3MuIFRoYXQgZmlsZSBoYXMgYWx3YXlzIGJlZW4gYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgVUZTIHV0aWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWZzL3V0aWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViaC1cdTAwM2Vjb3VudDsgaSYjNDM7JiM0MzspXG4gMTExOlx0XHRcdFx0d2FpdF9vbl9idWZmZXIodWJoLVx1MDAzZWJoW2ldKTtcbiAxMTI6XHRcdH1cbiAxMTM6XHR9XG4gMTE0Olx0XG4gMTE1Olx0dm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqIHViaClcbiAxMTY6XHR7XG4gMTE3Olx0XHR1bnNpZ25lZCBpO1xuIDExODpcdFx0aWYgKCF1YmgpIFxuIDExOTpcdFx0XHRyZXR1cm47XG4gMTIwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1YmgtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KVxuIDEyMTpcdFx0XHRiZm9yZ2V0KHViaC1cdTAwM2ViaFtpXSk7XG4gMTIyOlx0XHRrZnJlZSh1YmgpO1xuIDEyMzpcdH1cbiAxMjQ6XHQgXG4gMTI1Olx0aW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4gMTI2Olx0e1xuIDEyNzpcdFx0dW5zaWduZWQgaTtcbiAxMjg6XHRcdHVuc2lnbmVkIHJlc3VsdCA9IDA7XG4gMTI5Olx0XHRpZiAoIXViaClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVUZTIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGZpeGluZyBhIG1lbW9yeSBsZWFrLiBUaGUga2V5IGlzIHRoYXQgYGtmcmVlKHViaClgIGlzIGJlaW5nIGFkZGVkIHRvIGB1YmhfYmZvcmdldGAuIFRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZpeCBhcmUgYFVGU19GU2AgYW5kIGBVRlNfRlNfV1JJVEVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbiBpdHNlbGYuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aG9zZSBjb25maWcgbmFtZXMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBVRlNfRlNfV1JJVEVgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIEFoLCB5ZXMsIGxvb2tpbmcgYXQgdGhlIGBmcy91ZnMvS2NvbmZpZ2AgZmlsZSBjb25maXJtcyB0aGF0IGBVRlNfRlNfV1JJVEVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGl0IGRlcGVuZHMgb24gYFVGU19GU2AsIHNvIGJvdGggYXJlIG5lY2Vzc2FyeS4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGB1YmhfYmZvcmdldGAuIEdpdmVuIHRoYXQgYHViaF9iZm9yZ2V0YCBpcyBhIHJlbGF0aXZlbHkgc21hbGwgZnVuY3Rpb24sIEkgc2hvdWxkIGV2YWx1YXRlIGlmIHJlbGF0ZWQgZnVuY3Rpb25zIGFsc28gbmVlZCBpbnZlc3RpZ2F0aW9uLCBzdWNoIGFzIGBmcmVlX2Z1bGxfYnJhbmNoYCBvciBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AuIEhvd2V2ZXIsIEkgc2VlIGB1YmhfYmZvcmdldGAgaXMgZGVmaW5lZCBpbiBgZnMvdWZzL3V0aWwuY2AgYXMgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgbGlrZWx5IGEgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIGluIHRoZSBVRlMgZmlsZSBzeXN0ZW0uIFdoaWxlIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IGBFWFBPUlRfU1lNQk9MYCwgaXQmIzM5O3Mgc3RpbGwgYWNjZXNzaWJsZS4gVGhlcmVmb3JlLCBmb2N1c2luZyBvbiBpdCBpcyBhIHNvbGlkIGFwcHJvYWNoLgoKTm93LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBmb3IgYW55IG90aGVyIGNhbGwgc2l0ZXMgb2YgYHViaF9iZm9yZ2V0YCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ViaF9iZm9yZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9pbm9kZS5jPTk2MT1zdGF0aWMgdm9pZCBmcmVlX2Z1bGxfYnJhbmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbmRfYmxvY2ssIGludCBkZXB0aClcbi0tXG5mcy91ZnMvaW5vZGUuYy05ODktXG5mcy91ZnMvaW5vZGUuYzo5OTA6XHR1YmhfYmZvcmdldCh1YmgpO1xuZnMvdWZzL2lub2RlLmMtOTkxLVx0dWZzX2ZyZWVfYmxvY2tzKGlub2RlLCBpbmRfYmxvY2ssIHVzcGktXHUwMDNlc19mcGIpO1xuLS1cbmZzL3Vmcy91dGlsLmM9MTAyPXZvaWQgdWJoX3N5bmNfYmxvY2soc3RydWN0IHVmc19idWZmZXJfaGVhZCAqdWJoKVxuLS1cbmZzL3Vmcy91dGlsLmMtMTE0LVxuZnMvdWZzL3V0aWwuYzoxMTU6dm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqIHViaClcbmZzL3Vmcy91dGlsLmMtMTE2LXtcbi0tXG5mcy91ZnMvdXRpbC5oPTI2Nj1leHRlcm4gdm9pZCB1Ymhfc3luY19ibG9jayhzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICopO1xuZnMvdWZzL3V0aWwuaDoyNjc6ZXh0ZXJuIHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XG5mcy91ZnMvdXRpbC5oLTI2OC1leHRlcm4gaW50ICB1YmhfYnVmZmVyX2RpcnR5IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBhbmFseXNpcy4gVGhlIGZhY3QgdGhhdCBgdWJoX2Jmb3JnZXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc2lnbmlmaWNhbnQgaW5kaWNhdG9yLiBBbmQgc2luY2UgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB0aGF0IHN0cmVuZ3RoZW5zIGB1YmhfYmZvcmdldGAgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYXR0ZW50aW9uLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSBhIGNyaXRpY2FsIHBvaW50IG9mIG9wZXJhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjb25zaWRlciBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AuIFdlIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgdWZzX2V2aWN0X2lub2RlYCBhbmQgYHVmc19zZXRhdHRyYC4gR2l2ZW4gdGhpcyBjYWxsaW5nIGNvbnRleHQsIGB1ZnNfdHJ1bmNhdGVfYmxvY2tzYCBhbHNvIGVtZXJnZXMgYXMgYSB2YWxpZCBhbmQgcG90ZW50aWFsbHkgdXNlZnVsIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbi4gSXQgdG91Y2hlcyBvbiBpbm9kZSBldmljdGlvbiBhbmQgYXR0cmlidXRlIHNldHRpbmcsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGFzcGVjdCBvZiBmaWxlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vmc190cnVuY2F0ZV9ibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL2lub2RlLmM9NDYwPWludCB1ZnNfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4tLVxuZnMvdWZzL2lub2RlLmMtNDY0LVxuZnMvdWZzL2lub2RlLmM6NDY1OnN0YXRpYyB2b2lkIHVmc190cnVuY2F0ZV9ibG9ja3Moc3RydWN0IGlub2RlICopO1xuZnMvdWZzL2lub2RlLmMtNDY2LVxuZnMvdWZzL2lub2RlLmM9NDY3PXN0YXRpYyB2b2lkIHVmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bylcbi0tXG5mcy91ZnMvaW5vZGUuYy00NzItXHRcdHRydW5jYXRlX3BhZ2VjYWNoZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplKTtcbmZzL3Vmcy9pbm9kZS5jOjQ3MzpcdFx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XG5mcy91ZnMvaW5vZGUuYy00NzQtXHR9XG4tLVxuZnMvdWZzL2lub2RlLmM9ODM5PXZvaWQgdWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTg1MS1cdFx0ICAgICBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpKVxuZnMvdWZzL2lub2RlLmM6ODUyOlx0XHRcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xuZnMvdWZzL2lub2RlLmMtODUzLVx0XHR1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4tLVxuZnMvdWZzL2lub2RlLmM9MTAzMz1zdGF0aWMgaW50IHVmc19hbGxvY19sYXN0YmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4tLVxuZnMvdWZzL2lub2RlLmMtMTEwMC1cbmZzL3Vmcy9pbm9kZS5jOjExMDE6c3RhdGljIHZvaWQgdWZzX3RydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvdWZzL2lub2RlLmMtMTEwMi17XG4tLVxuZnMvdWZzL2lub2RlLmM9MTE2Nz1zdGF0aWMgaW50IHVmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy91ZnMvaW5vZGUuYy0xMTg5LVxuZnMvdWZzL2lub2RlLmM6MTE5MDpcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xuZnMvdWZzL2lub2RlLmMtMTE5MS1cdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg2NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgc25pcHBldCBvZiB0aGlua2luZzoKCioqRXhhbWluaW5nIFVGUyBJbm9kZSBPcGVyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoYXQgYHVmc190cnVuY2F0ZV9ibG9ja3NgIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHJpZ2h0PyBUaGF0IG1lYW5zIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgd2hhdCBhYm91dCBgdWZzX2V2aWN0X2lub2RlYD8gSGFuZyBvbiwgdGhhdCBvbmUgaXMgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBBbmQgd2hhdCBhYm91dCBgdWZzX3RydW5jYXRlYD8gT2ggd2FpdCwgeWVzLCBgdWZzX3RydW5jYXRlYCBpcyBhbHNvIHN0YXRpYywgbWFraW5nIGl0IGludGVybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gTm93LCBhbiBpbnRlcmVzdGluZyBxdWVzdGlvbiBhcmlzZXM6IGRvZXMgYHVmc19zZXRhdHRyYCBjYWxsIHRoYXQgaW50ZXJuYWwgYHVmc190cnVuY2F0ZWAgZnVuY3Rpb24/IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIG9wZXJhdGlvbnMgYmV0dGVyLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhhdCBjYWxsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vmc190cnVuY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvaW5vZGUuYz00NjA9aW50IHVmc19wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbi0tXG5mcy91ZnMvaW5vZGUuYy00NjQtXG5mcy91ZnMvaW5vZGUuYzo0NjU6c3RhdGljIHZvaWQgdWZzX3RydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKik7XG5mcy91ZnMvaW5vZGUuYy00NjYtXG5mcy91ZnMvaW5vZGUuYz00Njc9c3RhdGljIHZvaWQgdWZzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTQ3Mi1cdFx0dHJ1bmNhdGVfcGFnZWNhY2hlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuZnMvdWZzL2lub2RlLmM6NDczOlx0XHR1ZnNfdHJ1bmNhdGVfYmxvY2tzKGlub2RlKTtcbmZzL3Vmcy9pbm9kZS5jLTQ3NC1cdH1cbi0tXG5mcy91ZnMvaW5vZGUuYz04Mzk9dm9pZCB1ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4tLVxuZnMvdWZzL2lub2RlLmMtODUxLVx0XHQgICAgIFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkpXG5mcy91ZnMvaW5vZGUuYzo4NTI6XHRcdFx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XG5mcy91ZnMvaW5vZGUuYy04NTMtXHRcdHVmc191cGRhdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbi0tXG5mcy91ZnMvaW5vZGUuYz0xMDMzPXN0YXRpYyBpbnQgdWZzX2FsbG9jX2xhc3RibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy91ZnMvaW5vZGUuYy0xMTAwLVxuZnMvdWZzL2lub2RlLmM6MTEwMTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy91ZnMvaW5vZGUuYy0xMTAyLXtcbi0tXG5mcy91ZnMvaW5vZGUuYy0xMTY2LVxuZnMvdWZzL2lub2RlLmM6MTE2NzpzdGF0aWMgaW50IHVmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbmZzL3Vmcy9pbm9kZS5jLTExNjgte1xuLS1cbmZzL3Vmcy9pbm9kZS5jLTExODktXG5mcy91ZnMvaW5vZGUuYzoxMTkwOlx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XG5mcy91ZnMvaW5vZGUuYy0xMTkxLVx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xuLS1cbmZzL3Vmcy9pbm9kZS5jPTExOTg9aW50IHVmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdWZzL2lub2RlLmMtMTIwOS1cdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9TSVpFIFx1MDAyNlx1MDAyNiBhdHRyLVx1MDAzZWlhX3NpemUgIT0gaW5vZGUtXHUwMDNlaV9zaXplKSB7XG5mcy91ZnMvaW5vZGUuYzoxMjEwOlx0XHRlcnJvciA9IHVmc190cnVuY2F0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbmZzL3Vmcy9pbm9kZS5jLTEyMTEtXHRcdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMQoJCQkJCQkJb3V0cHV0OiAxMDQKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIGNoYW5nZSwgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipBbmFseXNpcyBvZiBVRlMgTWVtb3J5IExlYWsgRml4KioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBhIG1lbW9yeSBsZWFrIHdpdGhpbiBgdWJoX2Jmb3JnZXRgLiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGF0LCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGEgYGtmcmVlKHViaClgIGNhbGwsIHdoaWNoIEkmIzM5O2xsIGFzc3VtZSBpcyBjcml0aWNhbCBmb3IgcHJvcGVyIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgaW1wcm92aW5nIHRoZSByZWxpYWJpbGl0eSBhbmQgcmVkdWNpbmcgdGhlIHBvdGVudGlhbCBmb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4KCkZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZSBrZXkgcGllY2VzIG9mIHRoaXMgcHV6emxlIGFyZSB0aGUgZnVuY3Rpb25zIGB1YmhfYmZvcmdldGAsIGB1ZnNfc2V0YXR0cmAsIGFuZCBgdWZzX2V2aWN0X2lub2RlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVycmVsYXRlIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3QuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHdvcmsuCgpJdCYjMzk7cyBuZWNlc3NhcnkgdGhhdCBgdWZzX3NldGF0dHJgIGFuZCBgdWZzX2V2aWN0X2lub2RlYCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgpHaXZlbiB0aGF0IHRoZXNlIGFyZSB0aGUgZWxlbWVudHMgaW4gZm9jdXMsIEkgd2lsbCB1c2UgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgYWxsIHRoZSByZWxldmFudCBkYXRhIGFuZCBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJoX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7dWZzX3NldGF0dHImIzM0OywKICAgICYjMzQ7dWZzX2V2aWN0X2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYHViaF9iZm9yZ2V0YCBieSBhZGRpbmcgYSBtaXNzaW5nIGBrZnJlZSh1YmgpYCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFVGUyBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJoX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7dWZzX3NldGF0dHImIzM0OywKICAgICYjMzQ7dWZzX2V2aWN0X2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYHViaF9iZm9yZ2V0YCBieSBhZGRpbmcgYSBtaXNzaW5nIGBrZnJlZSh1YmgpYCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFVGUyBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MTAuNjQ3MjQ1MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1MjEzMDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInViaF9iZm9yZ2V0XCIsXG4gICAgXCJ1ZnNfc2V0YXR0clwiLFxuICAgIFwidWZzX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjEwLjY0NzI1MjM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3MzQyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTg6MzY6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL3V0aWwuYyBiL2ZzL3Vmcy91dGlsLmNcXG5pbmRleCBkZmY2Zjc0NjE4ZGVmLi42MDNkODBiOTMwNjZkIDEwMDY0NFxcbi0tLSBhL2ZzL3Vmcy91dGlsLmNcXG4rKysgYi9mcy91ZnMvdXRpbC5jXFxuQEAgLTExNyw4ICsxMTcsOSBAQCB2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxcbiBcXHR1bnNpZ25lZCBpO1xcbiBcXHRpZiAoIXViaCkgXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0Zm9yICggaSA9IDA7IGkgXFx1MDAzYyB1YmgtXFx1MDAzZWNvdW50OyBpKysgKSBpZiAoIHViaC1cXHUwMDNlYmhbaV0gKSBcXG4tXFx0XFx0YmZvcmdldCAodWJoLVxcdTAwM2ViaFtpXSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1YmgtXFx1MDAzZWNvdW50OyBpKyspXFxuK1xcdFxcdGJmb3JnZXQodWJoLVxcdTAwM2ViaFtpXSk7XFxuK1xcdGtmcmVlKHViaCk7XFxuIH1cXG4gIFxcbiBpbnQgdWJoX2J1ZmZlcl9kaXJ0eSAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqIHViaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MTEuMTAxODQzMzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDcwOTU0ODEyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVUZTX0ZTXCIsXG4gICAgXCJVRlNfRlNfV1JJVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmhfYmZvcmdldFwiLFxuICAgIFwidWZzX3NldGF0dHJcIixcbiAgICBcInVmc19ldmljdF9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYHViaF9iZm9yZ2V0YCBieSBhZGRpbmcgYSBtaXNzaW5nIGBrZnJlZSh1YmgpYCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFVGUyBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxODozNjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy91dGlsLmMgYi9mcy91ZnMvdXRpbC5jXG5pbmRleCBkZmY2Zjc0NjE4ZGVmLi42MDNkODBiOTMwNjZkIDEwMDY0NFxuLS0tIGEvZnMvdWZzL3V0aWwuY1xuKysrIGIvZnMvdWZzL3V0aWwuY1xuQEAgLTExNyw4ICsxMTcsOSBAQCB2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxuIFx0dW5zaWduZWQgaTtcbiBcdGlmICghdWJoKSBcbiBcdFx0cmV0dXJuO1xuLVx0Zm9yICggaSA9IDA7IGkgXHUwMDNjIHViaC1cdTAwM2Vjb3VudDsgaSsrICkgaWYgKCB1YmgtXHUwMDNlYmhbaV0gKSBcbi1cdFx0YmZvcmdldCAodWJoLVx1MDAzZWJoW2ldKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViaC1cdTAwM2Vjb3VudDsgaSsrKVxuK1x0XHRiZm9yZ2V0KHViaC1cdTAwM2ViaFtpXSk7XG4rXHRrZnJlZSh1YmgpO1xuIH1cbiAgXG4gaW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxMS4xMDE4NDQ2MTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU4MTQ2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVGUyBQYXRjaDogdWJoX2Jmb3JnZXQgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGZzL3Vmcy91dGlsLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgdGhlIGB1YmhfYmZvcmdldGAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmICh1YmgtXHUwMDNlYmhbaV0pYCBjaGVjayB3aXRoaW4gdGhlIGxvb3AgYW5kIHRoZSBhZGRpdGlvbiBvZiBga2ZyZWUodWJoKWAgYXQgdGhlIGVuZC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBmaXhpbmcgc29tZXRoaW5nLCBtYXliZSBhIG1lbW9yeSBsZWFrLCBvciBhIHBvdGVudGlhbCBidWcgaW52b2x2aW5nIG51bGwgYmxvY2sgaGVhZGVycy4gVGhlIHJlbW92YWwgb2YgdGhlIGNoZWNrIHN1Z2dlc3RzIHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgYmVlbiBvdmVybHkgY2F1dGlvdXMgb3IgaGFuZGxpbmcgYSBzY2VuYXJpbyB0aGF0J3Mgbm8gbG9uZ2VyIHJlbGV2YW50LCBvciB3YXMgYnVnZ3kgaW4gaXRzZWxmLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgYGZzL3Vmcy91dGlsLmNgIGRpcmVjdGx5IGFuZCB0aGVuIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBzZWUgd2hlcmUgZXhhY3RseSBgdWJoX2Jmb3JnZXRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0IGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjE1LjQ1OTk5MzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTI4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInViaF9iZm9yZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvaW5vZGUuYz05NjE9c3RhdGljIHZvaWQgZnJlZV9mdWxsX2JyYW5jaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgaW5kX2Jsb2NrLCBpbnQgZGVwdGgpXFxuLS1cXG5mcy91ZnMvaW5vZGUuYy05ODktXFxuZnMvdWZzL2lub2RlLmM6OTkwOlxcdHViaF9iZm9yZ2V0KHViaCk7XFxuZnMvdWZzL2lub2RlLmMtOTkxLVxcdHVmc19mcmVlX2Jsb2Nrcyhpbm9kZSwgaW5kX2Jsb2NrLCB1c3BpLVxcdTAwM2VzX2ZwYik7XFxuLS1cXG5mcy91ZnMvdXRpbC5jPTEwMj12b2lkIHViaF9zeW5jX2Jsb2NrKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKnViaClcXG4tLVxcbmZzL3Vmcy91dGlsLmMtMTE0LVxcbmZzL3Vmcy91dGlsLmM6MTE1OnZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXFxuZnMvdWZzL3V0aWwuYy0xMTYte1xcbi0tXFxuZnMvdWZzL3V0aWwuaD0yNjY9ZXh0ZXJuIHZvaWQgdWJoX3N5bmNfYmxvY2soc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcXG5mcy91ZnMvdXRpbC5oOjI2NzpleHRlcm4gdm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcXG5mcy91ZnMvdXRpbC5oLTI2OC1leHRlcm4gaW50ICB1YmhfYnVmZmVyX2RpcnR5IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxNS41MjQ1MzM4MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE3NzExOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVRlMgQmxvY2sgRGVhbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyBgdWJoX2Jmb3JnZXRgIHVzZWQgd2l0aGluIGBmcy91ZnMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSBpbnNpZGUgdGhlIGBmcmVlX2Z1bGxfYnJhbmNoYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgcmVhY2ggYGZyZWVfZnVsbF9icmFuY2hgLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGZzL3Vmcy9pbm9kZS5jYCBkaXJlY3RseS4gUmlnaHQsIEkgc2VlIHRoYXQgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGNhbGxlZCBmcm9tIGB1ZnNfdHJ1bmNhdGVfYmxvY2tzYC4gVGhhdOKAmXMgYSBrZXkgY29ubmVjdGlvbiDigJMgZmlsZSB0cnVuY2F0aW9uIGNhbiBwb3RlbnRpYWxseSBsZWFkIHRvIHRoaXMgYmxvY2sgZGVhbGxvY2F0aW9uLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBVRlMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYnVpbGQgZmxhZ3Mgb3Iga2VybmVsIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhpcyBjb2RlIHBhdGggb3IgaXRzIGJlaGF2aW9yPyBVbmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxOC43NDIyNDg3MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMTc4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3Vmcy9LY29uZmlnOjI6Y29uZmlnIFVGU19GU1xcbmZzL3Vmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChyZWFkIG9ubHkpXFxcIlxcbi0tXFxuZnMvdWZzL0tjb25maWctMzEtXFxuZnMvdWZzL0tjb25maWc6MzI6Y29uZmlnIFVGU19GU19XUklURVxcbmZzL3Vmcy9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIlVGUyBmaWxlIHN5c3RlbSB3cml0ZSBzdXBwb3J0IChEQU5HRVJPVVMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxOC44MjU0ODQxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzM3NzUzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlVGUyBGaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uIGFuZCBMb2NhdGlvbiBEaXNjb3ZlcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhcmUgYFVGU19GU2AgYW5kIGBVRlNfRlNfV1JJVEVgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCB0aG9zZSdsbCBsaWtlbHkgZW5hYmxlIGFuZCBjb250cm9sIHdyaXRlIHN1cHBvcnQgZm9yIHRoZSBVRlMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIHNvIGdvb2QgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBjb3JyZWN0LiBOb3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbuKApiB0aGF0J3MgaW4gYGZzL3Vmcy91dGlsLmNgLiBSaWdodCwgdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgZnMvdWZzL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHdpcmVkIHVwIHByb3Blcmx5LCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QsIGFuZCB0aG9zZSBtb2R1bGVzIGFyZSBnZXR0aW5nIGNvbXBpbGVkIHdpdGggdGhlIHJpZ2h0IGZsYWdzLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgcGljayB1cCB0aGVzZSBzcGVjaWZpYyBjb21wb25lbnRzLiBTaG91bGRuJ3QgdGFrZSBsb25nIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGJ1aWx0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjIyLjI1OTI2Mjg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzEyNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL01ha2VmaWxlLTUtXFxuZnMvdWZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1VGU19GUykgKz0gdWZzLm9cXG5mcy91ZnMvTWFrZWZpbGUtNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MjIuMzIwOTc5Njg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzI0NjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQW5hbHl6aW5nIFVGUyBGaWxlIFN5c3RlbSBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1VGU19GU2AgaXMgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgbXkgdHJhaW4gb2YgdGhvdWdodCBzaGlmdHMuIEkgcmVjYWxsIGBmcmVlX2Z1bGxfYnJhbmNoYCBpcyB1c2VkIGluIGEgZmV3IHBsYWNlcy4gTGV0J3MgbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNvcnJlY3QgZXhlY3V0aW9uIHBhdGguIFNwZWNpZmljYWxseSwgSSBrbm93IGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYHVmc190cnVuY2F0ZV9ibG9ja3NgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBlaXRoZXIgYHVmc190cnVuY2F0ZWAgb3IgcG90ZW50aWFsbHkgZXZlbiBgdWZzX2V2aWN0X2lub2RlYC4uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hpY2ggZnVuY3Rpb25zIGNhbGwgd2hpY2gsIGluIHdoaWNoIGNpcmN1bXN0YW5jZXMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5Pa2F5LCBJIG5lZWQgdG8gY2hlY2sgYGZzL3Vmcy9pbm9kZS5jYC4gVGhhdCdzIHdoZXJlIGBmcmVlX2Z1bGxfYnJhbmNoYCB3b3VsZCBiZSBkZWZpbmVkLCBzbyBJIG5lZWQgdG8gZ28gbG9vayB0aHJvdWdoIHRoZSBjb2RlIGluIHRoYXQgZmlsZS4gSSBjYW4gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgZnJlZV9mdWxsX2JyYW5jaGAgYW5kIHRoZSB0cnVuY2F0aW9uIG9yIGV2aWN0aW9uIG9mIGFuIGlub2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MjUuNTk0MjI5NjIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0ODkwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJlZV9mdWxsX2JyYW5jaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvaW5vZGUuYz04ODM9c3RhdGljIHZvaWQgdWZzX3RydW5jX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtOTYwLVxcbmZzL3Vmcy9pbm9kZS5jOjk2MTpzdGF0aWMgdm9pZCBmcmVlX2Z1bGxfYnJhbmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbmRfYmxvY2ssIGludCBkZXB0aClcXG5mcy91ZnMvaW5vZGUuYy05NjIte1xcbi0tXFxuZnMvdWZzL2lub2RlLmMtOTc1LVxcdFxcdFxcdGlmIChibG9jaylcXG5mcy91ZnMvaW5vZGUuYzo5NzY6XFx0XFx0XFx0XFx0ZnJlZV9mdWxsX2JyYW5jaChpbm9kZSwgYmxvY2ssIGRlcHRoKTtcXG5mcy91ZnMvaW5vZGUuYy05NzctXFx0XFx0fVxcbi0tXFxuZnMvdWZzL2lub2RlLmM9OTk0PXN0YXRpYyB2b2lkIGZyZWVfYnJhbmNoX3RhaWwoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgZnJvbSwgc3RydWN0IHVmc19idWZmZXJfaGVhZCAqdWJoLCBpbnQgZGVwdGgpXFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMDA4LVxcdFxcdFxcdFxcdHViaF9tYXJrX2J1ZmZlcl9kaXJ0eSh1YmgpO1xcbmZzL3Vmcy9pbm9kZS5jOjEwMDk6XFx0XFx0XFx0XFx0ZnJlZV9mdWxsX2JyYW5jaChpbm9kZSwgYmxvY2ssIGRlcHRoKTtcXG5mcy91ZnMvaW5vZGUuYy0xMDEwLVxcdFxcdFxcdH1cXG4tLVxcbmZzL3Vmcy9pbm9kZS5jPTExMDE9c3RhdGljIHZvaWQgdWZzX3RydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtMTE1Ni1cXHRcXHRcXHR3cml0ZV9zZXF1bmxvY2soXFx1MDAyNnVmc2ktXFx1MDAzZW1ldGFfbG9jayk7XFxuZnMvdWZzL2lub2RlLmM6MTE1NzpcXHRcXHRcXHRmcmVlX2Z1bGxfYnJhbmNoKGlub2RlLCBibG9jaywgaSAtIFVGU19JTkRfQkxPQ0sgKyAxKTtcXG5mcy91ZnMvaW5vZGUuYy0xMTU4LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MjUuNzA2NzIzODA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTU1MjIzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRlMgRmlsZSBTeXN0ZW0gTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaGVyZSwgYW5kIGl0J3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgb25lLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBibG9jayBtb2RpZmljYXRpb25zLCBJJ20gYXNzdW1pbmcgYFVGU19GU19XUklURWAgbGlrZWx5IGluZGljYXRlcyB3cml0ZSBzdXBwb3J0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcGlucG9pbnQgd2hldGhlciBgVUZTX0ZTX1dSSVRFYCBpcyBhIHJlcXVpcmVtZW50IGZvciBgdWJoX2Jmb3JnZXRgLCBidXQgbGV0IG1lIGNoZWNrIHdoZXJlIHRoYXQgcmVzaWRlcy4uLmFoLCBgZnMvdWZzL3V0aWwuY2AuIE5vdyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgdXRpbC5jYCBpcyBhbHdheXMgY29tcGlsZWQgd2l0aCBgVUZTX0ZTYCBvciB3aGV0aGVyIGl0IGhhcyBjb25kaXRpb25hbCBwYXJ0cy4gSXQgbG9va3MgbGlrZSBpdCBpcy4gQnV0LCBJIHJlbWVtYmVyIHRoYXQgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGluIGBpbm9kZS5jYC4gVGhlcmVmb3JlLCBsZXQgbWUgc2VlIGlmIGBmcmVlX2Z1bGxfYnJhbmNoYCBpcyBwcm90ZWN0ZWQgd2l0aCBhbiBgI2lmZGVmIENPTkZJR19VRlNfRlNfV1JJVEVgIG9yIG5vdC4gVGhpcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBpbXBhY3Qgb2YgdGhpcyBuZXcgY29kZSBhbmQgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoyOS45MjIyNDg0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2ODQxMDc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVUZTX0ZTX1dSSVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmcy9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjozMC4wMTkwOTc0NzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0OTU5NzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBVRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgVUZTIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL3Vmcy9pbm9kZS5jYCwgc2hvdWxkIGhhdmUgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX1VGU19GU19XUklURWAuIEJ1dCBpdCdzIG5vdCBsb29raW5nIGxpa2UgaXQncyB0aGVyZS4gVGhhdCdzIHVudXN1YWwsIGFuZCBpdCdzIG1ha2luZyBtZSB3b25kZXIgaWYgSSdtIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlIG9yIGlmIHRoZXJlJ3MgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIGF0IHBsYXkuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGVyZSB0aGlzIHdyaXRlIGNvbmZpZ3VyYXRpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgbmV4dCBwbGFjZSB0byBjaGVjayB3b3VsZCBiZSB0aGUgYGZzL3Vmcy9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgYENPTkZJR19VRlNfRlNfV1JJVEVgIGlzIHNldCwgYW5kIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGxpbmtpbmcgZ29pbmcgb24gdGhhdCBJJ20gbWlzc2luZy4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjMzLjA2ODcyNjQ4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4ODg2MTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19VRlNfRlNfV1JJVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjozMy4xMjI2MjM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcxMTQwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBVRlMgYW5kIHdyaXRlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlIHdyaXRlIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgb3IgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgdGhlIFVGUyBmaWxlc3lzdGVtLiBSaWdodCwgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvcmUgVUZTIGNvZGUsIHNwZWNpZmljYWxseSB3aGVyZSB0aGUgc3VwZXJibG9jayBvcGVyYXRpb25zIGFyZSBkZWZpbmVkLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBmaWxlc3lzdGVtLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBmcy91ZnMvc3VwZXIuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBmZWF0dXJlcywgaW5jbHVkaW5nIHdyaXRlIG9wZXJhdGlvbnMuIEFuZCwgc2luY2Ugd2UncmUgaW50ZXJlc3RlZCBpbiB0aGUgd3JpdGUgY2FwYWJpbGl0aWVzIHNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ09ORklHX1VGU19GU19XUklURWAuIFRoYXQncyB0aGUgbGlrZWx5IGNvbmZpZ3VyYXRpb24gc3ltYm9sIHRvIGNoZWNrIGZvci4gTGV0J3Mgc2VlIGlmIHRoYXQncyBkZWZpbmVkIG9yIHVzZWQsIGFuZCBpZiBzbywgaG93IGl0IGFmZmVjdHMgdGhlIFVGUyB3cml0ZSBvcGVyYXRpb25zLiBUaW1lIHRvIGdldCBkaWdnaW5nIGluIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MzYuNTkzNzY3MDg5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg0MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVUZTX0ZTX1dSSVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtNzM4LVxcbmZzL3Vmcy9zdXBlci5jOjczOTojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy03NDAtXFx0aWYgKCFzYl9yZG9ubHkoc2IpKSB7XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEyNzktXFx0ICovXFxuZnMvdWZzL3N1cGVyLmM6MTI4MDojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy0xMjgxLVxcdFxcdHByX2VycihcXFwidWZzIHdhcyBjb21waWxlZCB3aXRoIHJlYWQtb25seSBzdXBwb3J0LCBjYW4ndCBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGVcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjozNi42NDM2MTM5MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMTA3MDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKlVGUyBXcml0ZSBBY2Nlc3MgYW5kIEJsb2NrIE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1vdW50aW5nIGEgVUZTIGZpbGVzeXN0ZW0gaW4gcmVhZC13cml0ZSBtb2RlLiBUbyBkbyB0aGF0LCBJIGtub3cgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQ09ORklHX1VGU19GU19XUklURWAuIFRoYXQncyB0aGUga2V5LCBiZWNhdXNlIHdpdGhvdXQgd3JpdGUgYWNjZXNzLCBJIGNhbid0IHRyaWdnZXIgdGhlIG9wZXJhdGlvbnMgSSBuZWVkIGZvciBwcm9wZXIgZmlsZSB0cnVuY2F0aW9uIGFuZCBmcmVlaW5nIHVwIHRob3NlIHVzZWQgYmxvY2tzLiBNYWtlcyBzZW5zZS4gVHJ1bmNhdGlvbiByZWxpZXMgb24gYmVpbmcgYWJsZSB0byBhY3R1YWxseSBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0ncyBtZXRhZGF0YS5cblxuTm93LCB3aGVyZSBkbyBJIGZpbmQgdGhlIGNydWNpYWwgYml0cyBmb3IgdGhpcz8gQWgsIHllcywgdGhlIGB1YmhfYmZvcmdldGAgZnVuY3Rpb24uIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBmb3IgZm9yZ2V0dGluZyBvciByZWxlYXNpbmcgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUuIEkgcmVtZW1iZXIgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBiZSwgc28gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGZzL3Vmcy91dGlsLmNgIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyBpdCB3b3Jrcy4gVGhhdCBmaWxlIGhhcyBhbHdheXMgYmVlbiBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBVRlMgdXRpbGl0aWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjQwLjY2NDY4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy91ZnMvdXRpbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdWJoLVxcdTAwM2Vjb3VudDsgaSsrKVxcbiAxMTE6XFx0XFx0XFx0XFx0d2FpdF9vbl9idWZmZXIodWJoLVxcdTAwM2ViaFtpXSk7XFxuIDExMjpcXHRcXHR9XFxuIDExMzpcXHR9XFxuIDExNDpcXHRcXG4gMTE1OlxcdHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXFxuIDExNjpcXHR7XFxuIDExNzpcXHRcXHR1bnNpZ25lZCBpO1xcbiAxMTg6XFx0XFx0aWYgKCF1YmgpIFxcbiAxMTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHViaC1cXHUwMDNlY291bnQ7IGkrKylcXG4gMTIxOlxcdFxcdFxcdGJmb3JnZXQodWJoLVxcdTAwM2ViaFtpXSk7XFxuIDEyMjpcXHRcXHRrZnJlZSh1YmgpO1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0IFxcbiAxMjU6XFx0aW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHR1bnNpZ25lZCBpO1xcbiAxMjg6XFx0XFx0dW5zaWduZWQgcmVzdWx0ID0gMDtcXG4gMTI5OlxcdFxcdGlmICghdWJoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo0MC42NjQ3OTIzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE5OTE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBVRlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBkZWZpbml0ZWx5IGZpeGluZyBhIG1lbW9yeSBsZWFrLiBUaGUga2V5IGlzIHRoYXQgYGtmcmVlKHViaClgIGlzIGJlaW5nIGFkZGVkIHRvIGB1YmhfYmZvcmdldGAuIFRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZpeCBhcmUgYFVGU19GU2AgYW5kIGBVRlNfRlNfV1JJVEVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbiBpdHNlbGYuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGNvbmZpZyBuYW1lcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYFVGU19GU19XUklURWAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gQWgsIHllcywgbG9va2luZyBhdCB0aGUgYGZzL3Vmcy9LY29uZmlnYCBmaWxlIGNvbmZpcm1zIHRoYXQgYFVGU19GU19XUklURWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiBgVUZTX0ZTYCwgc28gYm90aCBhcmUgbmVjZXNzYXJ5LlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBgdWJoX2Jmb3JnZXRgLiBHaXZlbiB0aGF0IGB1YmhfYmZvcmdldGAgaXMgYSByZWxhdGl2ZWx5IHNtYWxsIGZ1bmN0aW9uLCBJIHNob3VsZCBldmFsdWF0ZSBpZiByZWxhdGVkIGZ1bmN0aW9ucyBhbHNvIG5lZWQgaW52ZXN0aWdhdGlvbiwgc3VjaCBhcyBgZnJlZV9mdWxsX2JyYW5jaGAgb3IgYHVmc190cnVuY2F0ZV9ibG9ja3NgLiBIb3dldmVyLCBJIHNlZSBgdWJoX2Jmb3JnZXRgIGlzIGRlZmluZWQgaW4gYGZzL3Vmcy91dGlsLmNgIGFzIG5vbi1zdGF0aWMsIHNvIGl0J3MgbGlrZWx5IGEgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIGluIHRoZSBVRlMgZmlsZSBzeXN0ZW0uIFdoaWxlIGl0J3Mgbm90IGV4cGxpY2l0bHkgYEVYUE9SVF9TWU1CT0xgLCBpdCdzIHN0aWxsIGFjY2Vzc2libGUuIFRoZXJlZm9yZSwgZm9jdXNpbmcgb24gaXQgaXMgYSBzb2xpZCBhcHByb2FjaC5cblxuTm93LCBJJ2xsIHRha2UgYSBsb29rIGZvciBhbnkgb3RoZXIgY2FsbCBzaXRlcyBvZiBgdWJoX2Jmb3JnZXRgIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjQ2LjA4NDcxMzAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc0NjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmhfYmZvcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2lub2RlLmM9OTYxPXN0YXRpYyB2b2lkIGZyZWVfZnVsbF9icmFuY2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGluZF9ibG9jaywgaW50IGRlcHRoKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtOTg5LVxcbmZzL3Vmcy9pbm9kZS5jOjk5MDpcXHR1YmhfYmZvcmdldCh1YmgpO1xcbmZzL3Vmcy9pbm9kZS5jLTk5MS1cXHR1ZnNfZnJlZV9ibG9ja3MoaW5vZGUsIGluZF9ibG9jaywgdXNwaS1cXHUwMDNlc19mcGIpO1xcbi0tXFxuZnMvdWZzL3V0aWwuYz0xMDI9dm9pZCB1Ymhfc3luY19ibG9jayhzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICp1YmgpXFxuLS1cXG5mcy91ZnMvdXRpbC5jLTExNC1cXG5mcy91ZnMvdXRpbC5jOjExNTp2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxcbmZzL3Vmcy91dGlsLmMtMTE2LXtcXG4tLVxcbmZzL3Vmcy91dGlsLmg9MjY2PWV4dGVybiB2b2lkIHViaF9zeW5jX2Jsb2NrKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XFxuZnMvdWZzL3V0aWwuaDoyNjc6ZXh0ZXJuIHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XFxuZnMvdWZzL3V0aWwuaC0yNjgtZXh0ZXJuIGludCAgdWJoX2J1ZmZlcl9kaXJ0eSAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6NDYuMTMyNDY0NDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTMzNzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipGb2N1cyBTeW1ib2wgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBhbmFseXNpcy4gVGhlIGZhY3QgdGhhdCBgdWJoX2Jmb3JnZXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc2lnbmlmaWNhbnQgaW5kaWNhdG9yLiBBbmQgc2luY2UgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB0aGF0IHN0cmVuZ3RoZW5zIGB1YmhfYmZvcmdldGAgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYXR0ZW50aW9uLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIGEgY3JpdGljYWwgcG9pbnQgb2Ygb3BlcmF0aW9uLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBjb25zaWRlciBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AuIFdlIGNhbiBzZWUgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGB1ZnNfZXZpY3RfaW5vZGVgIGFuZCBgdWZzX3NldGF0dHJgLiBHaXZlbiB0aGlzIGNhbGxpbmcgY29udGV4dCwgYHVmc190cnVuY2F0ZV9ibG9ja3NgIGFsc28gZW1lcmdlcyBhcyBhIHZhbGlkIGFuZCBwb3RlbnRpYWxseSB1c2VmdWwgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uLiBJdCB0b3VjaGVzIG9uIGlub2RlIGV2aWN0aW9uIGFuZCBhdHRyaWJ1dGUgc2V0dGluZywgbWFraW5nIGl0IGEgY3JpdGljYWwgYXNwZWN0IG9mIGZpbGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo0OS42NDE4MDUxMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTM1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVmc190cnVuY2F0ZV9ibG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Vmcy9pbm9kZS5jPTQ2MD1pbnQgdWZzX3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtNDY0LVxcbmZzL3Vmcy9pbm9kZS5jOjQ2NTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqKTtcXG5mcy91ZnMvaW5vZGUuYy00NjYtXFxuZnMvdWZzL2lub2RlLmM9NDY3PXN0YXRpYyB2b2lkIHVmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bylcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTQ3Mi1cXHRcXHR0cnVuY2F0ZV9wYWdlY2FjaGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbmZzL3Vmcy9pbm9kZS5jOjQ3MzpcXHRcXHR1ZnNfdHJ1bmNhdGVfYmxvY2tzKGlub2RlKTtcXG5mcy91ZnMvaW5vZGUuYy00NzQtXFx0fVxcbi0tXFxuZnMvdWZzL2lub2RlLmM9ODM5PXZvaWQgdWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtODUxLVxcdFxcdCAgICAgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkpXFxuZnMvdWZzL2lub2RlLmM6ODUyOlxcdFxcdFxcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xcbmZzL3Vmcy9pbm9kZS5jLTg1My1cXHRcXHR1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMDMzPXN0YXRpYyBpbnQgdWZzX2FsbG9jX2xhc3RibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTExMDAtXFxuZnMvdWZzL2lub2RlLmM6MTEwMTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvdWZzL2lub2RlLmMtMTEwMi17XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMTY3PXN0YXRpYyBpbnQgdWZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtMTE4OS1cXG5mcy91ZnMvaW5vZGUuYzoxMTkwOlxcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xcbmZzL3Vmcy9pbm9kZS5jLTExOTEtXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo0OS43MjI3NDU1NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNDc5NTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgc25pcHBldCBvZiB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgVUZTIElub2RlIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoYXQgYHVmc190cnVuY2F0ZV9ibG9ja3NgIGZ1bmN0aW9uLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgcmlnaHQ/IFRoYXQgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBOb3csIHdoYXQgYWJvdXQgYHVmc19ldmljdF9pbm9kZWA/IEhhbmcgb24sIHRoYXQgb25lIGlzICpub3QqIHN0YXRpYywgc28gaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBBbmQgd2hhdCBhYm91dCBgdWZzX3RydW5jYXRlYD8gT2ggd2FpdCwgeWVzLCBgdWZzX3RydW5jYXRlYCBpcyBhbHNvIHN0YXRpYywgbWFraW5nIGl0IGludGVybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSdzIGltcGxlbWVudGF0aW9uLiBOb3csIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uIGFyaXNlczogZG9lcyBgdWZzX3NldGF0dHJgIGNhbGwgdGhhdCBpbnRlcm5hbCBgdWZzX3RydW5jYXRlYCBmdW5jdGlvbj8gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2Ygb3BlcmF0aW9ucyBiZXR0ZXIuIExldCdzIHNlZSBpZiBJIGNhbiBmaW5kIHRoYXQgY2FsbC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6NTMuMTM3NTQ0MzI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjU3ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZnNfdHJ1bmNhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Vmcy9pbm9kZS5jPTQ2MD1pbnQgdWZzX3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtNDY0LVxcbmZzL3Vmcy9pbm9kZS5jOjQ2NTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqKTtcXG5mcy91ZnMvaW5vZGUuYy00NjYtXFxuZnMvdWZzL2lub2RlLmM9NDY3PXN0YXRpYyB2b2lkIHVmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bylcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTQ3Mi1cXHRcXHR0cnVuY2F0ZV9wYWdlY2FjaGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbmZzL3Vmcy9pbm9kZS5jOjQ3MzpcXHRcXHR1ZnNfdHJ1bmNhdGVfYmxvY2tzKGlub2RlKTtcXG5mcy91ZnMvaW5vZGUuYy00NzQtXFx0fVxcbi0tXFxuZnMvdWZzL2lub2RlLmM9ODM5PXZvaWQgdWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtODUxLVxcdFxcdCAgICAgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkpXFxuZnMvdWZzL2lub2RlLmM6ODUyOlxcdFxcdFxcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xcbmZzL3Vmcy9pbm9kZS5jLTg1My1cXHRcXHR1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMDMzPXN0YXRpYyBpbnQgdWZzX2FsbG9jX2xhc3RibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTExMDAtXFxuZnMvdWZzL2lub2RlLmM6MTEwMTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvdWZzL2lub2RlLmMtMTEwMi17XFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMTY2LVxcbmZzL3Vmcy9pbm9kZS5jOjExNjc6c3RhdGljIGludCB1ZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuZnMvdWZzL2lub2RlLmMtMTE2OC17XFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMTg5LVxcbmZzL3Vmcy9pbm9kZS5jOjExOTA6XFx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XFxuZnMvdWZzL2lub2RlLmMtMTE5MS1cXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMTk4PWludCB1ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdWZzL2lub2RlLmMtMTIwOS1cXHRpZiAoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX1NJWkUgXFx1MDAyNlxcdTAwMjYgYXR0ci1cXHUwMDNlaWFfc2l6ZSAhPSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZnMvdWZzL2lub2RlLmM6MTIxMDpcXHRcXHRlcnJvciA9IHVmc190cnVuY2F0ZShpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuZnMvdWZzL2lub2RlLmMtMTIxMS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjUzLjIyMDEzNjU1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODI1NzQzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIGNoYW5nZSwgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5c2lzIG9mIFVGUyBNZW1vcnkgTGVhayBGaXgqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBhIG1lbW9yeSBsZWFrIHdpdGhpbiBgdWJoX2Jmb3JnZXRgLiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGF0LCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGEgYGtmcmVlKHViaClgIGNhbGwsIHdoaWNoIEknbGwgYXNzdW1lIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBVRlMgZmlsZXN5c3RlbS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBpbXByb3ZpbmcgdGhlIHJlbGlhYmlsaXR5IGFuZCByZWR1Y2luZyB0aGUgcG90ZW50aWFsIGZvciByZXNvdXJjZSBleGhhdXN0aW9uLlxuXG5Gcm9tIG15IHBlcnNwZWN0aXZlLCB0aGUga2V5IHBpZWNlcyBvZiB0aGlzIHB1enpsZSBhcmUgdGhlIGZ1bmN0aW9ucyBgdWJoX2Jmb3JnZXRgLCBgdWZzX3NldGF0dHJgLCBhbmQgYHVmc19ldmljdF9pbm9kZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnJlbGF0ZSB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0LiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyB3b3JrLlxuXG5JdCdzIG5lY2Vzc2FyeSB0aGF0IGB1ZnNfc2V0YXR0cmAgYW5kIGB1ZnNfZXZpY3RfaW5vZGVgIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgdGhlIGVsZW1lbnRzIGluIGZvY3VzLCBJIHdpbGwgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIGFsbCB0aGUgcmVsZXZhbnQgZGF0YSBhbmQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODExLCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo1OC4wNDU4ODM1MzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0MzcxNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVGU19GU1wiLFxuICAgIFwiVUZTX0ZTX1dSSVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJoX2Jmb3JnZXRcIixcbiAgICBcInVmc19zZXRhdHRyXCIsXG4gICAgXCJ1ZnNfZXZpY3RfaW5vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGB1YmhfYmZvcmdldGAgYnkgYWRkaW5nIGEgbWlzc2luZyBga2ZyZWUodWJoKWAgY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBVRlMgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInViaF9iZm9yZ2V0XCIsXG4gICAgXCJ1ZnNfc2V0YXR0clwiLFxuICAgIFwidWZzX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7vptv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 18:34:38 +0000 UTC FinishedAt: 2026-08-02 18:37:00 +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": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "e61e071b-9c74-46de-bb34-1c7614217014" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ubh_bforget", "ufs_setattr", "ufs_evict_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VGU19GUyYjMzQ7LAogICAgJiMzNDtVRlNfRlNfV1JJVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmhfYmZvcmdldCYjMzQ7LAogICAgJiMzNDt1ZnNfc2V0YXR0ciYjMzQ7LAogICAgJiMzNDt1ZnNfZXZpY3RfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxODozNjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy91ZnMvdXRpbC5jIGIvZnMvdWZzL3V0aWwuY1xuaW5kZXggZGZmNmY3NDYxOGRlZi4uNjAzZDgwYjkzMDY2ZCAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Vmcy91dGlsLmNcbkBAIC0xMTcsOCAmIzQzOzExNyw5IEBAIHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4gXHR1bnNpZ25lZCBpO1xuIFx0aWYgKCF1YmgpIFxuIFx0XHRyZXR1cm47XG4tXHRmb3IgKCBpID0gMDsgaSBcdTAwM2MgdWJoLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOyApIGlmICggdWJoLVx1MDAzZWJoW2ldICkgXG4tXHRcdGJmb3JnZXQgKHViaC1cdTAwM2ViaFtpXSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdWJoLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJmb3JnZXQodWJoLVx1MDAzZWJoW2ldKTtcbiYjNDM7XHRrZnJlZSh1YmgpO1xuIH1cbiAgXG4gaW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VGU19GUyYjMzQ7LAogICAgJiMzNDtVRlNfRlNfV1JJVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmhfYmZvcmdldCYjMzQ7LAogICAgJiMzNDt1ZnNfc2V0YXR0ciYjMzQ7LAogICAgJiMzNDt1ZnNfZXZpY3RfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxODozNjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Vmcy91dGlsLmMgYi9mcy91ZnMvdXRpbC5jCmluZGV4IGRmZjZmNzQ2MThkZWYuLjYwM2Q4MGI5MzA2NmQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWZzL3V0aWwuYwpAQCAtMTE3LDggJiM0MzsxMTcsOSBAQCB2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKQogCXVuc2lnbmVkIGk7CiAJaWYgKCF1YmgpIAogCQlyZXR1cm47Ci0JZm9yICggaSA9IDA7IGkgJmx0OyB1YmgtJmd0O2NvdW50OyBpJiM0MzsmIzQzOyApIGlmICggdWJoLSZndDtiaFtpXSApIAotCQliZm9yZ2V0ICh1YmgtJmd0O2JoW2ldKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHViaC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJYmZvcmdldCh1YmgtJmd0O2JoW2ldKTsKJiM0MzsJa2ZyZWUodWJoKTsKIH0KICAKIGludCB1YmhfYnVmZmVyX2RpcnR5IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVGUyBQYXRjaDogdWJoX2Jmb3JnZXQgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGZzL3Vmcy91dGlsLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgdWJoX2Jmb3JnZXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBpZiAodWJoLSZndDtiaFtpXSlgIGNoZWNrIHdpdGhpbiB0aGUgbG9vcCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBrZnJlZSh1YmgpYCBhdCB0aGUgZW5kLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBmaXhpbmcgc29tZXRoaW5nLCBtYXliZSBhIG1lbW9yeSBsZWFrLCBvciBhIHBvdGVudGlhbCBidWcgaW52b2x2aW5nIG51bGwgYmxvY2sgaGVhZGVycy4gVGhlIHJlbW92YWwgb2YgdGhlIGNoZWNrIHN1Z2dlc3RzIHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgYmVlbiBvdmVybHkgY2F1dGlvdXMgb3IgaGFuZGxpbmcgYSBzY2VuYXJpbyB0aGF0JiMzOTtzIG5vIGxvbmdlciByZWxldmFudCwgb3Igd2FzIGJ1Z2d5IGluIGl0c2VsZi4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgYGZzL3Vmcy91dGlsLmNgIGRpcmVjdGx5IGFuZCB0aGVuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGBncmVwcGVyYCBhbmQgc2VlIHdoZXJlIGV4YWN0bHkgYHViaF9iZm9yZ2V0YCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJoX2Jmb3JnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL2lub2RlLmM9OTYxPXN0YXRpYyB2b2lkIGZyZWVfZnVsbF9icmFuY2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGluZF9ibG9jaywgaW50IGRlcHRoKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTk4OS1cbmZzL3Vmcy9pbm9kZS5jOjk5MDpcdHViaF9iZm9yZ2V0KHViaCk7XG5mcy91ZnMvaW5vZGUuYy05OTEtXHR1ZnNfZnJlZV9ibG9ja3MoaW5vZGUsIGluZF9ibG9jaywgdXNwaS1cdTAwM2VzX2ZwYik7XG4tLVxuZnMvdWZzL3V0aWwuYz0xMDI9dm9pZCB1Ymhfc3luY19ibG9jayhzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICp1YmgpXG4tLVxuZnMvdWZzL3V0aWwuYy0xMTQtXG5mcy91ZnMvdXRpbC5jOjExNTp2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxuZnMvdWZzL3V0aWwuYy0xMTYte1xuLS1cbmZzL3Vmcy91dGlsLmg9MjY2PWV4dGVybiB2b2lkIHViaF9zeW5jX2Jsb2NrKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XG5mcy91ZnMvdXRpbC5oOjI2NzpleHRlcm4gdm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcbmZzL3Vmcy91dGlsLmgtMjY4LWV4dGVybiBpbnQgIHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVRlMgQmxvY2sgRGVhbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGB1YmhfYmZvcmdldGAgdXNlZCB3aXRoaW4gYGZzL3Vmcy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IGluc2lkZSB0aGUgYGZyZWVfZnVsbF9icmFuY2hgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSByZWFjaCBgZnJlZV9mdWxsX2JyYW5jaGAuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZnMvdWZzL2lub2RlLmNgIGRpcmVjdGx5LiBSaWdodCwgSSBzZWUgdGhhdCBgZnJlZV9mdWxsX2JyYW5jaGAgaXMgY2FsbGVkIGZyb20gYHVmc190cnVuY2F0ZV9ibG9ja3NgLiBUaGF04oCZcyBhIGtleSBjb25uZWN0aW9uIOKAkyBmaWxlIHRydW5jYXRpb24gY2FuIHBvdGVudGlhbGx5IGxlYWQgdG8gdGhpcyBibG9jayBkZWFsbG9jYXRpb24uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIFVGUy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBidWlsZCBmbGFncyBvciBrZXJuZWwgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB0aGlzIGNvZGUgcGF0aCBvciBpdHMgYmVoYXZpb3I/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3Vmcy9LY29uZmlnOjI6Y29uZmlnIFVGU19GU1xuZnMvdWZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChyZWFkIG9ubHkpXCYjMzQ7XG4tLVxuZnMvdWZzL0tjb25maWctMzEtXG5mcy91ZnMvS2NvbmZpZzozMjpjb25maWcgVUZTX0ZTX1dSSVRFXG5mcy91ZnMvS2NvbmZpZy0zMy1cdGJvb2wgXCYjMzQ7VUZTIGZpbGUgc3lzdGVtIHdyaXRlIHN1cHBvcnQgKERBTkdFUk9VUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVUZTIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gYW5kIExvY2F0aW9uIERpc2NvdmVyeSoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYXJlIGBVRlNfRlNgIGFuZCBgVUZTX0ZTX1dSSVRFYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdGhvc2UmIzM5O2xsIGxpa2VseSBlbmFibGUgYW5kIGNvbnRyb2wgd3JpdGUgc3VwcG9ydCBmb3IgdGhlIFVGUyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gZ29vZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGNvcnJlY3QuIE5vdywgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoZSBgdWJoX2Jmb3JnZXRgIGZ1bmN0aW9u4oCmIHRoYXQmIzM5O3MgaW4gYGZzL3Vmcy91dGlsLmNgLiBSaWdodCwgdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSBidWlsZCBzeXN0ZW0uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBmcy91ZnMvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIHdpcmVkIHVwIHByb3Blcmx5LCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QsIGFuZCB0aG9zZSBtb2R1bGVzIGFyZSBnZXR0aW5nIGNvbXBpbGVkIHdpdGggdGhlIHJpZ2h0IGZsYWdzLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgcGljayB1cCB0aGVzZSBzcGVjaWZpYyBjb21wb25lbnRzLiBTaG91bGRuJiMzOTt0IHRha2UgbG9uZyB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBidWlsdCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9NYWtlZmlsZS01LVxuZnMvdWZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1VGU19GUykgJiM0Mzs9IHVmcy5vXG5mcy91ZnMvTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjA4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIFVGUyBGaWxlIFN5c3RlbSBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19VRlNfRlNgIGlzIGEgcHJlcmVxdWlzaXRlIGhlcmUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBteSB0cmFpbiBvZiB0aG91Z2h0IHNoaWZ0cy4gSSByZWNhbGwgYGZyZWVfZnVsbF9icmFuY2hgIGlzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoLiBTcGVjaWZpY2FsbHksIEkga25vdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGVpdGhlciBgdWZzX3RydW5jYXRlYCBvciBwb3RlbnRpYWxseSBldmVuIGB1ZnNfZXZpY3RfaW5vZGVgLi4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGljaCBmdW5jdGlvbnMgY2FsbCB3aGljaCwgaW4gd2hpY2ggY2lyY3Vtc3RhbmNlcy4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuCgpPa2F5LCBJIG5lZWQgdG8gY2hlY2sgYGZzL3Vmcy9pbm9kZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBgZnJlZV9mdWxsX2JyYW5jaGAgd291bGQgYmUgZGVmaW5lZCwgc28gSSBuZWVkIHRvIGdvIGxvb2sgdGhyb3VnaCB0aGUgY29kZSBpbiB0aGF0IGZpbGUuIEkgY2FuIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGZyZWVfZnVsbF9icmFuY2hgIGFuZCB0aGUgdHJ1bmNhdGlvbiBvciBldmljdGlvbiBvZiBhbiBpbm9kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnJlZV9mdWxsX2JyYW5jaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Vmcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9pbm9kZS5jPTg4Mz1zdGF0aWMgdm9pZCB1ZnNfdHJ1bmNfZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvdWZzL2lub2RlLmMtOTYwLVxuZnMvdWZzL2lub2RlLmM6OTYxOnN0YXRpYyB2b2lkIGZyZWVfZnVsbF9icmFuY2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGluZF9ibG9jaywgaW50IGRlcHRoKVxuZnMvdWZzL2lub2RlLmMtOTYyLXtcbi0tXG5mcy91ZnMvaW5vZGUuYy05NzUtXHRcdFx0aWYgKGJsb2NrKVxuZnMvdWZzL2lub2RlLmM6OTc2Olx0XHRcdFx0ZnJlZV9mdWxsX2JyYW5jaChpbm9kZSwgYmxvY2ssIGRlcHRoKTtcbmZzL3Vmcy9pbm9kZS5jLTk3Ny1cdFx0fVxuLS1cbmZzL3Vmcy9pbm9kZS5jPTk5ND1zdGF0aWMgdm9pZCBmcmVlX2JyYW5jaF90YWlsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGZyb20sIHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKnViaCwgaW50IGRlcHRoKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTEwMDgtXHRcdFx0XHR1YmhfbWFya19idWZmZXJfZGlydHkodWJoKTtcbmZzL3Vmcy9pbm9kZS5jOjEwMDk6XHRcdFx0XHRmcmVlX2Z1bGxfYnJhbmNoKGlub2RlLCBibG9jaywgZGVwdGgpO1xuZnMvdWZzL2lub2RlLmMtMTAxMC1cdFx0XHR9XG4tLVxuZnMvdWZzL2lub2RlLmM9MTEwMT1zdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvdWZzL2lub2RlLmMtMTE1Ni1cdFx0XHR3cml0ZV9zZXF1bmxvY2soXHUwMDI2dWZzaS1cdTAwM2VtZXRhX2xvY2spO1xuZnMvdWZzL2lub2RlLmM6MTE1NzpcdFx0XHRmcmVlX2Z1bGxfYnJhbmNoKGlub2RlLCBibG9jaywgaSAtIFVGU19JTkRfQkxPQ0sgJiM0MzsgMSk7XG5mcy91ZnMvaW5vZGUuYy0xMTU4LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRlMgRmlsZSBTeXN0ZW0gTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSBoZXJlLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgb25lLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBibG9jayBtb2RpZmljYXRpb25zLCBJJiMzOTttIGFzc3VtaW5nIGBVRlNfRlNfV1JJVEVgIGxpa2VseSBpbmRpY2F0ZXMgd3JpdGUgc3VwcG9ydCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB3aGV0aGVyIGBVRlNfRlNfV1JJVEVgIGlzIGEgcmVxdWlyZW1lbnQgZm9yIGB1YmhfYmZvcmdldGAsIGJ1dCBsZXQgbWUgY2hlY2sgd2hlcmUgdGhhdCByZXNpZGVzLi4uYWgsIGBmcy91ZnMvdXRpbC5jYC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGB1dGlsLmNgIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGBVRlNfRlNgIG9yIHdoZXRoZXIgaXQgaGFzIGNvbmRpdGlvbmFsIHBhcnRzLiBJdCBsb29rcyBsaWtlIGl0IGlzLiBCdXQsIEkgcmVtZW1iZXIgdGhhdCBgZnJlZV9mdWxsX2JyYW5jaGAgaXMgaW4gYGlub2RlLmNgLiBUaGVyZWZvcmUsIGxldCBtZSBzZWUgaWYgYGZyZWVfZnVsbF9icmFuY2hgIGlzIHByb3RlY3RlZCB3aXRoIGFuIGAjaWZkZWYgQ09ORklHX1VGU19GU19XUklURWAgb3Igbm90LiBUaGlzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGltcGFjdCBvZiB0aGlzIG5ldyBjb2RlIGFuZCBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19VRlNfRlNfV1JJVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBVRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIFVGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBmcy91ZnMvaW5vZGUuY2AsIHNob3VsZCBoYXZlIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19VRlNfRlNfV1JJVEVgLiBCdXQgaXQmIzM5O3Mgbm90IGxvb2tpbmcgbGlrZSBpdCYjMzk7cyB0aGVyZS4gVGhhdCYjMzk7cyB1bnVzdWFsLCBhbmQgaXQmIzM5O3MgbWFraW5nIG1lIHdvbmRlciBpZiBJJiMzOTttIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlIG9yIGlmIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW50IG1lY2hhbmlzbSBhdCBwbGF5LiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gd2hlcmUgdGhpcyB3cml0ZSBjb25maWd1cmF0aW9uIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIG5leHQgcGxhY2UgdG8gY2hlY2sgd291bGQgYmUgdGhlIGBmcy91ZnMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBpcyBzZXQsIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZGl0aW9uYWwgbGlua2luZyBnb2luZyBvbiB0aGF0IEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVUZTX0ZTX1dSSVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFVGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVUZTIGFuZCB3cml0ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZSB3cml0ZSBiZWhhdmlvciBpcyBjb250cm9sbGVkIG9yIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwgZm9yIHRoZSBVRlMgZmlsZXN5c3RlbS4gUmlnaHQsIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBjb3JlIFVGUyBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIHN1cGVyYmxvY2sgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0uIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYGZzL3Vmcy9zdXBlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgZmVhdHVyZXMsIGluY2x1ZGluZyB3cml0ZSBvcGVyYXRpb25zLiBBbmQsIHNpbmNlIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluIHRoZSB3cml0ZSBjYXBhYmlsaXRpZXMgc3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ09ORklHX1VGU19GU19XUklURWAuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBjb25maWd1cmF0aW9uIHN5bWJvbCB0byBjaGVjayBmb3IuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyBkZWZpbmVkIG9yIHVzZWQsIGFuZCBpZiBzbywgaG93IGl0IGFmZmVjdHMgdGhlIFVGUyB3cml0ZSBvcGVyYXRpb25zLiBUaW1lIHRvIGdldCBkaWdnaW5nIGluIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVUZTX0ZTX1dSSVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvc3VwZXIuYz03MTY9c3RhdGljIGludCB1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvdWZzL3N1cGVyLmMtNzM4LVxuZnMvdWZzL3N1cGVyLmM6NzM5OiNpZm5kZWYgQ09ORklHX1VGU19GU19XUklURVxuZnMvdWZzL3N1cGVyLmMtNzQwLVx0aWYgKCFzYl9yZG9ubHkoc2IpKSB7XG4tLVxuZnMvdWZzL3N1cGVyLmM9MTIzOD1zdGF0aWMgaW50IHVmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvdWZzL3N1cGVyLmMtMTI3OS1cdCAqL1xuZnMvdWZzL3N1cGVyLmM6MTI4MDojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcbmZzL3Vmcy9zdXBlci5jLTEyODEtXHRcdHByX2VycihcJiMzNDt1ZnMgd2FzIGNvbXBpbGVkIHdpdGggcmVhZC1vbmx5IHN1cHBvcnQsIGNhbiYjMzk7dCBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGVcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipVRlMgV3JpdGUgQWNjZXNzIGFuZCBCbG9jayBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1vdW50aW5nIGEgVUZTIGZpbGVzeXN0ZW0gaW4gcmVhZC13cml0ZSBtb2RlLiBUbyBkbyB0aGF0LCBJIGtub3cgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYENPTkZJR19VRlNfRlNfV1JJVEVgLiBUaGF0JiMzOTtzIHRoZSBrZXksIGJlY2F1c2Ugd2l0aG91dCB3cml0ZSBhY2Nlc3MsIEkgY2FuJiMzOTt0IHRyaWdnZXIgdGhlIG9wZXJhdGlvbnMgSSBuZWVkIGZvciBwcm9wZXIgZmlsZSB0cnVuY2F0aW9uIGFuZCBmcmVlaW5nIHVwIHRob3NlIHVzZWQgYmxvY2tzLiBNYWtlcyBzZW5zZS4gVHJ1bmNhdGlvbiByZWxpZXMgb24gYmVpbmcgYWJsZSB0byBhY3R1YWxseSBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0mIzM5O3MgbWV0YWRhdGEuCgpOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgY3J1Y2lhbCBiaXRzIGZvciB0aGlzPyBBaCwgeWVzLCB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBmb3IgZm9yZ2V0dGluZyBvciByZWxlYXNpbmcgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gYmUsIHNvIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBmcy91ZnMvdXRpbC5jYCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgaXQgd29ya3MuIFRoYXQgZmlsZSBoYXMgYWx3YXlzIGJlZW4gYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgVUZTIHV0aWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWZzL3V0aWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViaC1cdTAwM2Vjb3VudDsgaSYjNDM7JiM0MzspXG4gMTExOlx0XHRcdFx0d2FpdF9vbl9idWZmZXIodWJoLVx1MDAzZWJoW2ldKTtcbiAxMTI6XHRcdH1cbiAxMTM6XHR9XG4gMTE0Olx0XG4gMTE1Olx0dm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqIHViaClcbiAxMTY6XHR7XG4gMTE3Olx0XHR1bnNpZ25lZCBpO1xuIDExODpcdFx0aWYgKCF1YmgpIFxuIDExOTpcdFx0XHRyZXR1cm47XG4gMTIwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1YmgtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KVxuIDEyMTpcdFx0XHRiZm9yZ2V0KHViaC1cdTAwM2ViaFtpXSk7XG4gMTIyOlx0XHRrZnJlZSh1YmgpO1xuIDEyMzpcdH1cbiAxMjQ6XHQgXG4gMTI1Olx0aW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4gMTI2Olx0e1xuIDEyNzpcdFx0dW5zaWduZWQgaTtcbiAxMjg6XHRcdHVuc2lnbmVkIHJlc3VsdCA9IDA7XG4gMTI5Olx0XHRpZiAoIXViaClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVUZTIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGZpeGluZyBhIG1lbW9yeSBsZWFrLiBUaGUga2V5IGlzIHRoYXQgYGtmcmVlKHViaClgIGlzIGJlaW5nIGFkZGVkIHRvIGB1YmhfYmZvcmdldGAuIFRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZpeCBhcmUgYFVGU19GU2AgYW5kIGBVRlNfRlNfV1JJVEVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbiBpdHNlbGYuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aG9zZSBjb25maWcgbmFtZXMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBVRlNfRlNfV1JJVEVgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIEFoLCB5ZXMsIGxvb2tpbmcgYXQgdGhlIGBmcy91ZnMvS2NvbmZpZ2AgZmlsZSBjb25maXJtcyB0aGF0IGBVRlNfRlNfV1JJVEVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGl0IGRlcGVuZHMgb24gYFVGU19GU2AsIHNvIGJvdGggYXJlIG5lY2Vzc2FyeS4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGB1YmhfYmZvcmdldGAuIEdpdmVuIHRoYXQgYHViaF9iZm9yZ2V0YCBpcyBhIHJlbGF0aXZlbHkgc21hbGwgZnVuY3Rpb24sIEkgc2hvdWxkIGV2YWx1YXRlIGlmIHJlbGF0ZWQgZnVuY3Rpb25zIGFsc28gbmVlZCBpbnZlc3RpZ2F0aW9uLCBzdWNoIGFzIGBmcmVlX2Z1bGxfYnJhbmNoYCBvciBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AuIEhvd2V2ZXIsIEkgc2VlIGB1YmhfYmZvcmdldGAgaXMgZGVmaW5lZCBpbiBgZnMvdWZzL3V0aWwuY2AgYXMgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgbGlrZWx5IGEgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIGluIHRoZSBVRlMgZmlsZSBzeXN0ZW0uIFdoaWxlIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IGBFWFBPUlRfU1lNQk9MYCwgaXQmIzM5O3Mgc3RpbGwgYWNjZXNzaWJsZS4gVGhlcmVmb3JlLCBmb2N1c2luZyBvbiBpdCBpcyBhIHNvbGlkIGFwcHJvYWNoLgoKTm93LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBmb3IgYW55IG90aGVyIGNhbGwgc2l0ZXMgb2YgYHViaF9iZm9yZ2V0YCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ViaF9iZm9yZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9pbm9kZS5jPTk2MT1zdGF0aWMgdm9pZCBmcmVlX2Z1bGxfYnJhbmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbmRfYmxvY2ssIGludCBkZXB0aClcbi0tXG5mcy91ZnMvaW5vZGUuYy05ODktXG5mcy91ZnMvaW5vZGUuYzo5OTA6XHR1YmhfYmZvcmdldCh1YmgpO1xuZnMvdWZzL2lub2RlLmMtOTkxLVx0dWZzX2ZyZWVfYmxvY2tzKGlub2RlLCBpbmRfYmxvY2ssIHVzcGktXHUwMDNlc19mcGIpO1xuLS1cbmZzL3Vmcy91dGlsLmM9MTAyPXZvaWQgdWJoX3N5bmNfYmxvY2soc3RydWN0IHVmc19idWZmZXJfaGVhZCAqdWJoKVxuLS1cbmZzL3Vmcy91dGlsLmMtMTE0LVxuZnMvdWZzL3V0aWwuYzoxMTU6dm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqIHViaClcbmZzL3Vmcy91dGlsLmMtMTE2LXtcbi0tXG5mcy91ZnMvdXRpbC5oPTI2Nj1leHRlcm4gdm9pZCB1Ymhfc3luY19ibG9jayhzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICopO1xuZnMvdWZzL3V0aWwuaDoyNjc6ZXh0ZXJuIHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XG5mcy91ZnMvdXRpbC5oLTI2OC1leHRlcm4gaW50ICB1YmhfYnVmZmVyX2RpcnR5IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBhbmFseXNpcy4gVGhlIGZhY3QgdGhhdCBgdWJoX2Jmb3JnZXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc2lnbmlmaWNhbnQgaW5kaWNhdG9yLiBBbmQgc2luY2UgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB0aGF0IHN0cmVuZ3RoZW5zIGB1YmhfYmZvcmdldGAgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYXR0ZW50aW9uLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSBhIGNyaXRpY2FsIHBvaW50IG9mIG9wZXJhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjb25zaWRlciBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AuIFdlIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgdWZzX2V2aWN0X2lub2RlYCBhbmQgYHVmc19zZXRhdHRyYC4gR2l2ZW4gdGhpcyBjYWxsaW5nIGNvbnRleHQsIGB1ZnNfdHJ1bmNhdGVfYmxvY2tzYCBhbHNvIGVtZXJnZXMgYXMgYSB2YWxpZCBhbmQgcG90ZW50aWFsbHkgdXNlZnVsIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbi4gSXQgdG91Y2hlcyBvbiBpbm9kZSBldmljdGlvbiBhbmQgYXR0cmlidXRlIHNldHRpbmcsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGFzcGVjdCBvZiBmaWxlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vmc190cnVuY2F0ZV9ibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL2lub2RlLmM9NDYwPWludCB1ZnNfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4tLVxuZnMvdWZzL2lub2RlLmMtNDY0LVxuZnMvdWZzL2lub2RlLmM6NDY1OnN0YXRpYyB2b2lkIHVmc190cnVuY2F0ZV9ibG9ja3Moc3RydWN0IGlub2RlICopO1xuZnMvdWZzL2lub2RlLmMtNDY2LVxuZnMvdWZzL2lub2RlLmM9NDY3PXN0YXRpYyB2b2lkIHVmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bylcbi0tXG5mcy91ZnMvaW5vZGUuYy00NzItXHRcdHRydW5jYXRlX3BhZ2VjYWNoZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplKTtcbmZzL3Vmcy9pbm9kZS5jOjQ3MzpcdFx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XG5mcy91ZnMvaW5vZGUuYy00NzQtXHR9XG4tLVxuZnMvdWZzL2lub2RlLmM9ODM5PXZvaWQgdWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTg1MS1cdFx0ICAgICBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpKVxuZnMvdWZzL2lub2RlLmM6ODUyOlx0XHRcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xuZnMvdWZzL2lub2RlLmMtODUzLVx0XHR1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4tLVxuZnMvdWZzL2lub2RlLmM9MTAzMz1zdGF0aWMgaW50IHVmc19hbGxvY19sYXN0YmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4tLVxuZnMvdWZzL2lub2RlLmMtMTEwMC1cbmZzL3Vmcy9pbm9kZS5jOjExMDE6c3RhdGljIHZvaWQgdWZzX3RydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvdWZzL2lub2RlLmMtMTEwMi17XG4tLVxuZnMvdWZzL2lub2RlLmM9MTE2Nz1zdGF0aWMgaW50IHVmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy91ZnMvaW5vZGUuYy0xMTg5LVxuZnMvdWZzL2lub2RlLmM6MTE5MDpcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xuZnMvdWZzL2lub2RlLmMtMTE5MS1cdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg2NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgc25pcHBldCBvZiB0aGlua2luZzoKCioqRXhhbWluaW5nIFVGUyBJbm9kZSBPcGVyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoYXQgYHVmc190cnVuY2F0ZV9ibG9ja3NgIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHJpZ2h0PyBUaGF0IG1lYW5zIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgd2hhdCBhYm91dCBgdWZzX2V2aWN0X2lub2RlYD8gSGFuZyBvbiwgdGhhdCBvbmUgaXMgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBBbmQgd2hhdCBhYm91dCBgdWZzX3RydW5jYXRlYD8gT2ggd2FpdCwgeWVzLCBgdWZzX3RydW5jYXRlYCBpcyBhbHNvIHN0YXRpYywgbWFraW5nIGl0IGludGVybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gTm93LCBhbiBpbnRlcmVzdGluZyBxdWVzdGlvbiBhcmlzZXM6IGRvZXMgYHVmc19zZXRhdHRyYCBjYWxsIHRoYXQgaW50ZXJuYWwgYHVmc190cnVuY2F0ZWAgZnVuY3Rpb24/IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIG9wZXJhdGlvbnMgYmV0dGVyLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhhdCBjYWxsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vmc190cnVuY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvaW5vZGUuYz00NjA9aW50IHVmc19wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbi0tXG5mcy91ZnMvaW5vZGUuYy00NjQtXG5mcy91ZnMvaW5vZGUuYzo0NjU6c3RhdGljIHZvaWQgdWZzX3RydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKik7XG5mcy91ZnMvaW5vZGUuYy00NjYtXG5mcy91ZnMvaW5vZGUuYz00Njc9c3RhdGljIHZvaWQgdWZzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTQ3Mi1cdFx0dHJ1bmNhdGVfcGFnZWNhY2hlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuZnMvdWZzL2lub2RlLmM6NDczOlx0XHR1ZnNfdHJ1bmNhdGVfYmxvY2tzKGlub2RlKTtcbmZzL3Vmcy9pbm9kZS5jLTQ3NC1cdH1cbi0tXG5mcy91ZnMvaW5vZGUuYz04Mzk9dm9pZCB1ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4tLVxuZnMvdWZzL2lub2RlLmMtODUxLVx0XHQgICAgIFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkpXG5mcy91ZnMvaW5vZGUuYzo4NTI6XHRcdFx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XG5mcy91ZnMvaW5vZGUuYy04NTMtXHRcdHVmc191cGRhdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbi0tXG5mcy91ZnMvaW5vZGUuYz0xMDMzPXN0YXRpYyBpbnQgdWZzX2FsbG9jX2xhc3RibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy91ZnMvaW5vZGUuYy0xMTAwLVxuZnMvdWZzL2lub2RlLmM6MTEwMTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy91ZnMvaW5vZGUuYy0xMTAyLXtcbi0tXG5mcy91ZnMvaW5vZGUuYy0xMTY2LVxuZnMvdWZzL2lub2RlLmM6MTE2NzpzdGF0aWMgaW50IHVmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbmZzL3Vmcy9pbm9kZS5jLTExNjgte1xuLS1cbmZzL3Vmcy9pbm9kZS5jLTExODktXG5mcy91ZnMvaW5vZGUuYzoxMTkwOlx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XG5mcy91ZnMvaW5vZGUuYy0xMTkxLVx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xuLS1cbmZzL3Vmcy9pbm9kZS5jPTExOTg9aW50IHVmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdWZzL2lub2RlLmMtMTIwOS1cdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9TSVpFIFx1MDAyNlx1MDAyNiBhdHRyLVx1MDAzZWlhX3NpemUgIT0gaW5vZGUtXHUwMDNlaV9zaXplKSB7XG5mcy91ZnMvaW5vZGUuYzoxMjEwOlx0XHRlcnJvciA9IHVmc190cnVuY2F0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbmZzL3Vmcy9pbm9kZS5jLTEyMTEtXHRcdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMQoJCQkJCQkJb3V0cHV0OiAxMDQKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIGNoYW5nZSwgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipBbmFseXNpcyBvZiBVRlMgTWVtb3J5IExlYWsgRml4KioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBhIG1lbW9yeSBsZWFrIHdpdGhpbiBgdWJoX2Jmb3JnZXRgLiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGF0LCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGEgYGtmcmVlKHViaClgIGNhbGwsIHdoaWNoIEkmIzM5O2xsIGFzc3VtZSBpcyBjcml0aWNhbCBmb3IgcHJvcGVyIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgaW1wcm92aW5nIHRoZSByZWxpYWJpbGl0eSBhbmQgcmVkdWNpbmcgdGhlIHBvdGVudGlhbCBmb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4KCkZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZSBrZXkgcGllY2VzIG9mIHRoaXMgcHV6emxlIGFyZSB0aGUgZnVuY3Rpb25zIGB1YmhfYmZvcmdldGAsIGB1ZnNfc2V0YXR0cmAsIGFuZCBgdWZzX2V2aWN0X2lub2RlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVycmVsYXRlIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3QuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHdvcmsuCgpJdCYjMzk7cyBuZWNlc3NhcnkgdGhhdCBgdWZzX3NldGF0dHJgIGFuZCBgdWZzX2V2aWN0X2lub2RlYCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgpHaXZlbiB0aGF0IHRoZXNlIGFyZSB0aGUgZWxlbWVudHMgaW4gZm9jdXMsIEkgd2lsbCB1c2UgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgYWxsIHRoZSByZWxldmFudCBkYXRhIGFuZCBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJoX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7dWZzX3NldGF0dHImIzM0OywKICAgICYjMzQ7dWZzX2V2aWN0X2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYHViaF9iZm9yZ2V0YCBieSBhZGRpbmcgYSBtaXNzaW5nIGBrZnJlZSh1YmgpYCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFVGUyBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJoX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7dWZzX3NldGF0dHImIzM0OywKICAgICYjMzQ7dWZzX2V2aWN0X2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYHViaF9iZm9yZ2V0YCBieSBhZGRpbmcgYSBtaXNzaW5nIGBrZnJlZSh1YmgpYCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFVGUyBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MTAuNjQ3MjQ1MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1MjEzMDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInViaF9iZm9yZ2V0XCIsXG4gICAgXCJ1ZnNfc2V0YXR0clwiLFxuICAgIFwidWZzX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjEwLjY0NzI1MjM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3MzQyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTg6MzY6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL3V0aWwuYyBiL2ZzL3Vmcy91dGlsLmNcXG5pbmRleCBkZmY2Zjc0NjE4ZGVmLi42MDNkODBiOTMwNjZkIDEwMDY0NFxcbi0tLSBhL2ZzL3Vmcy91dGlsLmNcXG4rKysgYi9mcy91ZnMvdXRpbC5jXFxuQEAgLTExNyw4ICsxMTcsOSBAQCB2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxcbiBcXHR1bnNpZ25lZCBpO1xcbiBcXHRpZiAoIXViaCkgXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0Zm9yICggaSA9IDA7IGkgXFx1MDAzYyB1YmgtXFx1MDAzZWNvdW50OyBpKysgKSBpZiAoIHViaC1cXHUwMDNlYmhbaV0gKSBcXG4tXFx0XFx0YmZvcmdldCAodWJoLVxcdTAwM2ViaFtpXSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1YmgtXFx1MDAzZWNvdW50OyBpKyspXFxuK1xcdFxcdGJmb3JnZXQodWJoLVxcdTAwM2ViaFtpXSk7XFxuK1xcdGtmcmVlKHViaCk7XFxuIH1cXG4gIFxcbiBpbnQgdWJoX2J1ZmZlcl9kaXJ0eSAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqIHViaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MTEuMTAxODQzMzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDcwOTU0ODEyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVUZTX0ZTXCIsXG4gICAgXCJVRlNfRlNfV1JJVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmhfYmZvcmdldFwiLFxuICAgIFwidWZzX3NldGF0dHJcIixcbiAgICBcInVmc19ldmljdF9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYHViaF9iZm9yZ2V0YCBieSBhZGRpbmcgYSBtaXNzaW5nIGBrZnJlZSh1YmgpYCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFVGUyBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGNhNzNlMWRjZjQ2N2YxMjk5ZTZmMzhhMWZhODUzYTk3NzQ3MjFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxODozNjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy91dGlsLmMgYi9mcy91ZnMvdXRpbC5jXG5pbmRleCBkZmY2Zjc0NjE4ZGVmLi42MDNkODBiOTMwNjZkIDEwMDY0NFxuLS0tIGEvZnMvdWZzL3V0aWwuY1xuKysrIGIvZnMvdWZzL3V0aWwuY1xuQEAgLTExNyw4ICsxMTcsOSBAQCB2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxuIFx0dW5zaWduZWQgaTtcbiBcdGlmICghdWJoKSBcbiBcdFx0cmV0dXJuO1xuLVx0Zm9yICggaSA9IDA7IGkgXHUwMDNjIHViaC1cdTAwM2Vjb3VudDsgaSsrICkgaWYgKCB1YmgtXHUwMDNlYmhbaV0gKSBcbi1cdFx0YmZvcmdldCAodWJoLVx1MDAzZWJoW2ldKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViaC1cdTAwM2Vjb3VudDsgaSsrKVxuK1x0XHRiZm9yZ2V0KHViaC1cdTAwM2ViaFtpXSk7XG4rXHRrZnJlZSh1YmgpO1xuIH1cbiAgXG4gaW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxMS4xMDE4NDQ2MTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU4MTQ2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVGUyBQYXRjaDogdWJoX2Jmb3JnZXQgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGZzL3Vmcy91dGlsLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgdGhlIGB1YmhfYmZvcmdldGAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmICh1YmgtXHUwMDNlYmhbaV0pYCBjaGVjayB3aXRoaW4gdGhlIGxvb3AgYW5kIHRoZSBhZGRpdGlvbiBvZiBga2ZyZWUodWJoKWAgYXQgdGhlIGVuZC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBmaXhpbmcgc29tZXRoaW5nLCBtYXliZSBhIG1lbW9yeSBsZWFrLCBvciBhIHBvdGVudGlhbCBidWcgaW52b2x2aW5nIG51bGwgYmxvY2sgaGVhZGVycy4gVGhlIHJlbW92YWwgb2YgdGhlIGNoZWNrIHN1Z2dlc3RzIHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgYmVlbiBvdmVybHkgY2F1dGlvdXMgb3IgaGFuZGxpbmcgYSBzY2VuYXJpbyB0aGF0J3Mgbm8gbG9uZ2VyIHJlbGV2YW50LCBvciB3YXMgYnVnZ3kgaW4gaXRzZWxmLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgYGZzL3Vmcy91dGlsLmNgIGRpcmVjdGx5IGFuZCB0aGVuIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBzZWUgd2hlcmUgZXhhY3RseSBgdWJoX2Jmb3JnZXRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0IGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjE1LjQ1OTk5MzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTI4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInViaF9iZm9yZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvaW5vZGUuYz05NjE9c3RhdGljIHZvaWQgZnJlZV9mdWxsX2JyYW5jaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgaW5kX2Jsb2NrLCBpbnQgZGVwdGgpXFxuLS1cXG5mcy91ZnMvaW5vZGUuYy05ODktXFxuZnMvdWZzL2lub2RlLmM6OTkwOlxcdHViaF9iZm9yZ2V0KHViaCk7XFxuZnMvdWZzL2lub2RlLmMtOTkxLVxcdHVmc19mcmVlX2Jsb2Nrcyhpbm9kZSwgaW5kX2Jsb2NrLCB1c3BpLVxcdTAwM2VzX2ZwYik7XFxuLS1cXG5mcy91ZnMvdXRpbC5jPTEwMj12b2lkIHViaF9zeW5jX2Jsb2NrKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKnViaClcXG4tLVxcbmZzL3Vmcy91dGlsLmMtMTE0LVxcbmZzL3Vmcy91dGlsLmM6MTE1OnZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXFxuZnMvdWZzL3V0aWwuYy0xMTYte1xcbi0tXFxuZnMvdWZzL3V0aWwuaD0yNjY9ZXh0ZXJuIHZvaWQgdWJoX3N5bmNfYmxvY2soc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcXG5mcy91ZnMvdXRpbC5oOjI2NzpleHRlcm4gdm9pZCB1YmhfYmZvcmdldCAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcXG5mcy91ZnMvdXRpbC5oLTI2OC1leHRlcm4gaW50ICB1YmhfYnVmZmVyX2RpcnR5IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxNS41MjQ1MzM4MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE3NzExOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVRlMgQmxvY2sgRGVhbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyBgdWJoX2Jmb3JnZXRgIHVzZWQgd2l0aGluIGBmcy91ZnMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSBpbnNpZGUgdGhlIGBmcmVlX2Z1bGxfYnJhbmNoYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgcmVhY2ggYGZyZWVfZnVsbF9icmFuY2hgLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGZzL3Vmcy9pbm9kZS5jYCBkaXJlY3RseS4gUmlnaHQsIEkgc2VlIHRoYXQgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGNhbGxlZCBmcm9tIGB1ZnNfdHJ1bmNhdGVfYmxvY2tzYC4gVGhhdOKAmXMgYSBrZXkgY29ubmVjdGlvbiDigJMgZmlsZSB0cnVuY2F0aW9uIGNhbiBwb3RlbnRpYWxseSBsZWFkIHRvIHRoaXMgYmxvY2sgZGVhbGxvY2F0aW9uLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBVRlMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYnVpbGQgZmxhZ3Mgb3Iga2VybmVsIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhpcyBjb2RlIHBhdGggb3IgaXRzIGJlaGF2aW9yPyBVbmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxOC43NDIyNDg3MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMTc4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3Vmcy9LY29uZmlnOjI6Y29uZmlnIFVGU19GU1xcbmZzL3Vmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChyZWFkIG9ubHkpXFxcIlxcbi0tXFxuZnMvdWZzL0tjb25maWctMzEtXFxuZnMvdWZzL0tjb25maWc6MzI6Y29uZmlnIFVGU19GU19XUklURVxcbmZzL3Vmcy9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIlVGUyBmaWxlIHN5c3RlbSB3cml0ZSBzdXBwb3J0IChEQU5HRVJPVVMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoxOC44MjU0ODQxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzM3NzUzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlVGUyBGaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uIGFuZCBMb2NhdGlvbiBEaXNjb3ZlcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhcmUgYFVGU19GU2AgYW5kIGBVRlNfRlNfV1JJVEVgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCB0aG9zZSdsbCBsaWtlbHkgZW5hYmxlIGFuZCBjb250cm9sIHdyaXRlIHN1cHBvcnQgZm9yIHRoZSBVRlMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIHNvIGdvb2QgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBjb3JyZWN0LiBOb3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbuKApiB0aGF0J3MgaW4gYGZzL3Vmcy91dGlsLmNgLiBSaWdodCwgdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgZnMvdWZzL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHdpcmVkIHVwIHByb3Blcmx5LCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QsIGFuZCB0aG9zZSBtb2R1bGVzIGFyZSBnZXR0aW5nIGNvbXBpbGVkIHdpdGggdGhlIHJpZ2h0IGZsYWdzLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgcGljayB1cCB0aGVzZSBzcGVjaWZpYyBjb21wb25lbnRzLiBTaG91bGRuJ3QgdGFrZSBsb25nIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGJ1aWx0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjIyLjI1OTI2Mjg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzEyNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL01ha2VmaWxlLTUtXFxuZnMvdWZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1VGU19GUykgKz0gdWZzLm9cXG5mcy91ZnMvTWFrZWZpbGUtNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MjIuMzIwOTc5Njg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzI0NjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQW5hbHl6aW5nIFVGUyBGaWxlIFN5c3RlbSBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1VGU19GU2AgaXMgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgbXkgdHJhaW4gb2YgdGhvdWdodCBzaGlmdHMuIEkgcmVjYWxsIGBmcmVlX2Z1bGxfYnJhbmNoYCBpcyB1c2VkIGluIGEgZmV3IHBsYWNlcy4gTGV0J3MgbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNvcnJlY3QgZXhlY3V0aW9uIHBhdGguIFNwZWNpZmljYWxseSwgSSBrbm93IGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYHVmc190cnVuY2F0ZV9ibG9ja3NgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBlaXRoZXIgYHVmc190cnVuY2F0ZWAgb3IgcG90ZW50aWFsbHkgZXZlbiBgdWZzX2V2aWN0X2lub2RlYC4uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hpY2ggZnVuY3Rpb25zIGNhbGwgd2hpY2gsIGluIHdoaWNoIGNpcmN1bXN0YW5jZXMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5Pa2F5LCBJIG5lZWQgdG8gY2hlY2sgYGZzL3Vmcy9pbm9kZS5jYC4gVGhhdCdzIHdoZXJlIGBmcmVlX2Z1bGxfYnJhbmNoYCB3b3VsZCBiZSBkZWZpbmVkLCBzbyBJIG5lZWQgdG8gZ28gbG9vayB0aHJvdWdoIHRoZSBjb2RlIGluIHRoYXQgZmlsZS4gSSBjYW4gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgZnJlZV9mdWxsX2JyYW5jaGAgYW5kIHRoZSB0cnVuY2F0aW9uIG9yIGV2aWN0aW9uIG9mIGFuIGlub2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MjUuNTk0MjI5NjIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0ODkwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJlZV9mdWxsX2JyYW5jaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvaW5vZGUuYz04ODM9c3RhdGljIHZvaWQgdWZzX3RydW5jX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtOTYwLVxcbmZzL3Vmcy9pbm9kZS5jOjk2MTpzdGF0aWMgdm9pZCBmcmVlX2Z1bGxfYnJhbmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbmRfYmxvY2ssIGludCBkZXB0aClcXG5mcy91ZnMvaW5vZGUuYy05NjIte1xcbi0tXFxuZnMvdWZzL2lub2RlLmMtOTc1LVxcdFxcdFxcdGlmIChibG9jaylcXG5mcy91ZnMvaW5vZGUuYzo5NzY6XFx0XFx0XFx0XFx0ZnJlZV9mdWxsX2JyYW5jaChpbm9kZSwgYmxvY2ssIGRlcHRoKTtcXG5mcy91ZnMvaW5vZGUuYy05NzctXFx0XFx0fVxcbi0tXFxuZnMvdWZzL2lub2RlLmM9OTk0PXN0YXRpYyB2b2lkIGZyZWVfYnJhbmNoX3RhaWwoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgZnJvbSwgc3RydWN0IHVmc19idWZmZXJfaGVhZCAqdWJoLCBpbnQgZGVwdGgpXFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMDA4LVxcdFxcdFxcdFxcdHViaF9tYXJrX2J1ZmZlcl9kaXJ0eSh1YmgpO1xcbmZzL3Vmcy9pbm9kZS5jOjEwMDk6XFx0XFx0XFx0XFx0ZnJlZV9mdWxsX2JyYW5jaChpbm9kZSwgYmxvY2ssIGRlcHRoKTtcXG5mcy91ZnMvaW5vZGUuYy0xMDEwLVxcdFxcdFxcdH1cXG4tLVxcbmZzL3Vmcy9pbm9kZS5jPTExMDE9c3RhdGljIHZvaWQgdWZzX3RydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtMTE1Ni1cXHRcXHRcXHR3cml0ZV9zZXF1bmxvY2soXFx1MDAyNnVmc2ktXFx1MDAzZW1ldGFfbG9jayk7XFxuZnMvdWZzL2lub2RlLmM6MTE1NzpcXHRcXHRcXHRmcmVlX2Z1bGxfYnJhbmNoKGlub2RlLCBibG9jaywgaSAtIFVGU19JTkRfQkxPQ0sgKyAxKTtcXG5mcy91ZnMvaW5vZGUuYy0xMTU4LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MjUuNzA2NzIzODA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTU1MjIzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRlMgRmlsZSBTeXN0ZW0gTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaGVyZSwgYW5kIGl0J3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgb25lLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBibG9jayBtb2RpZmljYXRpb25zLCBJJ20gYXNzdW1pbmcgYFVGU19GU19XUklURWAgbGlrZWx5IGluZGljYXRlcyB3cml0ZSBzdXBwb3J0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcGlucG9pbnQgd2hldGhlciBgVUZTX0ZTX1dSSVRFYCBpcyBhIHJlcXVpcmVtZW50IGZvciBgdWJoX2Jmb3JnZXRgLCBidXQgbGV0IG1lIGNoZWNrIHdoZXJlIHRoYXQgcmVzaWRlcy4uLmFoLCBgZnMvdWZzL3V0aWwuY2AuIE5vdyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgdXRpbC5jYCBpcyBhbHdheXMgY29tcGlsZWQgd2l0aCBgVUZTX0ZTYCBvciB3aGV0aGVyIGl0IGhhcyBjb25kaXRpb25hbCBwYXJ0cy4gSXQgbG9va3MgbGlrZSBpdCBpcy4gQnV0LCBJIHJlbWVtYmVyIHRoYXQgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGluIGBpbm9kZS5jYC4gVGhlcmVmb3JlLCBsZXQgbWUgc2VlIGlmIGBmcmVlX2Z1bGxfYnJhbmNoYCBpcyBwcm90ZWN0ZWQgd2l0aCBhbiBgI2lmZGVmIENPTkZJR19VRlNfRlNfV1JJVEVgIG9yIG5vdC4gVGhpcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBpbXBhY3Qgb2YgdGhpcyBuZXcgY29kZSBhbmQgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjoyOS45MjIyNDg0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2ODQxMDc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVUZTX0ZTX1dSSVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmcy9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjozMC4wMTkwOTc0NzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0OTU5NzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBVRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgVUZTIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL3Vmcy9pbm9kZS5jYCwgc2hvdWxkIGhhdmUgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX1VGU19GU19XUklURWAuIEJ1dCBpdCdzIG5vdCBsb29raW5nIGxpa2UgaXQncyB0aGVyZS4gVGhhdCdzIHVudXN1YWwsIGFuZCBpdCdzIG1ha2luZyBtZSB3b25kZXIgaWYgSSdtIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlIG9yIGlmIHRoZXJlJ3MgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIGF0IHBsYXkuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGVyZSB0aGlzIHdyaXRlIGNvbmZpZ3VyYXRpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgbmV4dCBwbGFjZSB0byBjaGVjayB3b3VsZCBiZSB0aGUgYGZzL3Vmcy9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgYENPTkZJR19VRlNfRlNfV1JJVEVgIGlzIHNldCwgYW5kIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGxpbmtpbmcgZ29pbmcgb24gdGhhdCBJJ20gbWlzc2luZy4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjMzLjA2ODcyNjQ4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4ODg2MTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19VRlNfRlNfV1JJVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjozMy4xMjI2MjM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcxMTQwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBVRlMgYW5kIHdyaXRlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlIHdyaXRlIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgb3IgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgdGhlIFVGUyBmaWxlc3lzdGVtLiBSaWdodCwgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvcmUgVUZTIGNvZGUsIHNwZWNpZmljYWxseSB3aGVyZSB0aGUgc3VwZXJibG9jayBvcGVyYXRpb25zIGFyZSBkZWZpbmVkLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBmaWxlc3lzdGVtLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBmcy91ZnMvc3VwZXIuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBmZWF0dXJlcywgaW5jbHVkaW5nIHdyaXRlIG9wZXJhdGlvbnMuIEFuZCwgc2luY2Ugd2UncmUgaW50ZXJlc3RlZCBpbiB0aGUgd3JpdGUgY2FwYWJpbGl0aWVzIHNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ09ORklHX1VGU19GU19XUklURWAuIFRoYXQncyB0aGUgbGlrZWx5IGNvbmZpZ3VyYXRpb24gc3ltYm9sIHRvIGNoZWNrIGZvci4gTGV0J3Mgc2VlIGlmIHRoYXQncyBkZWZpbmVkIG9yIHVzZWQsIGFuZCBpZiBzbywgaG93IGl0IGFmZmVjdHMgdGhlIFVGUyB3cml0ZSBvcGVyYXRpb25zLiBUaW1lIHRvIGdldCBkaWdnaW5nIGluIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6MzYuNTkzNzY3MDg5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg0MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVUZTX0ZTX1dSSVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtNzM4LVxcbmZzL3Vmcy9zdXBlci5jOjczOTojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy03NDAtXFx0aWYgKCFzYl9yZG9ubHkoc2IpKSB7XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEyNzktXFx0ICovXFxuZnMvdWZzL3N1cGVyLmM6MTI4MDojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy0xMjgxLVxcdFxcdHByX2VycihcXFwidWZzIHdhcyBjb21waWxlZCB3aXRoIHJlYWQtb25seSBzdXBwb3J0LCBjYW4ndCBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGVcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjozNi42NDM2MTM5MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMTA3MDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKlVGUyBXcml0ZSBBY2Nlc3MgYW5kIEJsb2NrIE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1vdW50aW5nIGEgVUZTIGZpbGVzeXN0ZW0gaW4gcmVhZC13cml0ZSBtb2RlLiBUbyBkbyB0aGF0LCBJIGtub3cgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQ09ORklHX1VGU19GU19XUklURWAuIFRoYXQncyB0aGUga2V5LCBiZWNhdXNlIHdpdGhvdXQgd3JpdGUgYWNjZXNzLCBJIGNhbid0IHRyaWdnZXIgdGhlIG9wZXJhdGlvbnMgSSBuZWVkIGZvciBwcm9wZXIgZmlsZSB0cnVuY2F0aW9uIGFuZCBmcmVlaW5nIHVwIHRob3NlIHVzZWQgYmxvY2tzLiBNYWtlcyBzZW5zZS4gVHJ1bmNhdGlvbiByZWxpZXMgb24gYmVpbmcgYWJsZSB0byBhY3R1YWxseSBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0ncyBtZXRhZGF0YS5cblxuTm93LCB3aGVyZSBkbyBJIGZpbmQgdGhlIGNydWNpYWwgYml0cyBmb3IgdGhpcz8gQWgsIHllcywgdGhlIGB1YmhfYmZvcmdldGAgZnVuY3Rpb24uIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBoYW5kbGluZyB0aGUgY29yZSBsb2dpYyBmb3IgZm9yZ2V0dGluZyBvciByZWxlYXNpbmcgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUuIEkgcmVtZW1iZXIgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBiZSwgc28gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGZzL3Vmcy91dGlsLmNgIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyBpdCB3b3Jrcy4gVGhhdCBmaWxlIGhhcyBhbHdheXMgYmVlbiBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBVRlMgdXRpbGl0aWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjQwLjY2NDY4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy91ZnMvdXRpbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdWJoLVxcdTAwM2Vjb3VudDsgaSsrKVxcbiAxMTE6XFx0XFx0XFx0XFx0d2FpdF9vbl9idWZmZXIodWJoLVxcdTAwM2ViaFtpXSk7XFxuIDExMjpcXHRcXHR9XFxuIDExMzpcXHR9XFxuIDExNDpcXHRcXG4gMTE1OlxcdHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXFxuIDExNjpcXHR7XFxuIDExNzpcXHRcXHR1bnNpZ25lZCBpO1xcbiAxMTg6XFx0XFx0aWYgKCF1YmgpIFxcbiAxMTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHViaC1cXHUwMDNlY291bnQ7IGkrKylcXG4gMTIxOlxcdFxcdFxcdGJmb3JnZXQodWJoLVxcdTAwM2ViaFtpXSk7XFxuIDEyMjpcXHRcXHRrZnJlZSh1YmgpO1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0IFxcbiAxMjU6XFx0aW50IHViaF9idWZmZXJfZGlydHkgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiB1YmgpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHR1bnNpZ25lZCBpO1xcbiAxMjg6XFx0XFx0dW5zaWduZWQgcmVzdWx0ID0gMDtcXG4gMTI5OlxcdFxcdGlmICghdWJoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo0MC42NjQ3OTIzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE5OTE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBVRlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBkZWZpbml0ZWx5IGZpeGluZyBhIG1lbW9yeSBsZWFrLiBUaGUga2V5IGlzIHRoYXQgYGtmcmVlKHViaClgIGlzIGJlaW5nIGFkZGVkIHRvIGB1YmhfYmZvcmdldGAuIFRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZpeCBhcmUgYFVGU19GU2AgYW5kIGBVRlNfRlNfV1JJVEVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYHViaF9iZm9yZ2V0YCBmdW5jdGlvbiBpdHNlbGYuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGNvbmZpZyBuYW1lcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYFVGU19GU19XUklURWAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gQWgsIHllcywgbG9va2luZyBhdCB0aGUgYGZzL3Vmcy9LY29uZmlnYCBmaWxlIGNvbmZpcm1zIHRoYXQgYFVGU19GU19XUklURWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiBgVUZTX0ZTYCwgc28gYm90aCBhcmUgbmVjZXNzYXJ5LlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBgdWJoX2Jmb3JnZXRgLiBHaXZlbiB0aGF0IGB1YmhfYmZvcmdldGAgaXMgYSByZWxhdGl2ZWx5IHNtYWxsIGZ1bmN0aW9uLCBJIHNob3VsZCBldmFsdWF0ZSBpZiByZWxhdGVkIGZ1bmN0aW9ucyBhbHNvIG5lZWQgaW52ZXN0aWdhdGlvbiwgc3VjaCBhcyBgZnJlZV9mdWxsX2JyYW5jaGAgb3IgYHVmc190cnVuY2F0ZV9ibG9ja3NgLiBIb3dldmVyLCBJIHNlZSBgdWJoX2Jmb3JnZXRgIGlzIGRlZmluZWQgaW4gYGZzL3Vmcy91dGlsLmNgIGFzIG5vbi1zdGF0aWMsIHNvIGl0J3MgbGlrZWx5IGEgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIGluIHRoZSBVRlMgZmlsZSBzeXN0ZW0uIFdoaWxlIGl0J3Mgbm90IGV4cGxpY2l0bHkgYEVYUE9SVF9TWU1CT0xgLCBpdCdzIHN0aWxsIGFjY2Vzc2libGUuIFRoZXJlZm9yZSwgZm9jdXNpbmcgb24gaXQgaXMgYSBzb2xpZCBhcHByb2FjaC5cblxuTm93LCBJJ2xsIHRha2UgYSBsb29rIGZvciBhbnkgb3RoZXIgY2FsbCBzaXRlcyBvZiBgdWJoX2Jmb3JnZXRgIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjQ2LjA4NDcxMzAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc0NjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmhfYmZvcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2lub2RlLmM9OTYxPXN0YXRpYyB2b2lkIGZyZWVfZnVsbF9icmFuY2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGluZF9ibG9jaywgaW50IGRlcHRoKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtOTg5LVxcbmZzL3Vmcy9pbm9kZS5jOjk5MDpcXHR1YmhfYmZvcmdldCh1YmgpO1xcbmZzL3Vmcy9pbm9kZS5jLTk5MS1cXHR1ZnNfZnJlZV9ibG9ja3MoaW5vZGUsIGluZF9ibG9jaywgdXNwaS1cXHUwMDNlc19mcGIpO1xcbi0tXFxuZnMvdWZzL3V0aWwuYz0xMDI9dm9pZCB1Ymhfc3luY19ibG9jayhzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICp1YmgpXFxuLS1cXG5mcy91ZnMvdXRpbC5jLTExNC1cXG5mcy91ZnMvdXRpbC5jOjExNTp2b2lkIHViaF9iZm9yZ2V0IChzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkICogdWJoKVxcbmZzL3Vmcy91dGlsLmMtMTE2LXtcXG4tLVxcbmZzL3Vmcy91dGlsLmg9MjY2PWV4dGVybiB2b2lkIHViaF9zeW5jX2Jsb2NrKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XFxuZnMvdWZzL3V0aWwuaDoyNjc6ZXh0ZXJuIHZvaWQgdWJoX2Jmb3JnZXQgKHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKik7XFxuZnMvdWZzL3V0aWwuaC0yNjgtZXh0ZXJuIGludCAgdWJoX2J1ZmZlcl9kaXJ0eSAoc3RydWN0IHVmc19idWZmZXJfaGVhZCAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6NDYuMTMyNDY0NDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTMzNzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipGb2N1cyBTeW1ib2wgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBhbmFseXNpcy4gVGhlIGZhY3QgdGhhdCBgdWJoX2Jmb3JnZXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc2lnbmlmaWNhbnQgaW5kaWNhdG9yLiBBbmQgc2luY2UgYGZyZWVfZnVsbF9icmFuY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB0aGF0IHN0cmVuZ3RoZW5zIGB1YmhfYmZvcmdldGAgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYXR0ZW50aW9uLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIGEgY3JpdGljYWwgcG9pbnQgb2Ygb3BlcmF0aW9uLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBjb25zaWRlciBgdWZzX3RydW5jYXRlX2Jsb2Nrc2AuIFdlIGNhbiBzZWUgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGB1ZnNfZXZpY3RfaW5vZGVgIGFuZCBgdWZzX3NldGF0dHJgLiBHaXZlbiB0aGlzIGNhbGxpbmcgY29udGV4dCwgYHVmc190cnVuY2F0ZV9ibG9ja3NgIGFsc28gZW1lcmdlcyBhcyBhIHZhbGlkIGFuZCBwb3RlbnRpYWxseSB1c2VmdWwgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uLiBJdCB0b3VjaGVzIG9uIGlub2RlIGV2aWN0aW9uIGFuZCBhdHRyaWJ1dGUgc2V0dGluZywgbWFraW5nIGl0IGEgY3JpdGljYWwgYXNwZWN0IG9mIGZpbGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo0OS42NDE4MDUxMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTM1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVmc190cnVuY2F0ZV9ibG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Vmcy9pbm9kZS5jPTQ2MD1pbnQgdWZzX3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtNDY0LVxcbmZzL3Vmcy9pbm9kZS5jOjQ2NTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqKTtcXG5mcy91ZnMvaW5vZGUuYy00NjYtXFxuZnMvdWZzL2lub2RlLmM9NDY3PXN0YXRpYyB2b2lkIHVmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bylcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTQ3Mi1cXHRcXHR0cnVuY2F0ZV9wYWdlY2FjaGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbmZzL3Vmcy9pbm9kZS5jOjQ3MzpcXHRcXHR1ZnNfdHJ1bmNhdGVfYmxvY2tzKGlub2RlKTtcXG5mcy91ZnMvaW5vZGUuYy00NzQtXFx0fVxcbi0tXFxuZnMvdWZzL2lub2RlLmM9ODM5PXZvaWQgdWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtODUxLVxcdFxcdCAgICAgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkpXFxuZnMvdWZzL2lub2RlLmM6ODUyOlxcdFxcdFxcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xcbmZzL3Vmcy9pbm9kZS5jLTg1My1cXHRcXHR1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMDMzPXN0YXRpYyBpbnQgdWZzX2FsbG9jX2xhc3RibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTExMDAtXFxuZnMvdWZzL2lub2RlLmM6MTEwMTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvdWZzL2lub2RlLmMtMTEwMi17XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMTY3PXN0YXRpYyBpbnQgdWZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtMTE4OS1cXG5mcy91ZnMvaW5vZGUuYzoxMTkwOlxcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xcbmZzL3Vmcy9pbm9kZS5jLTExOTEtXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo0OS43MjI3NDU1NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNDc5NTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgc25pcHBldCBvZiB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgVUZTIElub2RlIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoYXQgYHVmc190cnVuY2F0ZV9ibG9ja3NgIGZ1bmN0aW9uLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgcmlnaHQ/IFRoYXQgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBOb3csIHdoYXQgYWJvdXQgYHVmc19ldmljdF9pbm9kZWA/IEhhbmcgb24sIHRoYXQgb25lIGlzICpub3QqIHN0YXRpYywgc28gaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBBbmQgd2hhdCBhYm91dCBgdWZzX3RydW5jYXRlYD8gT2ggd2FpdCwgeWVzLCBgdWZzX3RydW5jYXRlYCBpcyBhbHNvIHN0YXRpYywgbWFraW5nIGl0IGludGVybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSdzIGltcGxlbWVudGF0aW9uLiBOb3csIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uIGFyaXNlczogZG9lcyBgdWZzX3NldGF0dHJgIGNhbGwgdGhhdCBpbnRlcm5hbCBgdWZzX3RydW5jYXRlYCBmdW5jdGlvbj8gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2Ygb3BlcmF0aW9ucyBiZXR0ZXIuIExldCdzIHNlZSBpZiBJIGNhbiBmaW5kIHRoYXQgY2FsbC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6MzY6NTMuMTM3NTQ0MzI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjU3ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZnNfdHJ1bmNhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Vmcy9pbm9kZS5jPTQ2MD1pbnQgdWZzX3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtNDY0LVxcbmZzL3Vmcy9pbm9kZS5jOjQ2NTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqKTtcXG5mcy91ZnMvaW5vZGUuYy00NjYtXFxuZnMvdWZzL2lub2RlLmM9NDY3PXN0YXRpYyB2b2lkIHVmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bylcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTQ3Mi1cXHRcXHR0cnVuY2F0ZV9wYWdlY2FjaGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbmZzL3Vmcy9pbm9kZS5jOjQ3MzpcXHRcXHR1ZnNfdHJ1bmNhdGVfYmxvY2tzKGlub2RlKTtcXG5mcy91ZnMvaW5vZGUuYy00NzQtXFx0fVxcbi0tXFxuZnMvdWZzL2lub2RlLmM9ODM5PXZvaWQgdWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvdWZzL2lub2RlLmMtODUxLVxcdFxcdCAgICAgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkpXFxuZnMvdWZzL2lub2RlLmM6ODUyOlxcdFxcdFxcdHVmc190cnVuY2F0ZV9ibG9ja3MoaW5vZGUpO1xcbmZzL3Vmcy9pbm9kZS5jLTg1My1cXHRcXHR1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMDMzPXN0YXRpYyBpbnQgdWZzX2FsbG9jX2xhc3RibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTExMDAtXFxuZnMvdWZzL2lub2RlLmM6MTEwMTpzdGF0aWMgdm9pZCB1ZnNfdHJ1bmNhdGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvdWZzL2lub2RlLmMtMTEwMi17XFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMTY2LVxcbmZzL3Vmcy9pbm9kZS5jOjExNjc6c3RhdGljIGludCB1ZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuZnMvdWZzL2lub2RlLmMtMTE2OC17XFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMTg5LVxcbmZzL3Vmcy9pbm9kZS5jOjExOTA6XFx0dWZzX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSk7XFxuZnMvdWZzL2lub2RlLmMtMTE5MS1cXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz0xMTk4PWludCB1ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdWZzL2lub2RlLmMtMTIwOS1cXHRpZiAoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX1NJWkUgXFx1MDAyNlxcdTAwMjYgYXR0ci1cXHUwMDNlaWFfc2l6ZSAhPSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZnMvdWZzL2lub2RlLmM6MTIxMDpcXHRcXHRlcnJvciA9IHVmc190cnVuY2F0ZShpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuZnMvdWZzL2lub2RlLmMtMTIxMS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjM2OjUzLjIyMDEzNjU1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODI1NzQzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIGNoYW5nZSwgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5c2lzIG9mIFVGUyBNZW1vcnkgTGVhayBGaXgqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBhIG1lbW9yeSBsZWFrIHdpdGhpbiBgdWJoX2Jmb3JnZXRgLiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGF0LCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGEgYGtmcmVlKHViaClgIGNhbGwsIHdoaWNoIEknbGwgYXNzdW1lIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBVRlMgZmlsZXN5c3RlbS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBpbXByb3ZpbmcgdGhlIHJlbGlhYmlsaXR5IGFuZCByZWR1Y2luZyB0aGUgcG90ZW50aWFsIGZvciByZXNvdXJjZSBleGhhdXN0aW9uLlxuXG5Gcm9tIG15IHBlcnNwZWN0aXZlLCB0aGUga2V5IHBpZWNlcyBvZiB0aGlzIHB1enpsZSBhcmUgdGhlIGZ1bmN0aW9ucyBgdWJoX2Jmb3JnZXRgLCBgdWZzX3NldGF0dHJgLCBhbmQgYHVmc19ldmljdF9pbm9kZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnJlbGF0ZSB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0LiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyB3b3JrLlxuXG5JdCdzIG5lY2Vzc2FyeSB0aGF0IGB1ZnNfc2V0YXR0cmAgYW5kIGB1ZnNfZXZpY3RfaW5vZGVgIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgdGhlIGVsZW1lbnRzIGluIGZvY3VzLCBJIHdpbGwgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIGFsbCB0aGUgcmVsZXZhbnQgZGF0YSBhbmQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODExLCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODozNjo1OC4wNDU4ODM1MzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0MzcxNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVGU19GU1wiLFxuICAgIFwiVUZTX0ZTX1dSSVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJoX2Jmb3JnZXRcIixcbiAgICBcInVmc19zZXRhdHRyXCIsXG4gICAgXCJ1ZnNfZXZpY3RfaW5vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGB1YmhfYmZvcmdldGAgYnkgYWRkaW5nIGEgbWlzc2luZyBga2ZyZWUodWJoKWAgY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBVRlMgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInViaF9iZm9yZ2V0XCIsXG4gICAgXCJ1ZnNfc2V0YXR0clwiLFxuICAgIFwidWZzX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgdWJoX2Jmb3JnZXRgIGJ5IGFkZGluZyBhIG1pc3NpbmcgYGtmcmVlKHViaClgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7vptv[1] Phase: Succeeded StartedAt: 2026-08-02 18:37:10 +0000 UTC FinishedAt: 2026-08-02 18:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 18:37:10 +0000 UTC FinishedAt: 2026-08-02 18:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2] Phase: Succeeded StartedAt: 2026-08-02 18:37:10 +0000 UTC FinishedAt: 2026-08-02 22:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 18:37:10 +0000 UTC FinishedAt: 2026-08-02 22:44:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","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-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 18:37:10 +0000 UTC FinishedAt: 2026-08-02 18:37:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 18:37:10 +0000 UTC FinishedAt: 2026-08-02 18:37:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"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-workflow7vptv/series-workflow7vptv-convert-artifact-352063199/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 18:37:20 +0000 UTC FinishedAt: 2026-08-02 18:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 18:37:20 +0000 UTC FinishedAt: 2026-08-02 18:59:15 +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:*405cde8c-c54f-436b-b4ab-472f4dcfd9e4,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-workflow7vptv/series-workflow7vptv-convert-artifact-352063199/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": "301f8f8f-7f7a-47ba-8be8-f8042f0d2be6", "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-workflow7vptv/series-workflow7vptv-build-action-2718888933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 18:37:20 +0000 UTC FinishedAt: 2026-08-02 18:59:05 +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:*405cde8c-c54f-436b-b4ab-472f4dcfd9e4,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-workflow7vptv/series-workflow7vptv-convert-artifact-352063199/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": "301f8f8f-7f7a-47ba-8be8-f8042f0d2be6", "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-workflow7vptv/series-workflow7vptv-build-action-2718888933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 18:59:15 +0000 UTC FinishedAt: 2026-08-02 18:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 18:59:15 +0000 UTC FinishedAt: 2026-08-02 18:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 18:59:15 +0000 UTC FinishedAt: 2026-08-02 18:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 18:59:15 +0000 UTC FinishedAt: 2026-08-02 18:59:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","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-workflow7vptv/series-workflow7vptv-convert-artifact-2228942958/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 18:59:36 +0000 UTC FinishedAt: 2026-08-02 19:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 18:59:36 +0000 UTC FinishedAt: 2026-08-02 19:01:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*301f8f8f-7f7a-47ba-8be8-f8042f0d2be6,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-workflow7vptv/series-workflow7vptv-build-action-2718888933/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-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 19:01:15 +0000 UTC FinishedAt: 2026-08-02 19:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 19:01:15 +0000 UTC FinishedAt: 2026-08-02 19:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 19:01:15 +0000 UTC FinishedAt: 2026-08-02 19:34:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 19:01:15 +0000 UTC FinishedAt: 2026-08-02 19:34:30 +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:*405cde8c-c54f-436b-b4ab-472f4dcfd9e4,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-workflow7vptv/series-workflow7vptv-convert-artifact-2228942958/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": "c4323151-eb9a-4465-a91c-1b1482638a15", "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-workflow7vptv/series-workflow7vptv-build-action-2063911298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 19:01:15 +0000 UTC FinishedAt: 2026-08-02 19:34:07 +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:*405cde8c-c54f-436b-b4ab-472f4dcfd9e4,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-workflow7vptv/series-workflow7vptv-convert-artifact-2228942958/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": "c4323151-eb9a-4465-a91c-1b1482638a15", "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-workflow7vptv/series-workflow7vptv-build-action-2063911298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 19:34:30 +0000 UTC FinishedAt: 2026-08-02 19:34:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 19:34:30 +0000 UTC FinishedAt: 2026-08-02 19:34:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 19:34:30 +0000 UTC FinishedAt: 2026-08-02 19:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 19:34:30 +0000 UTC FinishedAt: 2026-08-02 19:36:18 +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:*c4323151-eb9a-4465-a91c-1b1482638a15,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-workflow7vptv/series-workflow7vptv-build-action-2063911298/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-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 19:36:28 +0000 UTC FinishedAt: 2026-08-02 22:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 19:36:28 +0000 UTC FinishedAt: 2026-08-02 22:44:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"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:*301f8f8f-7f7a-47ba-8be8-f8042f0d2be6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4323151-eb9a-4465-a91c-1b1482638a15,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-workflow7vptv/series-workflow7vptv-build-action-2718888933/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-workflow7vptv/series-workflow7vptv-build-action-2063911298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 19:36:28 +0000 UTC FinishedAt: 2026-08-02 19:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 19:36:28 +0000 UTC FinishedAt: 2026-08-02 19:36:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"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-workflow7vptv/series-workflow7vptv-convert-artifact-1517371411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 19:36:28 +0000 UTC FinishedAt: 2026-08-02 19:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 19:36:28 +0000 UTC FinishedAt: 2026-08-02 19:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 19:36:28 +0000 UTC FinishedAt: 2026-08-02 19:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 19:36:38 +0000 UTC FinishedAt: 2026-08-02 22:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vptv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ubh_bforget","ufs_setattr","ufs_evict_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"e61e071b-9c74-46de-bb34-1c7614217014","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 19:36:38 +0000 UTC FinishedAt: 2026-08-02 22:43:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*301f8f8f-7f7a-47ba-8be8-f8042f0d2be6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4323151-eb9a-4465-a91c-1b1482638a15,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-workflow7vptv/series-workflow7vptv-build-action-2718888933/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-workflow7vptv/series-workflow7vptv-build-action-2063911298/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-workflow7vptv/series-workflow7vptv-convert-artifact-1517371411/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,}