Name: series-workflow7ggsq Phase: Succeeded StartedAt: 2026-07-30 01:41:58 +0000 UTC FinishedAt: 2026-07-30 03:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[0] Phase: Succeeded StartedAt: 2026-07-30 01:41:58 +0000 UTC FinishedAt: 2026-07-30 02:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 01:41:58 +0000 UTC FinishedAt: 2026-07-30 02:16:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c05e3f09bd3009658eca5ccd850d3396f513cec1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c05e3f09bd3009658eca5ccd850d3396f513cec1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "1ed754ad-e343-4725-a94b-3ecc67fa64a0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__unmap_hugepage_range", "unmap_hugepage_range", "unmap_vmas" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfdm1hcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1MThhNmI2YTM1ZTE3YTczNzgwODBjOTNhZDVmNzUzODcwMTBlZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwMjoxNDo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjc3MDIyYzRjNTlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTUxNTcsNiAmIzQzOzUxNTcsNyBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRib29sIGFkanVzdF9yZXNlcnZhdGlvbjtcbiBcdHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyX21hc2s7XG4gXG4mIzQzO1x0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiBcdFdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTtcbiBcdEJVR19PTihzdGFydCBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKTtcbiBcdEJVR19PTihlbmQgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSk7XG5AQCAtNTI0OCw3ICYjNDM7NTI0OSwxMCBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZSwgb3RoZXJ3aXNlIHRoZVxuLVx0XHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuXG4mIzQzO1x0XHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuIFJlc3RvcmUgb25seSBvbiB0aGVcbiYjNDM7XHRcdCAqIGxhc3QgdW5tYXAsIG90aGVyd2lzZSB0aGUgb3duZXIgY291bGQgZW1wdHkgaXRzIHJlc3YgbWFwXG4mIzQzO1x0XHQgKiB3aGlsZSB0aGUgZm9saW8gaXMgc3RpbGwgbWFwcGVkIGJ5IGEgY2hpbGQuIE5vdGUgdGhhdCBob2xkaW5nXG4mIzQzO1x0XHQgKiBpX21tYXBfbG9ja193cml0ZSBpcyBuZWVkZWQgdG8gY2hlY2sgdGhlIG51bWJlciBvZiBtYXBwaW5ncy5cbiBcdFx0ICogSWYgdGhlcmUgd2UgYXJlIGZyZWVpbmcgYSBzdXJwbHVzLCBkbyBub3Qgc2V0IHRoZSByZXN0b3JlXG4gXHRcdCAqIHJlc2VydmF0aW9uIGJpdC5cbiBcdFx0ICovXG5AQCAtNTI1Niw3ICYjNDM7NTI2MCw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRpZiAoIWgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzIFx1MDAyNlx1MDAyNiBfX3ZtYV9wcml2YXRlX2xvY2sodm1hKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbiYjNDM7XHRcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuIFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG4gXHRcdFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xuIFx0XHRcdGFkanVzdF9yZXNlcnZhdGlvbiA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfdm1hcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MThhNmI2YTM1ZTE3YTczNzgwODBjOTNhZDVmNzUzODcwMTBlZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMjoxNDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBlOTNjNGQyNDU2YWE0Li43NzAyMmM0YzU5YWZhIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC01MTU3LDYgJiM0Mzs1MTU3LDcgQEAgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWJvb2wgYWRqdXN0X3Jlc2VydmF0aW9uOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyX21hc2s7CiAKJiM0MzsJaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcpOwogCVdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTsKIAlCVUdfT04oc3RhcnQgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpKTsKIAlCVUdfT04oZW5kICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoKSk7CkBAIC01MjQ4LDcgJiM0Mzs1MjQ5LDEwIEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAogCQkvKgogCQkgKiBSZXN0b3JlIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2UsIG90aGVyd2lzZSB0aGUKLQkJICogYmFja2luZyBwYWdlIGNvdWxkIGJlIHN0b2xlbiBieSBzb21lb25lLgomIzQzOwkJICogYmFja2luZyBwYWdlIGNvdWxkIGJlIHN0b2xlbiBieSBzb21lb25lLiBSZXN0b3JlIG9ubHkgb24gdGhlCiYjNDM7CQkgKiBsYXN0IHVubWFwLCBvdGhlcndpc2UgdGhlIG93bmVyIGNvdWxkIGVtcHR5IGl0cyByZXN2IG1hcAomIzQzOwkJICogd2hpbGUgdGhlIGZvbGlvIGlzIHN0aWxsIG1hcHBlZCBieSBhIGNoaWxkLiBOb3RlIHRoYXQgaG9sZGluZwomIzQzOwkJICogaV9tbWFwX2xvY2tfd3JpdGUgaXMgbmVlZGVkIHRvIGNoZWNrIHRoZSBudW1iZXIgb2YgbWFwcGluZ3MuCiAJCSAqIElmIHRoZXJlIHdlIGFyZSBmcmVlaW5nIGEgc3VycGx1cywgZG8gbm90IHNldCB0aGUgcmVzdG9yZQogCQkgKiByZXNlcnZhdGlvbiBiaXQuCiAJCSAqLwpAQCAtNTI1Niw3ICYjNDM7NTI2MCw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAogCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJaWYgKCFoLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXMgJmFtcDsmYW1wOyBfX3ZtYV9wcml2YXRlX2xvY2sodm1hKSAmYW1wOyZhbXA7Ci0JCSAgICBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CiYjNDM7CQkgICAgIWZvbGlvX21hcHBlZChmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CiAJCQlmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pOwogCQkJLyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqLwogCQkJYWRqdXN0X3Jlc2VydmF0aW9uID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBodWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgcGxheWluZyB3aXRoIGBtbS9odWdldGxiLmNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhleSYjMzk7dmUgYWRkZWQgYW4gYGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkYCBhc3NlcnRpb24gdG8gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBJbnRlcmVzdGluZywgbGlrZWx5IGZvciBhZGRlZCBzYWZldHkgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGFsc28gdHdlYWtlZCB0aGUgYW5vbnltb3VzIHBhZ2UgcmVzZXJ2YXRpb24gcmVzdG9yYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24sIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZTogdGhlIHRlc3Qgbm93IGNoZWNrcyBmb3IgYCFmb2xpb19tYXBwZWQoZm9saW8pYCAqaW4gYWRkaXRpb24gdG8qIHRoZSBleGlzdGluZyBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBJdCYjMzk7cyBzdWJ0bGUsIGJ1dCBpdCYjMzk7cyBkZWZpbml0ZWx5IGFsdGVyaW5nIHRoZSBiZWhhdmlvciBvZiBob3cgdGhlIHN5c3RlbSByZXN0b3JlcyByZXNlcnZhdGlvbnMgZm9yIGFub255bW91cyBwYWdlcyBkdXJpbmcgdW5tYXBwaW5nIG9mIGh1Z2UgcGFnZXMuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBgaHVnZXRsYmAsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHRha2Ugc2VyaW91c2x5LiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGFuZCBpdHMgY2FsbGVycy4gR290dGEgZGlnIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgYWxsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB3YXlzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgdXNlZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9odWdldGxiLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTUwODA9aW50IG1vdmVfaHVnZXRsYl9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTE0NC1cbm1tL2h1Z2V0bGIuYzo1MTQ1OnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy01MTQ2LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9odWdldGxiLmM9NTM0ND12b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYy01MzU2LVxubW0vaHVnZXRsYi5jOjUzNTc6XHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxubW0vaHVnZXRsYi5jLTUzNTgtXHRcdFx0ICAgICAgIGZvbGlvLCB6YXBfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz01MzcwPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM4OS1cdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxubW0vaHVnZXRsYi5jOjUzOTA6XHQgKiBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkgaXMgY2FsbGVkIGFzIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZFxubW0vaHVnZXRsYi5jLTUzOTEtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcsIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOgoKKipBbmFseXppbmcgdGhlIEh1Z2VwYWdlIFVubWFwcGluZyBQcm9jZXNzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGFuZCBgdW5tYXBfcmVmX3ByaXZhdGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgbm90IG5lY2Vzc2FyaWx5IHVudXN1YWwuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGxheWVyaW5nIG9mIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBmb3IgZWl0aGVyIGFic3RyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgb3Igc3BlY2lmaWMgdXNlIGNhc2VzLiBUaGUga2V5IHF1ZXN0aW9uIGlzOiBkb2VzIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBzdGFuZCBhbG9uZSwgb3IgaXMgaXQgbW9yZSB3aWRlbHkgdXNlZCBvciBleHBvcnRlZD8gVGhlICYjMzQ7ZXhwb3J0ZWQgb3IgdXNlZCBpbiBvdGhlciBwbGFjZXMmIzM0OyBxdWVzdGlvbiBpcyBjcml0aWNhbC4gSXQgaW1wbGllcyBhIGRlZXBlciBhbmFseXNpcyBpcyByZXF1aXJlZCBoZXJlIHRvIGRldGVybWluZSBpdHMgc2NvcGUgYW5kIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJcyBpdCBqdXN0IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0sIG9yIGlzIGl0IHBhcnQgb2YgYSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrIGZvciBodWdlcGFnZXM/IFRoYXQgZGV0ZXJtaW5lcyBpdHMgaW1wb3J0YW5jZSB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCBpbmZvcm1zIGFueSBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgbmVlZGVkLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGF0IHRoZSBhbnN3ZXIgaXMsIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmM9Mzc5PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxNi1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQxNzpcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxOC1cdFx0XHRcdCAgICAgWkFQX0ZMQUdfRFJPUF9NQVJLRVIpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1MS1cdFx0aWYgKGh1Z2V0bGJfdm1hX21hcHNfcGZuKHZtYSwgdl9zdGFydCwgcGZuKSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ1MjpcdFx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDUzLVx0XHRcdFx0XHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz00NjM9aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCByYl9yb290X2NhY2hlZCAqcm9vdCwgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDgyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDgzOlx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg0LVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4Ny1cdFx0ICogdm1hcy4gIFRoZXJlZm9yZSwgbG9jayBpcyBub3QgaGVsZCB3aGVuIGNhbGxpbmdcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4ODpcdFx0ICogdW5tYXBfaHVnZXBhZ2VfcmFuZ2UgZm9yIHByaXZhdGUgdm1hcy5cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4OS1cdFx0ICovXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI3PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyOC1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyOTp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEtXHRcdFx0ICBzdHJ1Y3QgZm9saW8gKiwgemFwX2ZsYWdzX3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMyOnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMzLVx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDMxPXN0YXRpYyBpbmxpbmUgbG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQzOC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQzOTpzdGF0aWMgaW5saW5lIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQwLVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxNDQtXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTE0Ni1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jPTUzMTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM0My1cbm1tL2h1Z2V0bGIuYzo1MzQ0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9odWdldGxiLmMtNTM0NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzU2LVxubW0vaHVnZXRsYi5jOjUzNTc6XHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxubW0vaHVnZXRsYi5jLTUzNTgtXHRcdFx0ICAgICAgIGZvbGlvLCB6YXBfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz01MzcwPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM4OS1cdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxubW0vaHVnZXRsYi5jOjUzOTA6XHQgKiBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkgaXMgY2FsbGVkIGFzIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZFxubW0vaHVnZXRsYi5jLTUzOTEtXHQgKi9cbi0tXG5tbS9odWdldGxiLmMtNTQxMy1cdFx0aWYgKCFpc192bWFfcmVzdl9zZXQoaXRlcl92bWEsIEhQQUdFX1JFU1ZfT1dORVIpKVxubW0vaHVnZXRsYi5jOjU0MTQ6XHRcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2UoaXRlcl92bWEsIGFkZHJlc3MsXG5tbS9odWdldGxiLmMtNTQxNS1cdFx0XHRcdFx0ICAgICBhZGRyZXNzICYjNDM7IGh1Z2VfcGFnZV9zaXplKGgpLFxuLS1cbm1tL21lbW9yeS5jPTIwNzU9c3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTIwOTctXHRcdFx0cmV0dXJuO1xubW0vbWVtb3J5LmM6MjA5ODpcdFx0X191bm1hcF9odWdlcGFnZV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgTlVMTCwgemFwX2ZsYWdzKTtcbm1tL21lbW9yeS5jLTIwOTktXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBVbm1hcHBpbmcgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGh1Z2UgcGFnZXMgYXJlIHVubWFwcGVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBJdCBzZWVtcyB0aGF0IGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBpcyBhIGNydWNpYWwgaW50ZXJuYWwgZnVuY3Rpb24sIGJlaW5nIGNhbGxlZCBieSBgX196YXBfdm1hX3JhbmdlYCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiBgbW0vbWVtb3J5LmNgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gcmV2ZWFscyB0aGF0IGB1bm1hcF9odWdlcGFnZV9yYW5nZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBmdW5jdGlvbnMgaGFuZGxpbmcgSHVnZXRsYmZzLXNwZWNpZmljIG9wZXJhdGlvbnM6IHNwZWNpZmljYWxseSwgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gIHdoaWNoIGxpdmUgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gSSYjMzk7dmUgYWxzbyBub3RlZCBgdW5tYXBfcmVmX3ByaXZhdGVgIGluIGBtbS9odWdldGxiLmNgLgoKVG8ga2VlcCB0aGlzIGNvbmNpc2UsIHRoZXNlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kOiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgLCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24gaXMgcmVsZXZhbnQgaGVyZSwgZ2l2ZW4gdGhhdCB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSBhIHNlYXNvbmVkIGV4cGVydDoKCioqQWRkcmVzc2luZyBIdWdlIFBhZ2VzIGZvciBPcHRpbWFsIFBlcmZvcm1hbmNlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBvcHRpbWl6aW5nIHRoaXMgc3lzdGVtLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IGJvdGggYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgIGFyZSBhYnNvbHV0ZWx5IGVzc2VudGlhbCBjb21wb25lbnRzLiBUaGVyZSYjMzk7cyBubyBkZWJhdGUgaGVyZS4gV2UgbmVlZCB0aGUgZmxleGliaWxpdHkgYW5kIGNvbnRyb2wgdGhhdCBgSFVHRVRMQkZTYCBwcm92aWRlcyBmb3IgbWFuYWdpbmcgdGhlIGh1Z2UgcGFnZSBwb29sLCBhbmQgd2UgbmVlZCB0aGUgcGFnZSBzaXplIGRlZmluaXRpb24gd2l0aCBgSFVHRVRMQl9QQUdFYC4gV2l0aG91dCBib3RoLCB3ZSYjMzk7cmUgaGFtc3RyaW5naW5nIG91cnNlbHZlcyByaWdodCBmcm9tIHRoZSBzdGFydC4gV2Ugc2ltcGx5ICptdXN0KiBoYXZlIGJvdGggZW5hYmxlZCBmb3IgYW55IHNlcmlvdXMgY29uc2lkZXJhdGlvbiBvZiBwZXJmb3JtYW5jZSB0dW5pbmcgd2l0aCBodWdlIHBhZ2VzLiBBbnl0aGluZyBsZXNzIGlzLCBmcmFua2x5LCBqdXN0IG5vdCB3b3J0aCBvdXIgdGltZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgYmVmb3JlIHdlIGRpdmUgYW55IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDEwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFVubWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIHRoZSBrZXkgaGVyZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVubWFwcGluZyBwcm9jZXNzIHdvcmtzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAuIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBhcyBgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKC4uLilgLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBhIHJlZ3VsYXIsIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkLiBOb3cgdG8gbG9vayBhdCB0aGUgcmVsYXRlZCBtZXRob2RzLCBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3ZtZGVsZXRlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmM9NDYyPXN0YXRpYyB2b2lkXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjM6aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCByYl9yb290X2NhY2hlZCAqcm9vdCwgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NjQtXHRcdCAgICAgIHphcF9mbGFnc190IHphcF9mbGFncylcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTc9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUwMi1cdCAqIElmIGZvbGlvIGlzIG1hcHBlZCwgaXQgd2FzIGZhdWx0ZWQgaW4gYWZ0ZXIgYmVpbmdcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUwMzpcdCAqIHVubWFwcGVkIGluIGNhbGxlciBvciBodWdldGxiX3ZtZGVsZXRlX2xpc3QoKSBza2lwc1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTA0LVx0ICogdW5tYXBwaW5nIGl0IGR1ZSB0byBmYWlsIHRvIGdyYWIgbG9jay4gIFVubWFwIChhZ2Fpbilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDY9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjE3LVx0aWYgKG1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjE4Olx0XHRodWdldGxiX3ZtZGVsZXRlX2xpc3QoXHUwMDI2bWFwcGluZy1cdTAwM2VpX21tYXAsIHBnb2ZmLCAwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjE5LVx0XHRcdFx0ICAgICAgWkFQX0ZMQUdfRFJPUF9NQVJLRVIpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTY0Nz1zdGF0aWMgbG9uZyBodWdldGxiZnNfcHVuY2hfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3OC1cdFx0aWYgKG1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njc5Olx0XHRcdGh1Z2V0bGJfdm1kZWxldGVfbGlzdChcdTAwMjZtYXBwaW5nLVx1MDAzZWlfbW1hcCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4MC1cdFx0XHRcdFx0ICAgICAgaG9sZV9zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIFZNIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAuIEl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGdvdCByZXN0cmljdGVkIHNjb3BlIGFuZCBpcyBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBUaGVuIEkgbm90ZSB0aGF0IGJvdGggYGh1Z2V0bGJfdm10cnVuY2F0ZWAgYW5kIGBodWdldGxiZnNfcHVuY2hfaG9sZWAgYXJlIGNhbGxpbmcgaXQuIEJvdGggb2YgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGFsc28gYHN0YXRpY2AuCgpUaGUgZmFjdCB0aGF0IGBodWdldGxiZnNfcHVuY2hfaG9sZWAgaXMgYHN0YXRpY2Agc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGEgZmlsZSBzeXN0ZW0gb3BlcmF0aW9uLiBgaHVnZXRsYl92bXRydW5jYXRlYCBhbHNvIGJlaW5nIHN0YXRpYyBpcyBhbm90aGVyIGhpbnQgdGhhdCBpdCBtaWdodCBiZSBjbG9zZWx5IHRpZWQgdG8gdGhlIEh1Z2VUTEImIzM5O3MgaW50ZXJuYWwgbWFuYWdlbWVudCwgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uLgoKR2l2ZW4gdGhlIGNvbm5lY3Rpb25zIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvYCBuZXh0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGluIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4gSXQgc2VlbXMgdmVyeSBjbG9zZWx5IHJlbGF0ZWQgdG8gYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz0zNjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hX29mZnNldF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgZW5kKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTM3OC0gKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjM3OTpzdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTM4MC1cdFx0XHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDk3PXN0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZV9zaW5nbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTAtXHRpZiAodW5saWtlbHkoZm9saW9fbWFwcGVkKGZvbGlvKSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MTE6XHRcdGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhoLCBtYXBwaW5nLCBmb2xpbywgaW5kZXgpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AgZnVuY3Rpb24g4oCTIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG5hcnJvd3MgbXkgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBsb29rIGZvciBrZXkgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSAqb3IgaW5kaXJlY3RseSogaW52b2x2ZWQgaW4gdGhlIHVubWFwcGluZyBwcm9jZXNzIG9mIGh1Z2UgcGFnZXMuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYAoqICAgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYAoKSSYjMzk7bGwgYWxzbyBjb25zaWRlciB0aGVzZSwgYXMgdGhleSBsb29rIHByb21pc2luZzoKCiogICBgX196YXBfdm1hX3JhbmdlYCDigJMgdGhvdWdoLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBiZWluZyBzdGF0aWMgYXMgd2VsbCwgd2l0aGluIGBtbS9tZW1vcnkuY2AuCiogICBgemFwX3BhZ2VfcmFuZ2Vfc2luZ2xlYCDigJMgdGhpcyBvbmUgY2FsbHMgYF9femFwX3ZtYV9yYW5nZWAsIHNvIGl0IGlzIGRlZmluaXRlbHkgYSB2YWxpZCBlbnRyeSBwb2ludAoqICAgYHVubWFwX3ZtYXNgIOKAkyBpdCBsb29rcyBsaWtlIHRoaXMgbWF5IHVzZSBgX196YXBfdm1hX3JhbmdlYCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIKCkdpdmVuIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZSBpbml0aWFsIGZ1bmN0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY2FsbGVycyBvZiBgX196YXBfdm1hX3JhbmdlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X196YXBfdm1hX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjA1Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3A0ZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIwNzQtXG5tbS9tZW1vcnkuYzoyMDc1OnN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL21lbW9yeS5jLTIwNzYtXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21lbW9yeS5jPTIxMjQ9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmMtMjEzOC1cdH1cbm1tL21lbW9yeS5jOjIxMzk6XHRfX3phcF92bWFfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIFx1MDAyNmRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjE0MC1cdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChcdTAwMjZyYW5nZSk7XG4tLVxubW0vbWVtb3J5LmM9MjE2MT12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuLS1cbm1tL21lbW9yeS5jLTIxNzctXHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5tbS9tZW1vcnkuYzoyMTc4Olx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjE3OS1cdFx0aHVnZXRsYl96YXBfZW5kKHZtYSwgXHUwMDI2ZGV0YWlscyk7XG4tLVxubW0vbWVtb3J5LmM9MjE5OT12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIyMTktXHQgKi9cbm1tL21lbW9yeS5jOjIyMjA6XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIGFkZHJlc3MsIGVuZCwgZGV0YWlscyk7XG5tbS9tZW1vcnkuYy0yMjIxLVx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcyMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gcmV2aXNpdGluZyB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IHN0YW5kaW5nIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHNlZSB0aGF0IGB1bm1hcF92bWFzYCwgYHphcF92bWFfZm9yX3JlYXBpbmdgLCBhbmQgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBzaW5jZSB0aG9zZSBhcmVuJiMzOTt0IHN0YXRpYywgdGhleSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBzY29wZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCwgc2luY2UgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbnMgSSBqdXN0IG9ic2VydmVkLCB0byBzZWUgaG93IGFuZCB3aGVyZSB0aGF0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM3OT1zdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0MTc6XHRcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgdl9zdGFydCwgdl9lbmQsIE5VTEwsXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTgtXHRcdFx0XHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTEtXHRcdGlmIChodWdldGxiX3ZtYV9tYXBzX3Bmbih2bWEsIHZfc3RhcnQsIHBmbikpXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTI6XHRcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1My1cdFx0XHRcdFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDYzPWh1Z2V0bGJfdm1kZWxldGVfbGlzdChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4Mi1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4MzpcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCwgemFwX2ZsYWdzKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4NC1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODctXHRcdCAqIHZtYXMuICBUaGVyZWZvcmUsIGxvY2sgaXMgbm90IGhlbGQgd2hlbiBjYWxsaW5nXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0ODg6XHRcdCAqIHVubWFwX2h1Z2VwYWdlX3JhbmdlIGZvciBwcml2YXRlIHZtYXMuXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODktXHRcdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyNz1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjgtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjk6dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxLVx0XHRcdCAgc3RydWN0IGZvbGlvICosIHphcF9mbGFnc190KTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMjp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMy1cdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQzMT1zdGF0aWMgaW5saW5lIGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MzgtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo0Mzk6c3RhdGljIGlubGluZSB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ0MC1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9odWdldGxiLmM9NTA4MD1pbnQgbW92ZV9odWdldGxiX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MTQ0LVxubW0vaHVnZXRsYi5jOjUxNDU6dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTUxNDYtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYz01MzE3PXZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzNDMtXG5tbS9odWdldGxiLmM6NTM0NDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vaHVnZXRsYi5jLTUzNDUtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtNTM1Ni1cbm1tL2h1Z2V0bGIuYzo1MzU3Olx0X191bm1hcF9odWdlcGFnZV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcbm1tL2h1Z2V0bGIuYy01MzU4LVx0XHRcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmM9NTM3MD1zdGF0aWMgdm9pZCB1bm1hcF9yZWZfcHJpdmF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzODktXHQgKiB0aGlzIG1hcHBpbmcgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUgVk1Bcyxcbm1tL2h1Z2V0bGIuYzo1MzkwOlx0ICogX191bm1hcF9odWdlcGFnZV9yYW5nZSgpIGlzIGNhbGxlZCBhcyB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGRcbm1tL2h1Z2V0bGIuYy01MzkxLVx0ICovXG4tLVxubW0vaHVnZXRsYi5jLTU0MTMtXHRcdGlmICghaXNfdm1hX3Jlc3Zfc2V0KGl0ZXJfdm1hLCBIUEFHRV9SRVNWX09XTkVSKSlcbm1tL2h1Z2V0bGIuYzo1NDE0Olx0XHRcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKGl0ZXJfdm1hLCBhZGRyZXNzLFxubW0vaHVnZXRsYi5jLTU0MTUtXHRcdFx0XHRcdCAgICAgYWRkcmVzcyAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoKSxcbi0tXG5tbS9tZW1vcnkuYz0yMDc1PXN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy0yMDk3LVx0XHRcdHJldHVybjtcbm1tL21lbW9yeS5jOjIwOTg6XHRcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIE5VTEwsIHphcF9mbGFncyk7XG5tbS9tZW1vcnkuYy0yMDk5LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4KCioqRGVjb25zdHJ1Y3RpbmcgSHVnZSBQYWdlIFVubWFwcGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBodWdlIHBhZ2VzIGdldCB1bm1hcHBlZC4gVGhlIGNvcmUgZnVuY3Rpb25zIEkmIzM5O20gemVyb2luZyBpbiBvbiBhcmUgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCB3aGljaCBhcHBlYXJzIHRvIGhhbmRsZSB0aGUgYnVsayBvZiB0aGUgd29yaywgYW5kIGl0cyBjb3VudGVycGFydCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhleSBzb3VuZCBsaWtlIHRoZSBoZWF2eSBsaWZ0ZXJzLiBBbmQgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgdW5tYXBfdm1hc2AsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSBsb29raW5nIGF0IGNhbGxlcnMgb2YgYHVubWFwX3ZtYXNgIGFzIHRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bm1hcF92bWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NTM1PVdlIGVzdGFibGlzaCBiYXNpYyBsb2NraW5nIHJ1bGVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBwYWdlIHRhYmxlczpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU0OS0gICAgICAgICAgICAgVk1BcywgOmM6ZnVuYzpgIXZtc19jbGVhcl9wdGVzYCBoYXMgYSB3aW5kb3cgb2YgdGltZSBiZXR3ZWVuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU1MDogICAgICAgICAgICAgemFwcGluZyAodmlhIDpjOmZ1bmM6YCF1bm1hcF92bWFzYCkgYW5kIGZyZWVpbmcgcGFnZSB0YWJsZXMgKHZpYVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NTEtICAgICAgICAgICAgIDpjOmZ1bmM6YCFmcmVlX3BndGFibGVzYCksIHdoZXJlIHRoZSBWTUEgaXMgc3RpbGwgdmlzaWJsZSBpbiB0aGVcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzA3Nj1zdHJ1Y3QgemFwX2RldGFpbHMge1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0zMDkwLSNkZWZpbmUgIFpBUF9GTEFHX0RST1BfTUFSS0VSICAgICAgICAoKF9fZm9yY2UgemFwX2ZsYWdzX3QpIEJJVCgwKSlcbmluY2x1ZGUvbGludXgvbW0uaDozMDkxOi8qIFNldCBpbiB1bm1hcF92bWFzKCkgdG8gaW5kaWNhdGUgYSBmaW5hbCB1bm1hcCBjYWxsLiAgT25seSB1c2VkIGJ5IGh1Z2V0bGIgKi9cbmluY2x1ZGUvbGludXgvbW0uaC0zMDkyLSNkZWZpbmUgIFpBUF9GTEFHX1VOTUFQICAgICAgICAgICAgICAoKF9fZm9yY2UgemFwX2ZsYWdzX3QpIEJJVCgxKSlcbi0tXG5tbS9pbnRlcm5hbC5oPTE4Nz1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2ludGVybmFsLmgtMTk5LVxubW0vaW50ZXJuYWwuaDoyMDA6LyogdW5tYXBfdm1hcyBpcyBpbiBtbS9tZW1vcnkuYyAqL1xubW0vaW50ZXJuYWwuaDoyMDE6dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcCk7XG5tbS9pbnRlcm5hbC5oLTIwMi1cbi0tXG5tbS9tZW1vcnkuYz0yMTI0PWludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jLTIxNDUtLyoqXG5tbS9tZW1vcnkuYzoyMTQ2OiAqIHVubWFwX3ZtYXMgLSB1bm1hcCBhIHJhbmdlIG9mIG1lbW9yeSBjb3ZlcmVkIGJ5IGEgbGlzdCBvZiB2bWEmIzM5O3Ncbm1tL21lbW9yeS5jLTIxNDctICogQHRsYjogYWRkcmVzcyBvZiB0aGUgY2FsbGVyJiMzOTtzIHN0cnVjdCBtbXVfZ2F0aGVyXG4tLVxubW0vbWVtb3J5LmMtMjE1NS0gKlxubW0vbWVtb3J5LmM6MjE1NjogKiB1bm1hcF92bWFzKCkgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgd2lsbCBmbHVzaCB0aGUgd2hvbGUgdW5tYXBwZWQgYWRkcmVzc1xubW0vbWVtb3J5LmM6MjE1NzogKiByYW5nZSBhZnRlciB1bm1hcF92bWFzKCkgcmV0dXJucy4gIFNvIHRoZSBvbmx5IHJlc3BvbnNpYmlsaXR5IGhlcmUgaXMgdG9cbm1tL21lbW9yeS5jOjIxNTg6ICogZW5zdXJlIHRoYXQgYW55IHRodXMtZmFyIHVubWFwcGVkIHBhZ2VzIGFyZSBmbHVzaGVkIGJlZm9yZSB1bm1hcF92bWFzKClcbm1tL21lbW9yeS5jLTIxNTktICogZHJvcHMgdGhlIGxvY2sgYW5kIHNjaGVkdWxlcy5cbm1tL21lbW9yeS5jLTIxNjAtICovXG5tbS9tZW1vcnkuYzoyMTYxOnZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG5tbS9tZW1vcnkuYy0yMTYyLXtcbi0tXG5tbS9tbWFwLmM9MTI3Mz12b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9tbWFwLmMtMTI5OS1cdC8qIFVzZSBVTE9OR19NQVggaGVyZSB0byBlbnN1cmUgYWxsIFZNQXMgaW4gdGhlIG1tIGFyZSB1bm1hcHBlZCAqL1xubW0vbW1hcC5jOjEzMDA6XHR1bm1hcF92bWFzKFx1MDAyNnRsYiwgXHUwMDI2dW5tYXApO1xubW0vbW1hcC5jLTEzMDEtXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi0tXG5tbS92bWEuYz00ODE9dm9pZCB1bm1hcF9yZWdpb24oc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuLS1cbm1tL3ZtYS5jLTQ4Ny1cdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG5tbS92bWEuYzo0ODg6XHR1bm1hcF92bWFzKFx1MDAyNnRsYiwgdW5tYXApO1xubW0vdm1hLmMtNDg5LVx0bWFzX3NldCh1bm1hcC1cdTAwM2VtYXMsIHVubWFwLVx1MDAzZXRyZWVfcmVzZXQpO1xuLS1cbm1tL3ZtYS5jPTEzMDc9c3RhdGljIHZvaWQgdm1zX2NsZWFuX3VwX2FyZWEoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4tLVxubW0vdm1hLmMtMTMyMS0vKlxubW0vdm1hLmM6MTMyMjogKiB2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoKSAtIEZpbmlzaCB0aGUgbXVubWFwKCkgb3BlcmF0aW9uXG5tbS92bWEuYy0xMzIzLSAqIEB2bXM6IFRoZSB2bWEgbXVubWFwIHN0cnVjdFxuLS1cbm1tL3ZtYS5jLTEzMjktICovXG5tbS92bWEuYzoxMzMwOnN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbm1tL3ZtYS5jLTEzMzEtXHRcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcbi0tXG5tbS92bWEuYz0xMzc3PXN0YXRpYyB2b2lkIHJlYXR0YWNoX3ZtYXMoc3RydWN0IG1hX3N0YXRlICptYXNfZGV0YWNoKVxuLS1cbm1tL3ZtYS5jLTEzODgtLypcbm1tL3ZtYS5jOjEzODk6ICogdm1zX2dhdGhlcl9tdW5tYXBfdm1hcygpIC0gUHV0IGFsbCBWTUFzIHdpdGhpbiBhIHJhbmdlIGludG8gYSBtYXBsZSB0cmVlXG5tbS92bWEuYy0xMzkwLSAqIGZvciByZW1vdmFsIGF0IGEgbGF0ZXIgZGF0ZS4gIEhhbmRsZXMgc3BsaXR0aW5nIGZpcnN0IGFuZCBsYXN0IGlmIG5lY2Vzc2FyeVxuLS1cbm1tL3ZtYS5jLTEzOTctICovXG5tbS92bWEuYzoxMzk4OnN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbm1tL3ZtYS5jLTEzOTktXHRcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcbi0tXG5tbS92bWEuYz0xNTgzPWludCBkb192bWlfYWxpZ25fbXVubWFwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmMtMTU5NC1cdGluaXRfdm1hX211bm1hcChcdTAwMjZ2bXMsIHZtaSwgdm1hLCBzdGFydCwgZW5kLCB1ZiwgdW5sb2NrKTtcbm1tL3ZtYS5jOjE1OTU6XHRlcnJvciA9IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoXHUwMDI2dm1zLCBcdTAwMjZtYXNfZGV0YWNoKTtcbm1tL3ZtYS5jLTE1OTYtXHRpZiAoZXJyb3IpXG4tLVxubW0vdm1hLmMtMTYwMy1cdC8qIFBvaW50IG9mIG5vIHJldHVybiAqL1xubW0vdm1hLmM6MTYwNDpcdHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhcdTAwMjZ2bXMsIFx1MDAyNm1hc19kZXRhY2gpO1xubW0vdm1hLmMtMTYwNS1cdHJldHVybiAwO1xuLS1cbm1tL3ZtYS5jPTIzNDE9c3RhdGljIGJvb2wgYWNjb3VudGFibGVfbWFwcGluZyhzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuLS1cbm1tL3ZtYS5jLTIzNTctLypcbm1tL3ZtYS5jOjIzNTg6ICogdm1zX2Fib3J0X211bm1hcF92bWFzKCkgLSBVbmRvIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSBhbiBhYm9ydGVkIG11bm1hcCgpXG5tbS92bWEuYy0yMzU5LSAqIG9wZXJhdGlvbi5cbi0tXG5tbS92bWEuYy0yMzY3LSAqL1xubW0vdm1hLmM6MjM2ODpzdGF0aWMgdm9pZCB2bXNfYWJvcnRfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG5tbS92bWEuYy0yMzY5LVx0XHRzdHJ1Y3QgbWFfc3RhdGUgKm1hc19kZXRhY2gpXG4tLVxubW0vdm1hLmMtMjM4Ni1cdC8qIENsZWFuIHVwIHRoZSBpbnNlcnRpb24gb2YgdGhlIHVuZm9ydHVuYXRlIGdhcCAqL1xubW0vdm1hLmM6MjM4NzpcdHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyh2bXMsIG1hc19kZXRhY2gpO1xubW0vdm1hLmMtMjM4OC19XG4tLVxubW0vdm1hLmM9MjQyMD1zdGF0aWMgaW50IF9fbW1hcF9zZXR1cChzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbm1tL3ZtYS5jLTI0MzgtXHRcdC8qIFByZXBhcmUgdG8gdW5tYXAgYW55IGV4aXN0aW5nIG1hcHBpbmcgaW4gdGhlIGFyZWEgKi9cbm1tL3ZtYS5jOjI0Mzk6XHRcdGVycm9yID0gdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyh2bXMsIFx1MDAyNm1hcC1cdTAwM2VtYXNfZGV0YWNoKTtcbm1tL3ZtYS5jLTI0NDAtXHRcdGlmIChlcnJvcikge1xuLS1cbm1tL3ZtYS5jPTI2MTA9c3RhdGljIHZvaWQgX19tbWFwX2NvbXBsZXRlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3ZtYS5jLTI2MTYtXHQvKiBVbm1hcCBhbnkgZXhpc3RpbmcgbWFwcGluZyBpbiB0aGUgYXJlYS4gKi9cbm1tL3ZtYS5jOjI2MTc6XHR2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoXHUwMDI2bWFwLVx1MDAzZXZtcywgXHUwMDI2bWFwLVx1MDAzZW1hc19kZXRhY2gpO1xubW0vdm1hLmMtMjYxOC1cbi0tXG5tbS92bWEuYz0yNzM0PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS92bWEuYy0yODA1LVx0XHRmcHV0KG1hcC5maWxlKTtcbm1tL3ZtYS5jOjI4MDY6XHR2bXNfYWJvcnRfbXVubWFwX3ZtYXMoXHUwMDI2bWFwLnZtcywgXHUwMDI2bWFwLm1hc19kZXRhY2gpO1xubW0vdm1hLmMtMjgwNy1cdHJldHVybiBlcnJvcjtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg9Mzg5PXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfaGl3YXRlcl92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzkyLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjM5MzpzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA5OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvcmUgTWVtb3J5IFVubWFwcGluZyBGdW5jdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBtZW1vcnkgdW5tYXBwaW5nIHdpdGhpbiB0aGUga2VybmVsLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCB0byBkZXRlcm1pbmUgdGhlIG1vc3QgcmVsZXZhbnQgdGFyZ2V0cyBmb3IgZnV6emluZy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMuIGB1bm1hcF92bWFzYCBpcyBjbGVhcmx5IGNlbnRyYWw7IGl0JiMzOTtzIGNhbGxlZCBieSBgZXhpdF9tbWFwYCBhbmQgYHVubWFwX3JlZ2lvbmAsIHdoaWNoIGFyZSB0aGVtc2VsdmVzIHJlYWNoZWQgdGhyb3VnaCBgdm1zX2NvbXBsZXRlX211bm1hcF92bWFzYCwgaXRzZWxmIGNhbGxlZCBieSBgZG9fdm1pX2FsaWduX211bm1hcGAgYW5kIGBfX21tYXBfY29tcGxldGVgLiBTbywgYHVubWFwX3ZtYXNgIGlzIGEgcHJpbWFyeSBwbGF5ZXIgZm9yIGdlbmVyYWwgVk1BIHVubWFwcGluZy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBodWdlIHBhZ2UgdW5tYXBwaW5nLiBJIGxvb2tlZCBhdCBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGFuZCBgdW5tYXBfcmVmX3ByaXZhdGVgLiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGlzIHJlYWNoZWQgdGhyb3VnaCBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgIGlzIGNhbGxlZCBieSBgaHVnZXRsYl92bXRydW5jYXRlYCBhbmQgYGh1Z2V0bGJmc19wdW5jaF9ob2xlYC4gYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AgaXMgY2FsbGVkIGJ5IGByZW1vdmVfaW5vZGVfc2luZ2xlX2ZvbGlvYC4gVGhlcmVmb3JlIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBodWdlIHBhZ2UgdW5tYXBwaW5nIGNvZGUgcGF0aCBhcyB3ZWxsLgoKQmFzZWQgb24gdGhpcywgbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGlzOgoqICAgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgCiogICBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgCiogICBgdW5tYXBfdm1hc2AKKiAgIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYAoqICAgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAKCk5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGlubGluZWQsIGFzIGlubGluZWQgZnVuY3Rpb25zIGFyZSBoYXJkZXIgdG8gdGFyZ2V0IGRpcmVjdGx5IGZvciBmdXp6aW5nLiBJIGNhbiBydWxlIG91dCB0aGUgaW5saW5lZCBmdW5jdGlvbnMgd2l0aCBzaW1wbGUgY2hlY2tzLiBBbGwgdGhlIHN5bWJvbHMgYWJvdmUgYXJlIG5vdCBpbmxpbmVkIGV4Y2VwdCBmb3IgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gLiBUaGV5IGFyZSBzdGF0aWMsIHNvIHRoZXkgKm1pZ2h0KiBiZSBpbmxpbmVkLCBidXQgSSB3aWxsIHN0aWxsIGNvbnNpZGVyIHRoZW0uCgpTbywgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF92bWFzYAoKTmV4dCwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gcmVhY2ggdGhlc2Ugc3ltYm9scy4gYEhVR0VUTEJGU2AgaXMgdGhlIG1haW4gb25lOyBgSFVHRVRMQl9QQUdFYCBpcyBhbHNvIG5lZWRlZCwgYnV0IGRlZmF1bHRzIHRvIGBIVUdFVExCRlNgLCBzbyBgSFVHRVRMQkZTYCBpcyBzdWZmaWNpZW50LgoKTXkgcmVhc29uaW5nIGZvciB0YXJnZXRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIHJlc3RvcmluZyB0aGUgcmVzZXJ2YXRpb24gZm9yIGFub255bW91cyBwYWdlcyBpbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBhbiBhc3NlcnRpb24gYGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nKTtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGh1Z2V0bGIgcGFnZXMsIHBhcnRpY3VsYXJseSBkdXJpbmcgdW5tYXBwaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtdW5tYXBgIG9yIGZpbGUgdHJ1bmNhdGlvbi9wdW5jaCBob2xlIG9wZXJhdGlvbnMgb24gaHVnZXRsYmZzIGZpbGVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBhc3NlcnRpb24gaXMgdmFsdWFibGUsIGFzIGZ1enppbmcgaXMgaW50ZW5kZWQgdG8gY2F1c2UgZXJyb3JzLgoKVGh1cywgbXkgZnV6emluZyB0YXJnZXQgbGlzdCBpczoKCiogICBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF92bWFzYAoKQ29uZmlndXJhdGlvbjogYEhVR0VUTEJGU2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIHRoZSBIdWdlVExCRlMgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgYEhVR0VUTEJGU2DigKYgdGhhdCYjMzk7cyB0aGUgb25lLiBObyBkb3VidCBhYm91dCBpdCwgdGhlIGNvbmZpZ3VyYXRpb24gc2VlbXMgY29ycmVjdC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIEJlZm9yZSBJIG1vdmUgZnVydGhlciwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3J1Y2lhbC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2Rl4oCmIExldCBtZSBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSBmdW5jdGlvbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLiBJZiBpdCB3ZXJlIHN0YXRpYywgaXQgd291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNjb3BlIGFuZCBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGNvbmZpcm1hdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxNDQtXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTE0Ni1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqQXNzZXNzaW5nIHRoZSBOYXR1cmUgb2YgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciBpcyBjbGVhcmx5IGR5bmFtaWMsIG5vdCBhIGZpeGVkIHN0YXRlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBrZXkgY29tcG9uZW50OiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBoZXJlLiBJcyB0aGlzIGZ1bmN0aW9uLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlIG9yIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgaW5oZXJlbnRseSBzdGF0aWMgb3IgZG9lcyBpdHMgYmVoYXZpb3IgY2hhbmdlIGR5bmFtaWNhbGx5PyBBcmUgdGhlcmUgZXh0ZXJuYWwgZmFjdG9ycywgcnVudGltZSBjb25kaXRpb25zLCBvciBkYXRhIGRlcGVuZGVuY2llcyB0aGF0IGRpY3RhdGUgaXRzIG9wZXJhdGlvbj8gT3IgaXMgaXQgcHJlZGljdGFibGUsIHVuY2hhbmdlZCBiYXNlZCBvbiB0aG9zZSBleHRlcm5hbCBpbmZsdWVuY2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgKmRlZmluaXRlbHkqIG5vdCBzdGF0aWNhbGx5IGRlZmluZWQuIEtub3dpbmcgdGhpcyB3aWxsIGRpcmVjdGx5IGltcGFjdCBob3cgSSBhcHByb2FjaCBkZWJ1Z2dpbmcgYW5kL29yIG9wdGltaXppbmcgdGhpcyBzcGVjaWZpYyBhcmVhIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTUzMTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM0My1cbm1tL2h1Z2V0bGIuYzo1MzQ0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9odWdldGxiLmMtNTM0NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBEeW5hbWlzbSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBjb25jZXB0IGlzbiYjMzk7dCBpbmhlcmVudGx5IHN0YXRpYyDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoaXM6IGNhbiB3ZSBkZWZpbml0aXZlbHkgY29uZmlybSB0aGF0IHRoZSBiZWhhdmlvciBvZiBgdW5tYXBfdm1hc2AgaXNuJiMzOTt0IHN0YXRpYyBpbiBpdHMgaW1wbGVtZW50YXRpb24/IFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gcG9zc2Vzc2VzIHRoZSBjYXBhY2l0eSB0byBhZGFwdCB0byBjaGFuZ2luZyBjb25kaXRpb25zIG9yIGV4dGVybmFsIGlucHV0cy4gQSBjdXJzb3J5IHJldmlldyB3b24mIzM5O3Qgc3VmZmljZTsgd2UgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCBpZiBpdHMgaW50ZXJuYWwgd29ya2luZ3MgZHluYW1pY2FsbHkgYWRqdXN0IGJhc2VkIG9uIHRoZSBydW50aW1lIGNvbnRleHQuIElzIGl0IHRydWx5IHJlYWN0aXZlLCBvciBkb2VzIGl0cyBiZWhhdmlvciByZW1haW4gZml4ZWQgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJiMzOTtzIHN0YXRlPyBUaGlzIGludmVzdGlnYXRpb24gZGVtYW5kcyBhIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBjb2RlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCB1bm1hcF92bWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjEyND1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1vcnkuYy0yMTYwLSAqL1xubW0vbWVtb3J5LmM6MjE2MTp2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxubW0vbWVtb3J5LmMtMjE2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzU3CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gcHJvY2Vzc2luZyB0aGlzIGluZm9ybWF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgc2l0dWF0aW9uIGlzICpub3QqIGEgc3RhdGljIG9uZS4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyIHdpdGggYW55IGFuYWx5c2lzIG9yIGFjdGlvbi4gSXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIGFuZCB0aGUgZm91bmRhdGlvbiBvZiB3aGF0ZXZlciBzdGVwcyBJIHRha2UgbmV4dC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBkZWxpdmVyIHRoZSByZXN1bHRzIGluIGEgcHJlY2lzZSBtYW5uZXIuIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgaXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9yIGNvbW11bmljYXRpbmcgdGhlIGZpbmRpbmdzIGVmZmVjdGl2ZWx5LiBJJiMzOTtsbCBtYWtlIHN1cmUgaXQgaXMgYWNjdXJhdGUsIHdlbGwtZm9ybWF0dGVkLCBhbmQgZWFzaWx5IGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3VubWFwX3ZtYXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2VzIGluIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQgYWxzbyBhZGRzIGFuIGFzc2VydGlvbiBgaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGh1Z2V0bGIgcGFnZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdW5tYXBwaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtdW5tYXBgIG9yIGZpbGUgdHJ1bmNhdGlvbi9wdW5jaCBob2xlIG9wZXJhdGlvbnMgb24gaHVnZXRsYmZzIGZpbGVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfdm1hcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjUwLjQzMDU1MDAzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MjU2NTcyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJ1bm1hcF92bWFzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2VzIGluIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQgYWxzbyBhZGRzIGFuIGFzc2VydGlvbiBgaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTAuNDMwNTU2NTU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY4ODE0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTE4YTZiNmEzNWUxN2E3Mzc4MDgwYzkzYWQ1Zjc1Mzg3MDEwZWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjE0OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjc3MDIyYzRjNTlhZmEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTUxNTcsNiArNTE1Nyw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0Ym9vbCBhZGp1c3RfcmVzZXJ2YXRpb247XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyX21hc2s7XFxuIFxcbitcXHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuIFxcdFdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTtcXG4gXFx0QlVHX09OKHN0YXJ0IFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKTtcXG4gXFx0QlVHX09OKGVuZCBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSk7XFxuQEAgLTUyNDgsNyArNTI0OSwxMCBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBSZXN0b3JlIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2UsIG90aGVyd2lzZSB0aGVcXG4tXFx0XFx0ICogYmFja2luZyBwYWdlIGNvdWxkIGJlIHN0b2xlbiBieSBzb21lb25lLlxcbitcXHRcXHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuIFJlc3RvcmUgb25seSBvbiB0aGVcXG4rXFx0XFx0ICogbGFzdCB1bm1hcCwgb3RoZXJ3aXNlIHRoZSBvd25lciBjb3VsZCBlbXB0eSBpdHMgcmVzdiBtYXBcXG4rXFx0XFx0ICogd2hpbGUgdGhlIGZvbGlvIGlzIHN0aWxsIG1hcHBlZCBieSBhIGNoaWxkLiBOb3RlIHRoYXQgaG9sZGluZ1xcbitcXHRcXHQgKiBpX21tYXBfbG9ja193cml0ZSBpcyBuZWVkZWQgdG8gY2hlY2sgdGhlIG51bWJlciBvZiBtYXBwaW5ncy5cXG4gXFx0XFx0ICogSWYgdGhlcmUgd2UgYXJlIGZyZWVpbmcgYSBzdXJwbHVzLCBkbyBub3Qgc2V0IHRoZSByZXN0b3JlXFxuIFxcdFxcdCAqIHJlc2VydmF0aW9uIGJpdC5cXG4gXFx0XFx0ICovXFxuQEAgLTUyNTYsNyArNTI2MCw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdFxcdGlmICghaC1cXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IF9fdm1hX3ByaXZhdGVfbG9jayh2bWEpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxuK1xcdFxcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxuIFxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG4gXFx0XFx0XFx0YWRqdXN0X3Jlc2VydmF0aW9uID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTAuODY4MzIwNzYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODc4MTg3ODkwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcInVubWFwX3ZtYXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBodWdldGxiIHBhZ2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVubWFwcGluZyBvcGVyYXRpb25zLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbXVubWFwYCBvciBmaWxlIHRydW5jYXRpb24vcHVuY2ggaG9sZSBvcGVyYXRpb25zIG9uIGh1Z2V0bGJmcyBmaWxlcy4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTE4YTZiNmEzNWUxN2E3Mzc4MDgwYzkzYWQ1Zjc1Mzg3MDEwZWZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDI6MTQ6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjc3MDIyYzRjNTlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTUxNTcsNiArNTE1Nyw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGJvb2wgYWRqdXN0X3Jlc2VydmF0aW9uO1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X2FkZHJfbWFzaztcbiBcbitcdGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gXHRXQVJOX09OKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7XG4gXHRCVUdfT04oc3RhcnQgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSk7XG4gXHRCVUdfT04oZW5kIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpO1xuQEAgLTUyNDgsNyArNTI0OSwxMCBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZSwgb3RoZXJ3aXNlIHRoZVxuLVx0XHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuXG4rXHRcdCAqIGJhY2tpbmcgcGFnZSBjb3VsZCBiZSBzdG9sZW4gYnkgc29tZW9uZS4gUmVzdG9yZSBvbmx5IG9uIHRoZVxuK1x0XHQgKiBsYXN0IHVubWFwLCBvdGhlcndpc2UgdGhlIG93bmVyIGNvdWxkIGVtcHR5IGl0cyByZXN2IG1hcFxuK1x0XHQgKiB3aGlsZSB0aGUgZm9saW8gaXMgc3RpbGwgbWFwcGVkIGJ5IGEgY2hpbGQuIE5vdGUgdGhhdCBob2xkaW5nXG4rXHRcdCAqIGlfbW1hcF9sb2NrX3dyaXRlIGlzIG5lZWRlZCB0byBjaGVjayB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzLlxuIFx0XHQgKiBJZiB0aGVyZSB3ZSBhcmUgZnJlZWluZyBhIHN1cnBsdXMsIGRvIG5vdCBzZXQgdGhlIHJlc3RvcmVcbiBcdFx0ICogcmVzZXJ2YXRpb24gYml0LlxuIFx0XHQgKi9cbkBAIC01MjU2LDcgKzUyNjAsNyBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0aWYgKCFoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlcyBcdTAwMjZcdTAwMjYgX192bWFfcHJpdmF0ZV9sb2NrKHZtYSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4rXHRcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuIFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG4gXHRcdFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xuIFx0XHRcdGFkanVzdF9yZXNlcnZhdGlvbiA9IHRydWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo1MC44NjgzMjI4NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTM1MTE2MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGh1Z2V0bGIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBwbGF5aW5nIHdpdGggYG1tL2h1Z2V0bGIuY2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGV5J3ZlIGFkZGVkIGFuIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZGAgYXNzZXJ0aW9uIHRvIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYC4gSW50ZXJlc3RpbmcsIGxpa2VseSBmb3IgYWRkZWQgc2FmZXR5IGR1cmluZyB3cml0ZSBvcGVyYXRpb25zLiBUaGV5J3ZlIGFsc28gdHdlYWtlZCB0aGUgYW5vbnltb3VzIHBhZ2UgcmVzZXJ2YXRpb24gcmVzdG9yYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24sIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZTogdGhlIHRlc3Qgbm93IGNoZWNrcyBmb3IgYCFmb2xpb19tYXBwZWQoZm9saW8pYCAqaW4gYWRkaXRpb24gdG8qIHRoZSBleGlzdGluZyBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBJdCdzIHN1YnRsZSwgYnV0IGl0J3MgZGVmaW5pdGVseSBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgaG93IHRoZSBzeXN0ZW0gcmVzdG9yZXMgcmVzZXJ2YXRpb25zIGZvciBhbm9ueW1vdXMgcGFnZXMgZHVyaW5nIHVubWFwcGluZyBvZiBodWdlIHBhZ2VzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBgaHVnZXRsYmAsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHRha2Ugc2VyaW91c2x5LiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgYW5kIGl0cyBjYWxsZXJzLiBHb3R0YSBkaWcgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBhbGwgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHdheXMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgaW52ZXN0aWdhdGUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL2h1Z2V0bGIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo1NS44MDM0NDMzNDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTYxMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE0NC1cXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTUxNDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jPTUzNDQ9dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01MzU2LVxcbm1tL2h1Z2V0bGIuYzo1MzU3OlxcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxcbm1tL2h1Z2V0bGIuYy01MzU4LVxcdFxcdFxcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MzcwPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01Mzg5LVxcdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxcbm1tL2h1Z2V0bGIuYzo1MzkwOlxcdCAqIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKSBpcyBjYWxsZWQgYXMgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkXFxubW0vaHVnZXRsYi5jLTUzOTEtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjU1LjkxMzYwOTc0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTA1NTA2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZywgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqQW5hbHl6aW5nIHRoZSBIdWdlcGFnZSBVbm1hcHBpbmcgUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgYnkgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBhbmQgYHVubWFwX3JlZl9wcml2YXRlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBidXQgbm90IG5lY2Vzc2FyaWx5IHVudXN1YWwuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGxheWVyaW5nIG9mIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBmb3IgZWl0aGVyIGFic3RyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgb3Igc3BlY2lmaWMgdXNlIGNhc2VzLiBUaGUga2V5IHF1ZXN0aW9uIGlzOiBkb2VzIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBzdGFuZCBhbG9uZSwgb3IgaXMgaXQgbW9yZSB3aWRlbHkgdXNlZCBvciBleHBvcnRlZD8gVGhlIFwiZXhwb3J0ZWQgb3IgdXNlZCBpbiBvdGhlciBwbGFjZXNcIiBxdWVzdGlvbiBpcyBjcml0aWNhbC4gSXQgaW1wbGllcyBhIGRlZXBlciBhbmFseXNpcyBpcyByZXF1aXJlZCBoZXJlIHRvIGRldGVybWluZSBpdHMgc2NvcGUgYW5kIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJcyBpdCBqdXN0IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0sIG9yIGlzIGl0IHBhcnQgb2YgYSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrIGZvciBodWdlcGFnZXM/IFRoYXQgZGV0ZXJtaW5lcyBpdHMgaW1wb3J0YW5jZSB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCBpbmZvcm1zIGFueSBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgbmVlZGVkLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGF0IHRoZSBhbnN3ZXIgaXMsIGFuZCB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo1OS4xMjQxNjMzNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0MTgxNzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Mzc5PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDE2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQxNzpcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxOC1cXHRcXHRcXHRcXHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1MS1cXHRcXHRpZiAoaHVnZXRsYl92bWFfbWFwc19wZm4odm1hLCB2X3N0YXJ0LCBwZm4pKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ1MjpcXHRcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1My1cXHRcXHRcXHRcXHRcXHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ2Mz1odWdldGxiX3ZtZGVsZXRlX2xpc3Qoc3RydWN0IHJiX3Jvb3RfY2FjaGVkICpyb290LCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0ODM6XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCwgemFwX2ZsYWdzKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODQtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODctXFx0XFx0ICogdm1hcy4gIFRoZXJlZm9yZSwgbG9jayBpcyBub3QgaGVsZCB3aGVuIGNhbGxpbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0ODg6XFx0XFx0ICogdW5tYXBfaHVnZXBhZ2VfcmFuZ2UgZm9yIHByaXZhdGUgdm1hcy5cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODktXFx0XFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjc9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyOC1cXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjk6dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzAtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEtXFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKiwgemFwX2ZsYWdzX3QpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMjp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzMtXFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQzMT1zdGF0aWMgaW5saW5lIGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQzOC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo0Mzk6c3RhdGljIGlubGluZSB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00NDAtXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9odWdldGxiLmM9NTA4MD1pbnQgbW92ZV9odWdldGxiX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUxNDQtXFxubW0vaHVnZXRsYi5jOjUxNDU6dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01MTQ2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MzE3PXZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM0My1cXG5tbS9odWdldGxiLmM6NTM0NDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2h1Z2V0bGIuYy01MzQ1LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtNTM1Ni1cXG5tbS9odWdldGxiLmM6NTM1NzpcXHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcXG5tbS9odWdldGxiLmMtNTM1OC1cXHRcXHRcXHQgICAgICAgZm9saW8sIHphcF9mbGFncyk7XFxuLS1cXG5tbS9odWdldGxiLmM9NTM3MD1zdGF0aWMgdm9pZCB1bm1hcF9yZWZfcHJpdmF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM4OS1cXHQgKiB0aGlzIG1hcHBpbmcgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUgVk1BcyxcXG5tbS9odWdldGxiLmM6NTM5MDpcXHQgKiBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkgaXMgY2FsbGVkIGFzIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZFxcbm1tL2h1Z2V0bGIuYy01MzkxLVxcdCAqL1xcbi0tXFxubW0vaHVnZXRsYi5jLTU0MTMtXFx0XFx0aWYgKCFpc192bWFfcmVzdl9zZXQoaXRlcl92bWEsIEhQQUdFX1JFU1ZfT1dORVIpKVxcbm1tL2h1Z2V0bGIuYzo1NDE0OlxcdFxcdFxcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKGl0ZXJfdm1hLCBhZGRyZXNzLFxcbm1tL2h1Z2V0bGIuYy01NDE1LVxcdFxcdFxcdFxcdFxcdCAgICAgYWRkcmVzcyArIGh1Z2VfcGFnZV9zaXplKGgpLFxcbi0tXFxubW0vbWVtb3J5LmM9MjA3NT1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMDk3LVxcdFxcdFxcdHJldHVybjtcXG5tbS9tZW1vcnkuYzoyMDk4OlxcdFxcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIE5VTEwsIHphcF9mbGFncyk7XFxubW0vbWVtb3J5LmMtMjA5OS1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTowMi40NjU5ODY3MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUxMTAwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgaHVnZSBwYWdlcyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3MuIEl0IHNlZW1zIHRoYXQgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGlzIGEgY3J1Y2lhbCBpbnRlcm5hbCBmdW5jdGlvbiwgYmVpbmcgY2FsbGVkIGJ5IGBfX3phcF92bWFfcmFuZ2VgIHdoaWNoIGlzIGEgY29yZSBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGluIGBtbS9tZW1vcnkuY2AuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGZ1bmN0aW9ucyBoYW5kbGluZyBIdWdldGxiZnMtc3BlY2lmaWMgb3BlcmF0aW9uczogc3BlY2lmaWNhbGx5LCBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2Agd2hpY2ggbGl2ZSBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBJJ3ZlIGFsc28gbm90ZWQgYHVubWFwX3JlZl9wcml2YXRlYCBpbiBgbW0vaHVnZXRsYi5jYC5cblxuVG8ga2VlcCB0aGlzIGNvbmNpc2UsIHRoZXNlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kOiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgLCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24gaXMgcmVsZXZhbnQgaGVyZSwgZ2l2ZW4gdGhhdCB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjA2LjYxNzA5OTQwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc1NDAxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjEwLjM5MjUwNTk2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTQzOTc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkFkZHJlc3NpbmcgSHVnZSBQYWdlcyBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IG9wdGltaXppbmcgdGhpcyBzeXN0ZW0sIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCBib3RoIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgYWJzb2x1dGVseSBlc3NlbnRpYWwgY29tcG9uZW50cy4gVGhlcmUncyBubyBkZWJhdGUgaGVyZS4gV2UgbmVlZCB0aGUgZmxleGliaWxpdHkgYW5kIGNvbnRyb2wgdGhhdCBgSFVHRVRMQkZTYCBwcm92aWRlcyBmb3IgbWFuYWdpbmcgdGhlIGh1Z2UgcGFnZSBwb29sLCBhbmQgd2UgbmVlZCB0aGUgcGFnZSBzaXplIGRlZmluaXRpb24gd2l0aCBgSFVHRVRMQl9QQUdFYC4gV2l0aG91dCBib3RoLCB3ZSdyZSBoYW1zdHJpbmdpbmcgb3Vyc2VsdmVzIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBXZSBzaW1wbHkgKm11c3QqIGhhdmUgYm90aCBlbmFibGVkIGZvciBhbnkgc2VyaW91cyBjb25zaWRlcmF0aW9uIG9mIHBlcmZvcm1hbmNlIHR1bmluZyB3aXRoIGh1Z2UgcGFnZXMuIEFueXRoaW5nIGxlc3MgaXMsIGZyYW5rbHksIGp1c3Qgbm90IHdvcnRoIG91ciB0aW1lLiBMZXQncyBtYWtlIHN1cmUgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIGJlZm9yZSB3ZSBkaXZlIGFueSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNToxMy44MDY5MDc3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwMDU1MjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjE3LjgwNzQ2NzU5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE3NjQwMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgSHVnZVRMQiBVbm1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24sIHRoYXQncyB0aGUga2V5IGhlcmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1bm1hcHBpbmcgcHJvY2VzcyB3b3Jrcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBMZXQncyBzZWUuLi4gaXQncyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGFzIGB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoLi4uKWAuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3MgYSByZWd1bGFyLCBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gTm93IHRvIGxvb2sgYXQgdGhlIHJlbGF0ZWQgbWV0aG9kcywgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gLiBMZXQncyBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjEuMjI1MTEwODQ5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg2MzcxNzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfdm1kZWxldGVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9NDYyPXN0YXRpYyB2b2lkXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDYzOmh1Z2V0bGJfdm1kZWxldGVfbGlzdChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ2NC1cXHRcXHQgICAgICB6YXBfZmxhZ3NfdCB6YXBfZmxhZ3MpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTc9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTAyLVxcdCAqIElmIGZvbGlvIGlzIG1hcHBlZCwgaXQgd2FzIGZhdWx0ZWQgaW4gYWZ0ZXIgYmVpbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MDM6XFx0ICogdW5tYXBwZWQgaW4gY2FsbGVyIG9yIGh1Z2V0bGJfdm1kZWxldGVfbGlzdCgpIHNraXBzXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTA0LVxcdCAqIHVubWFwcGluZyBpdCBkdWUgdG8gZmFpbCB0byBncmFiIGxvY2suICBVbm1hcCAoYWdhaW4pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDY9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02MTctXFx0aWYgKG1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjYxODpcXHRcXHRodWdldGxiX3ZtZGVsZXRlX2xpc3QoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfbW1hcCwgcGdvZmYsIDAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjE5LVxcdFxcdFxcdFxcdCAgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTY0Nz1zdGF0aWMgbG9uZyBodWdldGxiZnNfcHVuY2hfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjc4LVxcdFxcdGlmIChtYXBwaW5nX21hcHBlZChtYXBwaW5nKSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2Nzk6XFx0XFx0XFx0aHVnZXRsYl92bWRlbGV0ZV9saXN0KFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX21tYXAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjgwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGhvbGVfc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjQuMzExNDg5NDM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDQ2MjMxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgVk0gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQncyBnb3QgcmVzdHJpY3RlZCBzY29wZSBhbmQgaXMgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlbiBJIG5vdGUgdGhhdCBib3RoIGBodWdldGxiX3ZtdHJ1bmNhdGVgIGFuZCBgaHVnZXRsYmZzX3B1bmNoX2hvbGVgIGFyZSBjYWxsaW5nIGl0LiBCb3RoIG9mICp0aG9zZSogZnVuY3Rpb25zIGFyZSBhbHNvIGBzdGF0aWNgLlxuXG5UaGUgZmFjdCB0aGF0IGBodWdldGxiZnNfcHVuY2hfaG9sZWAgaXMgYHN0YXRpY2Agc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBmaWxlIHN5c3RlbSBvcGVyYXRpb24uIGBodWdldGxiX3ZtdHJ1bmNhdGVgIGFsc28gYmVpbmcgc3RhdGljIGlzIGFub3RoZXIgaGludCB0aGF0IGl0IG1pZ2h0IGJlIGNsb3NlbHkgdGllZCB0byB0aGUgSHVnZVRMQidzIGludGVybmFsIG1hbmFnZW1lbnQsIG5vdCBhIGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbi5cblxuR2l2ZW4gdGhlIGNvbm5lY3Rpb25zIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvYCBuZXh0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGluIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCBvZiB3aGF0IEknbSBsb29raW5nIGF0LiBJdCBzZWVtcyB2ZXJ5IGNsb3NlbHkgcmVsYXRlZCB0byBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjI3LjcxNjExNTU4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0NDA1MDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX3VubWFwX2ZpbGVfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFfb2Zmc2V0X2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBlbmQpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zNzgtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Mzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTM4MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ5Nz1zdGF0aWMgdm9pZCByZW1vdmVfaW5vZGVfc2luZ2xlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTAtXFx0aWYgKHVubGlrZWx5KGZvbGlvX21hcHBlZChmb2xpbykpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUxMTpcXHRcXHRodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oaCwgbWFwcGluZywgZm9saW8sIGluZGV4KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjMxLjM2MDE3MjI0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA4MzEyNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gIGZ1bmN0aW9uIOKAkyBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0J3Mgc3RhdGljLiBUaGF0IG5hcnJvd3MgbXkgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBsb29rIGZvciBrZXkgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSAqb3IgaW5kaXJlY3RseSogaW52b2x2ZWQgaW4gdGhlIHVubWFwcGluZyBwcm9jZXNzIG9mIGh1Z2UgcGFnZXMuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uOlxuXG4qICAgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgXG4qICAgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYFxuXG5JJ2xsIGFsc28gY29uc2lkZXIgdGhlc2UsIGFzIHRoZXkgbG9vayBwcm9taXNpbmc6XG5cbiogICBgX196YXBfdm1hX3JhbmdlYCDigJMgdGhvdWdoLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBiZWluZyBzdGF0aWMgYXMgd2VsbCwgd2l0aGluIGBtbS9tZW1vcnkuY2AuXG4qICAgYHphcF9wYWdlX3JhbmdlX3NpbmdsZWAg4oCTIHRoaXMgb25lIGNhbGxzIGBfX3phcF92bWFfcmFuZ2VgLCBzbyBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgZW50cnkgcG9pbnRcbiogICBgdW5tYXBfdm1hc2Ag4oCTIGl0IGxvb2tzIGxpa2UgdGhpcyBtYXkgdXNlIGBfX3phcF92bWFfcmFuZ2VgIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlclxuXG5HaXZlbiB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGUgaW5pdGlhbCBmdW5jdGlvbiwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY2FsbGVycyBvZiBgX196YXBfdm1hX3JhbmdlYC4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MzUuMTY4NDg3NTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDEyMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9femFwX3ZtYV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yMDU2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6YXBfcDRkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMDc0LVxcbm1tL21lbW9yeS5jOjIwNzU6c3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTIwNzYtXFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tZW1vcnkuYz0yMTI0PWludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vbWVtb3J5LmMtMjEzOC1cXHR9XFxubW0vbWVtb3J5LmM6MjEzOTpcXHRfX3phcF92bWFfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCBcXHUwMDI2ZGV0YWlscyk7XFxubW0vbWVtb3J5LmMtMjE0MC1cXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXFx1MDAyNnJhbmdlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIxNjE9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG4tLVxcbm1tL21lbW9yeS5jLTIxNzctXFx0XFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQpO1xcbm1tL21lbW9yeS5jOjIxNzg6XFx0XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBcXHUwMDI2ZGV0YWlscyk7XFxubW0vbWVtb3J5LmMtMjE3OS1cXHRcXHRodWdldGxiX3phcF9lbmQodm1hLCBcXHUwMDI2ZGV0YWlscyk7XFxuLS1cXG5tbS9tZW1vcnkuYz0yMTk5PXZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjE5LVxcdCAqL1xcbm1tL21lbW9yeS5jOjIyMjA6XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xcbm1tL21lbW9yeS5jLTIyMjEtXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjM1LjI1OTUxMzg5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU2NzA2ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEknbSByZXZpc2l0aW5nIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIGEgZmV3IHRoaW5ncyBhcmUgaW1tZWRpYXRlbHkgc3RhbmRpbmcgb3V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBzZWUgdGhhdCBgdW5tYXBfdm1hc2AsIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCwgYW5kIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGFyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBzaW5jZSB0aG9zZSBhcmVuJ3Qgc3RhdGljLCB0aGV5IGNvdWxkIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlaXIgaW1tZWRpYXRlIHNjb3BlLiBOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY2FsbGVycyBvZiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBzaW5jZSB0aGF0J3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb25zIEkganVzdCBvYnNlcnZlZCwgdG8gc2VlIGhvdyBhbmQgd2hlcmUgdGhhdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTozOC42MTYyMjQxMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjI4OTAwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM3OT1zdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxNi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0MTc6XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTgtXFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTEtXFx0XFx0aWYgKGh1Z2V0bGJfdm1hX21hcHNfcGZuKHZtYSwgdl9zdGFydCwgcGZuKSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTI6XFx0XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTMtXFx0XFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00NjM9aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCByYl9yb290X2NhY2hlZCAqcm9vdCwgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDgzOlxcdFxcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgdl9zdGFydCwgdl9lbmQsIE5VTEwsIHphcF9mbGFncyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg0LVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg3LVxcdFxcdCAqIHZtYXMuICBUaGVyZWZvcmUsIGxvY2sgaXMgbm90IGhlbGQgd2hlbiBjYWxsaW5nXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg4OlxcdFxcdCAqIHVubWFwX2h1Z2VwYWdlX3JhbmdlIGZvciBwcml2YXRlIHZtYXMuXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg5LVxcdFxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI3PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjgtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTI5OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxLVxcdFxcdFxcdCAgc3RydWN0IGZvbGlvICosIHphcF9mbGFnc190KTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzI6dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMzLVxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD00MzE9c3RhdGljIGlubGluZSBsb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MzgtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDM5OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQwLVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaHVnZXRsYi5jPTUwODA9aW50IG1vdmVfaHVnZXRsYl9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01MTQ0LVxcbm1tL2h1Z2V0bGIuYzo1MTQ1OnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNTE0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmM9NTMxNz12b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzNDMtXFxubW0vaHVnZXRsYi5jOjUzNDQ6dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9odWdldGxiLmMtNTM0NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzNTYtXFxubW0vaHVnZXRsYi5jOjUzNTc6XFx0X191bm1hcF9odWdlcGFnZV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIHN0YXJ0LCBlbmQsXFxubW0vaHVnZXRsYi5jLTUzNTgtXFx0XFx0XFx0ICAgICAgIGZvbGlvLCB6YXBfZmxhZ3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUzNzA9c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzODktXFx0ICogdGhpcyBtYXBwaW5nIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlIFZNQXMsXFxubW0vaHVnZXRsYi5jOjUzOTA6XFx0ICogX191bm1hcF9odWdlcGFnZV9yYW5nZSgpIGlzIGNhbGxlZCBhcyB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGRcXG5tbS9odWdldGxiLmMtNTM5MS1cXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDEzLVxcdFxcdGlmICghaXNfdm1hX3Jlc3Zfc2V0KGl0ZXJfdm1hLCBIUEFHRV9SRVNWX09XTkVSKSlcXG5tbS9odWdldGxiLmM6NTQxNDpcXHRcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZShpdGVyX3ZtYSwgYWRkcmVzcyxcXG5tbS9odWdldGxiLmMtNTQxNS1cXHRcXHRcXHRcXHRcXHQgICAgIGFkZHJlc3MgKyBodWdlX3BhZ2Vfc2l6ZShoKSxcXG4tLVxcbm1tL21lbW9yeS5jPTIwNzU9c3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMjA5Ny1cXHRcXHRcXHRyZXR1cm47XFxubW0vbWVtb3J5LmM6MjA5ODpcXHRcXHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xcbm1tL21lbW9yeS5jLTIwOTktXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6NDIuODc5MTIzMzc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzA2MDIyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipEZWNvbnN0cnVjdGluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBodWdlIHBhZ2VzIGdldCB1bm1hcHBlZC4gVGhlIGNvcmUgZnVuY3Rpb25zIEknbSB6ZXJvaW5nIGluIG9uIGFyZSBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIHdoaWNoIGFwcGVhcnMgdG8gaGFuZGxlIHRoZSBidWxrIG9mIHRoZSB3b3JrLCBhbmQgaXRzIGNvdW50ZXJwYXJ0IGB1bm1hcF9odWdlcGFnZV9yYW5nZWAuIE1ha2VzIHNlbnNlLCB0aGV5IHNvdW5kIGxpa2UgdGhlIGhlYXZ5IGxpZnRlcnMuIEFuZCBvZiBjb3Vyc2UsIHRoZXJlJ3MgYHVubWFwX3ZtYXNgLCB3aGljaCBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSBsb29raW5nIGF0IGNhbGxlcnMgb2YgYHVubWFwX3ZtYXNgIGFzIHRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjQ2LjAwOTcyOTg4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMjMxMjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bm1hcF92bWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTUzNT1XZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU0OS0gICAgICAgICAgICAgVk1BcywgOmM6ZnVuYzpgIXZtc19jbGVhcl9wdGVzYCBoYXMgYSB3aW5kb3cgb2YgdGltZSBiZXR3ZWVuXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo1NTA6ICAgICAgICAgICAgIHphcHBpbmcgKHZpYSA6YzpmdW5jOmAhdW5tYXBfdm1hc2ApIGFuZCBmcmVlaW5nIHBhZ2UgdGFibGVzICh2aWFcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU1MS0gICAgICAgICAgICAgOmM6ZnVuYzpgIWZyZWVfcGd0YWJsZXNgKSwgd2hlcmUgdGhlIFZNQSBpcyBzdGlsbCB2aXNpYmxlIGluIHRoZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMwNzY9c3RydWN0IHphcF9kZXRhaWxzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0zMDkwLSNkZWZpbmUgIFpBUF9GTEFHX0RST1BfTUFSS0VSICAgICAgICAoKF9fZm9yY2UgemFwX2ZsYWdzX3QpIEJJVCgwKSlcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzA5MTovKiBTZXQgaW4gdW5tYXBfdm1hcygpIHRvIGluZGljYXRlIGEgZmluYWwgdW5tYXAgY2FsbC4gIE9ubHkgdXNlZCBieSBodWdldGxiICovXFxuaW5jbHVkZS9saW51eC9tbS5oLTMwOTItI2RlZmluZSAgWkFQX0ZMQUdfVU5NQVAgICAgICAgICAgICAgICgoX19mb3JjZSB6YXBfZmxhZ3NfdCkgQklUKDEpKVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xODc9c3RhdGljIGlubGluZSB2b2lkIHZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMTk5LVxcbm1tL2ludGVybmFsLmg6MjAwOi8qIHVubWFwX3ZtYXMgaXMgaW4gbW0vbWVtb3J5LmMgKi9cXG5tbS9pbnRlcm5hbC5oOjIwMTp2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKTtcXG5tbS9pbnRlcm5hbC5oLTIwMi1cXG4tLVxcbm1tL21lbW9yeS5jPTIxMjQ9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYy0yMTQ1LS8qKlxcbm1tL21lbW9yeS5jOjIxNDY6ICogdW5tYXBfdm1hcyAtIHVubWFwIGEgcmFuZ2Ugb2YgbWVtb3J5IGNvdmVyZWQgYnkgYSBsaXN0IG9mIHZtYSdzXFxubW0vbWVtb3J5LmMtMjE0Ny0gKiBAdGxiOiBhZGRyZXNzIG9mIHRoZSBjYWxsZXIncyBzdHJ1Y3QgbW11X2dhdGhlclxcbi0tXFxubW0vbWVtb3J5LmMtMjE1NS0gKlxcbm1tL21lbW9yeS5jOjIxNTY6ICogdW5tYXBfdm1hcygpIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgZmx1c2ggdGhlIHdob2xlIHVubWFwcGVkIGFkZHJlc3NcXG5tbS9tZW1vcnkuYzoyMTU3OiAqIHJhbmdlIGFmdGVyIHVubWFwX3ZtYXMoKSByZXR1cm5zLiAgU28gdGhlIG9ubHkgcmVzcG9uc2liaWxpdHkgaGVyZSBpcyB0b1xcbm1tL21lbW9yeS5jOjIxNTg6ICogZW5zdXJlIHRoYXQgYW55IHRodXMtZmFyIHVubWFwcGVkIHBhZ2VzIGFyZSBmbHVzaGVkIGJlZm9yZSB1bm1hcF92bWFzKClcXG5tbS9tZW1vcnkuYy0yMTU5LSAqIGRyb3BzIHRoZSBsb2NrIGFuZCBzY2hlZHVsZXMuXFxubW0vbWVtb3J5LmMtMjE2MC0gKi9cXG5tbS9tZW1vcnkuYzoyMTYxOnZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxubW0vbWVtb3J5LmMtMjE2Mi17XFxuLS1cXG5tbS9tbWFwLmM9MTI3Mz12b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL21tYXAuYy0xMjk5LVxcdC8qIFVzZSBVTE9OR19NQVggaGVyZSB0byBlbnN1cmUgYWxsIFZNQXMgaW4gdGhlIG1tIGFyZSB1bm1hcHBlZCAqL1xcbm1tL21tYXAuYzoxMzAwOlxcdHVubWFwX3ZtYXMoXFx1MDAyNnRsYiwgXFx1MDAyNnVubWFwKTtcXG5tbS9tbWFwLmMtMTMwMS1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4tLVxcbm1tL3ZtYS5jPTQ4MT12b2lkIHVubWFwX3JlZ2lvbihzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxuLS1cXG5tbS92bWEuYy00ODctXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG5tbS92bWEuYzo0ODg6XFx0dW5tYXBfdm1hcyhcXHUwMDI2dGxiLCB1bm1hcCk7XFxubW0vdm1hLmMtNDg5LVxcdG1hc19zZXQodW5tYXAtXFx1MDAzZW1hcywgdW5tYXAtXFx1MDAzZXRyZWVfcmVzZXQpO1xcbi0tXFxubW0vdm1hLmM9MTMwNz1zdGF0aWMgdm9pZCB2bXNfY2xlYW5fdXBfYXJlYShzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG4tLVxcbm1tL3ZtYS5jLTEzMjEtLypcXG5tbS92bWEuYzoxMzIyOiAqIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcygpIC0gRmluaXNoIHRoZSBtdW5tYXAoKSBvcGVyYXRpb25cXG5tbS92bWEuYy0xMzIzLSAqIEB2bXM6IFRoZSB2bWEgbXVubWFwIHN0cnVjdFxcbi0tXFxubW0vdm1hLmMtMTMyOS0gKi9cXG5tbS92bWEuYzoxMzMwOnN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG5tbS92bWEuYy0xMzMxLVxcdFxcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcXG4tLVxcbm1tL3ZtYS5jPTEzNzc9c3RhdGljIHZvaWQgcmVhdHRhY2hfdm1hcyhzdHJ1Y3QgbWFfc3RhdGUgKm1hc19kZXRhY2gpXFxuLS1cXG5tbS92bWEuYy0xMzg4LS8qXFxubW0vdm1hLmM6MTM4OTogKiB2bXNfZ2F0aGVyX211bm1hcF92bWFzKCkgLSBQdXQgYWxsIFZNQXMgd2l0aGluIGEgcmFuZ2UgaW50byBhIG1hcGxlIHRyZWVcXG5tbS92bWEuYy0xMzkwLSAqIGZvciByZW1vdmFsIGF0IGEgbGF0ZXIgZGF0ZS4gIEhhbmRsZXMgc3BsaXR0aW5nIGZpcnN0IGFuZCBsYXN0IGlmIG5lY2Vzc2FyeVxcbi0tXFxubW0vdm1hLmMtMTM5Ny0gKi9cXG5tbS92bWEuYzoxMzk4OnN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG5tbS92bWEuYy0xMzk5LVxcdFxcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcXG4tLVxcbm1tL3ZtYS5jPTE1ODM9aW50IGRvX3ZtaV9hbGlnbl9tdW5tYXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3ZtYS5jLTE1OTQtXFx0aW5pdF92bWFfbXVubWFwKFxcdTAwMjZ2bXMsIHZtaSwgdm1hLCBzdGFydCwgZW5kLCB1ZiwgdW5sb2NrKTtcXG5tbS92bWEuYzoxNTk1OlxcdGVycm9yID0gdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhcXHUwMDI2dm1zLCBcXHUwMDI2bWFzX2RldGFjaCk7XFxubW0vdm1hLmMtMTU5Ni1cXHRpZiAoZXJyb3IpXFxuLS1cXG5tbS92bWEuYy0xNjAzLVxcdC8qIFBvaW50IG9mIG5vIHJldHVybiAqL1xcbm1tL3ZtYS5jOjE2MDQ6XFx0dm1zX2NvbXBsZXRlX211bm1hcF92bWFzKFxcdTAwMjZ2bXMsIFxcdTAwMjZtYXNfZGV0YWNoKTtcXG5tbS92bWEuYy0xNjA1LVxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1hLmM9MjM0MT1zdGF0aWMgYm9vbCBhY2NvdW50YWJsZV9tYXBwaW5nKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuLS1cXG5tbS92bWEuYy0yMzU3LS8qXFxubW0vdm1hLmM6MjM1ODogKiB2bXNfYWJvcnRfbXVubWFwX3ZtYXMoKSAtIFVuZG8gYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGFuIGFib3J0ZWQgbXVubWFwKClcXG5tbS92bWEuYy0yMzU5LSAqIG9wZXJhdGlvbi5cXG4tLVxcbm1tL3ZtYS5jLTIzNjctICovXFxubW0vdm1hLmM6MjM2ODpzdGF0aWMgdm9pZCB2bXNfYWJvcnRfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXFxubW0vdm1hLmMtMjM2OS1cXHRcXHRzdHJ1Y3QgbWFfc3RhdGUgKm1hc19kZXRhY2gpXFxuLS1cXG5tbS92bWEuYy0yMzg2LVxcdC8qIENsZWFuIHVwIHRoZSBpbnNlcnRpb24gb2YgdGhlIHVuZm9ydHVuYXRlIGdhcCAqL1xcbm1tL3ZtYS5jOjIzODc6XFx0dm1zX2NvbXBsZXRlX211bm1hcF92bWFzKHZtcywgbWFzX2RldGFjaCk7XFxubW0vdm1hLmMtMjM4OC19XFxuLS1cXG5tbS92bWEuYz0yNDIwPXN0YXRpYyBpbnQgX19tbWFwX3NldHVwKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXFxuLS1cXG5tbS92bWEuYy0yNDM4LVxcdFxcdC8qIFByZXBhcmUgdG8gdW5tYXAgYW55IGV4aXN0aW5nIG1hcHBpbmcgaW4gdGhlIGFyZWEgKi9cXG5tbS92bWEuYzoyNDM5OlxcdFxcdGVycm9yID0gdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyh2bXMsIFxcdTAwMjZtYXAtXFx1MDAzZW1hc19kZXRhY2gpO1xcbm1tL3ZtYS5jLTI0NDAtXFx0XFx0aWYgKGVycm9yKSB7XFxuLS1cXG5tbS92bWEuYz0yNjEwPXN0YXRpYyB2b2lkIF9fbW1hcF9jb21wbGV0ZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3ZtYS5jLTI2MTYtXFx0LyogVW5tYXAgYW55IGV4aXN0aW5nIG1hcHBpbmcgaW4gdGhlIGFyZWEuICovXFxubW0vdm1hLmM6MjYxNzpcXHR2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoXFx1MDAyNm1hcC1cXHUwMDNldm1zLCBcXHUwMDI2bWFwLVxcdTAwM2VtYXNfZGV0YWNoKTtcXG5tbS92bWEuYy0yNjE4LVxcbi0tXFxubW0vdm1hLmM9MjczND1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS92bWEuYy0yODA1LVxcdFxcdGZwdXQobWFwLmZpbGUpO1xcbm1tL3ZtYS5jOjI4MDY6XFx0dm1zX2Fib3J0X211bm1hcF92bWFzKFxcdTAwMjZtYXAudm1zLCBcXHUwMDI2bWFwLm1hc19kZXRhY2gpO1xcbm1tL3ZtYS5jLTI4MDctXFx0cmV0dXJuIGVycm9yO1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTM4OT1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2hpd2F0ZXJfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzkyLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaDozOTM6c3RhdGljIGlubGluZSB2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTo0OS44MTIwNTA1NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjk5OTgzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvcmUgTWVtb3J5IFVubWFwcGluZyBGdW5jdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IHVubWFwcGluZyB3aXRoaW4gdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgdG8gZGV0ZXJtaW5lIHRoZSBtb3N0IHJlbGV2YW50IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMuIGB1bm1hcF92bWFzYCBpcyBjbGVhcmx5IGNlbnRyYWw7IGl0J3MgY2FsbGVkIGJ5IGBleGl0X21tYXBgIGFuZCBgdW5tYXBfcmVnaW9uYCwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgcmVhY2hlZCB0aHJvdWdoIGB2bXNfY29tcGxldGVfbXVubWFwX3ZtYXNgLCBpdHNlbGYgY2FsbGVkIGJ5IGBkb192bWlfYWxpZ25fbXVubWFwYCBhbmQgYF9fbW1hcF9jb21wbGV0ZWAuIFNvLCBgdW5tYXBfdm1hc2AgaXMgYSBwcmltYXJ5IHBsYXllciBmb3IgZ2VuZXJhbCBWTUEgdW5tYXBwaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaHVnZSBwYWdlIHVubWFwcGluZy4gSSBsb29rZWQgYXQgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBhbmQgYHVubWFwX3JlZl9wcml2YXRlYC4gYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBpcyByZWFjaGVkIHRocm91Z2ggYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gLiBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBpcyBjYWxsZWQgYnkgYGh1Z2V0bGJfdm10cnVuY2F0ZWAgYW5kIGBodWdldGxiZnNfcHVuY2hfaG9sZWAuIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gIGlzIGNhbGxlZCBieSBgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpb2AuIFRoZXJlZm9yZSBJIHNob3VsZCBmb2N1cyBvbiB0aGUgaHVnZSBwYWdlIHVubWFwcGluZyBjb2RlIHBhdGggYXMgd2VsbC5cblxuQmFzZWQgb24gdGhpcywgbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGlzOlxuKiAgIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYFxuKiAgIGB1bm1hcF9odWdlcGFnZV9yYW5nZWBcbiogICBgdW5tYXBfdm1hc2BcbiogICBgemFwX3ZtYV9mb3JfcmVhcGluZ2BcbiogICBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYFxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBzeW1ib2xzIGFyZSBpbmxpbmVkLCBhcyBpbmxpbmVkIGZ1bmN0aW9ucyBhcmUgaGFyZGVyIHRvIHRhcmdldCBkaXJlY3RseSBmb3IgZnV6emluZy4gSSBjYW4gcnVsZSBvdXQgdGhlIGlubGluZWQgZnVuY3Rpb25zIHdpdGggc2ltcGxlIGNoZWNrcy4gQWxsIHRoZSBzeW1ib2xzIGFib3ZlIGFyZSBub3QgaW5saW5lZCBleGNlcHQgZm9yIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgIGFuZCBgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvYC4gVGhleSBhcmUgc3RhdGljLCBzbyB0aGV5ICptaWdodCogYmUgaW5saW5lZCwgYnV0IEkgd2lsbCBzdGlsbCBjb25zaWRlciB0aGVtLlxuXG5TbywgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBhcmU6XG4qICAgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgXG4qICAgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYFxuKiAgIGB1bm1hcF92bWFzYFxuXG5OZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCB0byByZWFjaCB0aGVzZSBzeW1ib2xzLiBgSFVHRVRMQkZTYCBpcyB0aGUgbWFpbiBvbmU7IGBIVUdFVExCX1BBR0VgIGlzIGFsc28gbmVlZGVkLCBidXQgZGVmYXVsdHMgdG8gYEhVR0VUTEJGU2AsIHNvIGBIVUdFVExCRlNgIGlzIHN1ZmZpY2llbnQuXG5cbk15IHJlYXNvbmluZyBmb3IgdGFyZ2V0aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgcGFydGljdWxhcmx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGFzc2VydGlvbiBpcyB2YWx1YWJsZSwgYXMgZnV6emluZyBpcyBpbnRlbmRlZCB0byBjYXVzZSBlcnJvcnMuXG5cblRodXMsIG15IGZ1enppbmcgdGFyZ2V0IGxpc3QgaXM6XG5cbiogICBgX191bm1hcF9odWdlcGFnZV9yYW5nZWBcbiogICBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgXG4qICAgYHVubWFwX3ZtYXNgXG5cbkNvbmZpZ3VyYXRpb246IGBIVUdFVExCRlNgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQ1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjU5Ljk4MjA3NTU4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NDExNjc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNjowNC4wNTYxOTczMDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyOTk5NTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIHRoZSBIdWdlVExCRlMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgSFVHRVRMQkZTYOKApiB0aGF0J3MgdGhlIG9uZS4gTm8gZG91YnQgYWJvdXQgaXQsIHRoZSBjb25maWd1cmF0aW9uIHNlZW1zIGNvcnJlY3QuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBCZWZvcmUgSSBtb3ZlIGZ1cnRoZXIsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGNydWNpYWwuIExldCdzIGRpZyBpbnRvIHRoZSBjb2Rl4oCmIExldCBtZSBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSBmdW5jdGlvbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLiBJZiBpdCB3ZXJlIHN0YXRpYywgaXQgd291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNjb3BlIGFuZCBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGNvbmZpcm1hdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNjowNy4yODYxOTc4NjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTI4MzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE0NC1cXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTUxNDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNjowOC4xNDE0ODgxMDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxOTIyNjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQXNzZXNzaW5nIHRoZSBOYXR1cmUgb2YgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCoqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgaXMgY2xlYXJseSBkeW5hbWljLCBub3QgYSBmaXhlZCBzdGF0ZS4gVGhhdCdzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBrZXkgY29tcG9uZW50OiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBoZXJlLiBJcyB0aGlzIGZ1bmN0aW9uLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlIG9yIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoLCBpbmhlcmVudGx5IHN0YXRpYyBvciBkb2VzIGl0cyBiZWhhdmlvciBjaGFuZ2UgZHluYW1pY2FsbHk/IEFyZSB0aGVyZSBleHRlcm5hbCBmYWN0b3JzLCBydW50aW1lIGNvbmRpdGlvbnMsIG9yIGRhdGEgZGVwZW5kZW5jaWVzIHRoYXQgZGljdGF0ZSBpdHMgb3BlcmF0aW9uPyBPciBpcyBpdCBwcmVkaWN0YWJsZSwgdW5jaGFuZ2VkIGJhc2VkIG9uIHRob3NlIGV4dGVybmFsIGluZmx1ZW5jZXM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzICpkZWZpbml0ZWx5KiBub3Qgc3RhdGljYWxseSBkZWZpbmVkLiBLbm93aW5nIHRoaXMgd2lsbCBkaXJlY3RseSBpbXBhY3QgaG93IEkgYXBwcm9hY2ggZGVidWdnaW5nIGFuZC9vciBvcHRpbWl6aW5nIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE2OjExLjQ2MDcyNjc0N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxOTE4MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz01MzE3PXZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM0My1cXG5tbS9odWdldGxiLmM6NTM0NDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2h1Z2V0bGIuYy01MzQ1LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE2OjExLjU5MjY1MDM5NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYwNjEyMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRHluYW1pc20qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBjb25jZXB0IGlzbid0IGluaGVyZW50bHkgc3RhdGljIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB0aGlzOiBjYW4gd2UgZGVmaW5pdGl2ZWx5IGNvbmZpcm0gdGhhdCB0aGUgYmVoYXZpb3Igb2YgYHVubWFwX3ZtYXNgIGlzbid0IHN0YXRpYyBpbiBpdHMgaW1wbGVtZW50YXRpb24/IFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gcG9zc2Vzc2VzIHRoZSBjYXBhY2l0eSB0byBhZGFwdCB0byBjaGFuZ2luZyBjb25kaXRpb25zIG9yIGV4dGVybmFsIGlucHV0cy4gQSBjdXJzb3J5IHJldmlldyB3b24ndCBzdWZmaWNlOyB3ZSBoYXZlIHRvIGRlbHZlIGRlZXBlciB0byB1bmRlcnN0YW5kIGlmIGl0cyBpbnRlcm5hbCB3b3JraW5ncyBkeW5hbWljYWxseSBhZGp1c3QgYmFzZWQgb24gdGhlIHJ1bnRpbWUgY29udGV4dC4gSXMgaXQgdHJ1bHkgcmVhY3RpdmUsIG9yIGRvZXMgaXRzIGJlaGF2aW9yIHJlbWFpbiBmaXhlZCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBzdGF0ZT8gVGhpcyBpbnZlc3RpZ2F0aW9uIGRlbWFuZHMgYSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgc3lzdGVtIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDMxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTY6MTQuNzUzMjY1MzYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzMTAyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB1bm1hcF92bWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTIxMjQ9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYy0yMTYwLSAqL1xcbm1tL21lbW9yeS5jOjIxNjE6dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG5tbS9tZW1vcnkuYy0yMTYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTY6MTQuODc4NTgxODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxODcwNjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gcHJvY2Vzc2luZyB0aGlzIGluZm9ybWF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgc2l0dWF0aW9uIGlzICpub3QqIGEgc3RhdGljIG9uZS4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIgd2l0aCBhbnkgYW5hbHlzaXMgb3IgYWN0aW9uLiBJdCdzIGEga2V5IG9ic2VydmF0aW9uLCBhbmQgdGhlIGZvdW5kYXRpb24gb2Ygd2hhdGV2ZXIgc3RlcHMgSSB0YWtlIG5leHQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBkZWxpdmVyIHRoZSByZXN1bHRzIGluIGEgcHJlY2lzZSBtYW5uZXIuIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgaXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9yIGNvbW11bmljYXRpbmcgdGhlIGZpbmRpbmdzIGVmZmVjdGl2ZWx5LiBJJ2xsIG1ha2Ugc3VyZSBpdCBpcyBhY2N1cmF0ZSwgd2VsbC1mb3JtYXR0ZWQsIGFuZCBlYXNpbHkgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NTcsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTY6MTguNDk3MjkwOTMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5ODE0MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3VubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJ1bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICAgIFwidW5tYXBfdm1hc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIHJlc3RvcmluZyB0aGUgcmVzZXJ2YXRpb24gZm9yIGFub255bW91cyBwYWdlcyBpbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaW4gYG1tL2h1Z2V0bGIuY2AuIEl0IGFsc28gYWRkcyBhbiBhc3NlcnRpb24gYGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGh1Z2V0bGIgcGFnZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdW5tYXBwaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtdW5tYXBgIG9yIGZpbGUgdHJ1bmNhdGlvbi9wdW5jaCBob2xlIG9wZXJhdGlvbnMgb24gaHVnZXRsYmZzIGZpbGVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcInVubWFwX3ZtYXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBodWdldGxiIHBhZ2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVubWFwcGluZyBvcGVyYXRpb25zLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbXVubWFwYCBvciBmaWxlIHRydW5jYXRpb24vcHVuY2ggaG9sZSBvcGVyYXRpb25zIG9uIGh1Z2V0bGJmcyBmaWxlcy4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 01:41:58 +0000 UTC FinishedAt: 2026-07-30 02:16:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c05e3f09bd3009658eca5ccd850d3396f513cec1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c05e3f09bd3009658eca5ccd850d3396f513cec1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "1ed754ad-e343-4725-a94b-3ecc67fa64a0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__unmap_hugepage_range", "unmap_hugepage_range", "unmap_vmas" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfdm1hcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1MThhNmI2YTM1ZTE3YTczNzgwODBjOTNhZDVmNzUzODcwMTBlZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwMjoxNDo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjc3MDIyYzRjNTlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTUxNTcsNiAmIzQzOzUxNTcsNyBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRib29sIGFkanVzdF9yZXNlcnZhdGlvbjtcbiBcdHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyX21hc2s7XG4gXG4mIzQzO1x0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiBcdFdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTtcbiBcdEJVR19PTihzdGFydCBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKTtcbiBcdEJVR19PTihlbmQgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSk7XG5AQCAtNTI0OCw3ICYjNDM7NTI0OSwxMCBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZSwgb3RoZXJ3aXNlIHRoZVxuLVx0XHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuXG4mIzQzO1x0XHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuIFJlc3RvcmUgb25seSBvbiB0aGVcbiYjNDM7XHRcdCAqIGxhc3QgdW5tYXAsIG90aGVyd2lzZSB0aGUgb3duZXIgY291bGQgZW1wdHkgaXRzIHJlc3YgbWFwXG4mIzQzO1x0XHQgKiB3aGlsZSB0aGUgZm9saW8gaXMgc3RpbGwgbWFwcGVkIGJ5IGEgY2hpbGQuIE5vdGUgdGhhdCBob2xkaW5nXG4mIzQzO1x0XHQgKiBpX21tYXBfbG9ja193cml0ZSBpcyBuZWVkZWQgdG8gY2hlY2sgdGhlIG51bWJlciBvZiBtYXBwaW5ncy5cbiBcdFx0ICogSWYgdGhlcmUgd2UgYXJlIGZyZWVpbmcgYSBzdXJwbHVzLCBkbyBub3Qgc2V0IHRoZSByZXN0b3JlXG4gXHRcdCAqIHJlc2VydmF0aW9uIGJpdC5cbiBcdFx0ICovXG5AQCAtNTI1Niw3ICYjNDM7NTI2MCw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRpZiAoIWgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzIFx1MDAyNlx1MDAyNiBfX3ZtYV9wcml2YXRlX2xvY2sodm1hKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbiYjNDM7XHRcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuIFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG4gXHRcdFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xuIFx0XHRcdGFkanVzdF9yZXNlcnZhdGlvbiA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfdm1hcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MThhNmI2YTM1ZTE3YTczNzgwODBjOTNhZDVmNzUzODcwMTBlZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMjoxNDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBlOTNjNGQyNDU2YWE0Li43NzAyMmM0YzU5YWZhIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC01MTU3LDYgJiM0Mzs1MTU3LDcgQEAgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWJvb2wgYWRqdXN0X3Jlc2VydmF0aW9uOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyX21hc2s7CiAKJiM0MzsJaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcpOwogCVdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTsKIAlCVUdfT04oc3RhcnQgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpKTsKIAlCVUdfT04oZW5kICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoKSk7CkBAIC01MjQ4LDcgJiM0Mzs1MjQ5LDEwIEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAogCQkvKgogCQkgKiBSZXN0b3JlIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2UsIG90aGVyd2lzZSB0aGUKLQkJICogYmFja2luZyBwYWdlIGNvdWxkIGJlIHN0b2xlbiBieSBzb21lb25lLgomIzQzOwkJICogYmFja2luZyBwYWdlIGNvdWxkIGJlIHN0b2xlbiBieSBzb21lb25lLiBSZXN0b3JlIG9ubHkgb24gdGhlCiYjNDM7CQkgKiBsYXN0IHVubWFwLCBvdGhlcndpc2UgdGhlIG93bmVyIGNvdWxkIGVtcHR5IGl0cyByZXN2IG1hcAomIzQzOwkJICogd2hpbGUgdGhlIGZvbGlvIGlzIHN0aWxsIG1hcHBlZCBieSBhIGNoaWxkLiBOb3RlIHRoYXQgaG9sZGluZwomIzQzOwkJICogaV9tbWFwX2xvY2tfd3JpdGUgaXMgbmVlZGVkIHRvIGNoZWNrIHRoZSBudW1iZXIgb2YgbWFwcGluZ3MuCiAJCSAqIElmIHRoZXJlIHdlIGFyZSBmcmVlaW5nIGEgc3VycGx1cywgZG8gbm90IHNldCB0aGUgcmVzdG9yZQogCQkgKiByZXNlcnZhdGlvbiBiaXQuCiAJCSAqLwpAQCAtNTI1Niw3ICYjNDM7NTI2MCw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAogCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJaWYgKCFoLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXMgJmFtcDsmYW1wOyBfX3ZtYV9wcml2YXRlX2xvY2sodm1hKSAmYW1wOyZhbXA7Ci0JCSAgICBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CiYjNDM7CQkgICAgIWZvbGlvX21hcHBlZChmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CiAJCQlmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pOwogCQkJLyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqLwogCQkJYWRqdXN0X3Jlc2VydmF0aW9uID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBodWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgcGxheWluZyB3aXRoIGBtbS9odWdldGxiLmNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhleSYjMzk7dmUgYWRkZWQgYW4gYGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkYCBhc3NlcnRpb24gdG8gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBJbnRlcmVzdGluZywgbGlrZWx5IGZvciBhZGRlZCBzYWZldHkgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGFsc28gdHdlYWtlZCB0aGUgYW5vbnltb3VzIHBhZ2UgcmVzZXJ2YXRpb24gcmVzdG9yYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24sIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZTogdGhlIHRlc3Qgbm93IGNoZWNrcyBmb3IgYCFmb2xpb19tYXBwZWQoZm9saW8pYCAqaW4gYWRkaXRpb24gdG8qIHRoZSBleGlzdGluZyBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBJdCYjMzk7cyBzdWJ0bGUsIGJ1dCBpdCYjMzk7cyBkZWZpbml0ZWx5IGFsdGVyaW5nIHRoZSBiZWhhdmlvciBvZiBob3cgdGhlIHN5c3RlbSByZXN0b3JlcyByZXNlcnZhdGlvbnMgZm9yIGFub255bW91cyBwYWdlcyBkdXJpbmcgdW5tYXBwaW5nIG9mIGh1Z2UgcGFnZXMuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBgaHVnZXRsYmAsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHRha2Ugc2VyaW91c2x5LiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGFuZCBpdHMgY2FsbGVycy4gR290dGEgZGlnIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgYWxsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB3YXlzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgdXNlZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9odWdldGxiLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTUwODA9aW50IG1vdmVfaHVnZXRsYl9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTE0NC1cbm1tL2h1Z2V0bGIuYzo1MTQ1OnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy01MTQ2LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9odWdldGxiLmM9NTM0ND12b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYy01MzU2LVxubW0vaHVnZXRsYi5jOjUzNTc6XHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxubW0vaHVnZXRsYi5jLTUzNTgtXHRcdFx0ICAgICAgIGZvbGlvLCB6YXBfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz01MzcwPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM4OS1cdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxubW0vaHVnZXRsYi5jOjUzOTA6XHQgKiBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkgaXMgY2FsbGVkIGFzIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZFxubW0vaHVnZXRsYi5jLTUzOTEtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcsIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOgoKKipBbmFseXppbmcgdGhlIEh1Z2VwYWdlIFVubWFwcGluZyBQcm9jZXNzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGFuZCBgdW5tYXBfcmVmX3ByaXZhdGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgbm90IG5lY2Vzc2FyaWx5IHVudXN1YWwuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGxheWVyaW5nIG9mIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBmb3IgZWl0aGVyIGFic3RyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgb3Igc3BlY2lmaWMgdXNlIGNhc2VzLiBUaGUga2V5IHF1ZXN0aW9uIGlzOiBkb2VzIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBzdGFuZCBhbG9uZSwgb3IgaXMgaXQgbW9yZSB3aWRlbHkgdXNlZCBvciBleHBvcnRlZD8gVGhlICYjMzQ7ZXhwb3J0ZWQgb3IgdXNlZCBpbiBvdGhlciBwbGFjZXMmIzM0OyBxdWVzdGlvbiBpcyBjcml0aWNhbC4gSXQgaW1wbGllcyBhIGRlZXBlciBhbmFseXNpcyBpcyByZXF1aXJlZCBoZXJlIHRvIGRldGVybWluZSBpdHMgc2NvcGUgYW5kIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJcyBpdCBqdXN0IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0sIG9yIGlzIGl0IHBhcnQgb2YgYSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrIGZvciBodWdlcGFnZXM/IFRoYXQgZGV0ZXJtaW5lcyBpdHMgaW1wb3J0YW5jZSB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCBpbmZvcm1zIGFueSBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgbmVlZGVkLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGF0IHRoZSBhbnN3ZXIgaXMsIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmM9Mzc5PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxNi1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQxNzpcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxOC1cdFx0XHRcdCAgICAgWkFQX0ZMQUdfRFJPUF9NQVJLRVIpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1MS1cdFx0aWYgKGh1Z2V0bGJfdm1hX21hcHNfcGZuKHZtYSwgdl9zdGFydCwgcGZuKSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ1MjpcdFx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDUzLVx0XHRcdFx0XHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz00NjM9aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCByYl9yb290X2NhY2hlZCAqcm9vdCwgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDgyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDgzOlx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg0LVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4Ny1cdFx0ICogdm1hcy4gIFRoZXJlZm9yZSwgbG9jayBpcyBub3QgaGVsZCB3aGVuIGNhbGxpbmdcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4ODpcdFx0ICogdW5tYXBfaHVnZXBhZ2VfcmFuZ2UgZm9yIHByaXZhdGUgdm1hcy5cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4OS1cdFx0ICovXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI3PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyOC1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyOTp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEtXHRcdFx0ICBzdHJ1Y3QgZm9saW8gKiwgemFwX2ZsYWdzX3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMyOnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMzLVx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDMxPXN0YXRpYyBpbmxpbmUgbG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQzOC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQzOTpzdGF0aWMgaW5saW5lIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQwLVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxNDQtXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTE0Ni1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jPTUzMTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM0My1cbm1tL2h1Z2V0bGIuYzo1MzQ0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9odWdldGxiLmMtNTM0NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzU2LVxubW0vaHVnZXRsYi5jOjUzNTc6XHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxubW0vaHVnZXRsYi5jLTUzNTgtXHRcdFx0ICAgICAgIGZvbGlvLCB6YXBfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz01MzcwPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM4OS1cdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxubW0vaHVnZXRsYi5jOjUzOTA6XHQgKiBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkgaXMgY2FsbGVkIGFzIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZFxubW0vaHVnZXRsYi5jLTUzOTEtXHQgKi9cbi0tXG5tbS9odWdldGxiLmMtNTQxMy1cdFx0aWYgKCFpc192bWFfcmVzdl9zZXQoaXRlcl92bWEsIEhQQUdFX1JFU1ZfT1dORVIpKVxubW0vaHVnZXRsYi5jOjU0MTQ6XHRcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2UoaXRlcl92bWEsIGFkZHJlc3MsXG5tbS9odWdldGxiLmMtNTQxNS1cdFx0XHRcdFx0ICAgICBhZGRyZXNzICYjNDM7IGh1Z2VfcGFnZV9zaXplKGgpLFxuLS1cbm1tL21lbW9yeS5jPTIwNzU9c3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTIwOTctXHRcdFx0cmV0dXJuO1xubW0vbWVtb3J5LmM6MjA5ODpcdFx0X191bm1hcF9odWdlcGFnZV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgTlVMTCwgemFwX2ZsYWdzKTtcbm1tL21lbW9yeS5jLTIwOTktXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBVbm1hcHBpbmcgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGh1Z2UgcGFnZXMgYXJlIHVubWFwcGVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBJdCBzZWVtcyB0aGF0IGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBpcyBhIGNydWNpYWwgaW50ZXJuYWwgZnVuY3Rpb24sIGJlaW5nIGNhbGxlZCBieSBgX196YXBfdm1hX3JhbmdlYCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiBgbW0vbWVtb3J5LmNgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gcmV2ZWFscyB0aGF0IGB1bm1hcF9odWdlcGFnZV9yYW5nZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBmdW5jdGlvbnMgaGFuZGxpbmcgSHVnZXRsYmZzLXNwZWNpZmljIG9wZXJhdGlvbnM6IHNwZWNpZmljYWxseSwgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gIHdoaWNoIGxpdmUgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gSSYjMzk7dmUgYWxzbyBub3RlZCBgdW5tYXBfcmVmX3ByaXZhdGVgIGluIGBtbS9odWdldGxiLmNgLgoKVG8ga2VlcCB0aGlzIGNvbmNpc2UsIHRoZXNlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kOiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgLCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24gaXMgcmVsZXZhbnQgaGVyZSwgZ2l2ZW4gdGhhdCB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSBhIHNlYXNvbmVkIGV4cGVydDoKCioqQWRkcmVzc2luZyBIdWdlIFBhZ2VzIGZvciBPcHRpbWFsIFBlcmZvcm1hbmNlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBvcHRpbWl6aW5nIHRoaXMgc3lzdGVtLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IGJvdGggYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgIGFyZSBhYnNvbHV0ZWx5IGVzc2VudGlhbCBjb21wb25lbnRzLiBUaGVyZSYjMzk7cyBubyBkZWJhdGUgaGVyZS4gV2UgbmVlZCB0aGUgZmxleGliaWxpdHkgYW5kIGNvbnRyb2wgdGhhdCBgSFVHRVRMQkZTYCBwcm92aWRlcyBmb3IgbWFuYWdpbmcgdGhlIGh1Z2UgcGFnZSBwb29sLCBhbmQgd2UgbmVlZCB0aGUgcGFnZSBzaXplIGRlZmluaXRpb24gd2l0aCBgSFVHRVRMQl9QQUdFYC4gV2l0aG91dCBib3RoLCB3ZSYjMzk7cmUgaGFtc3RyaW5naW5nIG91cnNlbHZlcyByaWdodCBmcm9tIHRoZSBzdGFydC4gV2Ugc2ltcGx5ICptdXN0KiBoYXZlIGJvdGggZW5hYmxlZCBmb3IgYW55IHNlcmlvdXMgY29uc2lkZXJhdGlvbiBvZiBwZXJmb3JtYW5jZSB0dW5pbmcgd2l0aCBodWdlIHBhZ2VzLiBBbnl0aGluZyBsZXNzIGlzLCBmcmFua2x5LCBqdXN0IG5vdCB3b3J0aCBvdXIgdGltZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgYmVmb3JlIHdlIGRpdmUgYW55IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDEwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFVubWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIHRoZSBrZXkgaGVyZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVubWFwcGluZyBwcm9jZXNzIHdvcmtzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAuIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBhcyBgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKC4uLilgLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBhIHJlZ3VsYXIsIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkLiBOb3cgdG8gbG9vayBhdCB0aGUgcmVsYXRlZCBtZXRob2RzLCBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3ZtZGVsZXRlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmM9NDYyPXN0YXRpYyB2b2lkXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjM6aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCByYl9yb290X2NhY2hlZCAqcm9vdCwgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NjQtXHRcdCAgICAgIHphcF9mbGFnc190IHphcF9mbGFncylcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTc9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUwMi1cdCAqIElmIGZvbGlvIGlzIG1hcHBlZCwgaXQgd2FzIGZhdWx0ZWQgaW4gYWZ0ZXIgYmVpbmdcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUwMzpcdCAqIHVubWFwcGVkIGluIGNhbGxlciBvciBodWdldGxiX3ZtZGVsZXRlX2xpc3QoKSBza2lwc1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTA0LVx0ICogdW5tYXBwaW5nIGl0IGR1ZSB0byBmYWlsIHRvIGdyYWIgbG9jay4gIFVubWFwIChhZ2Fpbilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDY9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjE3LVx0aWYgKG1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjE4Olx0XHRodWdldGxiX3ZtZGVsZXRlX2xpc3QoXHUwMDI2bWFwcGluZy1cdTAwM2VpX21tYXAsIHBnb2ZmLCAwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjE5LVx0XHRcdFx0ICAgICAgWkFQX0ZMQUdfRFJPUF9NQVJLRVIpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTY0Nz1zdGF0aWMgbG9uZyBodWdldGxiZnNfcHVuY2hfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3OC1cdFx0aWYgKG1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njc5Olx0XHRcdGh1Z2V0bGJfdm1kZWxldGVfbGlzdChcdTAwMjZtYXBwaW5nLVx1MDAzZWlfbW1hcCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4MC1cdFx0XHRcdFx0ICAgICAgaG9sZV9zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIFZNIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAuIEl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGdvdCByZXN0cmljdGVkIHNjb3BlIGFuZCBpcyBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBUaGVuIEkgbm90ZSB0aGF0IGJvdGggYGh1Z2V0bGJfdm10cnVuY2F0ZWAgYW5kIGBodWdldGxiZnNfcHVuY2hfaG9sZWAgYXJlIGNhbGxpbmcgaXQuIEJvdGggb2YgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGFsc28gYHN0YXRpY2AuCgpUaGUgZmFjdCB0aGF0IGBodWdldGxiZnNfcHVuY2hfaG9sZWAgaXMgYHN0YXRpY2Agc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGEgZmlsZSBzeXN0ZW0gb3BlcmF0aW9uLiBgaHVnZXRsYl92bXRydW5jYXRlYCBhbHNvIGJlaW5nIHN0YXRpYyBpcyBhbm90aGVyIGhpbnQgdGhhdCBpdCBtaWdodCBiZSBjbG9zZWx5IHRpZWQgdG8gdGhlIEh1Z2VUTEImIzM5O3MgaW50ZXJuYWwgbWFuYWdlbWVudCwgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uLgoKR2l2ZW4gdGhlIGNvbm5lY3Rpb25zIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvYCBuZXh0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGluIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4gSXQgc2VlbXMgdmVyeSBjbG9zZWx5IHJlbGF0ZWQgdG8gYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz0zNjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hX29mZnNldF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgZW5kKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTM3OC0gKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjM3OTpzdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTM4MC1cdFx0XHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDk3PXN0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZV9zaW5nbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTAtXHRpZiAodW5saWtlbHkoZm9saW9fbWFwcGVkKGZvbGlvKSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MTE6XHRcdGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhoLCBtYXBwaW5nLCBmb2xpbywgaW5kZXgpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AgZnVuY3Rpb24g4oCTIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG5hcnJvd3MgbXkgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBsb29rIGZvciBrZXkgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSAqb3IgaW5kaXJlY3RseSogaW52b2x2ZWQgaW4gdGhlIHVubWFwcGluZyBwcm9jZXNzIG9mIGh1Z2UgcGFnZXMuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYAoqICAgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYAoKSSYjMzk7bGwgYWxzbyBjb25zaWRlciB0aGVzZSwgYXMgdGhleSBsb29rIHByb21pc2luZzoKCiogICBgX196YXBfdm1hX3JhbmdlYCDigJMgdGhvdWdoLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBiZWluZyBzdGF0aWMgYXMgd2VsbCwgd2l0aGluIGBtbS9tZW1vcnkuY2AuCiogICBgemFwX3BhZ2VfcmFuZ2Vfc2luZ2xlYCDigJMgdGhpcyBvbmUgY2FsbHMgYF9femFwX3ZtYV9yYW5nZWAsIHNvIGl0IGlzIGRlZmluaXRlbHkgYSB2YWxpZCBlbnRyeSBwb2ludAoqICAgYHVubWFwX3ZtYXNgIOKAkyBpdCBsb29rcyBsaWtlIHRoaXMgbWF5IHVzZSBgX196YXBfdm1hX3JhbmdlYCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIKCkdpdmVuIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZSBpbml0aWFsIGZ1bmN0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY2FsbGVycyBvZiBgX196YXBfdm1hX3JhbmdlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X196YXBfdm1hX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjA1Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3A0ZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIwNzQtXG5tbS9tZW1vcnkuYzoyMDc1OnN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL21lbW9yeS5jLTIwNzYtXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21lbW9yeS5jPTIxMjQ9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmMtMjEzOC1cdH1cbm1tL21lbW9yeS5jOjIxMzk6XHRfX3phcF92bWFfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIFx1MDAyNmRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjE0MC1cdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChcdTAwMjZyYW5nZSk7XG4tLVxubW0vbWVtb3J5LmM9MjE2MT12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuLS1cbm1tL21lbW9yeS5jLTIxNzctXHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5tbS9tZW1vcnkuYzoyMTc4Olx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjE3OS1cdFx0aHVnZXRsYl96YXBfZW5kKHZtYSwgXHUwMDI2ZGV0YWlscyk7XG4tLVxubW0vbWVtb3J5LmM9MjE5OT12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIyMTktXHQgKi9cbm1tL21lbW9yeS5jOjIyMjA6XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIGFkZHJlc3MsIGVuZCwgZGV0YWlscyk7XG5tbS9tZW1vcnkuYy0yMjIxLVx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcyMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gcmV2aXNpdGluZyB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IHN0YW5kaW5nIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHNlZSB0aGF0IGB1bm1hcF92bWFzYCwgYHphcF92bWFfZm9yX3JlYXBpbmdgLCBhbmQgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBzaW5jZSB0aG9zZSBhcmVuJiMzOTt0IHN0YXRpYywgdGhleSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBzY29wZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCwgc2luY2UgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbnMgSSBqdXN0IG9ic2VydmVkLCB0byBzZWUgaG93IGFuZCB3aGVyZSB0aGF0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM3OT1zdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0MTc6XHRcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgdl9zdGFydCwgdl9lbmQsIE5VTEwsXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTgtXHRcdFx0XHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTEtXHRcdGlmIChodWdldGxiX3ZtYV9tYXBzX3Bmbih2bWEsIHZfc3RhcnQsIHBmbikpXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTI6XHRcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1My1cdFx0XHRcdFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDYzPWh1Z2V0bGJfdm1kZWxldGVfbGlzdChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4Mi1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4MzpcdFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCwgemFwX2ZsYWdzKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4NC1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODctXHRcdCAqIHZtYXMuICBUaGVyZWZvcmUsIGxvY2sgaXMgbm90IGhlbGQgd2hlbiBjYWxsaW5nXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0ODg6XHRcdCAqIHVubWFwX2h1Z2VwYWdlX3JhbmdlIGZvciBwcml2YXRlIHZtYXMuXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODktXHRcdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyNz1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjgtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjk6dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxLVx0XHRcdCAgc3RydWN0IGZvbGlvICosIHphcF9mbGFnc190KTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMjp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMy1cdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQzMT1zdGF0aWMgaW5saW5lIGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MzgtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo0Mzk6c3RhdGljIGlubGluZSB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ0MC1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9odWdldGxiLmM9NTA4MD1pbnQgbW92ZV9odWdldGxiX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MTQ0LVxubW0vaHVnZXRsYi5jOjUxNDU6dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTUxNDYtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYz01MzE3PXZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzNDMtXG5tbS9odWdldGxiLmM6NTM0NDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vaHVnZXRsYi5jLTUzNDUtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtNTM1Ni1cbm1tL2h1Z2V0bGIuYzo1MzU3Olx0X191bm1hcF9odWdlcGFnZV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcbm1tL2h1Z2V0bGIuYy01MzU4LVx0XHRcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmM9NTM3MD1zdGF0aWMgdm9pZCB1bm1hcF9yZWZfcHJpdmF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzODktXHQgKiB0aGlzIG1hcHBpbmcgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUgVk1Bcyxcbm1tL2h1Z2V0bGIuYzo1MzkwOlx0ICogX191bm1hcF9odWdlcGFnZV9yYW5nZSgpIGlzIGNhbGxlZCBhcyB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGRcbm1tL2h1Z2V0bGIuYy01MzkxLVx0ICovXG4tLVxubW0vaHVnZXRsYi5jLTU0MTMtXHRcdGlmICghaXNfdm1hX3Jlc3Zfc2V0KGl0ZXJfdm1hLCBIUEFHRV9SRVNWX09XTkVSKSlcbm1tL2h1Z2V0bGIuYzo1NDE0Olx0XHRcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKGl0ZXJfdm1hLCBhZGRyZXNzLFxubW0vaHVnZXRsYi5jLTU0MTUtXHRcdFx0XHRcdCAgICAgYWRkcmVzcyAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoKSxcbi0tXG5tbS9tZW1vcnkuYz0yMDc1PXN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy0yMDk3LVx0XHRcdHJldHVybjtcbm1tL21lbW9yeS5jOjIwOTg6XHRcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIE5VTEwsIHphcF9mbGFncyk7XG5tbS9tZW1vcnkuYy0yMDk5LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4KCioqRGVjb25zdHJ1Y3RpbmcgSHVnZSBQYWdlIFVubWFwcGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBodWdlIHBhZ2VzIGdldCB1bm1hcHBlZC4gVGhlIGNvcmUgZnVuY3Rpb25zIEkmIzM5O20gemVyb2luZyBpbiBvbiBhcmUgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCB3aGljaCBhcHBlYXJzIHRvIGhhbmRsZSB0aGUgYnVsayBvZiB0aGUgd29yaywgYW5kIGl0cyBjb3VudGVycGFydCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhleSBzb3VuZCBsaWtlIHRoZSBoZWF2eSBsaWZ0ZXJzLiBBbmQgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgdW5tYXBfdm1hc2AsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSBsb29raW5nIGF0IGNhbGxlcnMgb2YgYHVubWFwX3ZtYXNgIGFzIHRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bm1hcF92bWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NTM1PVdlIGVzdGFibGlzaCBiYXNpYyBsb2NraW5nIHJ1bGVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBwYWdlIHRhYmxlczpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU0OS0gICAgICAgICAgICAgVk1BcywgOmM6ZnVuYzpgIXZtc19jbGVhcl9wdGVzYCBoYXMgYSB3aW5kb3cgb2YgdGltZSBiZXR3ZWVuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU1MDogICAgICAgICAgICAgemFwcGluZyAodmlhIDpjOmZ1bmM6YCF1bm1hcF92bWFzYCkgYW5kIGZyZWVpbmcgcGFnZSB0YWJsZXMgKHZpYVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NTEtICAgICAgICAgICAgIDpjOmZ1bmM6YCFmcmVlX3BndGFibGVzYCksIHdoZXJlIHRoZSBWTUEgaXMgc3RpbGwgdmlzaWJsZSBpbiB0aGVcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzA3Nj1zdHJ1Y3QgemFwX2RldGFpbHMge1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0zMDkwLSNkZWZpbmUgIFpBUF9GTEFHX0RST1BfTUFSS0VSICAgICAgICAoKF9fZm9yY2UgemFwX2ZsYWdzX3QpIEJJVCgwKSlcbmluY2x1ZGUvbGludXgvbW0uaDozMDkxOi8qIFNldCBpbiB1bm1hcF92bWFzKCkgdG8gaW5kaWNhdGUgYSBmaW5hbCB1bm1hcCBjYWxsLiAgT25seSB1c2VkIGJ5IGh1Z2V0bGIgKi9cbmluY2x1ZGUvbGludXgvbW0uaC0zMDkyLSNkZWZpbmUgIFpBUF9GTEFHX1VOTUFQICAgICAgICAgICAgICAoKF9fZm9yY2UgemFwX2ZsYWdzX3QpIEJJVCgxKSlcbi0tXG5tbS9pbnRlcm5hbC5oPTE4Nz1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2ludGVybmFsLmgtMTk5LVxubW0vaW50ZXJuYWwuaDoyMDA6LyogdW5tYXBfdm1hcyBpcyBpbiBtbS9tZW1vcnkuYyAqL1xubW0vaW50ZXJuYWwuaDoyMDE6dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcCk7XG5tbS9pbnRlcm5hbC5oLTIwMi1cbi0tXG5tbS9tZW1vcnkuYz0yMTI0PWludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jLTIxNDUtLyoqXG5tbS9tZW1vcnkuYzoyMTQ2OiAqIHVubWFwX3ZtYXMgLSB1bm1hcCBhIHJhbmdlIG9mIG1lbW9yeSBjb3ZlcmVkIGJ5IGEgbGlzdCBvZiB2bWEmIzM5O3Ncbm1tL21lbW9yeS5jLTIxNDctICogQHRsYjogYWRkcmVzcyBvZiB0aGUgY2FsbGVyJiMzOTtzIHN0cnVjdCBtbXVfZ2F0aGVyXG4tLVxubW0vbWVtb3J5LmMtMjE1NS0gKlxubW0vbWVtb3J5LmM6MjE1NjogKiB1bm1hcF92bWFzKCkgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgd2lsbCBmbHVzaCB0aGUgd2hvbGUgdW5tYXBwZWQgYWRkcmVzc1xubW0vbWVtb3J5LmM6MjE1NzogKiByYW5nZSBhZnRlciB1bm1hcF92bWFzKCkgcmV0dXJucy4gIFNvIHRoZSBvbmx5IHJlc3BvbnNpYmlsaXR5IGhlcmUgaXMgdG9cbm1tL21lbW9yeS5jOjIxNTg6ICogZW5zdXJlIHRoYXQgYW55IHRodXMtZmFyIHVubWFwcGVkIHBhZ2VzIGFyZSBmbHVzaGVkIGJlZm9yZSB1bm1hcF92bWFzKClcbm1tL21lbW9yeS5jLTIxNTktICogZHJvcHMgdGhlIGxvY2sgYW5kIHNjaGVkdWxlcy5cbm1tL21lbW9yeS5jLTIxNjAtICovXG5tbS9tZW1vcnkuYzoyMTYxOnZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG5tbS9tZW1vcnkuYy0yMTYyLXtcbi0tXG5tbS9tbWFwLmM9MTI3Mz12b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9tbWFwLmMtMTI5OS1cdC8qIFVzZSBVTE9OR19NQVggaGVyZSB0byBlbnN1cmUgYWxsIFZNQXMgaW4gdGhlIG1tIGFyZSB1bm1hcHBlZCAqL1xubW0vbW1hcC5jOjEzMDA6XHR1bm1hcF92bWFzKFx1MDAyNnRsYiwgXHUwMDI2dW5tYXApO1xubW0vbW1hcC5jLTEzMDEtXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi0tXG5tbS92bWEuYz00ODE9dm9pZCB1bm1hcF9yZWdpb24oc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuLS1cbm1tL3ZtYS5jLTQ4Ny1cdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG5tbS92bWEuYzo0ODg6XHR1bm1hcF92bWFzKFx1MDAyNnRsYiwgdW5tYXApO1xubW0vdm1hLmMtNDg5LVx0bWFzX3NldCh1bm1hcC1cdTAwM2VtYXMsIHVubWFwLVx1MDAzZXRyZWVfcmVzZXQpO1xuLS1cbm1tL3ZtYS5jPTEzMDc9c3RhdGljIHZvaWQgdm1zX2NsZWFuX3VwX2FyZWEoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4tLVxubW0vdm1hLmMtMTMyMS0vKlxubW0vdm1hLmM6MTMyMjogKiB2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoKSAtIEZpbmlzaCB0aGUgbXVubWFwKCkgb3BlcmF0aW9uXG5tbS92bWEuYy0xMzIzLSAqIEB2bXM6IFRoZSB2bWEgbXVubWFwIHN0cnVjdFxuLS1cbm1tL3ZtYS5jLTEzMjktICovXG5tbS92bWEuYzoxMzMwOnN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbm1tL3ZtYS5jLTEzMzEtXHRcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcbi0tXG5tbS92bWEuYz0xMzc3PXN0YXRpYyB2b2lkIHJlYXR0YWNoX3ZtYXMoc3RydWN0IG1hX3N0YXRlICptYXNfZGV0YWNoKVxuLS1cbm1tL3ZtYS5jLTEzODgtLypcbm1tL3ZtYS5jOjEzODk6ICogdm1zX2dhdGhlcl9tdW5tYXBfdm1hcygpIC0gUHV0IGFsbCBWTUFzIHdpdGhpbiBhIHJhbmdlIGludG8gYSBtYXBsZSB0cmVlXG5tbS92bWEuYy0xMzkwLSAqIGZvciByZW1vdmFsIGF0IGEgbGF0ZXIgZGF0ZS4gIEhhbmRsZXMgc3BsaXR0aW5nIGZpcnN0IGFuZCBsYXN0IGlmIG5lY2Vzc2FyeVxuLS1cbm1tL3ZtYS5jLTEzOTctICovXG5tbS92bWEuYzoxMzk4OnN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbm1tL3ZtYS5jLTEzOTktXHRcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcbi0tXG5tbS92bWEuYz0xNTgzPWludCBkb192bWlfYWxpZ25fbXVubWFwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmMtMTU5NC1cdGluaXRfdm1hX211bm1hcChcdTAwMjZ2bXMsIHZtaSwgdm1hLCBzdGFydCwgZW5kLCB1ZiwgdW5sb2NrKTtcbm1tL3ZtYS5jOjE1OTU6XHRlcnJvciA9IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoXHUwMDI2dm1zLCBcdTAwMjZtYXNfZGV0YWNoKTtcbm1tL3ZtYS5jLTE1OTYtXHRpZiAoZXJyb3IpXG4tLVxubW0vdm1hLmMtMTYwMy1cdC8qIFBvaW50IG9mIG5vIHJldHVybiAqL1xubW0vdm1hLmM6MTYwNDpcdHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhcdTAwMjZ2bXMsIFx1MDAyNm1hc19kZXRhY2gpO1xubW0vdm1hLmMtMTYwNS1cdHJldHVybiAwO1xuLS1cbm1tL3ZtYS5jPTIzNDE9c3RhdGljIGJvb2wgYWNjb3VudGFibGVfbWFwcGluZyhzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuLS1cbm1tL3ZtYS5jLTIzNTctLypcbm1tL3ZtYS5jOjIzNTg6ICogdm1zX2Fib3J0X211bm1hcF92bWFzKCkgLSBVbmRvIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSBhbiBhYm9ydGVkIG11bm1hcCgpXG5tbS92bWEuYy0yMzU5LSAqIG9wZXJhdGlvbi5cbi0tXG5tbS92bWEuYy0yMzY3LSAqL1xubW0vdm1hLmM6MjM2ODpzdGF0aWMgdm9pZCB2bXNfYWJvcnRfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG5tbS92bWEuYy0yMzY5LVx0XHRzdHJ1Y3QgbWFfc3RhdGUgKm1hc19kZXRhY2gpXG4tLVxubW0vdm1hLmMtMjM4Ni1cdC8qIENsZWFuIHVwIHRoZSBpbnNlcnRpb24gb2YgdGhlIHVuZm9ydHVuYXRlIGdhcCAqL1xubW0vdm1hLmM6MjM4NzpcdHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyh2bXMsIG1hc19kZXRhY2gpO1xubW0vdm1hLmMtMjM4OC19XG4tLVxubW0vdm1hLmM9MjQyMD1zdGF0aWMgaW50IF9fbW1hcF9zZXR1cChzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbm1tL3ZtYS5jLTI0MzgtXHRcdC8qIFByZXBhcmUgdG8gdW5tYXAgYW55IGV4aXN0aW5nIG1hcHBpbmcgaW4gdGhlIGFyZWEgKi9cbm1tL3ZtYS5jOjI0Mzk6XHRcdGVycm9yID0gdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyh2bXMsIFx1MDAyNm1hcC1cdTAwM2VtYXNfZGV0YWNoKTtcbm1tL3ZtYS5jLTI0NDAtXHRcdGlmIChlcnJvcikge1xuLS1cbm1tL3ZtYS5jPTI2MTA9c3RhdGljIHZvaWQgX19tbWFwX2NvbXBsZXRlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3ZtYS5jLTI2MTYtXHQvKiBVbm1hcCBhbnkgZXhpc3RpbmcgbWFwcGluZyBpbiB0aGUgYXJlYS4gKi9cbm1tL3ZtYS5jOjI2MTc6XHR2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoXHUwMDI2bWFwLVx1MDAzZXZtcywgXHUwMDI2bWFwLVx1MDAzZW1hc19kZXRhY2gpO1xubW0vdm1hLmMtMjYxOC1cbi0tXG5tbS92bWEuYz0yNzM0PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS92bWEuYy0yODA1LVx0XHRmcHV0KG1hcC5maWxlKTtcbm1tL3ZtYS5jOjI4MDY6XHR2bXNfYWJvcnRfbXVubWFwX3ZtYXMoXHUwMDI2bWFwLnZtcywgXHUwMDI2bWFwLm1hc19kZXRhY2gpO1xubW0vdm1hLmMtMjgwNy1cdHJldHVybiBlcnJvcjtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg9Mzg5PXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfaGl3YXRlcl92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzkyLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjM5MzpzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA5OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvcmUgTWVtb3J5IFVubWFwcGluZyBGdW5jdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBtZW1vcnkgdW5tYXBwaW5nIHdpdGhpbiB0aGUga2VybmVsLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCB0byBkZXRlcm1pbmUgdGhlIG1vc3QgcmVsZXZhbnQgdGFyZ2V0cyBmb3IgZnV6emluZy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMuIGB1bm1hcF92bWFzYCBpcyBjbGVhcmx5IGNlbnRyYWw7IGl0JiMzOTtzIGNhbGxlZCBieSBgZXhpdF9tbWFwYCBhbmQgYHVubWFwX3JlZ2lvbmAsIHdoaWNoIGFyZSB0aGVtc2VsdmVzIHJlYWNoZWQgdGhyb3VnaCBgdm1zX2NvbXBsZXRlX211bm1hcF92bWFzYCwgaXRzZWxmIGNhbGxlZCBieSBgZG9fdm1pX2FsaWduX211bm1hcGAgYW5kIGBfX21tYXBfY29tcGxldGVgLiBTbywgYHVubWFwX3ZtYXNgIGlzIGEgcHJpbWFyeSBwbGF5ZXIgZm9yIGdlbmVyYWwgVk1BIHVubWFwcGluZy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBodWdlIHBhZ2UgdW5tYXBwaW5nLiBJIGxvb2tlZCBhdCBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGFuZCBgdW5tYXBfcmVmX3ByaXZhdGVgLiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGlzIHJlYWNoZWQgdGhyb3VnaCBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgIGlzIGNhbGxlZCBieSBgaHVnZXRsYl92bXRydW5jYXRlYCBhbmQgYGh1Z2V0bGJmc19wdW5jaF9ob2xlYC4gYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AgaXMgY2FsbGVkIGJ5IGByZW1vdmVfaW5vZGVfc2luZ2xlX2ZvbGlvYC4gVGhlcmVmb3JlIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBodWdlIHBhZ2UgdW5tYXBwaW5nIGNvZGUgcGF0aCBhcyB3ZWxsLgoKQmFzZWQgb24gdGhpcywgbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGlzOgoqICAgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgCiogICBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgCiogICBgdW5tYXBfdm1hc2AKKiAgIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYAoqICAgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAKCk5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGlubGluZWQsIGFzIGlubGluZWQgZnVuY3Rpb25zIGFyZSBoYXJkZXIgdG8gdGFyZ2V0IGRpcmVjdGx5IGZvciBmdXp6aW5nLiBJIGNhbiBydWxlIG91dCB0aGUgaW5saW5lZCBmdW5jdGlvbnMgd2l0aCBzaW1wbGUgY2hlY2tzLiBBbGwgdGhlIHN5bWJvbHMgYWJvdmUgYXJlIG5vdCBpbmxpbmVkIGV4Y2VwdCBmb3IgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gLiBUaGV5IGFyZSBzdGF0aWMsIHNvIHRoZXkgKm1pZ2h0KiBiZSBpbmxpbmVkLCBidXQgSSB3aWxsIHN0aWxsIGNvbnNpZGVyIHRoZW0uCgpTbywgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF92bWFzYAoKTmV4dCwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gcmVhY2ggdGhlc2Ugc3ltYm9scy4gYEhVR0VUTEJGU2AgaXMgdGhlIG1haW4gb25lOyBgSFVHRVRMQl9QQUdFYCBpcyBhbHNvIG5lZWRlZCwgYnV0IGRlZmF1bHRzIHRvIGBIVUdFVExCRlNgLCBzbyBgSFVHRVRMQkZTYCBpcyBzdWZmaWNpZW50LgoKTXkgcmVhc29uaW5nIGZvciB0YXJnZXRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIHJlc3RvcmluZyB0aGUgcmVzZXJ2YXRpb24gZm9yIGFub255bW91cyBwYWdlcyBpbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBhbiBhc3NlcnRpb24gYGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nKTtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGh1Z2V0bGIgcGFnZXMsIHBhcnRpY3VsYXJseSBkdXJpbmcgdW5tYXBwaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtdW5tYXBgIG9yIGZpbGUgdHJ1bmNhdGlvbi9wdW5jaCBob2xlIG9wZXJhdGlvbnMgb24gaHVnZXRsYmZzIGZpbGVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBhc3NlcnRpb24gaXMgdmFsdWFibGUsIGFzIGZ1enppbmcgaXMgaW50ZW5kZWQgdG8gY2F1c2UgZXJyb3JzLgoKVGh1cywgbXkgZnV6emluZyB0YXJnZXQgbGlzdCBpczoKCiogICBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAKKiAgIGB1bm1hcF92bWFzYAoKQ29uZmlndXJhdGlvbjogYEhVR0VUTEJGU2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIHRoZSBIdWdlVExCRlMgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgYEhVR0VUTEJGU2DigKYgdGhhdCYjMzk7cyB0aGUgb25lLiBObyBkb3VidCBhYm91dCBpdCwgdGhlIGNvbmZpZ3VyYXRpb24gc2VlbXMgY29ycmVjdC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIEJlZm9yZSBJIG1vdmUgZnVydGhlciwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3J1Y2lhbC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2Rl4oCmIExldCBtZSBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSBmdW5jdGlvbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLiBJZiBpdCB3ZXJlIHN0YXRpYywgaXQgd291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNjb3BlIGFuZCBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGNvbmZpcm1hdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxNDQtXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTE0Ni1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqQXNzZXNzaW5nIHRoZSBOYXR1cmUgb2YgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciBpcyBjbGVhcmx5IGR5bmFtaWMsIG5vdCBhIGZpeGVkIHN0YXRlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBrZXkgY29tcG9uZW50OiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBoZXJlLiBJcyB0aGlzIGZ1bmN0aW9uLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlIG9yIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgaW5oZXJlbnRseSBzdGF0aWMgb3IgZG9lcyBpdHMgYmVoYXZpb3IgY2hhbmdlIGR5bmFtaWNhbGx5PyBBcmUgdGhlcmUgZXh0ZXJuYWwgZmFjdG9ycywgcnVudGltZSBjb25kaXRpb25zLCBvciBkYXRhIGRlcGVuZGVuY2llcyB0aGF0IGRpY3RhdGUgaXRzIG9wZXJhdGlvbj8gT3IgaXMgaXQgcHJlZGljdGFibGUsIHVuY2hhbmdlZCBiYXNlZCBvbiB0aG9zZSBleHRlcm5hbCBpbmZsdWVuY2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgKmRlZmluaXRlbHkqIG5vdCBzdGF0aWNhbGx5IGRlZmluZWQuIEtub3dpbmcgdGhpcyB3aWxsIGRpcmVjdGx5IGltcGFjdCBob3cgSSBhcHByb2FjaCBkZWJ1Z2dpbmcgYW5kL29yIG9wdGltaXppbmcgdGhpcyBzcGVjaWZpYyBhcmVhIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTUzMTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM0My1cbm1tL2h1Z2V0bGIuYzo1MzQ0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9odWdldGxiLmMtNTM0NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBEeW5hbWlzbSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBjb25jZXB0IGlzbiYjMzk7dCBpbmhlcmVudGx5IHN0YXRpYyDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoaXM6IGNhbiB3ZSBkZWZpbml0aXZlbHkgY29uZmlybSB0aGF0IHRoZSBiZWhhdmlvciBvZiBgdW5tYXBfdm1hc2AgaXNuJiMzOTt0IHN0YXRpYyBpbiBpdHMgaW1wbGVtZW50YXRpb24/IFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gcG9zc2Vzc2VzIHRoZSBjYXBhY2l0eSB0byBhZGFwdCB0byBjaGFuZ2luZyBjb25kaXRpb25zIG9yIGV4dGVybmFsIGlucHV0cy4gQSBjdXJzb3J5IHJldmlldyB3b24mIzM5O3Qgc3VmZmljZTsgd2UgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCBpZiBpdHMgaW50ZXJuYWwgd29ya2luZ3MgZHluYW1pY2FsbHkgYWRqdXN0IGJhc2VkIG9uIHRoZSBydW50aW1lIGNvbnRleHQuIElzIGl0IHRydWx5IHJlYWN0aXZlLCBvciBkb2VzIGl0cyBiZWhhdmlvciByZW1haW4gZml4ZWQgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJiMzOTtzIHN0YXRlPyBUaGlzIGludmVzdGlnYXRpb24gZGVtYW5kcyBhIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBjb2RlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCB1bm1hcF92bWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjEyND1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1vcnkuYy0yMTYwLSAqL1xubW0vbWVtb3J5LmM6MjE2MTp2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxubW0vbWVtb3J5LmMtMjE2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzU3CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gcHJvY2Vzc2luZyB0aGlzIGluZm9ybWF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgc2l0dWF0aW9uIGlzICpub3QqIGEgc3RhdGljIG9uZS4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyIHdpdGggYW55IGFuYWx5c2lzIG9yIGFjdGlvbi4gSXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIGFuZCB0aGUgZm91bmRhdGlvbiBvZiB3aGF0ZXZlciBzdGVwcyBJIHRha2UgbmV4dC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBkZWxpdmVyIHRoZSByZXN1bHRzIGluIGEgcHJlY2lzZSBtYW5uZXIuIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgaXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9yIGNvbW11bmljYXRpbmcgdGhlIGZpbmRpbmdzIGVmZmVjdGl2ZWx5LiBJJiMzOTtsbCBtYWtlIHN1cmUgaXQgaXMgYWNjdXJhdGUsIHdlbGwtZm9ybWF0dGVkLCBhbmQgZWFzaWx5IGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3VubWFwX3ZtYXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2VzIGluIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQgYWxzbyBhZGRzIGFuIGFzc2VydGlvbiBgaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGh1Z2V0bGIgcGFnZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdW5tYXBwaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtdW5tYXBgIG9yIGZpbGUgdHJ1bmNhdGlvbi9wdW5jaCBob2xlIG9wZXJhdGlvbnMgb24gaHVnZXRsYmZzIGZpbGVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7dW5tYXBfdm1hcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjUwLjQzMDU1MDAzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MjU2NTcyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJ1bm1hcF92bWFzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2VzIGluIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQgYWxzbyBhZGRzIGFuIGFzc2VydGlvbiBgaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgc3BlY2lmaWNhbGx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTAuNDMwNTU2NTU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY4ODE0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTE4YTZiNmEzNWUxN2E3Mzc4MDgwYzkzYWQ1Zjc1Mzg3MDEwZWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjE0OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjc3MDIyYzRjNTlhZmEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTUxNTcsNiArNTE1Nyw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0Ym9vbCBhZGp1c3RfcmVzZXJ2YXRpb247XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyX21hc2s7XFxuIFxcbitcXHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuIFxcdFdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTtcXG4gXFx0QlVHX09OKHN0YXJ0IFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKTtcXG4gXFx0QlVHX09OKGVuZCBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSk7XFxuQEAgLTUyNDgsNyArNTI0OSwxMCBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBSZXN0b3JlIHRoZSByZXNlcnZhdGlvbiBmb3IgYW5vbnltb3VzIHBhZ2UsIG90aGVyd2lzZSB0aGVcXG4tXFx0XFx0ICogYmFja2luZyBwYWdlIGNvdWxkIGJlIHN0b2xlbiBieSBzb21lb25lLlxcbitcXHRcXHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuIFJlc3RvcmUgb25seSBvbiB0aGVcXG4rXFx0XFx0ICogbGFzdCB1bm1hcCwgb3RoZXJ3aXNlIHRoZSBvd25lciBjb3VsZCBlbXB0eSBpdHMgcmVzdiBtYXBcXG4rXFx0XFx0ICogd2hpbGUgdGhlIGZvbGlvIGlzIHN0aWxsIG1hcHBlZCBieSBhIGNoaWxkLiBOb3RlIHRoYXQgaG9sZGluZ1xcbitcXHRcXHQgKiBpX21tYXBfbG9ja193cml0ZSBpcyBuZWVkZWQgdG8gY2hlY2sgdGhlIG51bWJlciBvZiBtYXBwaW5ncy5cXG4gXFx0XFx0ICogSWYgdGhlcmUgd2UgYXJlIGZyZWVpbmcgYSBzdXJwbHVzLCBkbyBub3Qgc2V0IHRoZSByZXN0b3JlXFxuIFxcdFxcdCAqIHJlc2VydmF0aW9uIGJpdC5cXG4gXFx0XFx0ICovXFxuQEAgLTUyNTYsNyArNTI2MCw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdFxcdGlmICghaC1cXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IF9fdm1hX3ByaXZhdGVfbG9jayh2bWEpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxuK1xcdFxcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxuIFxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG4gXFx0XFx0XFx0YWRqdXN0X3Jlc2VydmF0aW9uID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTAuODY4MzIwNzYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODc4MTg3ODkwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcInVubWFwX3ZtYXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBodWdldGxiIHBhZ2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVubWFwcGluZyBvcGVyYXRpb25zLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbXVubWFwYCBvciBmaWxlIHRydW5jYXRpb24vcHVuY2ggaG9sZSBvcGVyYXRpb25zIG9uIGh1Z2V0bGJmcyBmaWxlcy4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTE4YTZiNmEzNWUxN2E3Mzc4MDgwYzkzYWQ1Zjc1Mzg3MDEwZWZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDI6MTQ6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjc3MDIyYzRjNTlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTUxNTcsNiArNTE1Nyw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGJvb2wgYWRqdXN0X3Jlc2VydmF0aW9uO1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X2FkZHJfbWFzaztcbiBcbitcdGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gXHRXQVJOX09OKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7XG4gXHRCVUdfT04oc3RhcnQgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSk7XG4gXHRCVUdfT04oZW5kIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpO1xuQEAgLTUyNDgsNyArNTI0OSwxMCBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZSwgb3RoZXJ3aXNlIHRoZVxuLVx0XHQgKiBiYWNraW5nIHBhZ2UgY291bGQgYmUgc3RvbGVuIGJ5IHNvbWVvbmUuXG4rXHRcdCAqIGJhY2tpbmcgcGFnZSBjb3VsZCBiZSBzdG9sZW4gYnkgc29tZW9uZS4gUmVzdG9yZSBvbmx5IG9uIHRoZVxuK1x0XHQgKiBsYXN0IHVubWFwLCBvdGhlcndpc2UgdGhlIG93bmVyIGNvdWxkIGVtcHR5IGl0cyByZXN2IG1hcFxuK1x0XHQgKiB3aGlsZSB0aGUgZm9saW8gaXMgc3RpbGwgbWFwcGVkIGJ5IGEgY2hpbGQuIE5vdGUgdGhhdCBob2xkaW5nXG4rXHRcdCAqIGlfbW1hcF9sb2NrX3dyaXRlIGlzIG5lZWRlZCB0byBjaGVjayB0aGUgbnVtYmVyIG9mIG1hcHBpbmdzLlxuIFx0XHQgKiBJZiB0aGVyZSB3ZSBhcmUgZnJlZWluZyBhIHN1cnBsdXMsIGRvIG5vdCBzZXQgdGhlIHJlc3RvcmVcbiBcdFx0ICogcmVzZXJ2YXRpb24gYml0LlxuIFx0XHQgKi9cbkBAIC01MjU2LDcgKzUyNjAsNyBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0aWYgKCFoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlcyBcdTAwMjZcdTAwMjYgX192bWFfcHJpdmF0ZV9sb2NrKHZtYSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4rXHRcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuIFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG4gXHRcdFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xuIFx0XHRcdGFkanVzdF9yZXNlcnZhdGlvbiA9IHRydWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo1MC44NjgzMjI4NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTM1MTE2MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGh1Z2V0bGIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBwbGF5aW5nIHdpdGggYG1tL2h1Z2V0bGIuY2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGV5J3ZlIGFkZGVkIGFuIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZGAgYXNzZXJ0aW9uIHRvIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYC4gSW50ZXJlc3RpbmcsIGxpa2VseSBmb3IgYWRkZWQgc2FmZXR5IGR1cmluZyB3cml0ZSBvcGVyYXRpb25zLiBUaGV5J3ZlIGFsc28gdHdlYWtlZCB0aGUgYW5vbnltb3VzIHBhZ2UgcmVzZXJ2YXRpb24gcmVzdG9yYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24sIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZTogdGhlIHRlc3Qgbm93IGNoZWNrcyBmb3IgYCFmb2xpb19tYXBwZWQoZm9saW8pYCAqaW4gYWRkaXRpb24gdG8qIHRoZSBleGlzdGluZyBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBJdCdzIHN1YnRsZSwgYnV0IGl0J3MgZGVmaW5pdGVseSBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgaG93IHRoZSBzeXN0ZW0gcmVzdG9yZXMgcmVzZXJ2YXRpb25zIGZvciBhbm9ueW1vdXMgcGFnZXMgZHVyaW5nIHVubWFwcGluZyBvZiBodWdlIHBhZ2VzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBgaHVnZXRsYmAsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHRha2Ugc2VyaW91c2x5LiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgYW5kIGl0cyBjYWxsZXJzLiBHb3R0YSBkaWcgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBhbGwgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHdheXMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgaW52ZXN0aWdhdGUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL2h1Z2V0bGIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo1NS44MDM0NDMzNDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTYxMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE0NC1cXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTUxNDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jPTUzNDQ9dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01MzU2LVxcbm1tL2h1Z2V0bGIuYzo1MzU3OlxcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxcbm1tL2h1Z2V0bGIuYy01MzU4LVxcdFxcdFxcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MzcwPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01Mzg5LVxcdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxcbm1tL2h1Z2V0bGIuYzo1MzkwOlxcdCAqIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKSBpcyBjYWxsZWQgYXMgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkXFxubW0vaHVnZXRsYi5jLTUzOTEtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjU1LjkxMzYwOTc0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTA1NTA2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZywgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqQW5hbHl6aW5nIHRoZSBIdWdlcGFnZSBVbm1hcHBpbmcgUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgYnkgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBhbmQgYHVubWFwX3JlZl9wcml2YXRlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBidXQgbm90IG5lY2Vzc2FyaWx5IHVudXN1YWwuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGxheWVyaW5nIG9mIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBmb3IgZWl0aGVyIGFic3RyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgb3Igc3BlY2lmaWMgdXNlIGNhc2VzLiBUaGUga2V5IHF1ZXN0aW9uIGlzOiBkb2VzIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYCBzdGFuZCBhbG9uZSwgb3IgaXMgaXQgbW9yZSB3aWRlbHkgdXNlZCBvciBleHBvcnRlZD8gVGhlIFwiZXhwb3J0ZWQgb3IgdXNlZCBpbiBvdGhlciBwbGFjZXNcIiBxdWVzdGlvbiBpcyBjcml0aWNhbC4gSXQgaW1wbGllcyBhIGRlZXBlciBhbmFseXNpcyBpcyByZXF1aXJlZCBoZXJlIHRvIGRldGVybWluZSBpdHMgc2NvcGUgYW5kIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJcyBpdCBqdXN0IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0sIG9yIGlzIGl0IHBhcnQgb2YgYSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrIGZvciBodWdlcGFnZXM/IFRoYXQgZGV0ZXJtaW5lcyBpdHMgaW1wb3J0YW5jZSB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCBpbmZvcm1zIGFueSBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgbmVlZGVkLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGF0IHRoZSBhbnN3ZXIgaXMsIGFuZCB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo1OS4xMjQxNjMzNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0MTgxNzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Mzc5PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDE2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQxNzpcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxOC1cXHRcXHRcXHRcXHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1MS1cXHRcXHRpZiAoaHVnZXRsYl92bWFfbWFwc19wZm4odm1hLCB2X3N0YXJ0LCBwZm4pKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ1MjpcXHRcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ1My1cXHRcXHRcXHRcXHRcXHQgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ2Mz1odWdldGxiX3ZtZGVsZXRlX2xpc3Qoc3RydWN0IHJiX3Jvb3RfY2FjaGVkICpyb290LCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0ODM6XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCwgemFwX2ZsYWdzKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODQtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODctXFx0XFx0ICogdm1hcy4gIFRoZXJlZm9yZSwgbG9jayBpcyBub3QgaGVsZCB3aGVuIGNhbGxpbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0ODg6XFx0XFx0ICogdW5tYXBfaHVnZXBhZ2VfcmFuZ2UgZm9yIHByaXZhdGUgdm1hcy5cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODktXFx0XFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjc9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyOC1cXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjk6dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzAtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEtXFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKiwgemFwX2ZsYWdzX3QpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMjp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzMtXFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQzMT1zdGF0aWMgaW5saW5lIGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQzOC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo0Mzk6c3RhdGljIGlubGluZSB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00NDAtXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9odWdldGxiLmM9NTA4MD1pbnQgbW92ZV9odWdldGxiX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUxNDQtXFxubW0vaHVnZXRsYi5jOjUxNDU6dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01MTQ2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MzE3PXZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM0My1cXG5tbS9odWdldGxiLmM6NTM0NDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2h1Z2V0bGIuYy01MzQ1LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtNTM1Ni1cXG5tbS9odWdldGxiLmM6NTM1NzpcXHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcXG5tbS9odWdldGxiLmMtNTM1OC1cXHRcXHRcXHQgICAgICAgZm9saW8sIHphcF9mbGFncyk7XFxuLS1cXG5tbS9odWdldGxiLmM9NTM3MD1zdGF0aWMgdm9pZCB1bm1hcF9yZWZfcHJpdmF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM4OS1cXHQgKiB0aGlzIG1hcHBpbmcgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUgVk1BcyxcXG5tbS9odWdldGxiLmM6NTM5MDpcXHQgKiBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkgaXMgY2FsbGVkIGFzIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZFxcbm1tL2h1Z2V0bGIuYy01MzkxLVxcdCAqL1xcbi0tXFxubW0vaHVnZXRsYi5jLTU0MTMtXFx0XFx0aWYgKCFpc192bWFfcmVzdl9zZXQoaXRlcl92bWEsIEhQQUdFX1JFU1ZfT1dORVIpKVxcbm1tL2h1Z2V0bGIuYzo1NDE0OlxcdFxcdFxcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKGl0ZXJfdm1hLCBhZGRyZXNzLFxcbm1tL2h1Z2V0bGIuYy01NDE1LVxcdFxcdFxcdFxcdFxcdCAgICAgYWRkcmVzcyArIGh1Z2VfcGFnZV9zaXplKGgpLFxcbi0tXFxubW0vbWVtb3J5LmM9MjA3NT1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMDk3LVxcdFxcdFxcdHJldHVybjtcXG5tbS9tZW1vcnkuYzoyMDk4OlxcdFxcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIE5VTEwsIHphcF9mbGFncyk7XFxubW0vbWVtb3J5LmMtMjA5OS1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTowMi40NjU5ODY3MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUxMTAwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgaHVnZSBwYWdlcyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3MuIEl0IHNlZW1zIHRoYXQgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGlzIGEgY3J1Y2lhbCBpbnRlcm5hbCBmdW5jdGlvbiwgYmVpbmcgY2FsbGVkIGJ5IGBfX3phcF92bWFfcmFuZ2VgIHdoaWNoIGlzIGEgY29yZSBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGluIGBtbS9tZW1vcnkuY2AuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGZ1bmN0aW9ucyBoYW5kbGluZyBIdWdldGxiZnMtc3BlY2lmaWMgb3BlcmF0aW9uczogc3BlY2lmaWNhbGx5LCBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2Agd2hpY2ggbGl2ZSBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBJJ3ZlIGFsc28gbm90ZWQgYHVubWFwX3JlZl9wcml2YXRlYCBpbiBgbW0vaHVnZXRsYi5jYC5cblxuVG8ga2VlcCB0aGlzIGNvbmNpc2UsIHRoZXNlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kOiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgLCBhbmQgYGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpb2AuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24gaXMgcmVsZXZhbnQgaGVyZSwgZ2l2ZW4gdGhhdCB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjA2LjYxNzA5OTQwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc1NDAxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjEwLjM5MjUwNTk2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTQzOTc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkFkZHJlc3NpbmcgSHVnZSBQYWdlcyBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IG9wdGltaXppbmcgdGhpcyBzeXN0ZW0sIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCBib3RoIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgYWJzb2x1dGVseSBlc3NlbnRpYWwgY29tcG9uZW50cy4gVGhlcmUncyBubyBkZWJhdGUgaGVyZS4gV2UgbmVlZCB0aGUgZmxleGliaWxpdHkgYW5kIGNvbnRyb2wgdGhhdCBgSFVHRVRMQkZTYCBwcm92aWRlcyBmb3IgbWFuYWdpbmcgdGhlIGh1Z2UgcGFnZSBwb29sLCBhbmQgd2UgbmVlZCB0aGUgcGFnZSBzaXplIGRlZmluaXRpb24gd2l0aCBgSFVHRVRMQl9QQUdFYC4gV2l0aG91dCBib3RoLCB3ZSdyZSBoYW1zdHJpbmdpbmcgb3Vyc2VsdmVzIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBXZSBzaW1wbHkgKm11c3QqIGhhdmUgYm90aCBlbmFibGVkIGZvciBhbnkgc2VyaW91cyBjb25zaWRlcmF0aW9uIG9mIHBlcmZvcm1hbmNlIHR1bmluZyB3aXRoIGh1Z2UgcGFnZXMuIEFueXRoaW5nIGxlc3MgaXMsIGZyYW5rbHksIGp1c3Qgbm90IHdvcnRoIG91ciB0aW1lLiBMZXQncyBtYWtlIHN1cmUgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIGJlZm9yZSB3ZSBkaXZlIGFueSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNToxMy44MDY5MDc3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwMDU1MjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjE3LjgwNzQ2NzU5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE3NjQwMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgSHVnZVRMQiBVbm1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24sIHRoYXQncyB0aGUga2V5IGhlcmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1bm1hcHBpbmcgcHJvY2VzcyB3b3Jrcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBMZXQncyBzZWUuLi4gaXQncyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGFzIGB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoLi4uKWAuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3MgYSByZWd1bGFyLCBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gTm93IHRvIGxvb2sgYXQgdGhlIHJlbGF0ZWQgbWV0aG9kcywgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gLiBMZXQncyBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjEuMjI1MTEwODQ5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg2MzcxNzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfdm1kZWxldGVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9NDYyPXN0YXRpYyB2b2lkXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDYzOmh1Z2V0bGJfdm1kZWxldGVfbGlzdChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ2NC1cXHRcXHQgICAgICB6YXBfZmxhZ3NfdCB6YXBfZmxhZ3MpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTc9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTAyLVxcdCAqIElmIGZvbGlvIGlzIG1hcHBlZCwgaXQgd2FzIGZhdWx0ZWQgaW4gYWZ0ZXIgYmVpbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MDM6XFx0ICogdW5tYXBwZWQgaW4gY2FsbGVyIG9yIGh1Z2V0bGJfdm1kZWxldGVfbGlzdCgpIHNraXBzXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTA0LVxcdCAqIHVubWFwcGluZyBpdCBkdWUgdG8gZmFpbCB0byBncmFiIGxvY2suICBVbm1hcCAoYWdhaW4pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDY9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02MTctXFx0aWYgKG1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjYxODpcXHRcXHRodWdldGxiX3ZtZGVsZXRlX2xpc3QoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfbW1hcCwgcGdvZmYsIDAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjE5LVxcdFxcdFxcdFxcdCAgICAgIFpBUF9GTEFHX0RST1BfTUFSS0VSKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTY0Nz1zdGF0aWMgbG9uZyBodWdldGxiZnNfcHVuY2hfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjc4LVxcdFxcdGlmIChtYXBwaW5nX21hcHBlZChtYXBwaW5nKSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2Nzk6XFx0XFx0XFx0aHVnZXRsYl92bWRlbGV0ZV9saXN0KFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX21tYXAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjgwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGhvbGVfc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjQuMzExNDg5NDM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDQ2MjMxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgVk0gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQncyBnb3QgcmVzdHJpY3RlZCBzY29wZSBhbmQgaXMgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlbiBJIG5vdGUgdGhhdCBib3RoIGBodWdldGxiX3ZtdHJ1bmNhdGVgIGFuZCBgaHVnZXRsYmZzX3B1bmNoX2hvbGVgIGFyZSBjYWxsaW5nIGl0LiBCb3RoIG9mICp0aG9zZSogZnVuY3Rpb25zIGFyZSBhbHNvIGBzdGF0aWNgLlxuXG5UaGUgZmFjdCB0aGF0IGBodWdldGxiZnNfcHVuY2hfaG9sZWAgaXMgYHN0YXRpY2Agc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBmaWxlIHN5c3RlbSBvcGVyYXRpb24uIGBodWdldGxiX3ZtdHJ1bmNhdGVgIGFsc28gYmVpbmcgc3RhdGljIGlzIGFub3RoZXIgaGludCB0aGF0IGl0IG1pZ2h0IGJlIGNsb3NlbHkgdGllZCB0byB0aGUgSHVnZVRMQidzIGludGVybmFsIG1hbmFnZW1lbnQsIG5vdCBhIGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbi5cblxuR2l2ZW4gdGhlIGNvbm5lY3Rpb25zIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvYCBuZXh0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGluIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCBvZiB3aGF0IEknbSBsb29raW5nIGF0LiBJdCBzZWVtcyB2ZXJ5IGNsb3NlbHkgcmVsYXRlZCB0byBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjI3LjcxNjExNTU4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0NDA1MDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX3VubWFwX2ZpbGVfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFfb2Zmc2V0X2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBlbmQpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zNzgtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Mzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTM4MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ5Nz1zdGF0aWMgdm9pZCByZW1vdmVfaW5vZGVfc2luZ2xlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTAtXFx0aWYgKHVubGlrZWx5KGZvbGlvX21hcHBlZChmb2xpbykpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUxMTpcXHRcXHRodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oaCwgbWFwcGluZywgZm9saW8sIGluZGV4KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjMxLjM2MDE3MjI0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA4MzEyNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gIGZ1bmN0aW9uIOKAkyBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0J3Mgc3RhdGljLiBUaGF0IG5hcnJvd3MgbXkgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBsb29rIGZvciBrZXkgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSAqb3IgaW5kaXJlY3RseSogaW52b2x2ZWQgaW4gdGhlIHVubWFwcGluZyBwcm9jZXNzIG9mIGh1Z2UgcGFnZXMuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uOlxuXG4qICAgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgXG4qICAgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYFxuXG5JJ2xsIGFsc28gY29uc2lkZXIgdGhlc2UsIGFzIHRoZXkgbG9vayBwcm9taXNpbmc6XG5cbiogICBgX196YXBfdm1hX3JhbmdlYCDigJMgdGhvdWdoLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBiZWluZyBzdGF0aWMgYXMgd2VsbCwgd2l0aGluIGBtbS9tZW1vcnkuY2AuXG4qICAgYHphcF9wYWdlX3JhbmdlX3NpbmdsZWAg4oCTIHRoaXMgb25lIGNhbGxzIGBfX3phcF92bWFfcmFuZ2VgLCBzbyBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgZW50cnkgcG9pbnRcbiogICBgdW5tYXBfdm1hc2Ag4oCTIGl0IGxvb2tzIGxpa2UgdGhpcyBtYXkgdXNlIGBfX3phcF92bWFfcmFuZ2VgIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlclxuXG5HaXZlbiB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGUgaW5pdGlhbCBmdW5jdGlvbiwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY2FsbGVycyBvZiBgX196YXBfdm1hX3JhbmdlYC4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MzUuMTY4NDg3NTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDEyMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9femFwX3ZtYV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yMDU2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6YXBfcDRkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMDc0LVxcbm1tL21lbW9yeS5jOjIwNzU6c3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTIwNzYtXFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tZW1vcnkuYz0yMTI0PWludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vbWVtb3J5LmMtMjEzOC1cXHR9XFxubW0vbWVtb3J5LmM6MjEzOTpcXHRfX3phcF92bWFfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCBcXHUwMDI2ZGV0YWlscyk7XFxubW0vbWVtb3J5LmMtMjE0MC1cXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXFx1MDAyNnJhbmdlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIxNjE9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG4tLVxcbm1tL21lbW9yeS5jLTIxNzctXFx0XFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQpO1xcbm1tL21lbW9yeS5jOjIxNzg6XFx0XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBcXHUwMDI2ZGV0YWlscyk7XFxubW0vbWVtb3J5LmMtMjE3OS1cXHRcXHRodWdldGxiX3phcF9lbmQodm1hLCBcXHUwMDI2ZGV0YWlscyk7XFxuLS1cXG5tbS9tZW1vcnkuYz0yMTk5PXZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjE5LVxcdCAqL1xcbm1tL21lbW9yeS5jOjIyMjA6XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xcbm1tL21lbW9yeS5jLTIyMjEtXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjM1LjI1OTUxMzg5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU2NzA2ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEknbSByZXZpc2l0aW5nIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIGEgZmV3IHRoaW5ncyBhcmUgaW1tZWRpYXRlbHkgc3RhbmRpbmcgb3V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBzZWUgdGhhdCBgdW5tYXBfdm1hc2AsIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCwgYW5kIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGFyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBzaW5jZSB0aG9zZSBhcmVuJ3Qgc3RhdGljLCB0aGV5IGNvdWxkIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlaXIgaW1tZWRpYXRlIHNjb3BlLiBOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY2FsbGVycyBvZiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBzaW5jZSB0aGF0J3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb25zIEkganVzdCBvYnNlcnZlZCwgdG8gc2VlIGhvdyBhbmQgd2hlcmUgdGhhdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTozOC42MTYyMjQxMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjI4OTAwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM3OT1zdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxNi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0MTc6XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTgtXFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTEtXFx0XFx0aWYgKGh1Z2V0bGJfdm1hX21hcHNfcGZuKHZtYSwgdl9zdGFydCwgcGZuKSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTI6XFx0XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTMtXFx0XFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00NjM9aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCByYl9yb290X2NhY2hlZCAqcm9vdCwgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00ODItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDgzOlxcdFxcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgdl9zdGFydCwgdl9lbmQsIE5VTEwsIHphcF9mbGFncyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg0LVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg3LVxcdFxcdCAqIHZtYXMuICBUaGVyZWZvcmUsIGxvY2sgaXMgbm90IGhlbGQgd2hlbiBjYWxsaW5nXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg4OlxcdFxcdCAqIHVubWFwX2h1Z2VwYWdlX3JhbmdlIGZvciBwcml2YXRlIHZtYXMuXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg5LVxcdFxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI3PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjgtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTI5OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxLVxcdFxcdFxcdCAgc3RydWN0IGZvbGlvICosIHphcF9mbGFnc190KTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzI6dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMzLVxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD00MzE9c3RhdGljIGlubGluZSBsb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MzgtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDM5OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQwLVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaHVnZXRsYi5jPTUwODA9aW50IG1vdmVfaHVnZXRsYl9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01MTQ0LVxcbm1tL2h1Z2V0bGIuYzo1MTQ1OnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNTE0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmM9NTMxNz12b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzNDMtXFxubW0vaHVnZXRsYi5jOjUzNDQ6dm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9odWdldGxiLmMtNTM0NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzNTYtXFxubW0vaHVnZXRsYi5jOjUzNTc6XFx0X191bm1hcF9odWdlcGFnZV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIHN0YXJ0LCBlbmQsXFxubW0vaHVnZXRsYi5jLTUzNTgtXFx0XFx0XFx0ICAgICAgIGZvbGlvLCB6YXBfZmxhZ3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUzNzA9c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzODktXFx0ICogdGhpcyBtYXBwaW5nIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlIFZNQXMsXFxubW0vaHVnZXRsYi5jOjUzOTA6XFx0ICogX191bm1hcF9odWdlcGFnZV9yYW5nZSgpIGlzIGNhbGxlZCBhcyB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGRcXG5tbS9odWdldGxiLmMtNTM5MS1cXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDEzLVxcdFxcdGlmICghaXNfdm1hX3Jlc3Zfc2V0KGl0ZXJfdm1hLCBIUEFHRV9SRVNWX09XTkVSKSlcXG5tbS9odWdldGxiLmM6NTQxNDpcXHRcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZShpdGVyX3ZtYSwgYWRkcmVzcyxcXG5tbS9odWdldGxiLmMtNTQxNS1cXHRcXHRcXHRcXHRcXHQgICAgIGFkZHJlc3MgKyBodWdlX3BhZ2Vfc2l6ZShoKSxcXG4tLVxcbm1tL21lbW9yeS5jPTIwNzU9c3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMjA5Ny1cXHRcXHRcXHRyZXR1cm47XFxubW0vbWVtb3J5LmM6MjA5ODpcXHRcXHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xcbm1tL21lbW9yeS5jLTIwOTktXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6NDIuODc5MTIzMzc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzA2MDIyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipEZWNvbnN0cnVjdGluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBodWdlIHBhZ2VzIGdldCB1bm1hcHBlZC4gVGhlIGNvcmUgZnVuY3Rpb25zIEknbSB6ZXJvaW5nIGluIG9uIGFyZSBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAsIHdoaWNoIGFwcGVhcnMgdG8gaGFuZGxlIHRoZSBidWxrIG9mIHRoZSB3b3JrLCBhbmQgaXRzIGNvdW50ZXJwYXJ0IGB1bm1hcF9odWdlcGFnZV9yYW5nZWAuIE1ha2VzIHNlbnNlLCB0aGV5IHNvdW5kIGxpa2UgdGhlIGhlYXZ5IGxpZnRlcnMuIEFuZCBvZiBjb3Vyc2UsIHRoZXJlJ3MgYHVubWFwX3ZtYXNgLCB3aGljaCBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSBsb29raW5nIGF0IGNhbGxlcnMgb2YgYHVubWFwX3ZtYXNgIGFzIHRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjQ2LjAwOTcyOTg4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMjMxMjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bm1hcF92bWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTUzNT1XZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU0OS0gICAgICAgICAgICAgVk1BcywgOmM6ZnVuYzpgIXZtc19jbGVhcl9wdGVzYCBoYXMgYSB3aW5kb3cgb2YgdGltZSBiZXR3ZWVuXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo1NTA6ICAgICAgICAgICAgIHphcHBpbmcgKHZpYSA6YzpmdW5jOmAhdW5tYXBfdm1hc2ApIGFuZCBmcmVlaW5nIHBhZ2UgdGFibGVzICh2aWFcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU1MS0gICAgICAgICAgICAgOmM6ZnVuYzpgIWZyZWVfcGd0YWJsZXNgKSwgd2hlcmUgdGhlIFZNQSBpcyBzdGlsbCB2aXNpYmxlIGluIHRoZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMwNzY9c3RydWN0IHphcF9kZXRhaWxzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0zMDkwLSNkZWZpbmUgIFpBUF9GTEFHX0RST1BfTUFSS0VSICAgICAgICAoKF9fZm9yY2UgemFwX2ZsYWdzX3QpIEJJVCgwKSlcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzA5MTovKiBTZXQgaW4gdW5tYXBfdm1hcygpIHRvIGluZGljYXRlIGEgZmluYWwgdW5tYXAgY2FsbC4gIE9ubHkgdXNlZCBieSBodWdldGxiICovXFxuaW5jbHVkZS9saW51eC9tbS5oLTMwOTItI2RlZmluZSAgWkFQX0ZMQUdfVU5NQVAgICAgICAgICAgICAgICgoX19mb3JjZSB6YXBfZmxhZ3NfdCkgQklUKDEpKVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xODc9c3RhdGljIGlubGluZSB2b2lkIHZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMTk5LVxcbm1tL2ludGVybmFsLmg6MjAwOi8qIHVubWFwX3ZtYXMgaXMgaW4gbW0vbWVtb3J5LmMgKi9cXG5tbS9pbnRlcm5hbC5oOjIwMTp2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKTtcXG5tbS9pbnRlcm5hbC5oLTIwMi1cXG4tLVxcbm1tL21lbW9yeS5jPTIxMjQ9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYy0yMTQ1LS8qKlxcbm1tL21lbW9yeS5jOjIxNDY6ICogdW5tYXBfdm1hcyAtIHVubWFwIGEgcmFuZ2Ugb2YgbWVtb3J5IGNvdmVyZWQgYnkgYSBsaXN0IG9mIHZtYSdzXFxubW0vbWVtb3J5LmMtMjE0Ny0gKiBAdGxiOiBhZGRyZXNzIG9mIHRoZSBjYWxsZXIncyBzdHJ1Y3QgbW11X2dhdGhlclxcbi0tXFxubW0vbWVtb3J5LmMtMjE1NS0gKlxcbm1tL21lbW9yeS5jOjIxNTY6ICogdW5tYXBfdm1hcygpIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgZmx1c2ggdGhlIHdob2xlIHVubWFwcGVkIGFkZHJlc3NcXG5tbS9tZW1vcnkuYzoyMTU3OiAqIHJhbmdlIGFmdGVyIHVubWFwX3ZtYXMoKSByZXR1cm5zLiAgU28gdGhlIG9ubHkgcmVzcG9uc2liaWxpdHkgaGVyZSBpcyB0b1xcbm1tL21lbW9yeS5jOjIxNTg6ICogZW5zdXJlIHRoYXQgYW55IHRodXMtZmFyIHVubWFwcGVkIHBhZ2VzIGFyZSBmbHVzaGVkIGJlZm9yZSB1bm1hcF92bWFzKClcXG5tbS9tZW1vcnkuYy0yMTU5LSAqIGRyb3BzIHRoZSBsb2NrIGFuZCBzY2hlZHVsZXMuXFxubW0vbWVtb3J5LmMtMjE2MC0gKi9cXG5tbS9tZW1vcnkuYzoyMTYxOnZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxubW0vbWVtb3J5LmMtMjE2Mi17XFxuLS1cXG5tbS9tbWFwLmM9MTI3Mz12b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL21tYXAuYy0xMjk5LVxcdC8qIFVzZSBVTE9OR19NQVggaGVyZSB0byBlbnN1cmUgYWxsIFZNQXMgaW4gdGhlIG1tIGFyZSB1bm1hcHBlZCAqL1xcbm1tL21tYXAuYzoxMzAwOlxcdHVubWFwX3ZtYXMoXFx1MDAyNnRsYiwgXFx1MDAyNnVubWFwKTtcXG5tbS9tbWFwLmMtMTMwMS1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4tLVxcbm1tL3ZtYS5jPTQ4MT12b2lkIHVubWFwX3JlZ2lvbihzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxuLS1cXG5tbS92bWEuYy00ODctXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG5tbS92bWEuYzo0ODg6XFx0dW5tYXBfdm1hcyhcXHUwMDI2dGxiLCB1bm1hcCk7XFxubW0vdm1hLmMtNDg5LVxcdG1hc19zZXQodW5tYXAtXFx1MDAzZW1hcywgdW5tYXAtXFx1MDAzZXRyZWVfcmVzZXQpO1xcbi0tXFxubW0vdm1hLmM9MTMwNz1zdGF0aWMgdm9pZCB2bXNfY2xlYW5fdXBfYXJlYShzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG4tLVxcbm1tL3ZtYS5jLTEzMjEtLypcXG5tbS92bWEuYzoxMzIyOiAqIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcygpIC0gRmluaXNoIHRoZSBtdW5tYXAoKSBvcGVyYXRpb25cXG5tbS92bWEuYy0xMzIzLSAqIEB2bXM6IFRoZSB2bWEgbXVubWFwIHN0cnVjdFxcbi0tXFxubW0vdm1hLmMtMTMyOS0gKi9cXG5tbS92bWEuYzoxMzMwOnN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG5tbS92bWEuYy0xMzMxLVxcdFxcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcXG4tLVxcbm1tL3ZtYS5jPTEzNzc9c3RhdGljIHZvaWQgcmVhdHRhY2hfdm1hcyhzdHJ1Y3QgbWFfc3RhdGUgKm1hc19kZXRhY2gpXFxuLS1cXG5tbS92bWEuYy0xMzg4LS8qXFxubW0vdm1hLmM6MTM4OTogKiB2bXNfZ2F0aGVyX211bm1hcF92bWFzKCkgLSBQdXQgYWxsIFZNQXMgd2l0aGluIGEgcmFuZ2UgaW50byBhIG1hcGxlIHRyZWVcXG5tbS92bWEuYy0xMzkwLSAqIGZvciByZW1vdmFsIGF0IGEgbGF0ZXIgZGF0ZS4gIEhhbmRsZXMgc3BsaXR0aW5nIGZpcnN0IGFuZCBsYXN0IGlmIG5lY2Vzc2FyeVxcbi0tXFxubW0vdm1hLmMtMTM5Ny0gKi9cXG5tbS92bWEuYzoxMzk4OnN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG5tbS92bWEuYy0xMzk5LVxcdFxcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzX2RldGFjaClcXG4tLVxcbm1tL3ZtYS5jPTE1ODM9aW50IGRvX3ZtaV9hbGlnbl9tdW5tYXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3ZtYS5jLTE1OTQtXFx0aW5pdF92bWFfbXVubWFwKFxcdTAwMjZ2bXMsIHZtaSwgdm1hLCBzdGFydCwgZW5kLCB1ZiwgdW5sb2NrKTtcXG5tbS92bWEuYzoxNTk1OlxcdGVycm9yID0gdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhcXHUwMDI2dm1zLCBcXHUwMDI2bWFzX2RldGFjaCk7XFxubW0vdm1hLmMtMTU5Ni1cXHRpZiAoZXJyb3IpXFxuLS1cXG5tbS92bWEuYy0xNjAzLVxcdC8qIFBvaW50IG9mIG5vIHJldHVybiAqL1xcbm1tL3ZtYS5jOjE2MDQ6XFx0dm1zX2NvbXBsZXRlX211bm1hcF92bWFzKFxcdTAwMjZ2bXMsIFxcdTAwMjZtYXNfZGV0YWNoKTtcXG5tbS92bWEuYy0xNjA1LVxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1hLmM9MjM0MT1zdGF0aWMgYm9vbCBhY2NvdW50YWJsZV9tYXBwaW5nKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuLS1cXG5tbS92bWEuYy0yMzU3LS8qXFxubW0vdm1hLmM6MjM1ODogKiB2bXNfYWJvcnRfbXVubWFwX3ZtYXMoKSAtIFVuZG8gYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGFuIGFib3J0ZWQgbXVubWFwKClcXG5tbS92bWEuYy0yMzU5LSAqIG9wZXJhdGlvbi5cXG4tLVxcbm1tL3ZtYS5jLTIzNjctICovXFxubW0vdm1hLmM6MjM2ODpzdGF0aWMgdm9pZCB2bXNfYWJvcnRfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXFxubW0vdm1hLmMtMjM2OS1cXHRcXHRzdHJ1Y3QgbWFfc3RhdGUgKm1hc19kZXRhY2gpXFxuLS1cXG5tbS92bWEuYy0yMzg2LVxcdC8qIENsZWFuIHVwIHRoZSBpbnNlcnRpb24gb2YgdGhlIHVuZm9ydHVuYXRlIGdhcCAqL1xcbm1tL3ZtYS5jOjIzODc6XFx0dm1zX2NvbXBsZXRlX211bm1hcF92bWFzKHZtcywgbWFzX2RldGFjaCk7XFxubW0vdm1hLmMtMjM4OC19XFxuLS1cXG5tbS92bWEuYz0yNDIwPXN0YXRpYyBpbnQgX19tbWFwX3NldHVwKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXFxuLS1cXG5tbS92bWEuYy0yNDM4LVxcdFxcdC8qIFByZXBhcmUgdG8gdW5tYXAgYW55IGV4aXN0aW5nIG1hcHBpbmcgaW4gdGhlIGFyZWEgKi9cXG5tbS92bWEuYzoyNDM5OlxcdFxcdGVycm9yID0gdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyh2bXMsIFxcdTAwMjZtYXAtXFx1MDAzZW1hc19kZXRhY2gpO1xcbm1tL3ZtYS5jLTI0NDAtXFx0XFx0aWYgKGVycm9yKSB7XFxuLS1cXG5tbS92bWEuYz0yNjEwPXN0YXRpYyB2b2lkIF9fbW1hcF9jb21wbGV0ZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3ZtYS5jLTI2MTYtXFx0LyogVW5tYXAgYW55IGV4aXN0aW5nIG1hcHBpbmcgaW4gdGhlIGFyZWEuICovXFxubW0vdm1hLmM6MjYxNzpcXHR2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoXFx1MDAyNm1hcC1cXHUwMDNldm1zLCBcXHUwMDI2bWFwLVxcdTAwM2VtYXNfZGV0YWNoKTtcXG5tbS92bWEuYy0yNjE4LVxcbi0tXFxubW0vdm1hLmM9MjczND1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS92bWEuYy0yODA1LVxcdFxcdGZwdXQobWFwLmZpbGUpO1xcbm1tL3ZtYS5jOjI4MDY6XFx0dm1zX2Fib3J0X211bm1hcF92bWFzKFxcdTAwMjZtYXAudm1zLCBcXHUwMDI2bWFwLm1hc19kZXRhY2gpO1xcbm1tL3ZtYS5jLTI4MDctXFx0cmV0dXJuIGVycm9yO1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTM4OT1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2hpd2F0ZXJfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzkyLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaDozOTM6c3RhdGljIGlubGluZSB2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTo0OS44MTIwNTA1NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjk5OTgzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvcmUgTWVtb3J5IFVubWFwcGluZyBGdW5jdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IHVubWFwcGluZyB3aXRoaW4gdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgdG8gZGV0ZXJtaW5lIHRoZSBtb3N0IHJlbGV2YW50IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMuIGB1bm1hcF92bWFzYCBpcyBjbGVhcmx5IGNlbnRyYWw7IGl0J3MgY2FsbGVkIGJ5IGBleGl0X21tYXBgIGFuZCBgdW5tYXBfcmVnaW9uYCwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgcmVhY2hlZCB0aHJvdWdoIGB2bXNfY29tcGxldGVfbXVubWFwX3ZtYXNgLCBpdHNlbGYgY2FsbGVkIGJ5IGBkb192bWlfYWxpZ25fbXVubWFwYCBhbmQgYF9fbW1hcF9jb21wbGV0ZWAuIFNvLCBgdW5tYXBfdm1hc2AgaXMgYSBwcmltYXJ5IHBsYXllciBmb3IgZ2VuZXJhbCBWTUEgdW5tYXBwaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaHVnZSBwYWdlIHVubWFwcGluZy4gSSBsb29rZWQgYXQgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBhbmQgYHVubWFwX3JlZl9wcml2YXRlYC4gYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBpcyByZWFjaGVkIHRocm91Z2ggYGh1Z2V0bGJfdm1kZWxldGVfbGlzdGAgYW5kIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gLiBgaHVnZXRsYl92bWRlbGV0ZV9saXN0YCBpcyBjYWxsZWQgYnkgYGh1Z2V0bGJfdm10cnVuY2F0ZWAgYW5kIGBodWdldGxiZnNfcHVuY2hfaG9sZWAuIGBodWdldGxiX3VubWFwX2ZpbGVfZm9saW9gIGlzIGNhbGxlZCBieSBgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpb2AuIFRoZXJlZm9yZSBJIHNob3VsZCBmb2N1cyBvbiB0aGUgaHVnZSBwYWdlIHVubWFwcGluZyBjb2RlIHBhdGggYXMgd2VsbC5cblxuQmFzZWQgb24gdGhpcywgbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGlzOlxuKiAgIGBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlYFxuKiAgIGB1bm1hcF9odWdlcGFnZV9yYW5nZWBcbiogICBgdW5tYXBfdm1hc2BcbiogICBgemFwX3ZtYV9mb3JfcmVhcGluZ2BcbiogICBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYFxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBzeW1ib2xzIGFyZSBpbmxpbmVkLCBhcyBpbmxpbmVkIGZ1bmN0aW9ucyBhcmUgaGFyZGVyIHRvIHRhcmdldCBkaXJlY3RseSBmb3IgZnV6emluZy4gSSBjYW4gcnVsZSBvdXQgdGhlIGlubGluZWQgZnVuY3Rpb25zIHdpdGggc2ltcGxlIGNoZWNrcy4gQWxsIHRoZSBzeW1ib2xzIGFib3ZlIGFyZSBub3QgaW5saW5lZCBleGNlcHQgZm9yIGBodWdldGxiX3ZtZGVsZXRlX2xpc3RgIGFuZCBgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvYC4gVGhleSBhcmUgc3RhdGljLCBzbyB0aGV5ICptaWdodCogYmUgaW5saW5lZCwgYnV0IEkgd2lsbCBzdGlsbCBjb25zaWRlciB0aGVtLlxuXG5TbywgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBhcmU6XG4qICAgYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgXG4qICAgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYFxuKiAgIGB1bm1hcF92bWFzYFxuXG5OZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCB0byByZWFjaCB0aGVzZSBzeW1ib2xzLiBgSFVHRVRMQkZTYCBpcyB0aGUgbWFpbiBvbmU7IGBIVUdFVExCX1BBR0VgIGlzIGFsc28gbmVlZGVkLCBidXQgZGVmYXVsdHMgdG8gYEhVR0VUTEJGU2AsIHNvIGBIVUdFVExCRlNgIGlzIHN1ZmZpY2llbnQuXG5cbk15IHJlYXNvbmluZyBmb3IgdGFyZ2V0aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaHVnZXRsYiBwYWdlcywgcGFydGljdWxhcmx5IGR1cmluZyB1bm1hcHBpbmcgb3BlcmF0aW9ucy4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgYG11bm1hcGAgb3IgZmlsZSB0cnVuY2F0aW9uL3B1bmNoIGhvbGUgb3BlcmF0aW9ucyBvbiBodWdldGxiZnMgZmlsZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGFzc2VydGlvbiBpcyB2YWx1YWJsZSwgYXMgZnV6emluZyBpcyBpbnRlbmRlZCB0byBjYXVzZSBlcnJvcnMuXG5cblRodXMsIG15IGZ1enppbmcgdGFyZ2V0IGxpc3QgaXM6XG5cbiogICBgX191bm1hcF9odWdlcGFnZV9yYW5nZWBcbiogICBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgXG4qICAgYHVubWFwX3ZtYXNgXG5cbkNvbmZpZ3VyYXRpb246IGBIVUdFVExCRlNgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQ1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjU5Ljk4MjA3NTU4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NDExNjc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNjowNC4wNTYxOTczMDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyOTk5NTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIHRoZSBIdWdlVExCRlMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgSFVHRVRMQkZTYOKApiB0aGF0J3MgdGhlIG9uZS4gTm8gZG91YnQgYWJvdXQgaXQsIHRoZSBjb25maWd1cmF0aW9uIHNlZW1zIGNvcnJlY3QuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBCZWZvcmUgSSBtb3ZlIGZ1cnRoZXIsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGNydWNpYWwuIExldCdzIGRpZyBpbnRvIHRoZSBjb2Rl4oCmIExldCBtZSBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSBmdW5jdGlvbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLiBJZiBpdCB3ZXJlIHN0YXRpYywgaXQgd291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNjb3BlIGFuZCBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGNvbmZpcm1hdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNjowNy4yODYxOTc4NjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTI4MzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz01MDgwPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE0NC1cXG5tbS9odWdldGxiLmM6NTE0NTp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTUxNDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNjowOC4xNDE0ODgxMDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxOTIyNjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQXNzZXNzaW5nIHRoZSBOYXR1cmUgb2YgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCoqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgaXMgY2xlYXJseSBkeW5hbWljLCBub3QgYSBmaXhlZCBzdGF0ZS4gVGhhdCdzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBrZXkgY29tcG9uZW50OiBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBoZXJlLiBJcyB0aGlzIGZ1bmN0aW9uLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlIG9yIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoLCBpbmhlcmVudGx5IHN0YXRpYyBvciBkb2VzIGl0cyBiZWhhdmlvciBjaGFuZ2UgZHluYW1pY2FsbHk/IEFyZSB0aGVyZSBleHRlcm5hbCBmYWN0b3JzLCBydW50aW1lIGNvbmRpdGlvbnMsIG9yIGRhdGEgZGVwZW5kZW5jaWVzIHRoYXQgZGljdGF0ZSBpdHMgb3BlcmF0aW9uPyBPciBpcyBpdCBwcmVkaWN0YWJsZSwgdW5jaGFuZ2VkIGJhc2VkIG9uIHRob3NlIGV4dGVybmFsIGluZmx1ZW5jZXM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzICpkZWZpbml0ZWx5KiBub3Qgc3RhdGljYWxseSBkZWZpbmVkLiBLbm93aW5nIHRoaXMgd2lsbCBkaXJlY3RseSBpbXBhY3QgaG93IEkgYXBwcm9hY2ggZGVidWdnaW5nIGFuZC9vciBvcHRpbWl6aW5nIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE2OjExLjQ2MDcyNjc0N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxOTE4MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz01MzE3PXZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM0My1cXG5tbS9odWdldGxiLmM6NTM0NDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2h1Z2V0bGIuYy01MzQ1LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE2OjExLjU5MjY1MDM5NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYwNjEyMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRHluYW1pc20qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBjb25jZXB0IGlzbid0IGluaGVyZW50bHkgc3RhdGljIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB0aGlzOiBjYW4gd2UgZGVmaW5pdGl2ZWx5IGNvbmZpcm0gdGhhdCB0aGUgYmVoYXZpb3Igb2YgYHVubWFwX3ZtYXNgIGlzbid0IHN0YXRpYyBpbiBpdHMgaW1wbGVtZW50YXRpb24/IFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gcG9zc2Vzc2VzIHRoZSBjYXBhY2l0eSB0byBhZGFwdCB0byBjaGFuZ2luZyBjb25kaXRpb25zIG9yIGV4dGVybmFsIGlucHV0cy4gQSBjdXJzb3J5IHJldmlldyB3b24ndCBzdWZmaWNlOyB3ZSBoYXZlIHRvIGRlbHZlIGRlZXBlciB0byB1bmRlcnN0YW5kIGlmIGl0cyBpbnRlcm5hbCB3b3JraW5ncyBkeW5hbWljYWxseSBhZGp1c3QgYmFzZWQgb24gdGhlIHJ1bnRpbWUgY29udGV4dC4gSXMgaXQgdHJ1bHkgcmVhY3RpdmUsIG9yIGRvZXMgaXRzIGJlaGF2aW9yIHJlbWFpbiBmaXhlZCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBzdGF0ZT8gVGhpcyBpbnZlc3RpZ2F0aW9uIGRlbWFuZHMgYSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgc3lzdGVtIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDMxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTY6MTQuNzUzMjY1MzYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzMTAyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB1bm1hcF92bWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTIxMjQ9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYy0yMTYwLSAqL1xcbm1tL21lbW9yeS5jOjIxNjE6dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG5tbS9tZW1vcnkuYy0yMTYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTY6MTQuODc4NTgxODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxODcwNjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gcHJvY2Vzc2luZyB0aGlzIGluZm9ybWF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgc2l0dWF0aW9uIGlzICpub3QqIGEgc3RhdGljIG9uZS4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIgd2l0aCBhbnkgYW5hbHlzaXMgb3IgYWN0aW9uLiBJdCdzIGEga2V5IG9ic2VydmF0aW9uLCBhbmQgdGhlIGZvdW5kYXRpb24gb2Ygd2hhdGV2ZXIgc3RlcHMgSSB0YWtlIG5leHQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBkZWxpdmVyIHRoZSByZXN1bHRzIGluIGEgcHJlY2lzZSBtYW5uZXIuIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgaXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9yIGNvbW11bmljYXRpbmcgdGhlIGZpbmRpbmdzIGVmZmVjdGl2ZWx5LiBJJ2xsIG1ha2Ugc3VyZSBpdCBpcyBhY2N1cmF0ZSwgd2VsbC1mb3JtYXR0ZWQsIGFuZCBlYXNpbHkgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NTcsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTY6MTguNDk3MjkwOTMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5ODE0MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3VubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJ1bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICAgIFwidW5tYXBfdm1hc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIHJlc3RvcmluZyB0aGUgcmVzZXJ2YXRpb24gZm9yIGFub255bW91cyBwYWdlcyBpbiBgX191bm1hcF9odWdlcGFnZV9yYW5nZWAgaW4gYG1tL2h1Z2V0bGIuY2AuIEl0IGFsc28gYWRkcyBhbiBhc3NlcnRpb24gYGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGh1Z2V0bGIgcGFnZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdW5tYXBwaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGBtdW5tYXBgIG9yIGZpbGUgdHJ1bmNhdGlvbi9wdW5jaCBob2xlIG9wZXJhdGlvbnMgb24gaHVnZXRsYmZzIGZpbGVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bm1hcF9odWdlcGFnZV9yYW5nZVwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcInVubWFwX3ZtYXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlc2VydmF0aW9uIGZvciBhbm9ueW1vdXMgcGFnZXMgaW4gYF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGluIGBtbS9odWdldGxiLmNgLiBJdCBhbHNvIGFkZHMgYW4gYXNzZXJ0aW9uIGBpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBodWdldGxiIHBhZ2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVubWFwcGluZyBvcGVyYXRpb25zLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgbXVubWFwYCBvciBmaWxlIHRydW5jYXRpb24vcHVuY2ggaG9sZSBvcGVyYXRpb25zIG9uIGh1Z2V0bGJmcyBmaWxlcy4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[1] Phase: Succeeded StartedAt: 2026-07-30 02:16:30 +0000 UTC FinishedAt: 2026-07-30 02:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 02:16:31 +0000 UTC FinishedAt: 2026-07-30 02:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2] Phase: Succeeded StartedAt: 2026-07-30 02:16:31 +0000 UTC FinishedAt: 2026-07-30 03:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-30 02:16:31 +0000 UTC FinishedAt: 2026-07-30 03:40:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 02:16:31 +0000 UTC FinishedAt: 2026-07-30 02:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 02:16:31 +0000 UTC FinishedAt: 2026-07-30 02:16:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7ggsq/series-workflow7ggsq-convert-artifact-1818915282/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 02:16:42 +0000 UTC FinishedAt: 2026-07-30 02:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 02:16:42 +0000 UTC FinishedAt: 2026-07-30 02:49:40 +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:*3583cc54-f3eb-4a13-951b-d1708a0e8a80,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-workflow7ggsq/series-workflow7ggsq-convert-artifact-1818915282/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": "bff159ec-a25f-4270-ada3-8b9fbc06be54", "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-workflow7ggsq/series-workflow7ggsq-build-action-1737090640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 02:16:42 +0000 UTC FinishedAt: 2026-07-30 02:49:30 +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:*3583cc54-f3eb-4a13-951b-d1708a0e8a80,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-workflow7ggsq/series-workflow7ggsq-convert-artifact-1818915282/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": "bff159ec-a25f-4270-ada3-8b9fbc06be54", "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-workflow7ggsq/series-workflow7ggsq-build-action-1737090640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 02:49:40 +0000 UTC FinishedAt: 2026-07-30 02:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 02:49:40 +0000 UTC FinishedAt: 2026-07-30 02:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 02:49:40 +0000 UTC FinishedAt: 2026-07-30 02:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 02:49:40 +0000 UTC FinishedAt: 2026-07-30 02:49:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7ggsq/series-workflow7ggsq-convert-artifact-2765195245/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 02:49:50 +0000 UTC FinishedAt: 2026-07-30 02:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 02:49:50 +0000 UTC FinishedAt: 2026-07-30 02:52:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bff159ec-a25f-4270-ada3-8b9fbc06be54,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-workflow7ggsq/series-workflow7ggsq-build-action-1737090640/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-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 02:52:12 +0000 UTC FinishedAt: 2026-07-30 02:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 02:52:12 +0000 UTC FinishedAt: 2026-07-30 02:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 02:52:12 +0000 UTC FinishedAt: 2026-07-30 03:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 02:52:12 +0000 UTC FinishedAt: 2026-07-30 03:14:39 +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:*3583cc54-f3eb-4a13-951b-d1708a0e8a80,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-workflow7ggsq/series-workflow7ggsq-convert-artifact-2765195245/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": "b50ff58d-4bba-4471-a173-e2dd6704ce6b", "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-workflow7ggsq/series-workflow7ggsq-build-action-4181211465/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 02:52:12 +0000 UTC FinishedAt: 2026-07-30 03:14:22 +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:*3583cc54-f3eb-4a13-951b-d1708a0e8a80,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-workflow7ggsq/series-workflow7ggsq-convert-artifact-2765195245/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": "b50ff58d-4bba-4471-a173-e2dd6704ce6b", "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-workflow7ggsq/series-workflow7ggsq-build-action-4181211465/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 03:14:39 +0000 UTC FinishedAt: 2026-07-30 03:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 03:14:39 +0000 UTC FinishedAt: 2026-07-30 03:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 03:14:39 +0000 UTC FinishedAt: 2026-07-30 03:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 03:14:39 +0000 UTC FinishedAt: 2026-07-30 03:16:17 +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:*b50ff58d-4bba-4471-a173-e2dd6704ce6b,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-workflow7ggsq/series-workflow7ggsq-build-action-4181211465/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-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-30 03:16:28 +0000 UTC FinishedAt: 2026-07-30 03:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 03:16:28 +0000 UTC FinishedAt: 2026-07-30 03:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 03:16:28 +0000 UTC FinishedAt: 2026-07-30 03:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-30 03:16:29 +0000 UTC FinishedAt: 2026-07-30 03:40:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},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:*bff159ec-a25f-4270-ada3-8b9fbc06be54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b50ff58d-4bba-4471-a173-e2dd6704ce6b,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-workflow7ggsq/series-workflow7ggsq-build-action-1737090640/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-workflow7ggsq/series-workflow7ggsq-build-action-4181211465/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 03:16:29 +0000 UTC FinishedAt: 2026-07-30 03:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 03:16:29 +0000 UTC FinishedAt: 2026-07-30 03:16:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},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-workflow7ggsq/series-workflow7ggsq-convert-artifact-2697849682/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 03:16:29 +0000 UTC FinishedAt: 2026-07-30 03:16:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-07-30 03:16:40 +0000 UTC FinishedAt: 2026-07-30 03:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__unmap_hugepage_range","unmap_hugepage_range","unmap_vmas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c05e3f09bd3009658eca5ccd850d3396f513cec1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1ed754ad-e343-4725-a94b-3ecc67fa64a0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-07-30 03:16:40 +0000 UTC FinishedAt: 2026-07-30 03:40:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bff159ec-a25f-4270-ada3-8b9fbc06be54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b50ff58d-4bba-4471-a173-e2dd6704ce6b,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-workflow7ggsq/series-workflow7ggsq-build-action-1737090640/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-workflow7ggsq/series-workflow7ggsq-build-action-4181211465/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-workflow7ggsq/series-workflow7ggsq-convert-artifact-2697849682/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil