Name: series-workflow42mc8 Phase: Succeeded StartedAt: 2026-07-15 19:23:27 +0000 UTC FinishedAt: 2026-07-16 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[0] Phase: Succeeded StartedAt: 2026-07-15 19:23:27 +0000 UTC FinishedAt: 2026-07-15 19:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 19:23:27 +0000 UTC FinishedAt: 2026-07-15 19:42:35 +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": "59c684a9908d2e6f7a791f7f033eae57ec2b3a61", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "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": "59c684a9908d2e6f7a791f7f033eae57ec2b3a61", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "series_id": "cef1d023-118a-4ca1-ae39-fa5808900ea9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "cond_install_uffd_wp_ptes" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZjI4OGU1ZTJmZTMzZWE5MWI5YzM2MjQ1MDkxM2JkOWEwMzhlMjhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTk6NDE6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA1NTBmYjkyOTU3ZDE4OS4uOTRlMGE5MmJjNzBiMTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTU0MDYsNCAmIzQzOzU0MDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGJvb2wgdWZmZF93cCk7XG4gXG4mIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7XG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfTU1fSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNTY2LDU5ICYjNDM7NTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcihcbiBcdHJldHVybiBkc3RtO1xuIH1cbiBcbi0vKlxuLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvXG4tICogcmVwbGFjZSBhIG5vbmUgcHRlLiAgTk9URSEgIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gKnB0ZSBpcyBhbHJlYWR5XG4tICogY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZyB2YWx1YWJsZS4gIE1lYW53aGlsZVxuLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuXG4tICogRS5nLiwgd2hlbiBwdGUgY2xlYXJlZCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIHRsYiBmbHVzaC5cbi0gKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmVcbi0gKiBwdGUsIGFuZCBpZiB0aGV5IHNlZSBpdCwgdGhleSYjMzk7bGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGUgcGd0YWJsZSBsb2NrLlxuLSAqXG4tICogUmV0dXJucyB0cnVlIGlmIGFuIHVmZmQtd3AgcHRlIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZXZhbClcbi17XG4tXHRib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlO1xuLVxuLVx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXCYjMzQ7Y2xlYXJlZFwmIzM0OyBiZWZvcmUgY2FsbGluZyAqL1xuLVx0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7XG4tXG4tXHQvKlxuLVx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbi1cdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlXG4tXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuLVx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUmIzM5O3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC5cbi1cdCAqL1xuLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhdXNlcmZhdWx0ZmRfd3Aodm1hKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXG4tXHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHQvKlxuLVx0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cbi1cdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4tXHQgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZXZhbCkpKVxuLVx0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuLVxuLVx0aWYgKHVubGlrZWx5KGFybV91ZmZkX3B0ZSkpIHtcbi1cdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcbi1cdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9TRVFfUkVBRCB8IFZNX1JBTkRfUkVBRCkpXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDVlODc2MjRmNjkyMDUuLjVkMmI1NjdiMzgzZDQ5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMTY3NSw2ICYjNDM7MTY3NSw2OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gXHRyZXR1cm4gZGV0YWlscy1cdTAwM2V6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbiYjNDM7ICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxuJiM0MzsgKiBAcHRlOiBPbGQgdmFsdWUgb2YgdGhlIGVudHJ5IHBvaW50ZWQgdG8gYnkgQHB0ZXAuXG4mIzQzOyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgUFRFcyB3ZXJlIHdyaXRlLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gc3BlY2lhbFxuJiM0MzsgKiBQVEVzIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzXG4mIzQzOyAqIGFyZSBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmdcbiYjNDM7ICogdmFsdWFibGUuIE1lYW53aGlsZSBub25lIFBURXMgYWxzbyBtZWFuIHdlIGFyZSBub3QgZGVtb3RpbmcgdGhlIFBURXMgc28gYVxuJiM0MzsgKiBUTEIgZmx1c2ggaXMgbm90IG5lZWRlZC4gRS5nLiwgd2hlbiBQVEVzIHdlcmUgY2xlYXJlZCwgdGhlIGNhbGxlciBzaG91bGRcbiYjNDM7ICogaGF2ZSB0YWtlbiBjYXJlIG9mIHRoZSBUTEIgZmx1c2guXG4mIzQzOyAqXG4mIzQzOyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHBhZ2UgdGFibGUgbG9jayBoZWxkIHNvIHRoYXQgbm8gdGhyZWFkIHdpbGwgc2VlXG4mIzQzOyAqIHRoZSBub25lIFBURXMsIGFuZCBpZiB0aGV5IHNlZSB0aGVtLCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZVxuJiM0MzsgKiBwYWdlIHRhYmxlIGxvY2suXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcylcbiYjNDM7e1xuJiM0MztcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwmIzM0O2NsZWFyZWRcJiMzNDsgYmVmb3JlIGNhbGxpbmcgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbiYjNDM7XHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0JiMzOTtzIGRyb3BwaW5nIHRoZVxuJiM0MztcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4mIzQzO1x0ICogd2l0aCBhIHN3YXAgcHRlLiBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqL1xuJiM0MztcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGUpKSlcbiYjNDM7XHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBzd2FwIHB0ZS4gTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuJiM0MztcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpXG4mIzQzO1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgXHUwMDNjIG5yX3B0ZXM7ICYjNDM7JiM0MztpLCAmIzQzOyYjNDM7cHRlcCwgYWRkciAmIzQzOz0gUEFHRV9TSVpFKVxuJiM0MztcdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXG4mIzQzO1x0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSYjMzk7bGwgcmVwbGFjZSB0aGUgbm9uZSBwdGUgd2l0aCBhbiB1ZmZkLXdwXG4gICogc3dhcCBzcGVjaWFsIHB0ZSBtYXJrZXIgd2hlbiBuZWNlc3NhcnkuIE11c3QgYmUgd2l0aCB0aGUgcGd0YWJsZSBsb2NrIGhlbGQuXG5AQCAtMTY4NiwyOSAmIzQzOzE3NDksMTAgQEAgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4gXHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4ge1xuLVx0Ym9vbCB3YXNfaW5zdGFsbGVkID0gZmFsc2U7XG4tXG4tXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdC8qIFphcCBvbiBhbm9ueW1vdXMgYWx3YXlzIG1lYW5zIGRyb3BwaW5nIGV2ZXJ5dGhpbmcgKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRmb3IgKDs7KSB7XG4tXHRcdC8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqL1xuLVx0XHRpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpXG4tXHRcdFx0d2FzX2luc3RhbGxlZCA9IHRydWU7XG4tXHRcdGlmICgtLW5yID09IDApXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHB0ZSYjNDM7JiM0Mzs7XG4tXHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi1cdH1cbi1cbi1cdHJldHVybiB3YXNfaW5zdGFsbGVkO1xuJiM0MztcdHJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGFkODIwZmU4NmY3ZDhjLi5hYzg4NjczNjAwZmEwZiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMTk2NSw5ICYjNDM7MTk2NSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKHB0ZV91bnVzZWQocHRlKSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0LypcbiBcdCAqIElmIHVubWFwIGZhaWxzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHB0ZXMuIFRvIGF2b2lkIGFjY2lkZW50YWxseVxuIFx0ICogdXBncmFkaW5nIHdyaXRlIHBlcm1pc3Npb25zIGZvciBwdGVzIHRoYXQgd2VyZSBub3Qgb3JpZ2luYWxseVxuQEAgLTIzNDUsNyAmIzQzOzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcbiBcdFx0ICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLlxuIFx0XHQgKi9cbi1cdFx0cHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbiYjNDM7XHRcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuJiM0MztcdFx0XHRcdFx0ICBucl9wYWdlcyk7XG4gXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7UFRFX01BUktFUl9VRkZEX1dQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMgd2hlbiBjbGVhcmluZyBQVEVzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL21lbW9yeS5jIGFuZCBtbS9ybWFwLmMgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSwgb3B0aW1pemluZyB1bm1hcHBpbmcgb2YgZm9saW9zIGluIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBQVEUgbWFya2VycyBhcmUgbGVha2VkIG9yIGluY29ycmVjdGx5IGluc3RhbGxlZCBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmYyODhlNWUyZmUzM2VhOTFiOWMzNjI0NTA5MTNiZDlhMDM4ZTI4ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDE5OjQxOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDU1MGZiOTI5NTdkMTg5Li45NGUwYTkyYmM3MGIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtNTQwNiw0ICYjNDM7NTQwNiw4IEBAIHZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJYm9vbCB1ZmZkX3dwKTsKIAomIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLAomIzQzOwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0ZXMpOwomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9NTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtNTY2LDU5ICYjNDM7NTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcigKIAlyZXR1cm4gZHN0bTsKIH0KIAotLyoKLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvCi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHkKLSAqIGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuICBNZWFud2hpbGUKLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuCi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmUKLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suCi0gKgotICogUmV0dXJucyB0cnVlIGlmIGFuIHVmZmQtd3AgcHRlIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKQotewotCWJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7Ci0KLQlpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwotCVdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpOwotCi0JLyoKLQkgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJiMzOTt0IG5lZWQgdGhpcyB3aG9sZQotCSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCi0JICogcGFnZSwgb3IgaW4gVFRVIHdoZXJlIHRoZSBwcmVzZW50IHB0ZSB3aWxsIGJlIHF1aWNrbHkgcmVwbGFjZWQKLQkgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LgotCSAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqLwotCWlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpICZhbXA7JmFtcDsgcHRlX3VmZmQocHRldmFsKSkpCi0JCWFybV91ZmZkX3B0ZSA9IHRydWU7Ci0KLQkvKgotCSAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuCi0JICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC4KLQkgKi8KLQlpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGV2YWwpKSkKLQkJYXJtX3VmZmRfcHRlID0gdHJ1ZTsKLQotCWlmICh1bmxpa2VseShhcm1fdWZmZF9wdGUpKSB7Ci0JCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlLAotCQkJICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZDVlODc2MjRmNjkyMDUuLjVkMmI1NjdiMzgzZDQ5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMTY3NSw2ICYjNDM7MTY3NSw2OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpCiAJcmV0dXJuIGRldGFpbHMtJmd0O3phcF9mbGFncyAmYW1wOyBaQVBfRkxBR19EUk9QX01BUktFUjsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzCiYjNDM7ICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLgomIzQzOyAqIEBhZGRyOiBBZGRyZXNzIHRoZSBmaXJzdCBwYWdlIG9mIHRoaXMgYmF0Y2ggaXMgbWFwcGVkIGF0LgomIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLgomIzQzOyAqIEBwdGU6IE9sZCB2YWx1ZSBvZiB0aGUgZW50cnkgcG9pbnRlZCB0byBieSBAcHRlcC4KJiM0MzsgKiBAbnJfcHRlczogTnVtYmVyIG9mIGVudHJpZXMgdG8gaW5zdGFsbC4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBQVEVzIHdlcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSBzcGVjaWFsCiYjNDM7ICogUFRFcyB0byByZXBsYWNlIG5vbmUgUFRFcy4gTk9URSEgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgUFRFcwomIzQzOyAqIGFyZSBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcKJiM0MzsgKiB2YWx1YWJsZS4gTWVhbndoaWxlIG5vbmUgUFRFcyBhbHNvIG1lYW4gd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgUFRFcyBzbyBhCiYjNDM7ICogVExCIGZsdXNoIGlzIG5vdCBuZWVkZWQuIEUuZy4sIHdoZW4gUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkCiYjNDM7ICogaGF2ZSB0YWtlbiBjYXJlIG9mIHRoZSBUTEIgZmx1c2guCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZQomIzQzOyAqIHRoZSBub25lIFBURXMsIGFuZCBpZiB0aGV5IHNlZSB0aGVtLCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZQomIzQzOyAqIHBhZ2UgdGFibGUgbG9jay4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3B0ZXMpCiYjNDM7ewomIzQzOwlib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwomIzQzOwlXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24mIzM5O3QgbmVlZCB0aGlzIHdob2xlCiYjNDM7CSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCiYjNDM7CSAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkCiYjNDM7CSAqIHdpdGggYSBzd2FwIHB0ZS4gVGhlcmUmIzM5O3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC4KJiM0MzsJICovCiYjNDM7CWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqLwomIzQzOwlpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRlKSAmYW1wOyZhbXA7IHB0ZV91ZmZkKHB0ZSkpKQomIzQzOwkJYXJtX3VmZmRfcHRlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBzd2FwIHB0ZS4gTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhbgomIzQzOwkgKiBleGlzdGluZyBwdGUgbWFya2VyIHdpdGggdWZmZC13cCBiaXQgc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpCiYjNDM7CQlhcm1fdWZmZF9wdGUgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgJmx0OyBucl9wdGVzOyAmIzQzOyYjNDM7aSwgJiM0MzsmIzQzO3B0ZXAsIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkKJiM0MzsJCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwKJiM0MzsJCQkgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSYjMzk7bGwgcmVwbGFjZSB0aGUgbm9uZSBwdGUgd2l0aCBhbiB1ZmZkLXdwCiAgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC4KQEAgLTE2ODYsMjkgJiM0MzsxNzQ5LDEwIEBAIHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsCiAJCQkgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbCkKIHsKLQlib29sIHdhc19pbnN0YWxsZWQgPSBmYWxzZTsKLQotCWlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpCi0JCXJldHVybiBmYWxzZTsKLQogCWlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlmb3IgKDs7KSB7Ci0JCS8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqLwotCQlpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpCi0JCQl3YXNfaW5zdGFsbGVkID0gdHJ1ZTsKLQkJaWYgKC0tbnIgPT0gMCkKLQkJCWJyZWFrOwotCQlwdGUmIzQzOyYjNDM7OwotCQlhZGRyICYjNDM7PSBQQUdFX1NJWkU7Ci0JfQotCi0JcmV0dXJuIHdhc19pbnN0YWxsZWQ7CiYjNDM7CXJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBhZDgyMGZlODZmN2Q4Yy4uYWM4ODY3MzYwMGZhMGYgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTE5NjUsOSAmIzQzOzE5NjUsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAocHRlX3VudXNlZChwdGUpKQogCQlyZXR1cm4gMTsKIAotCWlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSkKLQkJcmV0dXJuIDE7Ci0KIAkvKgogCSAqIElmIHVubWFwIGZhaWxzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHB0ZXMuIFRvIGF2b2lkIGFjY2lkZW50YWxseQogCSAqIHVwZ3JhZGluZyB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgcHRlcyB0aGF0IHdlcmUgbm90IG9yaWdpbmFsbHkKQEAgLTIzNDUsNyAmIzQzOzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWYKIAkJICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLgogCQkgKi8KLQkJcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKJiM0MzsJCWNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLAomIzQzOwkJCQkJICBucl9wYWdlcyk7CiAKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVXNlcmZhdWx0ZmQgV3JpdGUgUHJvdGVjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYHVzZXJmYXVsdGZkYCBhbmQgYHJtYXBgLiBUaGUgZ29hbCBzZWVtcyB0byBiZSBvcHRpbWl6YXRpb24sIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIGhvdyB0aGUgYHVmZmQtd3BgICh1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uKSBQVEUgbWFya2VycyBhcmUgaGFuZGxlZCB3aGVuIFBURXMgYXJlIGNsZWFyZWQuCgpJbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBzaW5nbGUtUFRFIGFwcHJvYWNoIGluIGBwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIHRoZSBsb2dpYyBpcyBiZWluZyBzaGlmdGVkIHRvIGEgYmF0Y2ggb3BlcmF0aW9uIHdpdGhpbiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIFRoYXTigJlzIGEgZ29vZCBtb3ZlLCBwb3RlbnRpYWxseSBvZmZlcmluZyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgaW4gYnVsayB1bm1hcHBpbmcgc2NlbmFyaW9zLgoKRnVydGhlcm1vcmUsIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGluIGBtbS9ybWFwLmNgLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoYXQgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpIHJldHVybiAxO2AuIFRoaXMgY2hhbmdlIGxldHMgdGhlIHN5c3RlbSBiYXRjaCB1bm1hcCBldmVuIGlmIHRoZSBWTUEgaGFzIHRoZSBgdXNlcmZhdWx0ZmRgIHByb3RlY3Rpb24gYWN0aXZlLiBDbGV2ZXIsIGFsbG93aW5nIGJhdGNoIHVubWFwcGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgcHJvdGVjdGlvbiBpcyBlbmFibGVkLgoKQW5kIGluIGB0cnlfdG9fdW5tYXBfb25lYCwgd2UmIzM5O3JlIGFsc28gc2VlaW5nIHRoZSBjYWxsIHRvIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB3aXRoIHRoZSBgbnJfcGFnZXNgIGFyZ3VtZW50LCBpbnN0ZWFkIG9mIHRoYXQgc2luZ2xlIFBURSBoYW5kbGluZy4gVGhpcyByZWluZm9yY2VzIHRoZSBiYXRjaCB1bm1hcHBpbmcgc3RyYXRlZ3kuCgpGdW5jdGlvbmFsbHksIHRoaXMgc2hvdWxkIG9wdGltaXplIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zIHdpdGhpbiBgdXNlcmZhdWx0ZmRgLXByb3RlY3RlZCBWTUFzLCBlbmFibGluZyBiYXRjaGluZyBvcGVyYXRpb25zLiBOb3csIGxldOKAmXMgZGlnIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB0aGlzLgoKSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhlIGNvZGUgaXRzZWxmIGZvciByb2J1c3RuZXNzLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQsIHNpbmNlIGl0IGRlYWxzIHdpdGggYHVzZXJmYXVsdGZkYCBhbmQgYHVmZmQtd3BgLiBJIGFscmVhZHkga25vdyBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgb2J2aW91cyBvbmUgZm9yIHRoZSB1c2VyZmF1bHRmZCBpdHNlbGYuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYG1tL0tjb25maWdgLCBgZnMvS2NvbmZpZ2Agb3IgYGluaXQvS2NvbmZpZ2AgZm9yIHRoZSBjb25maWd1cmF0aW9uIGZvciBgdWZmZC13cGAuIFBlcmhhcHMgdGhlcmUgaXMgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAsIG9yIG1heWJlIHNvbWV0aGluZyBtb3JlIGdlbmVyYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM2OD1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzcyLVxubW0vS2NvbmZpZzoxMzczOmNvbmZpZyBVU0VSRkFVTFRGRF9SV1Bcbm1tL0tjb25maWctMTM3NC1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTEzODEtXG5tbS9LY29uZmlnOjEzODI6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxubW0vS2NvbmZpZy0xMzgzLVx0Ym9vbCBcJiMzNDtFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBQVEVfTUFSS0VSX1VGRkRfV1BgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIGdvdCBtZSBsb29raW5nIGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgbWFya2VyIHVzZWQgZm9yIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJvbGUgdGhpcyBwbGF5cyBpbiB0aGUgb3ZlcmFsbCB1c2VyZmF1bHRmZCBtZWNoYW5pc20uIFNwZWNpZmljYWxseSwgdGhpcyBmbGFnIGlzIGNydWNpYWwgZm9yIGFsbG93aW5nIHVzZXItc3BhY2UgaGFuZGxlcnMgdG8gbWFuYWdlIHdyaXRlcyB0byBwYWdlcyB0aGF0IGFyZSBpbml0aWFsbHkgbWFya2VkIGFzIHJlYWQtb25seSwgYnV0IHNob3VsZCBiZSB3cml0ZWFibGUgYWZ0ZXIgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZCBieSB1c2VyZmF1bHRmZC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBwYXRoIHRocm91Z2ggdGhlIGtlcm5lbCwgY29uc2lkZXIgd2hlcmUgaXQmIzM5O3Mgc2V0LCB3aGVyZSBpdCYjMzk7cyBjaGVja2VkLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gSSB3aWxsIGtlZXAgYW4gZXllIG9wZW4gZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1ZSB0byBjb25jdXJyZW50IGFjY2VzcyB0byB0aGVzZSBwYWdlIHRhYmxlIGVudHJpZXMuIFRoZSBnb2FsIGlzIHRvIHZlcmlmeSBldmVyeXRoaW5nIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgbWVtb3J5IHByb3RlY3Rpb24sIHVzZXJmYXVsdGZkIGhhbmRsZXJzLCBhbmQgYW55IHJlbGF0ZWQgb3B0aW1pemF0aW9ucy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgaW50ZXJhY3Rpb24gd2l0aCBhbnkgcmVsZXZhbnQgQ1BVIGZlYXR1cmVzLCBsaWtlIGhhcmR3YXJlIHBhZ2UgdGFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTEzODgtXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxubW0vS2NvbmZpZy0xMzkwLVx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBVU0VSRkFVTFRGRGAgYW5kIFdyaXRlIFByb3RlY3Rpb24gaW4gUGFnZSBUYWJsZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgVVNFUkZBVUxURkRgIGFuZCB0aGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgIGZsYWcuIFRoZXkmIzM5O3JlIGNsZWFybHkgcmVsYXRlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIuIEkga25vdyB0aGVyZSYjMzk7cyBhIGNvbm5lY3Rpb24gdG8gaGFuZGxpbmcgd3JpdGUgZmF1bHRzLCBwYXJ0aWN1bGFybHkgaW4gdXNlci1zcGFjZSBtZW1vcnkgbWFuYWdlbWVudC4KCk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHdpdGhpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbG9naWMgYmVoaW5kIGNvbmRpdGlvbmFsbHkgaW5zdGFsbGluZyBvciBzZXR0aW5nIHRoYXQgd3JpdGUtcHJvdGVjdGlvbiBmbGFnIG9uIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpLiBXaGF0JiMzOTtzIHRoZSBnYXRpbmcgbWVjaGFuaXNtIHRoZXJlPyBXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgZmxhZyBiZWluZyBzZXQ/IEhvdyBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggdGhlIGZhdWx0IGhhbmRsaW5nIHByb2Nlc3M/IEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGVuIGFuZCBob3cgYFVTRVJGQVVMVEZEYCBpcyBsZXZlcmFnaW5nIHRoaXMgUFRFIG1hcmtpbmcgZm9yIHdyaXRlIHByb3RlY3Rpb24gbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD01NDA1PXZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwOC1cbmluY2x1ZGUvbGludXgvbW0uaDo1NDA5OmJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9tbS5oLTU0MTAtXHRcdFx0ICAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXG4tLVxubW0vbWVtb3J5LmM9MTY3MD1zdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4tLVxubW0vbWVtb3J5LmMtMTY3OC0vKipcbm1tL21lbW9yeS5jOjE2Nzk6ICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcbm1tL21lbW9yeS5jLTE2ODAtICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxuLS1cbm1tL21lbW9yeS5jLTE2OTgtICovXG5tbS9tZW1vcnkuYzoxNjk5OmJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL21lbW9yeS5jLTE3MDAtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbi0tXG5tbS9tZW1vcnkuYz0xNzQ4PXphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTE3NTQtXG5tbS9tZW1vcnkuYzoxNzU1Olx0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xubW0vbWVtb3J5LmMtMTc1Ni19XG4tLVxubW0vcm1hcC5jPTIxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjM0NC1cdFx0ICovXG5tbS9ybWFwLmM6MjM0NTpcdFx0Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG5tbS9ybWFwLmMtMjM0Ni1cdFx0XHRcdFx0ICBucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzIGluIFVGRkQgV3JpdGUgUHJvdGVjdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGlzIFVGRkQgd3JpdGUgcHJvdGVjdGlvbiBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB0cnlfdG9fdW5tYXBfb25lYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3JtYXAuY2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgdG8gaW52ZXN0aWdhdGUgZm9yIHBhZ2UgcmVjbGFpbSwgbWlncmF0aW9uLCBldGMuIFdoaWxlIGl0JiMzOTtzIHJlbGF0aXZlbHkgaG90LCBJJiMzOTttIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgbmV3IGNvZGUgcGF0aHMuIFNwZWNpZmljYWxseSwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGNhdWdodCBteSBleWUgYXMgc29tZXRoaW5nIG5ld2x5IGFkZGVkIG9yIGhlYXZpbHkgbW9kaWZpZWQuCgpBaCwgd2FpdCBhIHNlY29uZCwgbGV0IG1lIGFkZCBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIHRvIHRoZSBsaXN0IG9mIGNoYW5nZXMuIEFuZCwgSSBzZWUgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgaXMgYWxzbyB0b3VjaGVkLiBSaWdodCwgbGV0JiMzOTtzIGtlZXAgdHJhY2sgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCk5vdywgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBiZXN0IGZvY2FsIHBvaW50PyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUgbG9naWMgdGhhdCYjMzk7cyBiZWluZyBpbnRyb2R1Y2VkIGhlcmUuIFRoYXQmIzM5O3MgcHJvYmFibHkgdGhlIG1vc3QgdmFsdWFibGUgc3ltYm9sIHRvIGludmVzdGlnYXRlLiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYC4gSXQmIzM5O3MgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGB0cnlfdG9fdW5tYXBfb25lYCB1c2VzIHRvIHVubWFwIFBURXMgaW4gYmF0Y2hlcy4gSXQmIzM5O3MgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgbm93IHdpdGhpbiBgbW0vcm1hcC5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3VubWFwX3B0ZV9iYXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTkzMz12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3B1ZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTk0My1cbm1tL3JtYXAuYzoxOTQ0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vcm1hcC5jLTE5NDUtXHRcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuLS1cbm1tL3JtYXAuYz0yMTk1PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIzMTUtXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbm1tL3JtYXAuYzoyMzE2Olx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbm1tL3JtYXAuYy0yMzE3LVx0XHRcdGVuZF9hZGRyID0gYWRkcmVzcyAmIzQzOyBucl9wYWdlcyAqIFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYXMgcG90ZW50aWFsIGZvY2FsIHBvaW50cyBmb3IgbXkgYW5hbHlzaXMuIFRoZSBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBmdW5jdGlvbiBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgcHJvYmxlbWF0aWMgY2hvaWNlLiBJdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBpbmxpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gSWYgdGhhdCBoYXBwZW5zLCBpdCB3b24mIzM5O3QgYmUgYSB1c2VmdWwgcG9pbnQgdG8gc2V0IGEgYnJlYWtwb2ludCBvciB0cmFjZSwgYXMgaXQmIzM5O3MgZWZmZWN0aXZlbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCBjb3VsZCBkaXNhcHBlYXIgZW50aXJlbHksIG9yIHRoZSBrZXkgc3RlcHMgY291bGQgYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBpbmxpbmVkIGNvZGUsIG9ic2N1cmluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24mIzM5O3MgbG9naWMuCgpPbiB0aGUgb3RoZXIgaGFuZCwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGxvb2tzIG11Y2ggbW9yZSBwcm9taXNpbmcuIEl0JiMzOTtzICpub3QqIGlubGluZTsgSSBjYW4gc2VlIHRoYXQgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIGEgZGlzdGluY3QgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHByZXNlbnQgaW4gdGhlIGZpbmFsIGJpbmFyeSBhbmQgdGhlcmVmb3JlIHRyYWNlYWJsZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGlubGluaW5nIHN0YXR1cyBvZiBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3Mgc2ltaWxhcmx5IGEgZ29vZCwgZGlzdGluY3Qgc3ltYm9sIHRvIGFuYWx5emUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgd2FzdGUgdGltZSBvbiBhIGZ1bmN0aW9uIHRoYXQgZW5kcyB1cCBpbmxpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz0xNzQ3PXN0YXRpYyBpbmxpbmUgYm9vbFxubW0vbWVtb3J5LmM6MTc0ODp6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL21lbW9yeS5jLTE3NDktXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4tLVxubW0vbWVtb3J5LmM9MTc1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3ODctXHRpZiAodW5saWtlbHkodXNlcmZhdWx0ZmRfcHRlX3dwKHZtYSwgcHRlbnQpKSlcbm1tL21lbW9yeS5jOjE3ODg6XHRcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLFxubW0vbWVtb3J5LmMtMTc4OS1cdFx0XHRcdFx0XHRcdCAgICAgbnIsIGRldGFpbHMsIHB0ZW50KTtcbi0tXG5tbS9tZW1vcnkuYz0xODA5PXN0YXRpYyBpbmxpbmUgaW50IHphcF9wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODI2LVx0XHRpZiAodXNlcmZhdWx0ZmRfcHRlX3dwKHZtYSwgcHRlbnQpKVxubW0vbWVtb3J5LmM6MTgyNzpcdFx0XHQqYW55X3NraXBwZWQgPSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsXG5tbS9tZW1vcnkuYy0xODI4LVx0XHRcdFx0XHRcdHB0ZSwgMSwgZGV0YWlscywgcHRlbnQpO1xuLS1cbm1tL21lbW9yeS5jPTE4NTU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE4NzUtXHRcdCAqIGNvbnNpZGVyIHVmZmQtd3AgYml0IHdoZW4gemFwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcbm1tL21lbW9yeS5jOjE4NzY6XHRcdCAqIHNlZSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCgpLlxubW0vbWVtb3J5LmMtMTg3Ny1cdFx0ICovXG4tLVxubW0vbWVtb3J5LmMtMTkyMC1cdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xubW0vbWVtb3J5LmM6MTkyMTpcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xubW0vbWVtb3J5LmMtMTkyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1OQoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIFdyaXRlLVByb3RlY3Rpb24gUFRFIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyBpbiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIEl0IGxvb2tzIGxpa2UgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBiZSB0aGUgbWFpbiBmb2N1cy4gSSYjMzk7bSBnbGFuY2luZyBhdCBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYHRyeV90b191bm1hcF9vbmVgIGxvb2tzIGEgbGl0dGxlIGJyb2FkLCBtYXliZSB0b28gbXVjaCBmb3IgdGhlIHNwZWNpZmljIGNoYW5nZSwgYW5kIGB6YXBfcHJlc2VudF9mb2xpb19wdGVzYCBpcyBhbHdheXMgaW5saW5lLCB3aGlsZSBgemFwX3ByZXNlbnRfcHRlc2AgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBhcmUgc3RhdGljIGlubGluZS4gYHphcF9wdGVfcmFuZ2VgIGNhbGxzIHRoZSBzdGF0aWMgaW5saW5lcy4gU28sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCBpcyB0aGUgbWFpbiBub24taW5saW5lIGZ1bmN0aW9uIGFkZGVkIGJ5IHRoaXMgcGF0Y2gsIHNvIHRoYXQgbG9va3MgbGlrZSB0aGUgYmVzdCBlbnRyeSBwb2ludCBmb3IgdGhlIGNoYW5nZXMuCgpUaGUgcGF0Y2gmIzM5O3MgZ29hbCBpcyBiYXRjaGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMsIGltcHJvdmluZyB0aGUgZWZmaWNpZW5jeSBvZiBjbGVhcmluZyBQVEVzLiBUaGlzIHNwZWNpZmljYWxseSBpbnZvbHZlcyBzb21lIGFkanVzdG1lbnRzIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBgbW0vbWVtb3J5LmNgIGFuZCBgbW0vcm1hcC5jYCB0byBzdXBwb3J0IHRoZSBoYW5kbGluZyBvZiBtdWx0aXBsZSBQVEVzIHNpbXVsdGFuZW91c2x5LiBUaGlzIHNlZW1zIHRvIGJlIGdlYXJlZCB0b3dhcmQgb3B0aW1pemluZyB0aGUgdW5tYXBwaW5nIG9mIGZvbGlvcyB3aXRoaW4gdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYC4uLiBZdXAsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b191bm1hcF9vbmVgIGFuZCB0aGUgaW5saW5lIGZ1bmN0aW9uIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIHdoaWNoLCBpbiB0dXJuLCBnZXRzIGNhbGxlZCBmcm9tIGB6YXBfcHRlX3JhbmdlYCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIG11bm1hcCBhbmQgbWFkdmlzZS4gTWFrZXMgc2Vuc2UuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGRvY3VtZW50IHRoZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MToyNC4xNzc2ODY0MDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMwNjA2Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFRFX01BUktFUl9VRkZEX1dQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hpbmcgZm9yIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBQVEUgbWFya2VycyB3aGVuIGNsZWFyaW5nIFBURXMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vbWVtb3J5LmMgYW5kIG1tL3JtYXAuYyB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlLCBvcHRpbWl6aW5nIHVubWFwcGluZyBvZiBmb2xpb3MgaW4gdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIFBURSBtYXJrZXJzIGFyZSBsZWFrZWQgb3IgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIGR1cmluZyBiYXRjaCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MToyNC4xNzc2OTIwOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjIyNDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJmMjg4ZTVlMmZlMzNlYTkxYjljMzYyNDUwOTEzYmQ5YTAzOGUyOGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTk6NDE6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNTUwZmI5Mjk1N2QxODkuLjk0ZTBhOTJiYzcwYjE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC01NDA2LDQgKzU0MDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdGJvb2wgdWZmZF93cCk7XFxuIFxcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0ICAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0ZXMpO1xcbitcXG4gI2VuZGlmIC8qIF9MSU5VWF9NTV9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuaW5kZXggYjVjNGRjMGYzZmUzMjYuLjYyMWM4NjUzZDhmN2ViIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuQEAgLTU2Niw1OSArNTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcihcXG4gXFx0cmV0dXJuIGRzdG07XFxuIH1cXG4gXFxuLS8qXFxuLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvXFxuLSAqIHJlcGxhY2UgYSBub25lIHB0ZS4gIE5PVEUhICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuICpwdGUgaXMgYWxyZWFkeVxcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXFxuLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuXFxuLSAqIEUuZy4sIHdoZW4gcHRlIGNsZWFyZWQgdGhlIGNhbGxlciBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoZSB0bGIgZmx1c2guXFxuLSAqXFxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmVcXG4tICogcHRlLCBhbmQgaWYgdGhleSBzZWUgaXQsIHRoZXknbGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGUgcGd0YWJsZSBsb2NrLlxcbi0gKlxcbi0gKiBSZXR1cm5zIHRydWUgaWYgYW4gdWZmZC13cCBwdGUgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbi0gKi9cXG4tc3RhdGljIGlubGluZSBib29sXFxuLXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZXZhbClcXG4te1xcbi1cXHRib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlO1xcbi1cXG4tXFx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXFxcImNsZWFyZWRcXFwiIGJlZm9yZSBjYWxsaW5nICovXFxuLVxcdFdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2Vzbid0IG5lZWQgdGhpcyB3aG9sZVxcbi1cXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXFxuLVxcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXFxuLVxcdCAqIHdpdGggYSBzd2FwIHB0ZS4gIFRoZXJlJ3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC5cXG4tXFx0ICovXFxuLVxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdC8qIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqL1xcbi1cXHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcXG4tXFx0XFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuXFxuLVxcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGV2YWwpKSlcXG4tXFx0XFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShhcm1fdWZmZF9wdGUpKSB7XFxuLVxcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxcbi1cXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4gXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fU0VRX1JFQUQgfCBWTV9SQU5EX1JFQUQpKVxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZDVlODc2MjRmNjkyMDUuLjVkMmI1NjdiMzgzZDQ5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTY3NSw2ICsxNjc1LDY5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6YXBfZHJvcF9tYXJrZXJzKHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscylcXG4gXFx0cmV0dXJuIGRldGFpbHMtXFx1MDAzZXphcF9mbGFncyBcXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xcbiB9XFxuIFxcbisvKipcXG4rICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcXG4rICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxcbisgKiBAYWRkcjogQWRkcmVzcyB0aGUgZmlyc3QgcGFnZSBvZiB0aGlzIGJhdGNoIGlzIG1hcHBlZCBhdC5cXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5IG9mIHRoaXMgYmF0Y2guXFxuKyAqIEBwdGU6IE9sZCB2YWx1ZSBvZiB0aGUgZW50cnkgcG9pbnRlZCB0byBieSBAcHRlcC5cXG4rICogQG5yX3B0ZXM6IE51bWJlciBvZiBlbnRyaWVzIHRvIGluc3RhbGwuXFxuKyAqXFxuKyAqIElmIHRoZSBQVEVzIHdlcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSBzcGVjaWFsXFxuKyAqIFBURXMgdG8gcmVwbGFjZSBub25lIFBURXMuIE5PVEUhIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIFBURXNcXG4rICogYXJlIGFscmVhZHkgY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZ1xcbisgKiB2YWx1YWJsZS4gTWVhbndoaWxlIG5vbmUgUFRFcyBhbHNvIG1lYW4gd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgUFRFcyBzbyBhXFxuKyAqIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkLiBFLmcuLCB3aGVuIFBURXMgd2VyZSBjbGVhcmVkLCB0aGUgY2FsbGVyIHNob3VsZFxcbisgKiBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIFRMQiBmbHVzaC5cXG4rICpcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcGFnZSB0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWVcXG4rICogdGhlIG5vbmUgUFRFcywgYW5kIGlmIHRoZXkgc2VlIHRoZW0sIHRoZXknbGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGVcXG4rICogcGFnZSB0YWJsZSBsb2NrLlxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKVxcbit7XFxuK1xcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcXFwiY2xlYXJlZFxcXCIgYmVmb3JlIGNhbGxpbmcgKi9cXG4rXFx0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGVwKSkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2Vzbid0IG5lZWQgdGhpcyB3aG9sZVxcbitcXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXFxuK1xcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXFxuK1xcdCAqIHdpdGggYSBzd2FwIHB0ZS4gVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhdXNlcmZhdWx0ZmRfd3Aodm1hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBub3JtYWwgcHRlICovXFxuK1xcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZSkpKVxcbitcXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBzd2FwIHB0ZS4gTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxcbitcXHQgKiBleGlzdGluZyBwdGUgbWFya2VyIHdpdGggdWZmZC13cCBiaXQgc2V0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpXFxuK1xcdFxcdGFybV91ZmZkX3B0ZSA9IHRydWU7XFxuK1xcbitcXHRpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgXFx1MDAzYyBucl9wdGVzOyArK2ksICsrcHRlcCwgYWRkciArPSBQQUdFX1NJWkUpXFxuK1xcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcXG4rXFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxcbiAgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cXG5AQCAtMTY4NiwyOSArMTc0OSwxMCBAQCB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscywgcHRlX3QgcHRldmFsKVxcbiB7XFxuLVxcdGJvb2wgd2FzX2luc3RhbGxlZCA9IGZhbHNlO1xcbi1cXG4tXFx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHQvKiBaYXAgb24gYW5vbnltb3VzIGFsd2F5cyBtZWFucyBkcm9wcGluZyBldmVyeXRoaW5nICovXFxuLVxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuIFxcdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRmb3IgKDs7KSB7XFxuLVxcdFxcdC8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqL1xcbi1cXHRcXHRpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpXFxuLVxcdFxcdFxcdHdhc19pbnN0YWxsZWQgPSB0cnVlO1xcbi1cXHRcXHRpZiAoLS1uciA9PSAwKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0cHRlKys7XFxuLVxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gd2FzX2luc3RhbGxlZDtcXG4rXFx0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCBhZDgyMGZlODZmN2Q4Yy4uYWM4ODY3MzYwMGZhMGYgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTE5NjUsOSArMTk2NSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRpZiAocHRlX3VudXNlZChwdGUpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJZiB1bm1hcCBmYWlscywgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwdGVzLiBUbyBhdm9pZCBhY2NpZGVudGFsbHlcXG4gXFx0ICogdXBncmFkaW5nIHdyaXRlIHBlcm1pc3Npb25zIGZvciBwdGVzIHRoYXQgd2VyZSBub3Qgb3JpZ2luYWxseVxcbkBAIC0yMzQ1LDcgKzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcXG4gXFx0XFx0ICogaXQncyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJ3QgbG9zZSB0aGUgdHJhY2tpbmcgaW5mby5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuK1xcdFxcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjI0Ljk2NDYyNTk5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MTkxMDg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMgd2hlbiBjbGVhcmluZyBQVEVzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL21lbW9yeS5jIGFuZCBtbS9ybWFwLmMgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSwgb3B0aW1pemluZyB1bm1hcHBpbmcgb2YgZm9saW9zIGluIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBQVEUgbWFya2VycyBhcmUgbGVha2VkIG9yIGluY29ycmVjdGx5IGluc3RhbGxlZCBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZjI4OGU1ZTJmZTMzZWE5MWI5YzM2MjQ1MDkxM2JkOWEwMzhlMjhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTk6NDE6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDU1MGZiOTI5NTdkMTg5Li45NGUwYTkyYmM3MGIxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTQwNiw0ICs1NDA2LDggQEAgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRib29sIHVmZmRfd3ApO1xuIFxuK2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0ZXMpO1xuK1xuICNlbmRpZiAvKiBfTElOVVhfTU1fSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNTY2LDU5ICs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuIFx0cmV0dXJuIGRzdG07XG4gfVxuIFxuLS8qXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cbi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHlcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cbi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLlxuLSAqXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxuLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5J2xsIGZhdWx0IGFuZCBzZXJpYWxpemUgYXQgdGhlIHBndGFibGUgbG9jay5cbi0gKlxuLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiB1ZmZkLXdwIHB0ZSB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4tICovXG4tc3RhdGljIGlubGluZSBib29sXG4tcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICBwdGVfdCAqcHRlLCBwdGVfdCBwdGV2YWwpXG4te1xuLVx0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcbi1cbi1cdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwiY2xlYXJlZFwiIGJlZm9yZSBjYWxsaW5nICovXG4tXHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXG4tXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXG4tXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuLVx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuLVx0ICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcbi1cdFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcbi1cbi1cdC8qXG4tXHQgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuLVx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHRpZiAodW5saWtlbHkoYXJtX3VmZmRfcHRlKSkge1xuLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuLVx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSlcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBkNWU4NzYyNGY2OTIwNS4uNWQyYjU2N2IzODNkNDkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC0xNjc1LDYgKzE2NzUsNjkgQEAgc3RhdGljIGlubGluZSBib29sIHphcF9kcm9wX21hcmtlcnMoc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxuIFx0cmV0dXJuIGRldGFpbHMtXHUwMDNlemFwX2ZsYWdzIFx1MDAyNiBaQVBfRkxBR19EUk9QX01BUktFUjtcbiB9XG4gXG4rLyoqXG4rICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcbisgKiBAdm1hOiBUaGUgVk1BIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uXG4rICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5IG9mIHRoaXMgYmF0Y2guXG4rICogQHB0ZTogT2xkIHZhbHVlIG9mIHRoZSBlbnRyeSBwb2ludGVkIHRvIGJ5IEBwdGVwLlxuKyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxuKyAqXG4rICogSWYgdGhlIFBURXMgd2VyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgdWZmZC13cCBpbiBhbnkgZm9ybSwgYXJtIHNwZWNpYWxcbisgKiBQVEVzIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzXG4rICogYXJlIGFscmVhZHkgY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZ1xuKyAqIHZhbHVhYmxlLiBNZWFud2hpbGUgbm9uZSBQVEVzIGFsc28gbWVhbiB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBQVEVzIHNvIGFcbisgKiBUTEIgZmx1c2ggaXMgbm90IG5lZWRlZC4gRS5nLiwgd2hlbiBQVEVzIHdlcmUgY2xlYXJlZCwgdGhlIGNhbGxlciBzaG91bGRcbisgKiBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIFRMQiBmbHVzaC5cbisgKlxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHBhZ2UgdGFibGUgbG9jayBoZWxkIHNvIHRoYXQgbm8gdGhyZWFkIHdpbGwgc2VlXG4rICogdGhlIG5vbmUgUFRFcywgYW5kIGlmIHRoZXkgc2VlIHRoZW0sIHRoZXknbGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGVcbisgKiBwYWdlIHRhYmxlIGxvY2suXG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcylcbit7XG4rXHRib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlO1xuK1xuK1x0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXCJjbGVhcmVkXCIgYmVmb3JlIGNhbGxpbmcgKi9cbitcdFdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlcCkpKTtcbitcbitcdC8qXG4rXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXG4rXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXG4rXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuK1x0ICogd2l0aCBhIHN3YXAgcHRlLiBUaGVyZSdzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuXG4rXHQgKi9cbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqL1xuK1x0aWYgKHVubGlrZWx5KHB0ZV9wcmVzZW50KHB0ZSkgXHUwMDI2XHUwMDI2IHB0ZV91ZmZkKHB0ZSkpKVxuK1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuK1xuK1x0LypcbitcdCAqIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgc3dhcCBwdGUuIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cbitcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZSkpKVxuK1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuK1xuK1x0aWYgKGxpa2VseSghYXJtX3VmZmRfcHRlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIFx1MDAzYyBucl9wdGVzOyArK2ksICsrcHRlcCwgYWRkciArPSBQQUdFX1NJWkUpXG4rXHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxuK1x0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxuICAqIHN3YXAgc3BlY2lhbCBwdGUgbWFya2VyIHdoZW4gbmVjZXNzYXJ5LiBNdXN0IGJlIHdpdGggdGhlIHBndGFibGUgbG9jayBoZWxkLlxuQEAgLTE2ODYsMjkgKzE3NDksMTAgQEAgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4gXHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4ge1xuLVx0Ym9vbCB3YXNfaW5zdGFsbGVkID0gZmFsc2U7XG4tXG4tXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdC8qIFphcCBvbiBhbm9ueW1vdXMgYWx3YXlzIG1lYW5zIGRyb3BwaW5nIGV2ZXJ5dGhpbmcgKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRmb3IgKDs7KSB7XG4tXHRcdC8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqL1xuLVx0XHRpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpXG4tXHRcdFx0d2FzX2luc3RhbGxlZCA9IHRydWU7XG4tXHRcdGlmICgtLW5yID09IDApXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHB0ZSsrO1xuLVx0XHRhZGRyICs9IFBBR0VfU0laRTtcbi1cdH1cbi1cbi1cdHJldHVybiB3YXNfaW5zdGFsbGVkO1xuK1x0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLmFjODg2NzM2MDBmYTBmIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0xOTY1LDkgKzE5NjUsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGlmIChwdGVfdW51c2VkKHB0ZSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuLVx0XHRyZXR1cm4gMTtcbi1cbiBcdC8qXG4gXHQgKiBJZiB1bm1hcCBmYWlscywgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwdGVzLiBUbyBhdm9pZCBhY2NpZGVudGFsbHlcbiBcdCAqIHVwZ3JhZGluZyB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgcHRlcyB0aGF0IHdlcmUgbm90IG9yaWdpbmFsbHlcbkBAIC0yMzQ1LDcgKzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcbiBcdFx0ICogaXQncyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJ3QgbG9zZSB0aGUgdHJhY2tpbmcgaW5mby5cbiBcdFx0ICovXG4tXHRcdHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4rXHRcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuK1x0XHRcdFx0XHQgIG5yX3BhZ2VzKTtcbiBcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjI0Ljk2NDYyNzUwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTc5NzU3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIFdyaXRlIFByb3RlY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGB1c2VyZmF1bHRmZGAgYW5kIGBybWFwYC4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgb3B0aW1pemF0aW9uLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHRoZXkncmUgcmV3b3JraW5nIGhvdyB0aGUgYHVmZmQtd3BgICh1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uKSBQVEUgbWFya2VycyBhcmUgaGFuZGxlZCB3aGVuIFBURXMgYXJlIGNsZWFyZWQuXG5cbkluc3RlYWQgb2YgdGhlIHByZXZpb3VzIHNpbmdsZS1QVEUgYXBwcm9hY2ggaW4gYHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCwgdGhlIGxvZ2ljIGlzIGJlaW5nIHNoaWZ0ZWQgdG8gYSBiYXRjaCBvcGVyYXRpb24gd2l0aGluIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYC4gVGhhdOKAmXMgYSBnb29kIG1vdmUsIHBvdGVudGlhbGx5IG9mZmVyaW5nIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBpbiBidWxrIHVubWFwcGluZyBzY2VuYXJpb3MuXG5cbkZ1cnRoZXJtb3JlLCB0aGV5J3ZlIG1vZGlmaWVkIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGluIGBtbS9ybWFwLmNgLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoYXQgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpIHJldHVybiAxO2AuIFRoaXMgY2hhbmdlIGxldHMgdGhlIHN5c3RlbSBiYXRjaCB1bm1hcCBldmVuIGlmIHRoZSBWTUEgaGFzIHRoZSBgdXNlcmZhdWx0ZmRgIHByb3RlY3Rpb24gYWN0aXZlLiBDbGV2ZXIsIGFsbG93aW5nIGJhdGNoIHVubWFwcGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgcHJvdGVjdGlvbiBpcyBlbmFibGVkLlxuXG5BbmQgaW4gYHRyeV90b191bm1hcF9vbmVgLCB3ZSdyZSBhbHNvIHNlZWluZyB0aGUgY2FsbCB0byBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agd2l0aCB0aGUgYG5yX3BhZ2VzYCBhcmd1bWVudCwgaW5zdGVhZCBvZiB0aGF0IHNpbmdsZSBQVEUgaGFuZGxpbmcuIFRoaXMgcmVpbmZvcmNlcyB0aGUgYmF0Y2ggdW5tYXBwaW5nIHN0cmF0ZWd5LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgc2hvdWxkIG9wdGltaXplIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zIHdpdGhpbiBgdXNlcmZhdWx0ZmRgLXByb3RlY3RlZCBWTUFzLCBlbmFibGluZyBiYXRjaGluZyBvcGVyYXRpb25zLiBOb3csIGxldOKAmXMgZGlnIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB0aGlzLlxuXG5JJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoZSBjb2RlIGl0c2VsZiBmb3Igcm9idXN0bmVzcywgb2YgY291cnNlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQsIHNpbmNlIGl0IGRlYWxzIHdpdGggYHVzZXJmYXVsdGZkYCBhbmQgYHVmZmQtd3BgLiBJIGFscmVhZHkga25vdyBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgb2J2aW91cyBvbmUgZm9yIHRoZSB1c2VyZmF1bHRmZCBpdHNlbGYuIFRoZW4gSSdsbCBjaGVjayBgbW0vS2NvbmZpZ2AsIGBmcy9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGB1ZmZkLXdwYC4gUGVyaGFwcyB0aGVyZSBpcyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCwgb3IgbWF5YmUgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjMyLjEyMjYwNjQwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI3MTM0MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzNjg9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbi0tXFxubW0vS2NvbmZpZy0xMzcyLVxcbm1tL0tjb25maWc6MTM3Mzpjb25maWcgVVNFUkZBVUxURkRfUldQXFxubW0vS2NvbmZpZy0xMzc0LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctMTM4MS1cXG5tbS9LY29uZmlnOjEzODI6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM4My1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6MzQuOTQ5NzQ3NzQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MzQwNjYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIGBQVEVfTUFSS0VSX1VGRkRfV1BgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIGdvdCBtZSBsb29raW5nIGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBSaWdodCwgdGhhdCdzIHRoZSBtYXJrZXIgdXNlZCBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSByb2xlIHRoaXMgcGxheXMgaW4gdGhlIG92ZXJhbGwgdXNlcmZhdWx0ZmQgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIHRoaXMgZmxhZyBpcyBjcnVjaWFsIGZvciBhbGxvd2luZyB1c2VyLXNwYWNlIGhhbmRsZXJzIHRvIG1hbmFnZSB3cml0ZXMgdG8gcGFnZXMgdGhhdCBhcmUgaW5pdGlhbGx5IG1hcmtlZCBhcyByZWFkLW9ubHksIGJ1dCBzaG91bGQgYmUgd3JpdGVhYmxlIGFmdGVyIGl0J3MgYmVpbmcgaGFuZGxlZCBieSB1c2VyZmF1bHRmZC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBwYXRoIHRocm91Z2ggdGhlIGtlcm5lbCwgY29uc2lkZXIgd2hlcmUgaXQncyBzZXQsIHdoZXJlIGl0J3MgY2hlY2tlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQuIEkgd2lsbCBrZWVwIGFuIGV5ZSBvcGVuIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBhcmlzZSBkdWUgdG8gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgcGFnZSB0YWJsZSBlbnRyaWVzLiBUaGUgZ29hbCBpcyB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG1lbW9yeSBwcm90ZWN0aW9uLCB1c2VyZmF1bHRmZCBoYW5kbGVycywgYW5kIGFueSByZWxhdGVkIG9wdGltaXphdGlvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IHJlbGV2YW50IENQVSBmZWF0dXJlcywgbGlrZSBoYXJkd2FyZSBwYWdlIHRhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjM4LjUxMzE1NjUzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0NzQ0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6NDEuMDM3OTA3MTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NjAwMDExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgVVNFUkZBVUxURkRgIGFuZCBXcml0ZSBQcm90ZWN0aW9uIGluIFBhZ2UgVGFibGVzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGBVU0VSRkFVTFRGRGAgYW5kIHRoYXQgYFBURV9NQVJLRVJfVUZGRF9XUGAgZmxhZy4gVGhleSdyZSBjbGVhcmx5IHJlbGF0ZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSB3b3JrIHRvZ2V0aGVyLiBJIGtub3cgdGhlcmUncyBhIGNvbm5lY3Rpb24gdG8gaGFuZGxpbmcgd3JpdGUgZmF1bHRzLCBwYXJ0aWN1bGFybHkgaW4gdXNlci1zcGFjZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB3aXRoaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGxvZ2ljIGJlaGluZCBjb25kaXRpb25hbGx5IGluc3RhbGxpbmcgb3Igc2V0dGluZyB0aGF0IHdyaXRlLXByb3RlY3Rpb24gZmxhZyBvbiB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKS4gV2hhdCdzIHRoZSBnYXRpbmcgbWVjaGFuaXNtIHRoZXJlPyBXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgZmxhZyBiZWluZyBzZXQ/IEhvdyBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggdGhlIGZhdWx0IGhhbmRsaW5nIHByb2Nlc3M/IEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoZW4gYW5kIGhvdyBgVVNFUkZBVUxURkRgIGlzIGxldmVyYWdpbmcgdGhpcyBQVEUgbWFya2luZyBmb3Igd3JpdGUgcHJvdGVjdGlvbiBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzE1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6NDQuMjMzOTEyNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNDM5NTk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD01NDA1PXZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC01NDA4LVxcbmluY2x1ZGUvbGludXgvbW0uaDo1NDA5OmJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC01NDEwLVxcdFxcdFxcdCAgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLFxcbi0tXFxubW0vbWVtb3J5LmM9MTY3MD1zdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuLS1cXG5tbS9tZW1vcnkuYy0xNjc4LS8qKlxcbm1tL21lbW9yeS5jOjE2Nzk6ICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcXG5tbS9tZW1vcnkuYy0xNjgwLSAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cXG4tLVxcbm1tL21lbW9yeS5jLTE2OTgtICovXFxubW0vbWVtb3J5LmM6MTY5OTpib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vbWVtb3J5LmMtMTcwMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuLS1cXG5tbS9tZW1vcnkuYz0xNzQ4PXphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTc1NC1cXG5tbS9tZW1vcnkuYzoxNzU1OlxcdHJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTtcXG5tbS9tZW1vcnkuYy0xNzU2LX1cXG4tLVxcbm1tL3JtYXAuYz0yMTk1PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjM0NC1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjM0NTpcXHRcXHRjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcXG5tbS9ybWFwLmMtMjM0Ni1cXHRcXHRcXHRcXHRcXHQgIG5yX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6NDcuMDY4MzEzMjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMyNzg3OTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzIGluIFVGRkQgV3JpdGUgUHJvdGVjdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gdGhpcyBVRkZEIHdyaXRlIHByb3RlY3Rpb24gaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB0cnlfdG9fdW5tYXBfb25lYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3JtYXAuY2AuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmb3IgcGFnZSByZWNsYWltLCBtaWdyYXRpb24sIGV0Yy4gV2hpbGUgaXQncyByZWxhdGl2ZWx5IGhvdCwgSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgbmV3IGNvZGUgcGF0aHMuIFNwZWNpZmljYWxseSwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGNhdWdodCBteSBleWUgYXMgc29tZXRoaW5nIG5ld2x5IGFkZGVkIG9yIGhlYXZpbHkgbW9kaWZpZWQuXG5cbkFoLCB3YWl0IGEgc2Vjb25kLCBsZXQgbWUgYWRkIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAgdG8gdGhlIGxpc3Qgb2YgY2hhbmdlcy4gQW5kLCBJIHNlZSBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBpcyBhbHNvIHRvdWNoZWQuIFJpZ2h0LCBsZXQncyBrZWVwIHRyYWNrIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuXG5cbk5vdywgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBiZXN0IGZvY2FsIHBvaW50PyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUgbG9naWMgdGhhdCdzIGJlaW5nIGludHJvZHVjZWQgaGVyZS4gVGhhdCdzIHByb2JhYmx5IHRoZSBtb3N0IHZhbHVhYmxlIHN5bWJvbCB0byBpbnZlc3RpZ2F0ZS4gQW5kIHRoZW4gdGhlcmUncyBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYC4gSXQncyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHRoYXQgYHRyeV90b191bm1hcF9vbmVgIHVzZXMgdG8gdW5tYXAgUFRFcyBpbiBiYXRjaGVzLiBJdCdzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jay5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgbm93IHdpdGhpbiBgbW0vcm1hcC5jYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MTo1Mi4zOTYyMTUyNzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjA0OTI5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5tYXBfcHRlX2JhdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xOTMzPXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5NDMtXFxubW0vcm1hcC5jOjE5NDQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jLTE5NDUtXFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vcm1hcC5jPTIxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzE1LVxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG5tbS9ybWFwLmM6MjMxNjpcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChmb2xpbywgXFx1MDAyNnB2bXcsIGZsYWdzLCBwdGV2YWwpO1xcbm1tL3JtYXAuYy0yMzE3LVxcdFxcdFxcdGVuZF9hZGRyID0gYWRkcmVzcyArIG5yX3BhZ2VzICogUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MTo1NC43NTY3MTUzMDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MzA5OTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBmb2NhbCBwb2ludHMgZm9yIG15IGFuYWx5c2lzLiBUaGUgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgZnVuY3Rpb24gc2VlbXMgbGlrZSBpdCBjb3VsZCBiZSBhIHByb2JsZW1hdGljIGNob2ljZS4gSXQncyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBpbmxpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gSWYgdGhhdCBoYXBwZW5zLCBpdCB3b24ndCBiZSBhIHVzZWZ1bCBwb2ludCB0byBzZXQgYSBicmVha3BvaW50IG9yIHRyYWNlLCBhcyBpdCdzIGVmZmVjdGl2ZWx5IGludGVncmF0ZWQgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQgY291bGQgZGlzYXBwZWFyIGVudGlyZWx5LCBvciB0aGUga2V5IHN0ZXBzIGNvdWxkIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgaW5saW5lZCBjb2RlLCBvYnNjdXJpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uJ3MgbG9naWMuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgbG9va3MgbXVjaCBtb3JlIHByb21pc2luZy4gSXQncyAqbm90KiBpbmxpbmU7IEkgY2FuIHNlZSB0aGF0IGl0J3MgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYC4gVGhhdCdzIGEgc29saWQgaW5kaWNhdG9yIHRoYXQgaXQncyBhIGRpc3RpbmN0IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBwcmVzZW50IGluIHRoZSBmaW5hbCBiaW5hcnkgYW5kIHRoZXJlZm9yZSB0cmFjZWFibGUuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGlubGluaW5nIHN0YXR1cyBvZiBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQncyBzaW1pbGFybHkgYSBnb29kLCBkaXN0aW5jdCBzeW1ib2wgdG8gYW5hbHl6ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IHdhc3RlIHRpbWUgb24gYSBmdW5jdGlvbiB0aGF0IGVuZHMgdXAgaW5saW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MTo1OC44MDk4MTc0NzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDkzODg2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTc0Nz1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9tZW1vcnkuYzoxNzQ4OnphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTE3NDktXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXFxuLS1cXG5tbS9tZW1vcnkuYz0xNzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB6YXBfcHJlc2VudF9mb2xpb19wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzg3LVxcdGlmICh1bmxpa2VseSh1c2VyZmF1bHRmZF9wdGVfd3Aodm1hLCBwdGVudCkpKVxcbm1tL21lbW9yeS5jOjE3ODg6XFx0XFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsXFxubW0vbWVtb3J5LmMtMTc4OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5yLCBkZXRhaWxzLCBwdGVudCk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xODA5PXN0YXRpYyBpbmxpbmUgaW50IHphcF9wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE4MjYtXFx0XFx0aWYgKHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSlcXG5tbS9tZW1vcnkuYzoxODI3OlxcdFxcdFxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcixcXG5tbS9tZW1vcnkuYy0xODI4LVxcdFxcdFxcdFxcdFxcdFxcdHB0ZSwgMSwgZGV0YWlscywgcHRlbnQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTg1NT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODc1LVxcdFxcdCAqIGNvbnNpZGVyIHVmZmQtd3AgYml0IHdoZW4gemFwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcXG5tbS9tZW1vcnkuYzoxODc2OlxcdFxcdCAqIHNlZSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCgpLlxcbm1tL21lbW9yeS5jLTE4NzctXFx0XFx0ICovXFxuLS1cXG5tbS9tZW1vcnkuYy0xOTIwLVxcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yKTtcXG5tbS9tZW1vcnkuYzoxOTIxOlxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xcbm1tL21lbW9yeS5jLTE5MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQyOjAxLjE1OTIxNDcxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjE4NjQ3NTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVXNlcmZhdWx0ZmQgV3JpdGUtUHJvdGVjdGlvbiBQVEUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyBpbiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIEl0IGxvb2tzIGxpa2UgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIHRoZSBtYWluIGZvY3VzLiBJJ20gZ2xhbmNpbmcgYXQgb3RoZXIgZnVuY3Rpb25zLCBsaWtlIGB0cnlfdG9fdW5tYXBfb25lYCBsb29rcyBhIGxpdHRsZSBicm9hZCwgbWF5YmUgdG9vIG11Y2ggZm9yIHRoZSBzcGVjaWZpYyBjaGFuZ2UsIGFuZCBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2AgaXMgYWx3YXlzIGlubGluZSwgd2hpbGUgYHphcF9wcmVzZW50X3B0ZXNgIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgYXJlIHN0YXRpYyBpbmxpbmUuIGB6YXBfcHRlX3JhbmdlYCBjYWxscyB0aGUgc3RhdGljIGlubGluZXMuIFNvLCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgaXMgdGhlIG1haW4gbm9uLWlubGluZSBmdW5jdGlvbiBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyB0aGF0IGxvb2tzIGxpa2UgdGhlIGJlc3QgZW50cnkgcG9pbnQgZm9yIHRoZSBjaGFuZ2VzLlxuXG5UaGUgcGF0Y2gncyBnb2FsIGlzIGJhdGNoaW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBQVEUgbWFya2VycywgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIGNsZWFyaW5nIFBURXMuIFRoaXMgc3BlY2lmaWNhbGx5IGludm9sdmVzIHNvbWUgYWRqdXN0bWVudHMgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGBtbS9tZW1vcnkuY2AgYW5kIGBtbS9ybWFwLmNgIHRvIHN1cHBvcnQgdGhlIGhhbmRsaW5nIG9mIG11bHRpcGxlIFBURXMgc2ltdWx0YW5lb3VzbHkuIFRoaXMgc2VlbXMgdG8gYmUgZ2VhcmVkIHRvd2FyZCBvcHRpbWl6aW5nIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zIHdpdGhpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuLi4gWXVwLCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b191bm1hcF9vbmVgIGFuZCB0aGUgaW5saW5lIGZ1bmN0aW9uIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIHdoaWNoLCBpbiB0dXJuLCBnZXRzIGNhbGxlZCBmcm9tIGB6YXBfcHRlX3JhbmdlYCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIG11bm1hcCBhbmQgbWFkdmlzZS4gTWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZG9jdW1lbnQgdGhlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzU5LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MjoyMy4zNDU2OTMzMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgwMzI0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMgd2hlbiBjbGVhcmluZyBQVEVzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL21lbW9yeS5jIGFuZCBtbS9ybWFwLmMgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSwgb3B0aW1pemluZyB1bm1hcHBpbmcgb2YgZm9saW9zIGluIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBQVEUgbWFya2VycyBhcmUgbGVha2VkIG9yIGluY29ycmVjdGx5IGluc3RhbGxlZCBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 19:23:27 +0000 UTC FinishedAt: 2026-07-15 19:42:25 +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": "59c684a9908d2e6f7a791f7f033eae57ec2b3a61", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "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": "59c684a9908d2e6f7a791f7f033eae57ec2b3a61", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "series_id": "cef1d023-118a-4ca1-ae39-fa5808900ea9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "cond_install_uffd_wp_ptes" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZjI4OGU1ZTJmZTMzZWE5MWI5YzM2MjQ1MDkxM2JkOWEwMzhlMjhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTk6NDE6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA1NTBmYjkyOTU3ZDE4OS4uOTRlMGE5MmJjNzBiMTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTU0MDYsNCAmIzQzOzU0MDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGJvb2wgdWZmZF93cCk7XG4gXG4mIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7XG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfTU1fSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNTY2LDU5ICYjNDM7NTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcihcbiBcdHJldHVybiBkc3RtO1xuIH1cbiBcbi0vKlxuLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvXG4tICogcmVwbGFjZSBhIG5vbmUgcHRlLiAgTk9URSEgIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gKnB0ZSBpcyBhbHJlYWR5XG4tICogY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZyB2YWx1YWJsZS4gIE1lYW53aGlsZVxuLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuXG4tICogRS5nLiwgd2hlbiBwdGUgY2xlYXJlZCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIHRsYiBmbHVzaC5cbi0gKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmVcbi0gKiBwdGUsIGFuZCBpZiB0aGV5IHNlZSBpdCwgdGhleSYjMzk7bGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGUgcGd0YWJsZSBsb2NrLlxuLSAqXG4tICogUmV0dXJucyB0cnVlIGlmIGFuIHVmZmQtd3AgcHRlIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZXZhbClcbi17XG4tXHRib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlO1xuLVxuLVx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXCYjMzQ7Y2xlYXJlZFwmIzM0OyBiZWZvcmUgY2FsbGluZyAqL1xuLVx0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7XG4tXG4tXHQvKlxuLVx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbi1cdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlXG4tXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuLVx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUmIzM5O3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC5cbi1cdCAqL1xuLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhdXNlcmZhdWx0ZmRfd3Aodm1hKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXG4tXHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHQvKlxuLVx0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cbi1cdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4tXHQgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZXZhbCkpKVxuLVx0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuLVxuLVx0aWYgKHVubGlrZWx5KGFybV91ZmZkX3B0ZSkpIHtcbi1cdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcbi1cdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9TRVFfUkVBRCB8IFZNX1JBTkRfUkVBRCkpXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDVlODc2MjRmNjkyMDUuLjVkMmI1NjdiMzgzZDQ5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMTY3NSw2ICYjNDM7MTY3NSw2OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gXHRyZXR1cm4gZGV0YWlscy1cdTAwM2V6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbiYjNDM7ICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxuJiM0MzsgKiBAcHRlOiBPbGQgdmFsdWUgb2YgdGhlIGVudHJ5IHBvaW50ZWQgdG8gYnkgQHB0ZXAuXG4mIzQzOyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgUFRFcyB3ZXJlIHdyaXRlLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gc3BlY2lhbFxuJiM0MzsgKiBQVEVzIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzXG4mIzQzOyAqIGFyZSBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmdcbiYjNDM7ICogdmFsdWFibGUuIE1lYW53aGlsZSBub25lIFBURXMgYWxzbyBtZWFuIHdlIGFyZSBub3QgZGVtb3RpbmcgdGhlIFBURXMgc28gYVxuJiM0MzsgKiBUTEIgZmx1c2ggaXMgbm90IG5lZWRlZC4gRS5nLiwgd2hlbiBQVEVzIHdlcmUgY2xlYXJlZCwgdGhlIGNhbGxlciBzaG91bGRcbiYjNDM7ICogaGF2ZSB0YWtlbiBjYXJlIG9mIHRoZSBUTEIgZmx1c2guXG4mIzQzOyAqXG4mIzQzOyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHBhZ2UgdGFibGUgbG9jayBoZWxkIHNvIHRoYXQgbm8gdGhyZWFkIHdpbGwgc2VlXG4mIzQzOyAqIHRoZSBub25lIFBURXMsIGFuZCBpZiB0aGV5IHNlZSB0aGVtLCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZVxuJiM0MzsgKiBwYWdlIHRhYmxlIGxvY2suXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcylcbiYjNDM7e1xuJiM0MztcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwmIzM0O2NsZWFyZWRcJiMzNDsgYmVmb3JlIGNhbGxpbmcgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbiYjNDM7XHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0JiMzOTtzIGRyb3BwaW5nIHRoZVxuJiM0MztcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4mIzQzO1x0ICogd2l0aCBhIHN3YXAgcHRlLiBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqL1xuJiM0MztcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGUpKSlcbiYjNDM7XHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBzd2FwIHB0ZS4gTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuJiM0MztcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpXG4mIzQzO1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgXHUwMDNjIG5yX3B0ZXM7ICYjNDM7JiM0MztpLCAmIzQzOyYjNDM7cHRlcCwgYWRkciAmIzQzOz0gUEFHRV9TSVpFKVxuJiM0MztcdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXG4mIzQzO1x0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSYjMzk7bGwgcmVwbGFjZSB0aGUgbm9uZSBwdGUgd2l0aCBhbiB1ZmZkLXdwXG4gICogc3dhcCBzcGVjaWFsIHB0ZSBtYXJrZXIgd2hlbiBuZWNlc3NhcnkuIE11c3QgYmUgd2l0aCB0aGUgcGd0YWJsZSBsb2NrIGhlbGQuXG5AQCAtMTY4NiwyOSAmIzQzOzE3NDksMTAgQEAgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4gXHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4ge1xuLVx0Ym9vbCB3YXNfaW5zdGFsbGVkID0gZmFsc2U7XG4tXG4tXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdC8qIFphcCBvbiBhbm9ueW1vdXMgYWx3YXlzIG1lYW5zIGRyb3BwaW5nIGV2ZXJ5dGhpbmcgKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRmb3IgKDs7KSB7XG4tXHRcdC8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqL1xuLVx0XHRpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpXG4tXHRcdFx0d2FzX2luc3RhbGxlZCA9IHRydWU7XG4tXHRcdGlmICgtLW5yID09IDApXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHB0ZSYjNDM7JiM0Mzs7XG4tXHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi1cdH1cbi1cbi1cdHJldHVybiB3YXNfaW5zdGFsbGVkO1xuJiM0MztcdHJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGFkODIwZmU4NmY3ZDhjLi5hYzg4NjczNjAwZmEwZiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMTk2NSw5ICYjNDM7MTk2NSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKHB0ZV91bnVzZWQocHRlKSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0LypcbiBcdCAqIElmIHVubWFwIGZhaWxzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHB0ZXMuIFRvIGF2b2lkIGFjY2lkZW50YWxseVxuIFx0ICogdXBncmFkaW5nIHdyaXRlIHBlcm1pc3Npb25zIGZvciBwdGVzIHRoYXQgd2VyZSBub3Qgb3JpZ2luYWxseVxuQEAgLTIzNDUsNyAmIzQzOzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcbiBcdFx0ICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLlxuIFx0XHQgKi9cbi1cdFx0cHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbiYjNDM7XHRcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuJiM0MztcdFx0XHRcdFx0ICBucl9wYWdlcyk7XG4gXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7UFRFX01BUktFUl9VRkZEX1dQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMgd2hlbiBjbGVhcmluZyBQVEVzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL21lbW9yeS5jIGFuZCBtbS9ybWFwLmMgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSwgb3B0aW1pemluZyB1bm1hcHBpbmcgb2YgZm9saW9zIGluIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBQVEUgbWFya2VycyBhcmUgbGVha2VkIG9yIGluY29ycmVjdGx5IGluc3RhbGxlZCBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmYyODhlNWUyZmUzM2VhOTFiOWMzNjI0NTA5MTNiZDlhMDM4ZTI4ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDE5OjQxOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDU1MGZiOTI5NTdkMTg5Li45NGUwYTkyYmM3MGIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtNTQwNiw0ICYjNDM7NTQwNiw4IEBAIHZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJYm9vbCB1ZmZkX3dwKTsKIAomIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLAomIzQzOwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0ZXMpOwomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9NTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtNTY2LDU5ICYjNDM7NTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcigKIAlyZXR1cm4gZHN0bTsKIH0KIAotLyoKLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvCi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHkKLSAqIGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuICBNZWFud2hpbGUKLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuCi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmUKLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suCi0gKgotICogUmV0dXJucyB0cnVlIGlmIGFuIHVmZmQtd3AgcHRlIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKQotewotCWJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7Ci0KLQlpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwotCVdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpOwotCi0JLyoKLQkgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJiMzOTt0IG5lZWQgdGhpcyB3aG9sZQotCSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCi0JICogcGFnZSwgb3IgaW4gVFRVIHdoZXJlIHRoZSBwcmVzZW50IHB0ZSB3aWxsIGJlIHF1aWNrbHkgcmVwbGFjZWQKLQkgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LgotCSAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqLwotCWlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpICZhbXA7JmFtcDsgcHRlX3VmZmQocHRldmFsKSkpCi0JCWFybV91ZmZkX3B0ZSA9IHRydWU7Ci0KLQkvKgotCSAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuCi0JICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC4KLQkgKi8KLQlpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGV2YWwpKSkKLQkJYXJtX3VmZmRfcHRlID0gdHJ1ZTsKLQotCWlmICh1bmxpa2VseShhcm1fdWZmZF9wdGUpKSB7Ci0JCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlLAotCQkJICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZDVlODc2MjRmNjkyMDUuLjVkMmI1NjdiMzgzZDQ5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMTY3NSw2ICYjNDM7MTY3NSw2OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpCiAJcmV0dXJuIGRldGFpbHMtJmd0O3phcF9mbGFncyAmYW1wOyBaQVBfRkxBR19EUk9QX01BUktFUjsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzCiYjNDM7ICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLgomIzQzOyAqIEBhZGRyOiBBZGRyZXNzIHRoZSBmaXJzdCBwYWdlIG9mIHRoaXMgYmF0Y2ggaXMgbWFwcGVkIGF0LgomIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLgomIzQzOyAqIEBwdGU6IE9sZCB2YWx1ZSBvZiB0aGUgZW50cnkgcG9pbnRlZCB0byBieSBAcHRlcC4KJiM0MzsgKiBAbnJfcHRlczogTnVtYmVyIG9mIGVudHJpZXMgdG8gaW5zdGFsbC4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBQVEVzIHdlcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSBzcGVjaWFsCiYjNDM7ICogUFRFcyB0byByZXBsYWNlIG5vbmUgUFRFcy4gTk9URSEgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgUFRFcwomIzQzOyAqIGFyZSBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcKJiM0MzsgKiB2YWx1YWJsZS4gTWVhbndoaWxlIG5vbmUgUFRFcyBhbHNvIG1lYW4gd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgUFRFcyBzbyBhCiYjNDM7ICogVExCIGZsdXNoIGlzIG5vdCBuZWVkZWQuIEUuZy4sIHdoZW4gUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkCiYjNDM7ICogaGF2ZSB0YWtlbiBjYXJlIG9mIHRoZSBUTEIgZmx1c2guCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZQomIzQzOyAqIHRoZSBub25lIFBURXMsIGFuZCBpZiB0aGV5IHNlZSB0aGVtLCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZQomIzQzOyAqIHBhZ2UgdGFibGUgbG9jay4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3B0ZXMpCiYjNDM7ewomIzQzOwlib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwomIzQzOwlXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24mIzM5O3QgbmVlZCB0aGlzIHdob2xlCiYjNDM7CSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCiYjNDM7CSAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkCiYjNDM7CSAqIHdpdGggYSBzd2FwIHB0ZS4gVGhlcmUmIzM5O3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC4KJiM0MzsJICovCiYjNDM7CWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqLwomIzQzOwlpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRlKSAmYW1wOyZhbXA7IHB0ZV91ZmZkKHB0ZSkpKQomIzQzOwkJYXJtX3VmZmRfcHRlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBzd2FwIHB0ZS4gTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhbgomIzQzOwkgKiBleGlzdGluZyBwdGUgbWFya2VyIHdpdGggdWZmZC13cCBiaXQgc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpCiYjNDM7CQlhcm1fdWZmZF9wdGUgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgJmx0OyBucl9wdGVzOyAmIzQzOyYjNDM7aSwgJiM0MzsmIzQzO3B0ZXAsIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkKJiM0MzsJCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwKJiM0MzsJCQkgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSYjMzk7bGwgcmVwbGFjZSB0aGUgbm9uZSBwdGUgd2l0aCBhbiB1ZmZkLXdwCiAgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC4KQEAgLTE2ODYsMjkgJiM0MzsxNzQ5LDEwIEBAIHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsCiAJCQkgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbCkKIHsKLQlib29sIHdhc19pbnN0YWxsZWQgPSBmYWxzZTsKLQotCWlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpCi0JCXJldHVybiBmYWxzZTsKLQogCWlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlmb3IgKDs7KSB7Ci0JCS8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqLwotCQlpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpCi0JCQl3YXNfaW5zdGFsbGVkID0gdHJ1ZTsKLQkJaWYgKC0tbnIgPT0gMCkKLQkJCWJyZWFrOwotCQlwdGUmIzQzOyYjNDM7OwotCQlhZGRyICYjNDM7PSBQQUdFX1NJWkU7Ci0JfQotCi0JcmV0dXJuIHdhc19pbnN0YWxsZWQ7CiYjNDM7CXJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBhZDgyMGZlODZmN2Q4Yy4uYWM4ODY3MzYwMGZhMGYgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTE5NjUsOSAmIzQzOzE5NjUsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAocHRlX3VudXNlZChwdGUpKQogCQlyZXR1cm4gMTsKIAotCWlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSkKLQkJcmV0dXJuIDE7Ci0KIAkvKgogCSAqIElmIHVubWFwIGZhaWxzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHB0ZXMuIFRvIGF2b2lkIGFjY2lkZW50YWxseQogCSAqIHVwZ3JhZGluZyB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgcHRlcyB0aGF0IHdlcmUgbm90IG9yaWdpbmFsbHkKQEAgLTIzNDUsNyAmIzQzOzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWYKIAkJICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLgogCQkgKi8KLQkJcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKJiM0MzsJCWNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLAomIzQzOwkJCQkJICBucl9wYWdlcyk7CiAKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVXNlcmZhdWx0ZmQgV3JpdGUgUHJvdGVjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYHVzZXJmYXVsdGZkYCBhbmQgYHJtYXBgLiBUaGUgZ29hbCBzZWVtcyB0byBiZSBvcHRpbWl6YXRpb24sIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIGhvdyB0aGUgYHVmZmQtd3BgICh1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uKSBQVEUgbWFya2VycyBhcmUgaGFuZGxlZCB3aGVuIFBURXMgYXJlIGNsZWFyZWQuCgpJbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBzaW5nbGUtUFRFIGFwcHJvYWNoIGluIGBwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIHRoZSBsb2dpYyBpcyBiZWluZyBzaGlmdGVkIHRvIGEgYmF0Y2ggb3BlcmF0aW9uIHdpdGhpbiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIFRoYXTigJlzIGEgZ29vZCBtb3ZlLCBwb3RlbnRpYWxseSBvZmZlcmluZyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgaW4gYnVsayB1bm1hcHBpbmcgc2NlbmFyaW9zLgoKRnVydGhlcm1vcmUsIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGluIGBtbS9ybWFwLmNgLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoYXQgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpIHJldHVybiAxO2AuIFRoaXMgY2hhbmdlIGxldHMgdGhlIHN5c3RlbSBiYXRjaCB1bm1hcCBldmVuIGlmIHRoZSBWTUEgaGFzIHRoZSBgdXNlcmZhdWx0ZmRgIHByb3RlY3Rpb24gYWN0aXZlLiBDbGV2ZXIsIGFsbG93aW5nIGJhdGNoIHVubWFwcGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgcHJvdGVjdGlvbiBpcyBlbmFibGVkLgoKQW5kIGluIGB0cnlfdG9fdW5tYXBfb25lYCwgd2UmIzM5O3JlIGFsc28gc2VlaW5nIHRoZSBjYWxsIHRvIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB3aXRoIHRoZSBgbnJfcGFnZXNgIGFyZ3VtZW50LCBpbnN0ZWFkIG9mIHRoYXQgc2luZ2xlIFBURSBoYW5kbGluZy4gVGhpcyByZWluZm9yY2VzIHRoZSBiYXRjaCB1bm1hcHBpbmcgc3RyYXRlZ3kuCgpGdW5jdGlvbmFsbHksIHRoaXMgc2hvdWxkIG9wdGltaXplIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zIHdpdGhpbiBgdXNlcmZhdWx0ZmRgLXByb3RlY3RlZCBWTUFzLCBlbmFibGluZyBiYXRjaGluZyBvcGVyYXRpb25zLiBOb3csIGxldOKAmXMgZGlnIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB0aGlzLgoKSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhlIGNvZGUgaXRzZWxmIGZvciByb2J1c3RuZXNzLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQsIHNpbmNlIGl0IGRlYWxzIHdpdGggYHVzZXJmYXVsdGZkYCBhbmQgYHVmZmQtd3BgLiBJIGFscmVhZHkga25vdyBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgb2J2aW91cyBvbmUgZm9yIHRoZSB1c2VyZmF1bHRmZCBpdHNlbGYuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYG1tL0tjb25maWdgLCBgZnMvS2NvbmZpZ2Agb3IgYGluaXQvS2NvbmZpZ2AgZm9yIHRoZSBjb25maWd1cmF0aW9uIGZvciBgdWZmZC13cGAuIFBlcmhhcHMgdGhlcmUgaXMgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAsIG9yIG1heWJlIHNvbWV0aGluZyBtb3JlIGdlbmVyYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM2OD1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzcyLVxubW0vS2NvbmZpZzoxMzczOmNvbmZpZyBVU0VSRkFVTFRGRF9SV1Bcbm1tL0tjb25maWctMTM3NC1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTEzODEtXG5tbS9LY29uZmlnOjEzODI6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxubW0vS2NvbmZpZy0xMzgzLVx0Ym9vbCBcJiMzNDtFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBQVEVfTUFSS0VSX1VGRkRfV1BgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIGdvdCBtZSBsb29raW5nIGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgbWFya2VyIHVzZWQgZm9yIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJvbGUgdGhpcyBwbGF5cyBpbiB0aGUgb3ZlcmFsbCB1c2VyZmF1bHRmZCBtZWNoYW5pc20uIFNwZWNpZmljYWxseSwgdGhpcyBmbGFnIGlzIGNydWNpYWwgZm9yIGFsbG93aW5nIHVzZXItc3BhY2UgaGFuZGxlcnMgdG8gbWFuYWdlIHdyaXRlcyB0byBwYWdlcyB0aGF0IGFyZSBpbml0aWFsbHkgbWFya2VkIGFzIHJlYWQtb25seSwgYnV0IHNob3VsZCBiZSB3cml0ZWFibGUgYWZ0ZXIgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZCBieSB1c2VyZmF1bHRmZC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBwYXRoIHRocm91Z2ggdGhlIGtlcm5lbCwgY29uc2lkZXIgd2hlcmUgaXQmIzM5O3Mgc2V0LCB3aGVyZSBpdCYjMzk7cyBjaGVja2VkLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gSSB3aWxsIGtlZXAgYW4gZXllIG9wZW4gZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1ZSB0byBjb25jdXJyZW50IGFjY2VzcyB0byB0aGVzZSBwYWdlIHRhYmxlIGVudHJpZXMuIFRoZSBnb2FsIGlzIHRvIHZlcmlmeSBldmVyeXRoaW5nIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgbWVtb3J5IHByb3RlY3Rpb24sIHVzZXJmYXVsdGZkIGhhbmRsZXJzLCBhbmQgYW55IHJlbGF0ZWQgb3B0aW1pemF0aW9ucy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgaW50ZXJhY3Rpb24gd2l0aCBhbnkgcmVsZXZhbnQgQ1BVIGZlYXR1cmVzLCBsaWtlIGhhcmR3YXJlIHBhZ2UgdGFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTEzODgtXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxubW0vS2NvbmZpZy0xMzkwLVx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBVU0VSRkFVTFRGRGAgYW5kIFdyaXRlIFByb3RlY3Rpb24gaW4gUGFnZSBUYWJsZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgVVNFUkZBVUxURkRgIGFuZCB0aGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgIGZsYWcuIFRoZXkmIzM5O3JlIGNsZWFybHkgcmVsYXRlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIuIEkga25vdyB0aGVyZSYjMzk7cyBhIGNvbm5lY3Rpb24gdG8gaGFuZGxpbmcgd3JpdGUgZmF1bHRzLCBwYXJ0aWN1bGFybHkgaW4gdXNlci1zcGFjZSBtZW1vcnkgbWFuYWdlbWVudC4KCk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHdpdGhpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbG9naWMgYmVoaW5kIGNvbmRpdGlvbmFsbHkgaW5zdGFsbGluZyBvciBzZXR0aW5nIHRoYXQgd3JpdGUtcHJvdGVjdGlvbiBmbGFnIG9uIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpLiBXaGF0JiMzOTtzIHRoZSBnYXRpbmcgbWVjaGFuaXNtIHRoZXJlPyBXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgZmxhZyBiZWluZyBzZXQ/IEhvdyBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggdGhlIGZhdWx0IGhhbmRsaW5nIHByb2Nlc3M/IEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGVuIGFuZCBob3cgYFVTRVJGQVVMVEZEYCBpcyBsZXZlcmFnaW5nIHRoaXMgUFRFIG1hcmtpbmcgZm9yIHdyaXRlIHByb3RlY3Rpb24gbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD01NDA1PXZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwOC1cbmluY2x1ZGUvbGludXgvbW0uaDo1NDA5OmJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9tbS5oLTU0MTAtXHRcdFx0ICAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXG4tLVxubW0vbWVtb3J5LmM9MTY3MD1zdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4tLVxubW0vbWVtb3J5LmMtMTY3OC0vKipcbm1tL21lbW9yeS5jOjE2Nzk6ICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcbm1tL21lbW9yeS5jLTE2ODAtICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxuLS1cbm1tL21lbW9yeS5jLTE2OTgtICovXG5tbS9tZW1vcnkuYzoxNjk5OmJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL21lbW9yeS5jLTE3MDAtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbi0tXG5tbS9tZW1vcnkuYz0xNzQ4PXphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTE3NTQtXG5tbS9tZW1vcnkuYzoxNzU1Olx0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xubW0vbWVtb3J5LmMtMTc1Ni19XG4tLVxubW0vcm1hcC5jPTIxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjM0NC1cdFx0ICovXG5tbS9ybWFwLmM6MjM0NTpcdFx0Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG5tbS9ybWFwLmMtMjM0Ni1cdFx0XHRcdFx0ICBucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzIGluIFVGRkQgV3JpdGUgUHJvdGVjdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGlzIFVGRkQgd3JpdGUgcHJvdGVjdGlvbiBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB0cnlfdG9fdW5tYXBfb25lYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3JtYXAuY2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgdG8gaW52ZXN0aWdhdGUgZm9yIHBhZ2UgcmVjbGFpbSwgbWlncmF0aW9uLCBldGMuIFdoaWxlIGl0JiMzOTtzIHJlbGF0aXZlbHkgaG90LCBJJiMzOTttIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgbmV3IGNvZGUgcGF0aHMuIFNwZWNpZmljYWxseSwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGNhdWdodCBteSBleWUgYXMgc29tZXRoaW5nIG5ld2x5IGFkZGVkIG9yIGhlYXZpbHkgbW9kaWZpZWQuCgpBaCwgd2FpdCBhIHNlY29uZCwgbGV0IG1lIGFkZCBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIHRvIHRoZSBsaXN0IG9mIGNoYW5nZXMuIEFuZCwgSSBzZWUgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgaXMgYWxzbyB0b3VjaGVkLiBSaWdodCwgbGV0JiMzOTtzIGtlZXAgdHJhY2sgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCk5vdywgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBiZXN0IGZvY2FsIHBvaW50PyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUgbG9naWMgdGhhdCYjMzk7cyBiZWluZyBpbnRyb2R1Y2VkIGhlcmUuIFRoYXQmIzM5O3MgcHJvYmFibHkgdGhlIG1vc3QgdmFsdWFibGUgc3ltYm9sIHRvIGludmVzdGlnYXRlLiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYC4gSXQmIzM5O3MgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGB0cnlfdG9fdW5tYXBfb25lYCB1c2VzIHRvIHVubWFwIFBURXMgaW4gYmF0Y2hlcy4gSXQmIzM5O3MgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgbm93IHdpdGhpbiBgbW0vcm1hcC5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3VubWFwX3B0ZV9iYXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTkzMz12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3B1ZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTk0My1cbm1tL3JtYXAuYzoxOTQ0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vcm1hcC5jLTE5NDUtXHRcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuLS1cbm1tL3JtYXAuYz0yMTk1PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIzMTUtXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbm1tL3JtYXAuYzoyMzE2Olx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbm1tL3JtYXAuYy0yMzE3LVx0XHRcdGVuZF9hZGRyID0gYWRkcmVzcyAmIzQzOyBucl9wYWdlcyAqIFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYXMgcG90ZW50aWFsIGZvY2FsIHBvaW50cyBmb3IgbXkgYW5hbHlzaXMuIFRoZSBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBmdW5jdGlvbiBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgcHJvYmxlbWF0aWMgY2hvaWNlLiBJdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBpbmxpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gSWYgdGhhdCBoYXBwZW5zLCBpdCB3b24mIzM5O3QgYmUgYSB1c2VmdWwgcG9pbnQgdG8gc2V0IGEgYnJlYWtwb2ludCBvciB0cmFjZSwgYXMgaXQmIzM5O3MgZWZmZWN0aXZlbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCBjb3VsZCBkaXNhcHBlYXIgZW50aXJlbHksIG9yIHRoZSBrZXkgc3RlcHMgY291bGQgYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBpbmxpbmVkIGNvZGUsIG9ic2N1cmluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24mIzM5O3MgbG9naWMuCgpPbiB0aGUgb3RoZXIgaGFuZCwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGxvb2tzIG11Y2ggbW9yZSBwcm9taXNpbmcuIEl0JiMzOTtzICpub3QqIGlubGluZTsgSSBjYW4gc2VlIHRoYXQgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIGEgZGlzdGluY3QgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHByZXNlbnQgaW4gdGhlIGZpbmFsIGJpbmFyeSBhbmQgdGhlcmVmb3JlIHRyYWNlYWJsZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGlubGluaW5nIHN0YXR1cyBvZiBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3Mgc2ltaWxhcmx5IGEgZ29vZCwgZGlzdGluY3Qgc3ltYm9sIHRvIGFuYWx5emUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgd2FzdGUgdGltZSBvbiBhIGZ1bmN0aW9uIHRoYXQgZW5kcyB1cCBpbmxpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz0xNzQ3PXN0YXRpYyBpbmxpbmUgYm9vbFxubW0vbWVtb3J5LmM6MTc0ODp6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL21lbW9yeS5jLTE3NDktXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4tLVxubW0vbWVtb3J5LmM9MTc1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3ODctXHRpZiAodW5saWtlbHkodXNlcmZhdWx0ZmRfcHRlX3dwKHZtYSwgcHRlbnQpKSlcbm1tL21lbW9yeS5jOjE3ODg6XHRcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLFxubW0vbWVtb3J5LmMtMTc4OS1cdFx0XHRcdFx0XHRcdCAgICAgbnIsIGRldGFpbHMsIHB0ZW50KTtcbi0tXG5tbS9tZW1vcnkuYz0xODA5PXN0YXRpYyBpbmxpbmUgaW50IHphcF9wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODI2LVx0XHRpZiAodXNlcmZhdWx0ZmRfcHRlX3dwKHZtYSwgcHRlbnQpKVxubW0vbWVtb3J5LmM6MTgyNzpcdFx0XHQqYW55X3NraXBwZWQgPSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsXG5tbS9tZW1vcnkuYy0xODI4LVx0XHRcdFx0XHRcdHB0ZSwgMSwgZGV0YWlscywgcHRlbnQpO1xuLS1cbm1tL21lbW9yeS5jPTE4NTU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE4NzUtXHRcdCAqIGNvbnNpZGVyIHVmZmQtd3AgYml0IHdoZW4gemFwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcbm1tL21lbW9yeS5jOjE4NzY6XHRcdCAqIHNlZSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCgpLlxubW0vbWVtb3J5LmMtMTg3Ny1cdFx0ICovXG4tLVxubW0vbWVtb3J5LmMtMTkyMC1cdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xubW0vbWVtb3J5LmM6MTkyMTpcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xubW0vbWVtb3J5LmMtMTkyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1OQoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIFdyaXRlLVByb3RlY3Rpb24gUFRFIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyBpbiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIEl0IGxvb2tzIGxpa2UgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBiZSB0aGUgbWFpbiBmb2N1cy4gSSYjMzk7bSBnbGFuY2luZyBhdCBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYHRyeV90b191bm1hcF9vbmVgIGxvb2tzIGEgbGl0dGxlIGJyb2FkLCBtYXliZSB0b28gbXVjaCBmb3IgdGhlIHNwZWNpZmljIGNoYW5nZSwgYW5kIGB6YXBfcHJlc2VudF9mb2xpb19wdGVzYCBpcyBhbHdheXMgaW5saW5lLCB3aGlsZSBgemFwX3ByZXNlbnRfcHRlc2AgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBhcmUgc3RhdGljIGlubGluZS4gYHphcF9wdGVfcmFuZ2VgIGNhbGxzIHRoZSBzdGF0aWMgaW5saW5lcy4gU28sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCBpcyB0aGUgbWFpbiBub24taW5saW5lIGZ1bmN0aW9uIGFkZGVkIGJ5IHRoaXMgcGF0Y2gsIHNvIHRoYXQgbG9va3MgbGlrZSB0aGUgYmVzdCBlbnRyeSBwb2ludCBmb3IgdGhlIGNoYW5nZXMuCgpUaGUgcGF0Y2gmIzM5O3MgZ29hbCBpcyBiYXRjaGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMsIGltcHJvdmluZyB0aGUgZWZmaWNpZW5jeSBvZiBjbGVhcmluZyBQVEVzLiBUaGlzIHNwZWNpZmljYWxseSBpbnZvbHZlcyBzb21lIGFkanVzdG1lbnRzIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBgbW0vbWVtb3J5LmNgIGFuZCBgbW0vcm1hcC5jYCB0byBzdXBwb3J0IHRoZSBoYW5kbGluZyBvZiBtdWx0aXBsZSBQVEVzIHNpbXVsdGFuZW91c2x5LiBUaGlzIHNlZW1zIHRvIGJlIGdlYXJlZCB0b3dhcmQgb3B0aW1pemluZyB0aGUgdW5tYXBwaW5nIG9mIGZvbGlvcyB3aXRoaW4gdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYC4uLiBZdXAsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b191bm1hcF9vbmVgIGFuZCB0aGUgaW5saW5lIGZ1bmN0aW9uIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIHdoaWNoLCBpbiB0dXJuLCBnZXRzIGNhbGxlZCBmcm9tIGB6YXBfcHRlX3JhbmdlYCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIG11bm1hcCBhbmQgbWFkdmlzZS4gTWFrZXMgc2Vuc2UuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGRvY3VtZW50IHRoZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MToyNC4xNzc2ODY0MDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMwNjA2Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFRFX01BUktFUl9VRkZEX1dQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hpbmcgZm9yIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBQVEUgbWFya2VycyB3aGVuIGNsZWFyaW5nIFBURXMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vbWVtb3J5LmMgYW5kIG1tL3JtYXAuYyB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlLCBvcHRpbWl6aW5nIHVubWFwcGluZyBvZiBmb2xpb3MgaW4gdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIFBURSBtYXJrZXJzIGFyZSBsZWFrZWQgb3IgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIGR1cmluZyBiYXRjaCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MToyNC4xNzc2OTIwOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjIyNDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJmMjg4ZTVlMmZlMzNlYTkxYjljMzYyNDUwOTEzYmQ5YTAzOGUyOGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTk6NDE6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNTUwZmI5Mjk1N2QxODkuLjk0ZTBhOTJiYzcwYjE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC01NDA2LDQgKzU0MDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdGJvb2wgdWZmZF93cCk7XFxuIFxcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0ICAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0ZXMpO1xcbitcXG4gI2VuZGlmIC8qIF9MSU5VWF9NTV9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuaW5kZXggYjVjNGRjMGYzZmUzMjYuLjYyMWM4NjUzZDhmN2ViIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuQEAgLTU2Niw1OSArNTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcihcXG4gXFx0cmV0dXJuIGRzdG07XFxuIH1cXG4gXFxuLS8qXFxuLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvXFxuLSAqIHJlcGxhY2UgYSBub25lIHB0ZS4gIE5PVEUhICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuICpwdGUgaXMgYWxyZWFkeVxcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXFxuLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuXFxuLSAqIEUuZy4sIHdoZW4gcHRlIGNsZWFyZWQgdGhlIGNhbGxlciBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoZSB0bGIgZmx1c2guXFxuLSAqXFxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmVcXG4tICogcHRlLCBhbmQgaWYgdGhleSBzZWUgaXQsIHRoZXknbGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGUgcGd0YWJsZSBsb2NrLlxcbi0gKlxcbi0gKiBSZXR1cm5zIHRydWUgaWYgYW4gdWZmZC13cCBwdGUgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbi0gKi9cXG4tc3RhdGljIGlubGluZSBib29sXFxuLXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZXZhbClcXG4te1xcbi1cXHRib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlO1xcbi1cXG4tXFx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXFxcImNsZWFyZWRcXFwiIGJlZm9yZSBjYWxsaW5nICovXFxuLVxcdFdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2Vzbid0IG5lZWQgdGhpcyB3aG9sZVxcbi1cXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXFxuLVxcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXFxuLVxcdCAqIHdpdGggYSBzd2FwIHB0ZS4gIFRoZXJlJ3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC5cXG4tXFx0ICovXFxuLVxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdC8qIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqL1xcbi1cXHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcXG4tXFx0XFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuXFxuLVxcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGV2YWwpKSlcXG4tXFx0XFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShhcm1fdWZmZF9wdGUpKSB7XFxuLVxcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxcbi1cXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4gXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fU0VRX1JFQUQgfCBWTV9SQU5EX1JFQUQpKVxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZDVlODc2MjRmNjkyMDUuLjVkMmI1NjdiMzgzZDQ5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTY3NSw2ICsxNjc1LDY5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6YXBfZHJvcF9tYXJrZXJzKHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscylcXG4gXFx0cmV0dXJuIGRldGFpbHMtXFx1MDAzZXphcF9mbGFncyBcXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xcbiB9XFxuIFxcbisvKipcXG4rICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcXG4rICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxcbisgKiBAYWRkcjogQWRkcmVzcyB0aGUgZmlyc3QgcGFnZSBvZiB0aGlzIGJhdGNoIGlzIG1hcHBlZCBhdC5cXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5IG9mIHRoaXMgYmF0Y2guXFxuKyAqIEBwdGU6IE9sZCB2YWx1ZSBvZiB0aGUgZW50cnkgcG9pbnRlZCB0byBieSBAcHRlcC5cXG4rICogQG5yX3B0ZXM6IE51bWJlciBvZiBlbnRyaWVzIHRvIGluc3RhbGwuXFxuKyAqXFxuKyAqIElmIHRoZSBQVEVzIHdlcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSBzcGVjaWFsXFxuKyAqIFBURXMgdG8gcmVwbGFjZSBub25lIFBURXMuIE5PVEUhIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIFBURXNcXG4rICogYXJlIGFscmVhZHkgY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZ1xcbisgKiB2YWx1YWJsZS4gTWVhbndoaWxlIG5vbmUgUFRFcyBhbHNvIG1lYW4gd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgUFRFcyBzbyBhXFxuKyAqIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkLiBFLmcuLCB3aGVuIFBURXMgd2VyZSBjbGVhcmVkLCB0aGUgY2FsbGVyIHNob3VsZFxcbisgKiBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIFRMQiBmbHVzaC5cXG4rICpcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcGFnZSB0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWVcXG4rICogdGhlIG5vbmUgUFRFcywgYW5kIGlmIHRoZXkgc2VlIHRoZW0sIHRoZXknbGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGVcXG4rICogcGFnZSB0YWJsZSBsb2NrLlxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKVxcbit7XFxuK1xcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcXFwiY2xlYXJlZFxcXCIgYmVmb3JlIGNhbGxpbmcgKi9cXG4rXFx0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGVwKSkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2Vzbid0IG5lZWQgdGhpcyB3aG9sZVxcbitcXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXFxuK1xcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXFxuK1xcdCAqIHdpdGggYSBzd2FwIHB0ZS4gVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhdXNlcmZhdWx0ZmRfd3Aodm1hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBub3JtYWwgcHRlICovXFxuK1xcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZSkpKVxcbitcXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSB1ZmZkLXdwIHdyaXRlLXByb3RlY3RlZCBzd2FwIHB0ZS4gTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxcbitcXHQgKiBleGlzdGluZyBwdGUgbWFya2VyIHdpdGggdWZmZC13cCBiaXQgc2V0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpXFxuK1xcdFxcdGFybV91ZmZkX3B0ZSA9IHRydWU7XFxuK1xcbitcXHRpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgXFx1MDAzYyBucl9wdGVzOyArK2ksICsrcHRlcCwgYWRkciArPSBQQUdFX1NJWkUpXFxuK1xcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcXG4rXFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxcbiAgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cXG5AQCAtMTY4NiwyOSArMTc0OSwxMCBAQCB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscywgcHRlX3QgcHRldmFsKVxcbiB7XFxuLVxcdGJvb2wgd2FzX2luc3RhbGxlZCA9IGZhbHNlO1xcbi1cXG4tXFx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHQvKiBaYXAgb24gYW5vbnltb3VzIGFsd2F5cyBtZWFucyBkcm9wcGluZyBldmVyeXRoaW5nICovXFxuLVxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuIFxcdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRmb3IgKDs7KSB7XFxuLVxcdFxcdC8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqL1xcbi1cXHRcXHRpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpXFxuLVxcdFxcdFxcdHdhc19pbnN0YWxsZWQgPSB0cnVlO1xcbi1cXHRcXHRpZiAoLS1uciA9PSAwKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0cHRlKys7XFxuLVxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gd2FzX2luc3RhbGxlZDtcXG4rXFx0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCBhZDgyMGZlODZmN2Q4Yy4uYWM4ODY3MzYwMGZhMGYgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTE5NjUsOSArMTk2NSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRpZiAocHRlX3VudXNlZChwdGUpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJZiB1bm1hcCBmYWlscywgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwdGVzLiBUbyBhdm9pZCBhY2NpZGVudGFsbHlcXG4gXFx0ICogdXBncmFkaW5nIHdyaXRlIHBlcm1pc3Npb25zIGZvciBwdGVzIHRoYXQgd2VyZSBub3Qgb3JpZ2luYWxseVxcbkBAIC0yMzQ1LDcgKzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcXG4gXFx0XFx0ICogaXQncyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJ3QgbG9zZSB0aGUgdHJhY2tpbmcgaW5mby5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuK1xcdFxcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjI0Ljk2NDYyNTk5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MTkxMDg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMgd2hlbiBjbGVhcmluZyBQVEVzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL21lbW9yeS5jIGFuZCBtbS9ybWFwLmMgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSwgb3B0aW1pemluZyB1bm1hcHBpbmcgb2YgZm9saW9zIGluIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBQVEUgbWFya2VycyBhcmUgbGVha2VkIG9yIGluY29ycmVjdGx5IGluc3RhbGxlZCBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZjI4OGU1ZTJmZTMzZWE5MWI5YzM2MjQ1MDkxM2JkOWEwMzhlMjhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTk6NDE6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDU1MGZiOTI5NTdkMTg5Li45NGUwYTkyYmM3MGIxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTQwNiw0ICs1NDA2LDggQEAgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRib29sIHVmZmRfd3ApO1xuIFxuK2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0ZXMpO1xuK1xuICNlbmRpZiAvKiBfTElOVVhfTU1fSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNTY2LDU5ICs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuIFx0cmV0dXJuIGRzdG07XG4gfVxuIFxuLS8qXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cbi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHlcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cbi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLlxuLSAqXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxuLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5J2xsIGZhdWx0IGFuZCBzZXJpYWxpemUgYXQgdGhlIHBndGFibGUgbG9jay5cbi0gKlxuLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiB1ZmZkLXdwIHB0ZSB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4tICovXG4tc3RhdGljIGlubGluZSBib29sXG4tcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICBwdGVfdCAqcHRlLCBwdGVfdCBwdGV2YWwpXG4te1xuLVx0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcbi1cbi1cdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwiY2xlYXJlZFwiIGJlZm9yZSBjYWxsaW5nICovXG4tXHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXG4tXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXG4tXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuLVx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuLVx0ICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcbi1cdFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcbi1cbi1cdC8qXG4tXHQgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuLVx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHRpZiAodW5saWtlbHkoYXJtX3VmZmRfcHRlKSkge1xuLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuLVx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSlcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBkNWU4NzYyNGY2OTIwNS4uNWQyYjU2N2IzODNkNDkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC0xNjc1LDYgKzE2NzUsNjkgQEAgc3RhdGljIGlubGluZSBib29sIHphcF9kcm9wX21hcmtlcnMoc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxuIFx0cmV0dXJuIGRldGFpbHMtXHUwMDNlemFwX2ZsYWdzIFx1MDAyNiBaQVBfRkxBR19EUk9QX01BUktFUjtcbiB9XG4gXG4rLyoqXG4rICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcbisgKiBAdm1hOiBUaGUgVk1BIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uXG4rICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5IG9mIHRoaXMgYmF0Y2guXG4rICogQHB0ZTogT2xkIHZhbHVlIG9mIHRoZSBlbnRyeSBwb2ludGVkIHRvIGJ5IEBwdGVwLlxuKyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxuKyAqXG4rICogSWYgdGhlIFBURXMgd2VyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgdWZmZC13cCBpbiBhbnkgZm9ybSwgYXJtIHNwZWNpYWxcbisgKiBQVEVzIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzXG4rICogYXJlIGFscmVhZHkgY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZ1xuKyAqIHZhbHVhYmxlLiBNZWFud2hpbGUgbm9uZSBQVEVzIGFsc28gbWVhbiB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBQVEVzIHNvIGFcbisgKiBUTEIgZmx1c2ggaXMgbm90IG5lZWRlZC4gRS5nLiwgd2hlbiBQVEVzIHdlcmUgY2xlYXJlZCwgdGhlIGNhbGxlciBzaG91bGRcbisgKiBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIFRMQiBmbHVzaC5cbisgKlxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHBhZ2UgdGFibGUgbG9jayBoZWxkIHNvIHRoYXQgbm8gdGhyZWFkIHdpbGwgc2VlXG4rICogdGhlIG5vbmUgUFRFcywgYW5kIGlmIHRoZXkgc2VlIHRoZW0sIHRoZXknbGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGVcbisgKiBwYWdlIHRhYmxlIGxvY2suXG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcylcbit7XG4rXHRib29sIGFybV91ZmZkX3B0ZSA9IGZhbHNlO1xuK1xuK1x0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXCJjbGVhcmVkXCIgYmVmb3JlIGNhbGxpbmcgKi9cbitcdFdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlcCkpKTtcbitcbitcdC8qXG4rXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXG4rXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXG4rXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuK1x0ICogd2l0aCBhIHN3YXAgcHRlLiBUaGVyZSdzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuXG4rXHQgKi9cbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqL1xuK1x0aWYgKHVubGlrZWx5KHB0ZV9wcmVzZW50KHB0ZSkgXHUwMDI2XHUwMDI2IHB0ZV91ZmZkKHB0ZSkpKVxuK1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuK1xuK1x0LypcbitcdCAqIEEgdWZmZC13cCB3cml0ZS1wcm90ZWN0ZWQgc3dhcCBwdGUuIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cbitcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZSkpKVxuK1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuK1xuK1x0aWYgKGxpa2VseSghYXJtX3VmZmRfcHRlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIFx1MDAzYyBucl9wdGVzOyArK2ksICsrcHRlcCwgYWRkciArPSBQQUdFX1NJWkUpXG4rXHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxuK1x0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxuICAqIHN3YXAgc3BlY2lhbCBwdGUgbWFya2VyIHdoZW4gbmVjZXNzYXJ5LiBNdXN0IGJlIHdpdGggdGhlIHBndGFibGUgbG9jayBoZWxkLlxuQEAgLTE2ODYsMjkgKzE3NDksMTAgQEAgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4gXHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4ge1xuLVx0Ym9vbCB3YXNfaW5zdGFsbGVkID0gZmFsc2U7XG4tXG4tXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdC8qIFphcCBvbiBhbm9ueW1vdXMgYWx3YXlzIG1lYW5zIGRyb3BwaW5nIGV2ZXJ5dGhpbmcgKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRmb3IgKDs7KSB7XG4tXHRcdC8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqL1xuLVx0XHRpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpXG4tXHRcdFx0d2FzX2luc3RhbGxlZCA9IHRydWU7XG4tXHRcdGlmICgtLW5yID09IDApXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHB0ZSsrO1xuLVx0XHRhZGRyICs9IFBBR0VfU0laRTtcbi1cdH1cbi1cbi1cdHJldHVybiB3YXNfaW5zdGFsbGVkO1xuK1x0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLmFjODg2NzM2MDBmYTBmIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0xOTY1LDkgKzE5NjUsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGlmIChwdGVfdW51c2VkKHB0ZSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuLVx0XHRyZXR1cm4gMTtcbi1cbiBcdC8qXG4gXHQgKiBJZiB1bm1hcCBmYWlscywgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwdGVzLiBUbyBhdm9pZCBhY2NpZGVudGFsbHlcbiBcdCAqIHVwZ3JhZGluZyB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgcHRlcyB0aGF0IHdlcmUgbm90IG9yaWdpbmFsbHlcbkBAIC0yMzQ1LDcgKzIzNDIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcbiBcdFx0ICogaXQncyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJ3QgbG9zZSB0aGUgdHJhY2tpbmcgaW5mby5cbiBcdFx0ICovXG4tXHRcdHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4rXHRcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuK1x0XHRcdFx0XHQgIG5yX3BhZ2VzKTtcbiBcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjI0Ljk2NDYyNzUwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTc5NzU3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIFdyaXRlIFByb3RlY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGB1c2VyZmF1bHRmZGAgYW5kIGBybWFwYC4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgb3B0aW1pemF0aW9uLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHRoZXkncmUgcmV3b3JraW5nIGhvdyB0aGUgYHVmZmQtd3BgICh1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uKSBQVEUgbWFya2VycyBhcmUgaGFuZGxlZCB3aGVuIFBURXMgYXJlIGNsZWFyZWQuXG5cbkluc3RlYWQgb2YgdGhlIHByZXZpb3VzIHNpbmdsZS1QVEUgYXBwcm9hY2ggaW4gYHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCwgdGhlIGxvZ2ljIGlzIGJlaW5nIHNoaWZ0ZWQgdG8gYSBiYXRjaCBvcGVyYXRpb24gd2l0aGluIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYC4gVGhhdOKAmXMgYSBnb29kIG1vdmUsIHBvdGVudGlhbGx5IG9mZmVyaW5nIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBpbiBidWxrIHVubWFwcGluZyBzY2VuYXJpb3MuXG5cbkZ1cnRoZXJtb3JlLCB0aGV5J3ZlIG1vZGlmaWVkIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGluIGBtbS9ybWFwLmNgLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoYXQgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpIHJldHVybiAxO2AuIFRoaXMgY2hhbmdlIGxldHMgdGhlIHN5c3RlbSBiYXRjaCB1bm1hcCBldmVuIGlmIHRoZSBWTUEgaGFzIHRoZSBgdXNlcmZhdWx0ZmRgIHByb3RlY3Rpb24gYWN0aXZlLiBDbGV2ZXIsIGFsbG93aW5nIGJhdGNoIHVubWFwcGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgcHJvdGVjdGlvbiBpcyBlbmFibGVkLlxuXG5BbmQgaW4gYHRyeV90b191bm1hcF9vbmVgLCB3ZSdyZSBhbHNvIHNlZWluZyB0aGUgY2FsbCB0byBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agd2l0aCB0aGUgYG5yX3BhZ2VzYCBhcmd1bWVudCwgaW5zdGVhZCBvZiB0aGF0IHNpbmdsZSBQVEUgaGFuZGxpbmcuIFRoaXMgcmVpbmZvcmNlcyB0aGUgYmF0Y2ggdW5tYXBwaW5nIHN0cmF0ZWd5LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgc2hvdWxkIG9wdGltaXplIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zIHdpdGhpbiBgdXNlcmZhdWx0ZmRgLXByb3RlY3RlZCBWTUFzLCBlbmFibGluZyBiYXRjaGluZyBvcGVyYXRpb25zLiBOb3csIGxldOKAmXMgZGlnIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB0aGlzLlxuXG5JJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoZSBjb2RlIGl0c2VsZiBmb3Igcm9idXN0bmVzcywgb2YgY291cnNlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQsIHNpbmNlIGl0IGRlYWxzIHdpdGggYHVzZXJmYXVsdGZkYCBhbmQgYHVmZmQtd3BgLiBJIGFscmVhZHkga25vdyBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgb2J2aW91cyBvbmUgZm9yIHRoZSB1c2VyZmF1bHRmZCBpdHNlbGYuIFRoZW4gSSdsbCBjaGVjayBgbW0vS2NvbmZpZ2AsIGBmcy9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGB1ZmZkLXdwYC4gUGVyaGFwcyB0aGVyZSBpcyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCwgb3IgbWF5YmUgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjMyLjEyMjYwNjQwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI3MTM0MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzNjg9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbi0tXFxubW0vS2NvbmZpZy0xMzcyLVxcbm1tL0tjb25maWc6MTM3Mzpjb25maWcgVVNFUkZBVUxURkRfUldQXFxubW0vS2NvbmZpZy0xMzc0LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctMTM4MS1cXG5tbS9LY29uZmlnOjEzODI6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM4My1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6MzQuOTQ5NzQ3NzQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MzQwNjYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIGBQVEVfTUFSS0VSX1VGRkRfV1BgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIGdvdCBtZSBsb29raW5nIGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBSaWdodCwgdGhhdCdzIHRoZSBtYXJrZXIgdXNlZCBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSByb2xlIHRoaXMgcGxheXMgaW4gdGhlIG92ZXJhbGwgdXNlcmZhdWx0ZmQgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIHRoaXMgZmxhZyBpcyBjcnVjaWFsIGZvciBhbGxvd2luZyB1c2VyLXNwYWNlIGhhbmRsZXJzIHRvIG1hbmFnZSB3cml0ZXMgdG8gcGFnZXMgdGhhdCBhcmUgaW5pdGlhbGx5IG1hcmtlZCBhcyByZWFkLW9ubHksIGJ1dCBzaG91bGQgYmUgd3JpdGVhYmxlIGFmdGVyIGl0J3MgYmVpbmcgaGFuZGxlZCBieSB1c2VyZmF1bHRmZC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBwYXRoIHRocm91Z2ggdGhlIGtlcm5lbCwgY29uc2lkZXIgd2hlcmUgaXQncyBzZXQsIHdoZXJlIGl0J3MgY2hlY2tlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQuIEkgd2lsbCBrZWVwIGFuIGV5ZSBvcGVuIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBhcmlzZSBkdWUgdG8gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgcGFnZSB0YWJsZSBlbnRyaWVzLiBUaGUgZ29hbCBpcyB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG1lbW9yeSBwcm90ZWN0aW9uLCB1c2VyZmF1bHRmZCBoYW5kbGVycywgYW5kIGFueSByZWxhdGVkIG9wdGltaXphdGlvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IHJlbGV2YW50IENQVSBmZWF0dXJlcywgbGlrZSBoYXJkd2FyZSBwYWdlIHRhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQxOjM4LjUxMzE1NjUzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0NzQ0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6NDEuMDM3OTA3MTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NjAwMDExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgVVNFUkZBVUxURkRgIGFuZCBXcml0ZSBQcm90ZWN0aW9uIGluIFBhZ2UgVGFibGVzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGBVU0VSRkFVTFRGRGAgYW5kIHRoYXQgYFBURV9NQVJLRVJfVUZGRF9XUGAgZmxhZy4gVGhleSdyZSBjbGVhcmx5IHJlbGF0ZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSB3b3JrIHRvZ2V0aGVyLiBJIGtub3cgdGhlcmUncyBhIGNvbm5lY3Rpb24gdG8gaGFuZGxpbmcgd3JpdGUgZmF1bHRzLCBwYXJ0aWN1bGFybHkgaW4gdXNlci1zcGFjZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB3aXRoaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGxvZ2ljIGJlaGluZCBjb25kaXRpb25hbGx5IGluc3RhbGxpbmcgb3Igc2V0dGluZyB0aGF0IHdyaXRlLXByb3RlY3Rpb24gZmxhZyBvbiB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKS4gV2hhdCdzIHRoZSBnYXRpbmcgbWVjaGFuaXNtIHRoZXJlPyBXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgZmxhZyBiZWluZyBzZXQ/IEhvdyBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggdGhlIGZhdWx0IGhhbmRsaW5nIHByb2Nlc3M/IEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoZW4gYW5kIGhvdyBgVVNFUkZBVUxURkRgIGlzIGxldmVyYWdpbmcgdGhpcyBQVEUgbWFya2luZyBmb3Igd3JpdGUgcHJvdGVjdGlvbiBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzE1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6NDQuMjMzOTEyNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNDM5NTk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD01NDA1PXZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC01NDA4LVxcbmluY2x1ZGUvbGludXgvbW0uaDo1NDA5OmJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC01NDEwLVxcdFxcdFxcdCAgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLFxcbi0tXFxubW0vbWVtb3J5LmM9MTY3MD1zdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuLS1cXG5tbS9tZW1vcnkuYy0xNjc4LS8qKlxcbm1tL21lbW9yeS5jOjE2Nzk6ICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXNcXG5tbS9tZW1vcnkuYy0xNjgwLSAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cXG4tLVxcbm1tL21lbW9yeS5jLTE2OTgtICovXFxubW0vbWVtb3J5LmM6MTY5OTpib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vbWVtb3J5LmMtMTcwMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuLS1cXG5tbS9tZW1vcnkuYz0xNzQ4PXphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTc1NC1cXG5tbS9tZW1vcnkuYzoxNzU1OlxcdHJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTtcXG5tbS9tZW1vcnkuYy0xNzU2LX1cXG4tLVxcbm1tL3JtYXAuYz0yMTk1PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjM0NC1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjM0NTpcXHRcXHRjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcXG5tbS9ybWFwLmMtMjM0Ni1cXHRcXHRcXHRcXHRcXHQgIG5yX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTk6NDE6NDcuMDY4MzEzMjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMyNzg3OTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzIGluIFVGRkQgV3JpdGUgUHJvdGVjdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gdGhpcyBVRkZEIHdyaXRlIHByb3RlY3Rpb24gaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB0cnlfdG9fdW5tYXBfb25lYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3JtYXAuY2AuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmb3IgcGFnZSByZWNsYWltLCBtaWdyYXRpb24sIGV0Yy4gV2hpbGUgaXQncyByZWxhdGl2ZWx5IGhvdCwgSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgbmV3IGNvZGUgcGF0aHMuIFNwZWNpZmljYWxseSwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGNhdWdodCBteSBleWUgYXMgc29tZXRoaW5nIG5ld2x5IGFkZGVkIG9yIGhlYXZpbHkgbW9kaWZpZWQuXG5cbkFoLCB3YWl0IGEgc2Vjb25kLCBsZXQgbWUgYWRkIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAgdG8gdGhlIGxpc3Qgb2YgY2hhbmdlcy4gQW5kLCBJIHNlZSBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBpcyBhbHNvIHRvdWNoZWQuIFJpZ2h0LCBsZXQncyBrZWVwIHRyYWNrIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuXG5cbk5vdywgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBiZXN0IGZvY2FsIHBvaW50PyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUgbG9naWMgdGhhdCdzIGJlaW5nIGludHJvZHVjZWQgaGVyZS4gVGhhdCdzIHByb2JhYmx5IHRoZSBtb3N0IHZhbHVhYmxlIHN5bWJvbCB0byBpbnZlc3RpZ2F0ZS4gQW5kIHRoZW4gdGhlcmUncyBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYC4gSXQncyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHRoYXQgYHRyeV90b191bm1hcF9vbmVgIHVzZXMgdG8gdW5tYXAgUFRFcyBpbiBiYXRjaGVzLiBJdCdzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jay5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgbm93IHdpdGhpbiBgbW0vcm1hcC5jYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MTo1Mi4zOTYyMTUyNzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjA0OTI5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5tYXBfcHRlX2JhdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xOTMzPXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5NDMtXFxubW0vcm1hcC5jOjE5NDQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jLTE5NDUtXFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vcm1hcC5jPTIxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzE1LVxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG5tbS9ybWFwLmM6MjMxNjpcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChmb2xpbywgXFx1MDAyNnB2bXcsIGZsYWdzLCBwdGV2YWwpO1xcbm1tL3JtYXAuYy0yMzE3LVxcdFxcdFxcdGVuZF9hZGRyID0gYWRkcmVzcyArIG5yX3BhZ2VzICogUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MTo1NC43NTY3MTUzMDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MzA5OTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBmb2NhbCBwb2ludHMgZm9yIG15IGFuYWx5c2lzLiBUaGUgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgZnVuY3Rpb24gc2VlbXMgbGlrZSBpdCBjb3VsZCBiZSBhIHByb2JsZW1hdGljIGNob2ljZS4gSXQncyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBpbmxpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gSWYgdGhhdCBoYXBwZW5zLCBpdCB3b24ndCBiZSBhIHVzZWZ1bCBwb2ludCB0byBzZXQgYSBicmVha3BvaW50IG9yIHRyYWNlLCBhcyBpdCdzIGVmZmVjdGl2ZWx5IGludGVncmF0ZWQgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQgY291bGQgZGlzYXBwZWFyIGVudGlyZWx5LCBvciB0aGUga2V5IHN0ZXBzIGNvdWxkIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgaW5saW5lZCBjb2RlLCBvYnNjdXJpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uJ3MgbG9naWMuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgbG9va3MgbXVjaCBtb3JlIHByb21pc2luZy4gSXQncyAqbm90KiBpbmxpbmU7IEkgY2FuIHNlZSB0aGF0IGl0J3MgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYC4gVGhhdCdzIGEgc29saWQgaW5kaWNhdG9yIHRoYXQgaXQncyBhIGRpc3RpbmN0IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBwcmVzZW50IGluIHRoZSBmaW5hbCBiaW5hcnkgYW5kIHRoZXJlZm9yZSB0cmFjZWFibGUuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGlubGluaW5nIHN0YXR1cyBvZiBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQncyBzaW1pbGFybHkgYSBnb29kLCBkaXN0aW5jdCBzeW1ib2wgdG8gYW5hbHl6ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IHdhc3RlIHRpbWUgb24gYSBmdW5jdGlvbiB0aGF0IGVuZHMgdXAgaW5saW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MTo1OC44MDk4MTc0NzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDkzODg2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTc0Nz1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9tZW1vcnkuYzoxNzQ4OnphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTE3NDktXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXFxuLS1cXG5tbS9tZW1vcnkuYz0xNzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB6YXBfcHJlc2VudF9mb2xpb19wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzg3LVxcdGlmICh1bmxpa2VseSh1c2VyZmF1bHRmZF9wdGVfd3Aodm1hLCBwdGVudCkpKVxcbm1tL21lbW9yeS5jOjE3ODg6XFx0XFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsXFxubW0vbWVtb3J5LmMtMTc4OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5yLCBkZXRhaWxzLCBwdGVudCk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xODA5PXN0YXRpYyBpbmxpbmUgaW50IHphcF9wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE4MjYtXFx0XFx0aWYgKHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSlcXG5tbS9tZW1vcnkuYzoxODI3OlxcdFxcdFxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcixcXG5tbS9tZW1vcnkuYy0xODI4LVxcdFxcdFxcdFxcdFxcdFxcdHB0ZSwgMSwgZGV0YWlscywgcHRlbnQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTg1NT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODc1LVxcdFxcdCAqIGNvbnNpZGVyIHVmZmQtd3AgYml0IHdoZW4gemFwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcXG5tbS9tZW1vcnkuYzoxODc2OlxcdFxcdCAqIHNlZSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCgpLlxcbm1tL21lbW9yeS5jLTE4NzctXFx0XFx0ICovXFxuLS1cXG5tbS9tZW1vcnkuYy0xOTIwLVxcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yKTtcXG5tbS9tZW1vcnkuYzoxOTIxOlxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xcbm1tL21lbW9yeS5jLTE5MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE5OjQyOjAxLjE1OTIxNDcxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjE4NjQ3NTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVXNlcmZhdWx0ZmQgV3JpdGUtUHJvdGVjdGlvbiBQVEUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyBpbiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIEl0IGxvb2tzIGxpa2UgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIHRoZSBtYWluIGZvY3VzLiBJJ20gZ2xhbmNpbmcgYXQgb3RoZXIgZnVuY3Rpb25zLCBsaWtlIGB0cnlfdG9fdW5tYXBfb25lYCBsb29rcyBhIGxpdHRsZSBicm9hZCwgbWF5YmUgdG9vIG11Y2ggZm9yIHRoZSBzcGVjaWZpYyBjaGFuZ2UsIGFuZCBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2AgaXMgYWx3YXlzIGlubGluZSwgd2hpbGUgYHphcF9wcmVzZW50X3B0ZXNgIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgYXJlIHN0YXRpYyBpbmxpbmUuIGB6YXBfcHRlX3JhbmdlYCBjYWxscyB0aGUgc3RhdGljIGlubGluZXMuIFNvLCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgaXMgdGhlIG1haW4gbm9uLWlubGluZSBmdW5jdGlvbiBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyB0aGF0IGxvb2tzIGxpa2UgdGhlIGJlc3QgZW50cnkgcG9pbnQgZm9yIHRoZSBjaGFuZ2VzLlxuXG5UaGUgcGF0Y2gncyBnb2FsIGlzIGJhdGNoaW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBQVEUgbWFya2VycywgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIGNsZWFyaW5nIFBURXMuIFRoaXMgc3BlY2lmaWNhbGx5IGludm9sdmVzIHNvbWUgYWRqdXN0bWVudHMgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGBtbS9tZW1vcnkuY2AgYW5kIGBtbS9ybWFwLmNgIHRvIHN1cHBvcnQgdGhlIGhhbmRsaW5nIG9mIG11bHRpcGxlIFBURXMgc2ltdWx0YW5lb3VzbHkuIFRoaXMgc2VlbXMgdG8gYmUgZ2VhcmVkIHRvd2FyZCBvcHRpbWl6aW5nIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zIHdpdGhpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuLi4gWXVwLCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b191bm1hcF9vbmVgIGFuZCB0aGUgaW5saW5lIGZ1bmN0aW9uIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIHdoaWNoLCBpbiB0dXJuLCBnZXRzIGNhbGxlZCBmcm9tIGB6YXBfcHRlX3JhbmdlYCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIG11bm1hcCBhbmQgbWFkdmlzZS4gTWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZG9jdW1lbnQgdGhlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzU5LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxOTo0MjoyMy4zNDU2OTMzMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgwMzI0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIFBURSBtYXJrZXJzIHdoZW4gY2xlYXJpbmcgUFRFcy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9tZW1vcnkuYyBhbmQgbW0vcm1hcC5jIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UsIG9wdGltaXppbmcgdW5tYXBwaW5nIG9mIGZvbGlvcyBpbiB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gUFRFIG1hcmtlcnMgYXJlIGxlYWtlZCBvciBpbmNvcnJlY3RseSBpbnN0YWxsZWQgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gUFRFIG1hcmtlcnMgd2hlbiBjbGVhcmluZyBQVEVzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL21lbW9yeS5jIGFuZCBtbS9ybWFwLmMgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSwgb3B0aW1pemluZyB1bm1hcHBpbmcgb2YgZm9saW9zIGluIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBQVEUgbWFya2VycyBhcmUgbGVha2VkIG9yIGluY29ycmVjdGx5IGluc3RhbGxlZCBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[1] Phase: Succeeded StartedAt: 2026-07-15 19:42:35 +0000 UTC FinishedAt: 2026-07-15 19:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 19:42:35 +0000 UTC FinishedAt: 2026-07-15 19:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2] Phase: Succeeded StartedAt: 2026-07-15 19:42:35 +0000 UTC FinishedAt: 2026-07-16 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-15 19:42:35 +0000 UTC FinishedAt: 2026-07-16 00:16:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 19:42:35 +0000 UTC FinishedAt: 2026-07-15 19:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 19:42:35 +0000 UTC FinishedAt: 2026-07-15 19:42:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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-workflow42mc8/series-workflow42mc8-convert-artifact-2990389532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 19:42:45 +0000 UTC FinishedAt: 2026-07-15 20:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 19:42:45 +0000 UTC FinishedAt: 2026-07-15 20:09:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*469129a3-6617-49e0-b0db-d5b9ba5fc970,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-workflow42mc8/series-workflow42mc8-convert-artifact-2990389532/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": "813062c4-025f-4a08-bb50-4f34d9988e19", "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-workflow42mc8/series-workflow42mc8-build-action-820535114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 19:42:45 +0000 UTC FinishedAt: 2026-07-15 20:08:56 +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:*469129a3-6617-49e0-b0db-d5b9ba5fc970,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-workflow42mc8/series-workflow42mc8-convert-artifact-2990389532/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": "813062c4-025f-4a08-bb50-4f34d9988e19", "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-workflow42mc8/series-workflow42mc8-build-action-820535114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:09:07 +0000 UTC FinishedAt: 2026-07-15 20:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:09:07 +0000 UTC FinishedAt: 2026-07-15 20:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:09:07 +0000 UTC FinishedAt: 2026-07-15 20:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:09:07 +0000 UTC FinishedAt: 2026-07-15 20:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-workflow42mc8/series-workflow42mc8-convert-artifact-2120731227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:09:18 +0000 UTC FinishedAt: 2026-07-15 20:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:09:18 +0000 UTC FinishedAt: 2026-07-15 20:11:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*813062c4-025f-4a08-bb50-4f34d9988e19,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-workflow42mc8/series-workflow42mc8-build-action-820535114/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-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:11:27 +0000 UTC FinishedAt: 2026-07-15 20:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:11:27 +0000 UTC FinishedAt: 2026-07-15 20:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:11:27 +0000 UTC FinishedAt: 2026-07-15 21:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:11:27 +0000 UTC FinishedAt: 2026-07-15 21:09:23 +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:*469129a3-6617-49e0-b0db-d5b9ba5fc970,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-workflow42mc8/series-workflow42mc8-convert-artifact-2120731227/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": "c0972200-d3c1-417b-a471-348505f6005d", "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-workflow42mc8/series-workflow42mc8-build-action-2157670655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 20:11:27 +0000 UTC FinishedAt: 2026-07-15 21:09:13 +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:*469129a3-6617-49e0-b0db-d5b9ba5fc970,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-workflow42mc8/series-workflow42mc8-convert-artifact-2120731227/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": "c0972200-d3c1-417b-a471-348505f6005d", "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-workflow42mc8/series-workflow42mc8-build-action-2157670655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:09:23 +0000 UTC FinishedAt: 2026-07-15 21:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:09:23 +0000 UTC FinishedAt: 2026-07-15 21:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:09:23 +0000 UTC FinishedAt: 2026-07-15 21:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:09:23 +0000 UTC FinishedAt: 2026-07-15 21:11:25 +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:*c0972200-d3c1-417b-a471-348505f6005d,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-workflow42mc8/series-workflow42mc8-build-action-2157670655/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-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 21:11:35 +0000 UTC FinishedAt: 2026-07-16 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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: Succeeded StartedAt: 2026-07-15 21:11:35 +0000 UTC FinishedAt: 2026-07-16 00:16:31 +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":["cond_install_uffd_wp_ptes"],"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:*813062c4-025f-4a08-bb50-4f34d9988e19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0972200-d3c1-417b-a471-348505f6005d,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-workflow42mc8/series-workflow42mc8-build-action-820535114/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-workflow42mc8/series-workflow42mc8-build-action-2157670655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:11:35 +0000 UTC FinishedAt: 2026-07-15 21:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:11:35 +0000 UTC FinishedAt: 2026-07-15 21:11:41 +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":["cond_install_uffd_wp_ptes"],"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-workflow42mc8/series-workflow42mc8-convert-artifact-2169592148/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:11:35 +0000 UTC FinishedAt: 2026-07-15 21:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:11:35 +0000 UTC FinishedAt: 2026-07-15 21:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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-15 21:11:35 +0000 UTC FinishedAt: 2026-07-15 21:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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: Succeeded StartedAt: 2026-07-15 21:11:45 +0000 UTC FinishedAt: 2026-07-16 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42mc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"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":["cond_install_uffd_wp_ptes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"59c684a9908d2e6f7a791f7f033eae57ec2b3a61","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"cef1d023-118a-4ca1-ae39-fa5808900ea9","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: Succeeded StartedAt: 2026-07-15 21:11:45 +0000 UTC FinishedAt: 2026-07-16 00:16:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*813062c4-025f-4a08-bb50-4f34d9988e19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0972200-d3c1-417b-a471-348505f6005d,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-workflow42mc8/series-workflow42mc8-build-action-820535114/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-workflow42mc8/series-workflow42mc8-build-action-2157670655/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-workflow42mc8/series-workflow42mc8-convert-artifact-2169592148/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}