Name: series-workflow9z8lw Phase: Succeeded StartedAt: 2026-08-31 15:51:36 +0000 UTC FinishedAt: 2026-08-31 20:57:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[0] Phase: Succeeded StartedAt: 2026-08-31 15:51:36 +0000 UTC FinishedAt: 2026-08-31 17:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 15:51:36 +0000 UTC FinishedAt: 2026-08-31 17:12: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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "36b26662-5d6c-4ca1-8d77-89e5d026a8a8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_commit_ctx", "damon_set_schemes", "damon_call", "damos_walk", "damon_sysfs_add_schemes" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7LAogICAgJiMzNDtkYW1vc193YWxrJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNldmVyYWwgZnVuY3Rpb25hbCBidWdzIGluIERBTU9OIGNvcmUsIHBoeXNpY2FsIGFkZHJlc3MgKHBhZGRyKSwgYW5kIHZpcnR1YWwgYWRkcmVzcyAodmFkZHIpIG9wZXJhdGlvbnM6IGhhbmRsaW5nIHJlZ2lvbiBzcGxpdHRpbmcgZmFpbHVyZSBpbiBkYW1vc19hcHBseV9zY2hlbWUsIHByZXZlbnRpbmcgZGl2aXNpb24gYnkgemVybyBhbmQgb3V0LW9mLXJhbmdlIHF1b3RhIGNhbGN1bGF0aW9ucyBpbiBub2RlL21lbWNnIG1lbW9yeSBxdW90YSBnb2FscywgZml4aW5nIGZvbGlvIGFkZHJlc3MgYWR2YW5jZW1lbnQgaW4gcGFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKHBhZ2VvdXQsIGRlYWN0aXZhdGUsIG1pZ3JhdGUsIHN0YXQpLCBhbmQgY29ycmVjdGx5IGNhbGN1bGF0aW5nIFBNRCBpdGVyYXRpb24gc3RyaWRlcyBhY3Jvc3MgbXVsdGktcGFnZSBmb2xpb3MgaW4gdmFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKG1pZ3JhdGUsIHN0YXQpLiBBbGwgdGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MmNlODNmZTIxN2QyYjZkMzM3YmJlMmFjZjJlNzYyYzI1MTlhZDJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTY6MzY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzeilcbiBcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4tXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcbiYjNDM7XHRcdFx0aWYgKGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzeikpXG4mIzQzO1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgJiM0MzsyODE2LDEzIEBAIHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbiBcdH1cbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4mIzQzO1x0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIGkuZnJlZXJhbSkge1xuJiM0MztcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4mIzQzO1x0XHRcdHJldHVybiAxMDAwMDtcbiYjNDM7XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuQEAgLTI4NTUsNiAmIzQzOzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4mIzQzO1x0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXMpIHtcbiYjNDM7XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXG4mIzQzO1x0XHRcdHJldHVybiAxMDAwMDtcbiYjNDM7XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG5AQCAtMzAwMSw3ICYjNDM7MzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4gXHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTtcbiBcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfQU5PTikgJiM0MztcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfRklMRSk7XG4tXHR0b3RhbCA9IGFjdGl2ZSAmIzQzOyBpbmFjdGl2ZTtcbiYjNDM7XHR0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpO1xuIFx0aWYgKGFjdGl2ZV9yYXRpbylcbiBcdFx0cmV0dXJuIG11bHRfZnJhYyhhY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG4gXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRlbHNlXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pO1xuJiM0MztcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxuQEAgLTMwMiw3ICYjNDM7MzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiYjNDM7XHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5AQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcdTAwMjZmb2xpb19saXN0LCBzLVx1MDAzZXRhcmdldF9uaWQpO1xuQEAgLTM3OSw3ICYjNDM7Mzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKSAvIGFkZHJfdW5pdDtcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCAwNjQ4NDAwYjJkNjViLi5jOGMzMmIyYWUwNDAyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuJiM0MztcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcbiBcdFx0XHRcdG1pZ3JhdGlvbl9saXN0cyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UocHRlbnQpKTtcbiYjNDM7XHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XG4gXHR9XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcbiBcdHJldHVybiAwO1xuQEAgLTgzMSw2ICYjNDM7ODM0LDggQEAgc3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuJiM0MztcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtODQ0LDcgJiM0Mzs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0aWYgKCFkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB2bWEsIGFkZHIsIHB0ZSwgTlVMTCkpXG4gXHRcdFx0KnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XG4mIzQzO1x0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xuIFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuIFx0fVxuIFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDssCiAgICAmIzM0O2RhbW9zX3dhbGsmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc2V2ZXJhbCBmdW5jdGlvbmFsIGJ1Z3MgaW4gREFNT04gY29yZSwgcGh5c2ljYWwgYWRkcmVzcyAocGFkZHIpLCBhbmQgdmlydHVhbCBhZGRyZXNzICh2YWRkcikgb3BlcmF0aW9uczogaGFuZGxpbmcgcmVnaW9uIHNwbGl0dGluZyBmYWlsdXJlIGluIGRhbW9zX2FwcGx5X3NjaGVtZSwgcHJldmVudGluZyBkaXZpc2lvbiBieSB6ZXJvIGFuZCBvdXQtb2YtcmFuZ2UgcXVvdGEgY2FsY3VsYXRpb25zIGluIG5vZGUvbWVtY2cgbWVtb3J5IHF1b3RhIGdvYWxzLCBmaXhpbmcgZm9saW8gYWRkcmVzcyBhZHZhbmNlbWVudCBpbiBwYWRkciBzY2hlbWUgb3BlcmF0aW9ucyAocGFnZW91dCwgZGVhY3RpdmF0ZSwgbWlncmF0ZSwgc3RhdCksIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgUE1EIGl0ZXJhdGlvbiBzdHJpZGVzIGFjcm9zcyBtdWx0aS1wYWdlIGZvbGlvcyBpbiB2YWRkciBzY2hlbWUgb3BlcmF0aW9ucyAobWlncmF0ZSwgc3RhdCkuIEFsbCB0aGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyY2U4M2ZlMjE3ZDJiNmQzMzdiYmUyYWNmMmU3NjJjMjUxOWFkMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNjozNjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJCWMtJmd0O21pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzeikKIAkJCQlnb3RvIHVwZGF0ZV9zdGF0OwotCQkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTsKJiM0MzsJCQlpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSkKJiM0MzsJCQkJZ290byB1cGRhdGVfc3RhdDsKIAkJfQogCQlpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKQogCQkJcmV0dXJuOwpAQCAtMjgxNSw2ICYjNDM7MjgxNiwxMyBAQCBzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoCiAJfQogCiAJc2lfbWVtaW5mb19ub2RlKCZhbXA7aSwgZ29hbC0mZ3Q7bmlkKTsKJiM0MzsJaWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gJmx0OyBpLmZyZWVyYW0pIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKJiM0MzsJCQlyZXR1cm4gMTAwMDA7CiYjNDM7CQllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KQEAgLTI4NTUsNiAmIzQzOzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKIAlzaV9tZW1pbmZvX25vZGUoJmFtcDtpLCBnb2FsLSZndDtuaWQpOwomIzQzOwlpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSAmbHQ7IHVzZWRfcGFnZXMpIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKQomIzQzOwkJCXJldHVybiAxMDAwMDsKJiM0MzsJCWVsc2UJLyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KIAlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gdXNlZF9wYWdlczsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqLwpAQCAtMzAwMSw3ICYjNDM7MzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pCiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTsKIAlpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0FOT04pICYjNDM7CiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0ZJTEUpOwotCXRvdGFsID0gYWN0aXZlICYjNDM7IGluYWN0aXZlOwomIzQzOwl0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpOwogCWlmIChhY3RpdmVfcmF0aW8pCiAJCXJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpOwogCXJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQllbHNlCiAJCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9fbGlzdCk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpCkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZSgKIAkJCWZvbGlvX2RlYWN0aXZhdGUoZm9saW8pOwogCQlhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKQEAgLTM1MCw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7CiAJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtmb2xpb19saXN0KTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCWFwcGxpZWQgPSBkYW1vbl9taWdyYXRlX3BhZ2VzKCZhbXA7Zm9saW9fbGlzdCwgcy0mZ3Q7dGFyZ2V0X25pZCk7CkBAIC0zNzksNyAmIzQzOzM3OSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAogCQlpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0OwotCQlhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKJiM0MzsJCWFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAl9CiAJcy0mZ3Q7bGFzdF9hcHBsaWVkID0gZm9saW87CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCAwNjQ4NDAwYjJkNjViLi5jOGMzMmIyYWUwNDAyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAwOwogCiAJZm9yICg7IGFkZHIgJmx0OyBuZXh0OyBwdGUgJiM0Mzs9IG5yLCBhZGRyICYjNDM7PSBuciAqIFBBR0VfU0laRSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKJiM0MzsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiAKQEAgLTY4MSw3ICYjNDM7NjgzLDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAkJZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstJmd0O3ZtYSwgYWRkciwgZGVzdHMsCiAJCQkJbWlncmF0aW9uX2xpc3RzKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQlwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpOwomIzQzOwkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CiAJcmV0dXJuIDA7CkBAIC04MzEsNiAmIzQzOzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gMDsKIAogCWZvciAoOyBhZGRyICZsdDsgbmV4dDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiYjNDM7CiAJCW5yID0gMTsKIAkJcHRlbnQgPSBwdGVwX2dldChwdGUpOwogCkBAIC04NDQsNyAmIzQzOzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJCWlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwotCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCXBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7CiYjNDM7CQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4OwogCQlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBmdXp6aW5nIGVmZm9ydCBiYXNlZCBvbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGl0IGludHJvZHVjZXMuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgZnJhbWV3b3JrKSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgcHJvbWlzaW5nOyBEQU1PTiBpcyBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4KCkZpcnN0LCBpbiBgbW0vZGFtb24vY29yZS5jYCwgSSBzZWUgYSBjb3VwbGUgb2YgaW50ZXJlc3RpbmcgY2hhbmdlcy4gYGRhbW9zX2FwcGx5X3NjaGVtZSgpYCBub3cgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCgpYCwgd2l0aCBhIGBnb3RvIHVwZGF0ZV9zdGF0YCBvbiBmYWlsdXJlLiBUaGF0JiMzOTtzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBhbmQgcG90ZW50aWFsbHkgZnV6ei1hYmxlIGlmIHdlIGNhbiB0cmlnZ2VyIGZhaWx1cmVzIGluIHRoYXQgc3BsaXR0aW5nIGZ1bmN0aW9uLiBTaW1pbGFybHksIHRoZXJlIGFyZSBudWxsIGNoZWNrcyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgIGFuZCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYC4gVGhlIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBkaXYtYnktemVybyBmaXgsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBnb29kIHNpZ24gZm9yIGZ1enppbmcsIHNpbmNlIHRob3NlIGFyZSB0eXBpY2FsbHkgc3RyYWlnaHRmb3J3YXJkIHRvIGV4cGxvaXQuCgpNb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgY2hhbmdlcyBpbiBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YCBhbGwgbG9vayByZWxhdGVkIHRvIGZvbGlvIGFsaWdubWVudCBpc3N1ZXMsIHNwZWNpZmljYWxseSBjYWxjdWxhdGluZyB0aGUgYWRkcmVzcyB3aGVuIGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSBhZGRpdGlvbiBvZiBgZm9saW9fc2l6ZShmb2xpbylgIG1ha2VzIG1lIHRoaW5rIHdlIG1pZ2h0IGJlIGFibGUgdG8gY3JhZnQgc29tZSBpbnRlcmVzdGluZywgZWRnZS1jYXNlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgYW5kIHRyaWdnZXIgc29tZSBtb3JlIGludGVyZXN0aW5nIGJlaGF2aW9yLgoKRmluYWxseSwgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgIGFuZCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgIGFyZSBmaXhlZCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIGxhcmdlIGZvbGlvcy9QTUQgZW50cmllcy4gVGhpcyBpcyBhbm90aGVyIGFyZWEgd2hlcmUgYm91bmRhcnkgY29uZGl0aW9ucyBhcmUgY3JpdGljYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGJ1ZyBmaXhlcyB3aXRoaW4gdGhlIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgdHlwZXMgb2YgZml4ZXMgYXJlIG9mdGVuIGdyZWF0IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFzIHRoZXkgc3VnZ2VzdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcywgZWRnZSBjYXNlcywgYW5kIHBvdGVudGlhbGx5LCBjb25jdXJyZW5jeSBpc3N1ZXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIERBTU9OIGFjY2Vzc2libGUgdGhyb3VnaCBhIGZ1enphYmxlIGludGVyZmFjZT8gWWVzLCBpdCYjMzk7cyBhIGNvcmUgTU0gZmVhdHVyZSBjb25maWd1cmVkIHZpYSBzeXNmcyAoc3BlY2lmaWNhbGx5IGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gKS4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQsIGNvbmZpZ3VyZSBpdCwgYW5kIHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlc2UgY29kZSBwYXRocyBldmVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0IGlzIGdyZWF0IGJlY2F1c2UgdGhhdCBtYWtlcyBpdCBmYXIgc2ltcGxlciB0byB0YXJnZXQgd2l0aCBvdXIgZWZmb3J0cy4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBEQU1PTiwgdG8gc2VlIHdoYXQga25vYnMgd2UgaGF2ZSB0byBjb25maWd1cmUgZGlmZmVyZW50IG9wZXJhdGlvbmFsIHN0YXRlcyBvZiB0aGUgZmVhdHVyZS4gV2UmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgbWF5YmUganVzdCBhIHNpbXBsZSBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWFrZWZpbGUgSW52ZXN0aWdhdGlvbiAtIGBtbS9kYW1vbmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG9iamVjdCBmaWxlIGNvbnN0cnVjdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgYG1tL2RhbW9uYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBkaWN0YXRlcyB0aGUgY29tcGlsYXRpb24gc3RlcHMsIGRlcGVuZGVuY2llcywgYW5kIGxpbmtlciBmbGFncyBmb3IgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCB0byBzZWUgaG93IGl0IGZpdHMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYnVpbGQgYW5kIGZvcndhcmRzIHRvIGhvdyBJJiMzOTtkIGNoYW5nZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgcmVjZW50IGNoYW5nZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgcGlucG9pbnQgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIG9yIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZmZlY3RlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLiBUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvcmUgZmlsZXMgZm9yIERBTU9OIOKAkyBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgREFNT04mIzM5O3MgZnVuZGFtZW50YWwgb3BlcmF0aW9ucywgYW5kIGEgY2xvc2VyIGxvb2sgYXQgdGhvc2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfc2NoZW1lfGRhbW9uX3BhX3xkYW1vc192YV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjU1OD1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTI1NzEtXG5tbS9kYW1vbi9jb3JlLmM6MjU3MjpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yNTczLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jPTI2NDM9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjY5LVx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxubW0vZGFtb24vY29yZS5jOjI2NzA6XHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xubW0vZGFtb24vY29yZS5jLTI2NzEtXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOC1cbm1tL2RhbW9uL3BhZGRyLmM6MTk6c3RhdGljIHBoeXNfYWRkcl90IGRhbW9uX3BhX3BoeXNfYWRkcihcbm1tL2RhbW9uL3BhZGRyLmMtMjAtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNC1cbm1tL2RhbW9uL3BhZGRyLmM6MjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxubW0vZGFtb24vcGFkZHIuYy0yNi1cdFx0cGh5c19hZGRyX3QgcGEsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzctXG5tbS9kYW1vbi9wYWRkci5jOjM4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy0zOS17XG4tLVxubW0vZGFtb24vcGFkZHIuYy00OC1cbm1tL2RhbW9uL3BhZGRyLmM6NDk6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy01MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNTMtXG5tbS9kYW1vbi9wYWRkci5jOjU0Olx0ZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlc2FtcGxpbmdfYWRkciwgY3R4LVx1MDAzZWFkZHJfdW5pdCkpO1xubW0vZGFtb24vcGFkZHIuYy01NS19XG5tbS9kYW1vbi9wYWRkci5jLTU2LVxubW0vZGFtb24vcGFkZHIuYzo1NzpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vcGFkZHIuYy01OC17XG4tLVxubW0vZGFtb24vcGFkZHIuYy02My1cdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXG5tbS9kYW1vbi9wYWRkci5jOjY0Olx0XHRcdF9fZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2sociwgY3R4KTtcbm1tL2RhbW9uL3BhZGRyLmMtNjUtXHR9XG4tLVxubW0vZGFtb24vcGFkZHIuYy02Ny1cbm1tL2RhbW9uL3BhZGRyLmM6Njg6c3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG5tbS9kYW1vbi9wYWRkci5jLTY5LXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTgwLVxubW0vZGFtb24vcGFkZHIuYzo4MTpzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy04Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy04NC1cdGJvb2wgYWNjZXNzZWQ7XG5tbS9kYW1vbi9wYWRkci5jOjg1Olx0cGh5c19hZGRyX3Qgc2FtcGxpbmdfYWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihcbm1tL2RhbW9uL3BhZGRyLmMtODYtXHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyLCBhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYy04Ny1cbm1tL2RhbW9uL3BhZGRyLmM6ODg6XHRhY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIpO1xubW0vZGFtb24vcGFkZHIuYy04OS1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgYWNjZXNzZWQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtOTEtXG5tbS9kYW1vbi9wYWRkci5jOjkyOnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vcGFkZHIuYy05My17XG4tLVxubW0vZGFtb24vcGFkZHIuYy05OS1cdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbm1tL2RhbW9uL3BhZGRyLmM6MTAwOlx0XHRcdF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHIsIGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYy0xMDEtXHRcdFx0bWF4X25yX2FjY2Vzc2VzID0gbWF4KHItXHUwMDNlbnJfYWNjZXNzZXMsIG1heF9ucl9hY2Nlc3Nlcyk7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMDctXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxubW0vZGFtb24vcGFkZHIuYy0xMDktXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDAtXG5tbS9kYW1vbi9wYWRkci5jOjE0MTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDctXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xubW0vZGFtb24vcGFkZHIuYzoxNDg6XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfbWF0Y2goZiwgZm9saW8pKSB7XG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE1Ni1cbm1tL2RhbW9uL3BhZGRyLmM6MTU3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3BhZGRyLmMtMTU4LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE3My1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9wYWRkci5jOjE3NDpcdFx0XHRwYSA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsXG5tbS9kYW1vbi9wYWRkci5jLTE3NS1cdFx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzctXHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9wYWRkci5jOjE3ODpcdFx0XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxubW0vZGFtb24vcGFkZHIuYy0xNzktXHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIwOC1cbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vcGFkZHIuYy0yMTAte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjE5LVxubW0vZGFtb24vcGFkZHIuYzoyMjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0yMjEtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNDQtXG5tbS9kYW1vbi9wYWRkci5jOjI0NTpcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmM6MjQ2Olx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYy0yNDctXHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MjQ4Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMjQ5LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI3NC1cdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5tbS9kYW1vbi9wYWRkci5jOjI3NTpcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtMjc2LX1cbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxubW0vZGFtb24vcGFkZHIuYzoyNzg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxubW0vZGFtb24vcGFkZHIuYy0yNzktXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjg1LVxubW0vZGFtb24vcGFkZHIuYzoyODY6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjI4NzpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMjg4LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMDgtXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYzozMDk6XHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jLTMxMC19XG5tbS9kYW1vbi9wYWRkci5jLTMxMS1cbm1tL2RhbW9uL3BhZGRyLmM6MzEyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMxMy1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XG5tbS9kYW1vbi9wYWRkci5jOjMxNjpcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIHRydWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy0zMTctfVxubW0vZGFtb24vcGFkZHIuYy0zMTgtXG5tbS9kYW1vbi9wYWRkci5jOjMxOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZWFjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMyMC1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMyMi17XG5tbS9kYW1vbi9wYWRkci5jOjMyMzpcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzI0LX1cbm1tL2RhbW9uL3BhZGRyLmMtMzI1LVxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMjctXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMzMtXG5tbS9kYW1vbi9wYWRkci5jOjMzNDpcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmM6MzM1Olx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYy0zMzYtXHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MzM3Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzM4LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM1OC1cdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5tbS9kYW1vbi9wYWRkci5jOjM1OTpcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtMzYwLX1cbm1tL2RhbW9uL3BhZGRyLmMtMzYxLVxubW0vZGFtb24vcGFkZHIuYzozNjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zNjMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zNzEtXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYy0zNzQtXHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6Mzc1Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzc2LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM4OC1cbm1tL2RhbW9uL3BhZGRyLmM6Mzg5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTM5MC1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM5Ni1cdGNhc2UgREFNT1NfUEFHRU9VVDpcbm1tL2RhbW9uL3BhZGRyLmM6Mzk3Olx0XHRyZXR1cm4gZGFtb25fcGFfcGFnZW91dChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzk4LVx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcbm1tL2RhbW9uL3BhZGRyLmM6Mzk5Olx0XHRyZXR1cm4gZGFtb25fcGFfYWN0aXZhdGVfcGFnZXMociwgYXVuaXQsIHNjaGVtZSxcbm1tL2RhbW9uL3BhZGRyLmMtNDAwLVx0XHRcdFx0c3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTQwMS1cdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcbm1tL2RhbW9uL3BhZGRyLmM6NDAyOlx0XHRyZXR1cm4gZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxubW0vZGFtb24vcGFkZHIuYy00MDMtXHRcdFx0XHRzel9maWx0ZXJfcGFzc2VkKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQwNS1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxubW0vZGFtb24vcGFkZHIuYzo0MDY6XHRcdHJldHVybiBkYW1vbl9wYV9taWdyYXRlKHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDctXHRjYXNlIERBTU9TX1NUQVQ6XG5tbS9kYW1vbi9wYWRkci5jOjQwODpcdFx0cmV0dXJuIGRhbW9uX3BhX3N0YXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTQwOS1cdGRlZmF1bHQ6XG4tLVxubW0vZGFtb24vcGFkZHIuYy00MTUtXG5tbS9kYW1vbi9wYWRkci5jOjQxNjpzdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxubW0vZGFtb24vcGFkZHIuYy00MTctXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDM2LVxubW0vZGFtb24vcGFkZHIuYzo0Mzc6c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcbm1tL2RhbW9uL3BhZGRyLmMtNDM4LXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQ0Mi1cdFx0LnVwZGF0ZSA9IE5VTEwsXG5tbS9kYW1vbi9wYWRkci5jOjQ0MzpcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0Olx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NDYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxubW0vZGFtb24vcGFkZHIuYzo0NDc6XHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl9wYV9hcHBseV9zY2hlbWUsXG5tbS9kYW1vbi9wYWRkci5jOjQ0ODpcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl9wYV9zY2hlbWVfc2NvcmUsXG5tbS9kYW1vbi9wYWRkci5jLTQ0OS1cdH07XG4tLVxubW0vZGFtb24vcGFkZHIuYy00NTMtXG5tbS9kYW1vbi9wYWRkci5jOjQ1NDpzdWJzeXNfaW5pdGNhbGwoZGFtb25fcGFfaW5pdGNhbGwpO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTIyLVxubW0vZGFtb24vdmFkZHIuYzo1MjM6c3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbm1tL2RhbW9uL3ZhZGRyLmMtNTI0LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTU0NC1cbm1tL2RhbW9uL3ZhZGRyLmM6NTQ1OnN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi92YWRkci5jLTU0Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTU2Mi1cdFx0aWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HKVxubW0vZGFtb24vdmFkZHIuYzo1NjM6XHRcdFx0bWF0Y2hlZCA9IGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChmaWx0ZXIsIGZvbGlvLFxubW0vZGFtb24vdmFkZHIuYy01NjQtXHRcdFx0XHR2bWEsIGFkZHIsIHB0ZXAsIHBtZHApO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTczLVxubW0vZGFtb24vdmFkZHIuYzo1NzQ6c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSB7XG5tbS9kYW1vbi92YWRkci5jLTU3NS1cdHN0cnVjdCBsaXN0X2hlYWQgKm1pZ3JhdGlvbl9saXN0cztcbi0tXG5tbS9kYW1vbi92YWRkci5jLTU4NC0gKi9cbm1tL2RhbW9uL3ZhZGRyLmM6NTg1OnN0YXRpYyB2b2lkIGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi92YWRkci5jLTU4Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTYzNC1cbm1tL2RhbW9uL3ZhZGRyLmM6NjM1OnN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vZGFtb24vdmFkZHIuYy02MzYtXHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG5tbS9kYW1vbi92YWRkci5jLTYzNy17XG5tbS9kYW1vbi92YWRkci5jOjYzODpcdHN0cnVjdCBkYW1vc192YV9taWdyYXRlX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG5tbS9kYW1vbi92YWRkci5jLTYzOS1cdHN0cnVjdCBsaXN0X2hlYWQgKm1pZ3JhdGlvbl9saXN0cyA9IHByaXYtXHUwMDNlbWlncmF0aW9uX2xpc3RzO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjU2LVx0XHRcdGdvdG8gaHVnZV9vdXQ7XG5tbS9kYW1vbi92YWRkci5jOjY1NzpcdFx0aWYgKGRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHdhbGstXHUwMDNldm1hLCBhZGRyLCBOVUxMLCBwbWQpKVxubW0vZGFtb24vdmFkZHIuYy02NTgtXHRcdFx0Z290byBodWdlX291dDtcbm1tL2RhbW9uL3ZhZGRyLmM6NjU5Olx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxubW0vZGFtb24vdmFkZHIuYy02NjAtXHRcdFx0XHRtaWdyYXRpb25fbGlzdHMpO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjgxLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzo2ODI6XHRcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbm1tL2RhbW9uL3ZhZGRyLmMtNjgzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzo2ODQ6XHRcdGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgZGVzdHMsXG5tbS9kYW1vbi92YWRkci5jLTY4NS1cdFx0XHRcdG1pZ3JhdGlvbl9saXN0cyk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03MjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03NDAtXG5tbS9kYW1vbi92YWRkci5jOjc0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbm1tL2RhbW9uL3ZhZGRyLmMtNzQyLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03NDUtXHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XG5tbS9kYW1vbi92YWRkci5jOjc0NjpcdHN0cnVjdCBkYW1vc192YV9taWdyYXRlX3ByaXZhdGUgcHJpdjtcbm1tL2RhbW9uL3ZhZGRyLmMtNzQ3LVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tLVxubW0vZGFtb24vdmFkZHIuYy03NTMtXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG5tbS9kYW1vbi92YWRkci5jOjc1NDpcdFx0LnBtZF9lbnRyeSA9IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5LFxubW0vZGFtb24vdmFkZHIuYy03NTUtXHRcdC5wdGVfZW50cnkgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzg2LVxubW0vZGFtb24vdmFkZHIuYzo3ODc6c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSB7XG5tbS9kYW1vbi92YWRkci5jLTc4OC1cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzkxLVxubW0vZGFtb24vdmFkZHIuYzo3OTI6c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3ZhZGRyLmMtNzkzLVx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vdmFkZHIuYy03OTctXG5tbS9kYW1vbi92YWRkci5jOjc5ODpzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2RhbW9uL3ZhZGRyLmMtNzk5LVx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxubW0vZGFtb24vdmFkZHIuYy04MDAte1xubW0vZGFtb24vdmFkZHIuYzo4MDE6XHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xubW0vZGFtb24vdmFkZHIuYy04MDItXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVx1MDAzZXNjaGVtZTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgxOS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODIwOlx0XHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXG5tbS9kYW1vbi92YWRkci5jLTgyMS1cdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xubW0vZGFtb24vdmFkZHIuYy04MjItXG5tbS9kYW1vbi92YWRkci5jOjgyMzpcdFx0aWYgKCFkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB2bWEsIGFkZHIsIE5VTEwsIHBtZCkpXG5tbS9kYW1vbi92YWRkci5jLTgyNC1cdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4tLVxubW0vZGFtb24vdmFkZHIuYy04NDYtXG5tbS9kYW1vbi92YWRkci5jOjg0NzpcdFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxubW0vZGFtb24vdmFkZHIuYy04NDgtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi92YWRkci5jLTg0OS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODUwOlx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbm1tL2RhbW9uL3ZhZGRyLmMtODUxLVx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTg1OS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODYwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxubW0vZGFtb24vdmFkZHIuYy04NjEtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTg2My17XG5tbS9kYW1vbi92YWRkci5jOjg2NDpcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUgcHJpdjtcbm1tL2RhbW9uL3ZhZGRyLmMtODY1LVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG5tbS9kYW1vbi92YWRkci5jLTg2Ni1cdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3Olx0XHQucG1kX2VudHJ5ID0gZGFtb3NfdmFfc3RhdF9wbWRfZW50cnksXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cdH07XG4tLVxubW0vZGFtb24vdmFkZHIuYz04ODU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fdmFfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTkxMS1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxubW0vZGFtb24vdmFkZHIuYzo5MTI6XHRcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi92YWRkci5jLTkxMy1cdGNhc2UgREFNT1NfU1RBVDpcbm1tL2RhbW9uL3ZhZGRyLmM6OTE0Olx0XHRyZXR1cm4gZGFtb3NfdmFfc3RhdCh0LCByLCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vdmFkZHIuYy05MTUtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIENvcmUgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgREFNT04gY29yZSBiZXR0ZXIuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgd2l0aGluIHRoZSBEQU1PTiBjb3JlIGNvbXBvbmVudHMgKGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGBtbS9kYW1vbi92YWRkci5jYCwgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYCkgYXJlICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3MgZXhwb3NlZCBpbnRlcmZhY2VzIGFuZCBob3cgdGhlc2UgdmFyaW91cyBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgd2l0aCBvdGhlciBEQU1PTiBjb21wb25lbnRzIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUgb2YgZWFjaCBjb21wb25lbnQgYW5kIHBpbnBvaW50IHRoZSBub24tc3RhdGljIHN5bWJvbHMgcmVsYXRlZCB0byBwaHlzaWNhbCBhZGRyZXNzZXMgKHBhZGRyKSwgdmlydHVhbCBhZGRyZXNzZXMgKHZhZGRyKSwgYW5kIHRoZSBzeXNmcy9rdW5pdCBpbnRlcmZhY2UuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiBlaXRoZXIgZGVidWdnaW5nIHRoZSBtb2R1bGUsIHVuZGVyc3RhbmRpbmcgdGhlIGV4cG9zZWQgY2FwYWJpbGl0aWVzLCBvciBpbnRlZ3JhdGluZy9leHRlbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZGFtb25ffF52b2lkIGRhbW9uX3xkYW1vc18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjY3OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vY29yZS5jPTUwPWJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xubW0vZGFtb24vY29yZS5jOjcxOmludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcbm1tL2RhbW9uL2NvcmUuYy03Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTk3LSAqL1xubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4tLVxubW0vZGFtb24vY29yZS5jLTEyOC1cbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzLVxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NC1cbm1tL2RhbW9uL2NvcmUuYzoxNzU6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTE3Ni17XG4tLVxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbm1tL2RhbW9uL2NvcmUuYy00NzktXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTY4LVxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy01NzAtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG5tbS9kYW1vbi9jb3JlLmMtNTcxLXtcbm1tL2RhbW9uL2NvcmUuYzo1NzI6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtNTczLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01ODQtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NTg1OiAqIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKCkgLSBSZXR1cm4gaWYgdGhlIGZpbHRlciBpcyBvcHMtaGFuZGxlZCBvbmUuXG5tbS9kYW1vbi9jb3JlLmMtNTg2LSAqIEB0eXBlOlx0dHlwZSBvZiB0aGUgZmlsdGVyLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy01OTAtICovXG5tbS9kYW1vbi9jb3JlLmM6NTkxOmJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxubW0vZGFtb24vY29yZS5jLTU5Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTYwMi1cbm1tL2RhbW9uL2NvcmUuYzo2MDM6dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02MDQte1xubW0vZGFtb24vY29yZS5jOjYwNTpcdGlmIChkYW1vc19maWx0ZXJfZm9yX29wcyhmLVx1MDAzZXR5cGUpKVxubW0vZGFtb24vY29yZS5jLTYwNi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZmLVx1MDAzZWxpc3QsIFx1MDAyNnMtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02MTAtXG5tbS9kYW1vbi9jb3JlLmM6NjExOnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02MTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02MTUtXG5tbS9kYW1vbi9jb3JlLmM6NjE2OnN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjE3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjIwLVxubW0vZGFtb24vY29yZS5jOjYyMTp2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjIyLXtcbm1tL2RhbW9uL2NvcmUuYzo2MjM6XHRkYW1vc19kZWxfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jOjYyNDpcdGRhbW9zX2ZyZWVfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTYyNS19XG5tbS9kYW1vbi9jb3JlLmMtNjI2LVxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6NjI4Olx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbm1tL2RhbW9uL2NvcmUuYy02MjktXHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxubW0vZGFtb24vY29yZS5jLTYzMC17XG5tbS9kYW1vbi9jb3JlLmM6NjMxOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtNjMyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02NDEtXG5tbS9kYW1vbi9jb3JlLmM6NjQyOnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy02NDMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02NDYtXG5tbS9kYW1vbi9jb3JlLmM6NjQ3OnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTY0OC17XG4tLVxubW0vZGFtb24vY29yZS5jLTY1MS1cbm1tL2RhbW9uL2NvcmUuYzo2NTI6c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTY1My17XG4tLVxubW0vZGFtb24vY29yZS5jLTY1Ni1cbm1tL2RhbW9uL2NvcmUuYzo2NTc6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNjU4LXtcbm1tL2RhbW9uL2NvcmUuYzo2NTk6XHRkYW1vc19kZWxfcXVvdGFfZ29hbChnKTtcbm1tL2RhbW9uL2NvcmUuYzo2NjA6XHRkYW1vc19mcmVlX3F1b3RhX2dvYWwoZyk7XG5tbS9kYW1vbi9jb3JlLmMtNjYxLX1cbm1tL2RhbW9uL2NvcmUuYy02NjItXG5tbS9kYW1vbi9jb3JlLmM6NjYzOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy02NjQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02NjgtLyogaW5pdGlhbGl6ZSBmaWVsZHMgb2YgQHF1b3RhIHRoYXQgbm9ybWFsbHkgQVBJIHVzZXJzIHdvdWxkbiYjMzk7dCBzZXQgKi9cbm1tL2RhbW9uL2NvcmUuYzo2Njk6c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxubW0vZGFtb24vY29yZS5jLTY3MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTY4MS1cbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYzo2ODM6XHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxubW0vZGFtb24vY29yZS5jLTY4NC1cdFx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxubW0vZGFtb24vY29yZS5jOjY4NTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxubW0vZGFtb24vY29yZS5jOjY4NjpcdFx0XHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxubW0vZGFtb24vY29yZS5jLTY4Ny1cdFx0XHRpbnQgdGFyZ2V0X25pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZW9wc19maWx0ZXJzKTtcbm1tL2RhbW9uL2NvcmUuYzo3MDY6XHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbm1tL2RhbW9uL2NvcmUuYy03MDctXHRzY2hlbWUtXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTcxMC1cbm1tL2RhbW9uL2NvcmUuYzo3MTE6XHRzY2hlbWUtXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcbm1tL2RhbW9uL2NvcmUuYy03MTItXHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG4tLVxubW0vZGFtb24vY29yZS5jLTcxNy1cbm1tL2RhbW9uL2NvcmUuYzo3MTg6XHRzY2hlbWUtXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcbm1tL2RhbW9uL2NvcmUuYy03MTktXHRzY2hlbWUtXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XG4tLVxubW0vZGFtb24vY29yZS5jLTcyMy1cbm1tL2RhbW9uL2NvcmUuYzo3MjQ6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTcyNS17XG4tLVxubW0vZGFtb24vY29yZS5jLTczNC1cbm1tL2RhbW9uL2NvcmUuYzo3MzU6dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTczNi17XG5tbS9kYW1vbi9jb3JlLmMtNzM3LVx0bGlzdF9hZGRfdGFpbChcdTAwMjZzLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2VzY2hlbWVzKTtcbm1tL2RhbW9uL2NvcmUuYzo3Mzg6XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy03MzktfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NTAtXG5tbS9kYW1vbi9jb3JlLmM6NzUxOnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTc1Mi17XG5tbS9kYW1vbi9jb3JlLmM6NzUzOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XG5tbS9kYW1vbi9jb3JlLmM6NzU0Olx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZiwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtNzU1LVxubW0vZGFtb24vY29yZS5jOjc1NjpcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnMtXHUwMDNlcXVvdGEpXG5tbS9kYW1vbi9jb3JlLmM6NzU3Olx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XG5tbS9kYW1vbi9jb3JlLmMtNzU4LVxubW0vZGFtb24vY29yZS5jOjc1OTpcdGRhbW9zX2Zvcl9lYWNoX2NvcmVfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcylcbm1tL2RhbW9uL2NvcmUuYzo3NjA6XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTc2MS1cbm1tL2RhbW9uL2NvcmUuYzo3NjI6XHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcylcbm1tL2RhbW9uL2NvcmUuYzo3NjM6XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTc2NC1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Nzc2PXN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzkyLVxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTc5NC17XG4tLVxubW0vZGFtb24vY29yZS5jPTgwMz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTgwNy1cbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTgwOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTgxNi1cbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODE4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODcyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTg3OS1cbm1tL2RhbW9uL2NvcmUuYzo4ODA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODgxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xubW0vZGFtb24vY29yZS5jOjEwNDg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTEwODEtXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgY3R4KVxubW0vZGFtb24vY29yZS5jOjEwODI6XHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjdHgpO1xubW0vZGFtb24vY29yZS5jLTEwODMtXG4tLVxubW0vZGFtb24vY29yZS5jLTEwOTUtICovXG5tbS9kYW1vbi9jb3JlLmM6MTA5Njp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVx0XHRcdHNzaXplX3QgbnJfc2NoZW1lcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwNy1cbm1tL2RhbW9uL2NvcmUuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTpcdFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy0xMTEwLXtcbm1tL2RhbW9uL2NvcmUuYzoxMTExOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTExMi1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMTEzLVxubW0vZGFtb24vY29yZS5jOjExMTQ6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHEpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMTE1LVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMC1cbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jOjExMjI6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTEyMy17XG4tLVxubW0vZGFtb24vY29yZS5jLTExMzgtXG5tbS9kYW1vbi9jb3JlLmM6MTEzOTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYzoxMTQwOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTExNDEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ2LVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbm1tL2RhbW9uL2NvcmUuYzoxMTQ3Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTExNDgtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTUwLS8qKlxubW0vZGFtb24vY29yZS5jOjExNTE6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbm1tL2RhbW9uL2NvcmUuYy0xMTUyLSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTYxLSAqL1xubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE2My17XG5tbS9kYW1vbi9jb3JlLmM6MTE2NDpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xubW0vZGFtb24vY29yZS5jLTExNjUtXHRpbnQgaSA9IDAsIGogPSAwO1xubW0vZGFtb24vY29yZS5jLTExNjYtXG5tbS9kYW1vbi9jb3JlLmM6MTE2NzpcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTE2ODpcdFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpJiM0MzsmIzQzOywgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTY5LVx0XHRpZiAoc3JjX2dvYWwpXG5tbS9kYW1vbi9jb3JlLmM6MTE3MDpcdFx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTExNzEtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzoxMTcyOlx0XHRcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMTE3My1cdH1cbm1tL2RhbW9uL2NvcmUuYzoxMTc0Olx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMTc1LVx0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ni1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxMTc3Olx0XHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTExNzgtXHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTExODAtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTE4MTpcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYzoxMTgyOlx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTg2LVxubW0vZGFtb24vY29yZS5jOjExODc6c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxubW0vZGFtb24vY29yZS5jLTExODgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTkzLVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjExOTQ6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTExOTUtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjA1LVxubW0vZGFtb24vY29yZS5jOjEyMDY6c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9jb3JlX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTEyMDcte1xubW0vZGFtb24vY29yZS5jOjEyMDg6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTIwOS1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMjEwLVxubW0vZGFtb24vY29yZS5jOjEyMTE6XHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMjEyLVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTIxNy1cbm1tL2RhbW9uL2NvcmUuYzoxMjE4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfb3BzX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTEyMTkte1xubW0vZGFtb24vY29yZS5jOjEyMjA6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTIyMS1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVxubW0vZGFtb24vY29yZS5jOjEyMjM6XHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyKGZpbHRlciwgcykge1xubW0vZGFtb24vY29yZS5jLTEyMjQtXHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjI5LVxubW0vZGFtb24vY29yZS5jOjEyMzA6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG5tbS9kYW1vbi9jb3JlLmM6MTIzMTpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTIzMi17XG4tLVxubW0vZGFtb24vY29yZS5jLTEyNTAtXG5tbS9kYW1vbi9jb3JlLmM6MTI1MTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jOjEyNTI6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEyNTMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjU2LVx0ZHN0LVx1MDAzZWFsbG93ID0gc3JjLVx1MDAzZWFsbG93O1xubW0vZGFtb24vY29yZS5jOjEyNTc6XHRkYW1vc19jb21taXRfZmlsdGVyX2FyZyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTI1OC19XG5tbS9kYW1vbi9jb3JlLmMtMTI1OS1cbm1tL2RhbW9uL2NvcmUuYzoxMjYwOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI2MS17XG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdF9maWx0ZXIsICpuZXh0LCAqc3JjX2ZpbHRlciwgKm5ld19maWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTI2My1cdGludCBpID0gMCwgaiA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTI2NC1cbm1tL2RhbW9uL2NvcmUuYzoxMjY1Olx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShkc3RfZmlsdGVyLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMjY2Olx0XHRzcmNfZmlsdGVyID0gZGFtb3NfbnRoX2NvcmVfZmlsdGVyKGkmIzQzOyYjNDM7LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyNjctXHRcdGlmIChzcmNfZmlsdGVyKVxubW0vZGFtb24vY29yZS5jOjEyNjg6XHRcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3RfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjY5LVx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MTI3MDpcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihkc3RfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjcxLVx0fVxubW0vZGFtb24vY29yZS5jLTEyNzItXG5tbS9kYW1vbi9jb3JlLmM6MTI3MzpcdGRhbW9zX2Zvcl9lYWNoX2NvcmVfZmlsdGVyX3NhZmUoc3JjX2ZpbHRlciwgbmV4dCwgc3JjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTI3NC1cdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjc2LVxubW0vZGFtb24vY29yZS5jOjEyNzc6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTEyNzgtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vY29yZS5jLTEyODEtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTI4MjpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmM6MTI4MzpcdFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEyODQtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTEyODctXG5tbS9kYW1vbi9jb3JlLmM6MTI4ODpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9vcHNfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI4OS17XG5tbS9kYW1vbi9jb3JlLmM6MTI5MDpcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdF9maWx0ZXIsICpuZXh0LCAqc3JjX2ZpbHRlciwgKm5ld19maWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTI5MS1cdGludCBpID0gMCwgaiA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTI5Mi1cbm1tL2RhbW9uL2NvcmUuYzoxMjkzOlx0ZGFtb3NfZm9yX2VhY2hfb3BzX2ZpbHRlcl9zYWZlKGRzdF9maWx0ZXIsIG5leHQsIGRzdCkge1xubW0vZGFtb24vY29yZS5jOjEyOTQ6XHRcdHNyY19maWx0ZXIgPSBkYW1vc19udGhfb3BzX2ZpbHRlcihpJiM0MzsmIzQzOywgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjk1LVx0XHRpZiAoc3JjX2ZpbHRlcilcbm1tL2RhbW9uL2NvcmUuYzoxMjk2Olx0XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTI5Ny1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEyOTg6XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZHN0X2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTI5OS1cdH1cbm1tL2RhbW9uL2NvcmUuYy0xMzAwLVxubW0vZGFtb24vY29yZS5jOjEzMDE6XHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyX3NhZmUoc3JjX2ZpbHRlciwgbmV4dCwgc3JjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTMwMi1cdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzA0LVxubW0vZGFtb24vY29yZS5jOjEzMDU6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTEzMDYtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMDktXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTMxMDpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmM6MTMxMTpcdFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzMTItXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTEzMTYtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTMxNzogKiBkYW1vc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KCkgLSBkZWNpZGUgd2hldGhlciB0byByZWplY3QgbWVtb3J5IHRoYXQgZGlkbiYjMzk7dFxubW0vZGFtb24vY29yZS5jLTEzMTgtICpcdFx0XHRcdCAgICBtYXRjaCB3aXRoIGFueSBnaXZlbiBmaWx0ZXIuXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMjAtICovXG5tbS9kYW1vbi9jb3JlLmM6MTMyMTpzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBsaXN0X2hlYWQgKmZpbHRlcnMpXG5tbS9kYW1vbi9jb3JlLmMtMTMyMi17XG5tbS9kYW1vbi9jb3JlLmM6MTMyMzpcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmxhc3RfZmlsdGVyO1xubW0vZGFtb24vY29yZS5jLTEzMjQtXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMjYtXHRcdHJldHVybiBmYWxzZTtcbm1tL2RhbW9uL2NvcmUuYzoxMzI3Olx0bGFzdF9maWx0ZXIgPSBsaXN0X2xhc3RfZW50cnkoZmlsdGVycywgc3RydWN0IGRhbW9zX2ZpbHRlciwgbGlzdCk7XG5tbS9kYW1vbi9jb3JlLmMtMTMyOC1cdHJldHVybiBsYXN0X2ZpbHRlci1cdTAwM2VhbGxvdztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMzMC1cbm1tL2RhbW9uL2NvcmUuYzoxMzMxOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0xMzMyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMzNi1cdFx0cy1cdTAwM2Vjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QgPVxubW0vZGFtb24vY29yZS5jOjEzMzc6XHRcdFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcdTAwMjZzLVx1MDAzZWNvcmVfZmlsdGVycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTMzOC1cdHMtXHUwMDNlb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QgPVxubW0vZGFtb24vY29yZS5jOjEzMzk6XHRcdGRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2cy1cdTAwM2VvcHNfZmlsdGVycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTM0MC19XG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDI9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM3MC0vKlxubW0vZGFtb24vY29yZS5jOjEzNzE6ICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXG5tbS9kYW1vbi9jb3JlLmMtMTM3Mi0gKiBAZHN0Olx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM4Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMzg3OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2Rlc3RzKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkc3QsXG5tbS9kYW1vbi9jb3JlLmM6MTM4ODpcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMzg5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQxNy1cbm1tL2RhbW9uL2NvcmUuYzoxNDE4OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE0MTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDIxLVxubW0vZGFtb24vY29yZS5jOjE0MjI6XHRlcnIgPSBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDIzLVx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xNDI0LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vY29yZS5jOjE0MjU6XHRlcnIgPSBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE0MjYtXHRpZiAoZXJyKVxubW0vZGFtb24vY29yZS5jLTE0MjctXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTQyODpcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KGRzdCk7XG5tbS9kYW1vbi9jb3JlLmMtMTQyOS1cdHJldHVybiAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ0My1cbm1tL2RhbW9uL2NvcmUuYzoxNDQ0OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNDQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MS1cbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhKFx1MDAyNmRzdC1cdTAwM2VxdW90YSwgXHUwMDI2c3JjLVx1MDAzZXF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDUzLVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1OC1cbm1tL2RhbW9uL2NvcmUuYzoxNDU5Olx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFx1MDAyNmRzdC1cdTAwM2VtaWdyYXRlX2Rlc3RzLCBcdTAwMjZzcmMtXHUwMDNlbWlncmF0ZV9kZXN0cyk7XG5tbS9kYW1vbi9jb3JlLmMtMTQ2MC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0NjItXG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcdGVyciA9IGRhbW9zX2NvbW1pdF9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDY0LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQ3MT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDc4LVx0XHRpZiAoc3JjX3NjaGVtZSkge1xubW0vZGFtb24vY29yZS5jOjE0Nzk6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0KGRzdF9zY2hlbWUsIHNyY19zY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTE0ODAtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ5Ni1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNDk3Olx0XHRlcnIgPSBkYW1vc19jb21taXQobmV3X3NjaGVtZSwgc3JjX3NjaGVtZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTQ5OC1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUxPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzU0LVx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG5tbS9kYW1vbi9jb3JlLmM6MTc1NTpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vY29yZS5jLTE3NTYtXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NjMtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xubW0vZGFtb24vY29yZS5jOjE3NjQ6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0xNzY1LVxubW0vZGFtb24vY29yZS5jOjE3NjY6XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jLTE3NjctXHRcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgwOT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgzNy0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxODM4OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE4Mzkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODU3LSAqL1xubW0vZGFtb24vY29yZS5jOjE4NTg6aW50IGRhbW9uX25yX3J1bm5pbmdfY3R4cyh2b2lkKVxubW0vZGFtb24vY29yZS5jLTE4NTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xOTU3PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB2b2lkIF9fZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwMzgtICovXG5tbS9kYW1vbi9jb3JlLmM6MjAzOTp2b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxubW0vZGFtb24vY29yZS5jLTIwNDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDU0PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjktICovXG5tbS9kYW1vbi9jb3JlLmM6MjA3MDppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIwNzEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTA1LSAqL1xubW0vZGFtb24vY29yZS5jOjIxMDY6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIxMDcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTM0LS8qKlxubW0vZGFtb24vY29yZS5jOjIxMzU6ICogZGFtb3Nfd2FsaygpIC0gSW52b2tlIGEgZ2l2ZW4gZnVuY3Rpb25zIHdoaWxlIERBTU9TIHdhbGsgcmVnaW9ucy5cbm1tL2RhbW9uL2NvcmUuYy0yMTM2LSAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNDQtICoganVzdCBhZnRlciBpdCBhcHBsaWVkIGFueSBEQU1PUyBhY3Rpb25zIG9mIEBjdHggdG8gaXQuICBUaGUgaW52b2NhdGlvbiBpc1xubW0vZGFtb24vY29yZS5jOjIxNDU6ICogbWFkZSBvbmx5IHdpdGhpbiBvbmUgXHUwMDI2ZGFtb3MtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgc2luY2UgZGFtb3Nfd2FsaygpXG5tbS9kYW1vbi9jb3JlLmMtMjE0Ni0gKiBpbnZvY2F0aW9uLCBmb3IgZWFjaCBzY2hlbWUuICBUaGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gY2FuIGhlbmNlIHNhZmVseVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTUwLSAqIHBhc3NlZCBhdCBsZWFzdCBvbmUgXHUwMDI2ZGFtb3MtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIGtkYW1vbmQgbWFya3MgdGhlIHJlcXVlc3QgYXNcbm1tL2RhbW9uL2NvcmUuYzoyMTUxOiAqIGNvbXBsZXRlZCBzbyB0aGF0IGRhbW9zX3dhbGsoKSBjYW4gd2FrZXVwIGFuZCByZXR1cm4uXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTU4LSAqL1xubW0vZGFtb24vY29yZS5jOjIxNTk6aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIxNjAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjU0PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzUtXG5tbS9kYW1vbi9jb3JlLmM6MjI3NjpzdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmMtMjI3Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5MS0vKlxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cbm1tL2RhbW9uL2NvcmUuYy0yMjkzLSAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMjk3OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxubW0vZGFtb24vY29yZS5jLTIyOTgte1xubW0vZGFtb24vY29yZS5jLTIyOTktXHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IHx8IHF1b3RhLVx1MDAzZXN6IHx8IHF1b3RhLVx1MDAzZW1zIHx8XG5tbS9kYW1vbi9jb3JlLmM6MjMwMDpcdFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0yMzAxLX1cbm1tL2RhbW9uL2NvcmUuYy0yMzAyLVxubW0vZGFtb24vY29yZS5jOjIzMDM6c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMjMwNC1cdFx0c3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTIzMDUte1xubW0vZGFtb24vY29yZS5jOjIzMDY6XHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpO1xubW0vZGFtb24vY29yZS5jLTIzMDctXG5tbS9kYW1vbi9jb3JlLmM6MjMwODpcdGlmICghcmV0IHx8ICFkYW1vc19xdW90YV9pc19zZXQoXHUwMDI2cy1cdTAwM2VxdW90YSkgfHwgIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5tbS9kYW1vbi9jb3JlLmMtMjMwOS1cdFx0cmV0dXJuIHJldDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMxNC0vKlxubW0vZGFtb24vY29yZS5jOjIzMTU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG5tbS9kYW1vbi9jb3JlLmMtMjMxNi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMzM5OnN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yMzQwLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxOTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIGEgdXNlciBpbnRlcmFjdHMgd2l0aCBEQU1PTiB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRpbWUgdG8gZGlnIGluISBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhvc2Ugc3lzZnMgaW50ZXJhY3Rpb25zLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgREFNT04mIzM5O3MgZnVuY3Rpb25hbGl0eSBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB1c2VyIGNvbW1hbmRzIGFyZSBpbnRlcnByZXRlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBqb3VybmV5LCBob3BlZnVsbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzUwOSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTY6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE3LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoyMDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBrbWFsbG9jX29iaigqcmFuZ2UpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MzE9c3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zMy17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz00MD1zdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo0MzpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00NS1cdHVuc2lnbmVkIGxvbmcgbWluO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTU2PXN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjcte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXHR1bnNpZ25lZCBsb25nIG1heDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgxOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaikpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODQtfVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21pbl9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg3LVx0XHRfX0FUVFJfUldfTU9ERShtaW4sIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkwLVx0XHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0Olx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk2LX07XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk4LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTk6Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMjpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMy19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwNjpzdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNy1cdFx0Y2hhciAqbWVtY2dfcGF0aF9idWYsIGNoYXIgKnBhdGgpXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNC1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNTpcdFx0aWYgKGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEobWVtY2csIHBhdGgsIG1lbWNnX3BhdGgpKSB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzYtXHRcdFx0KmlkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjk6ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2Uge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTItXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mjg6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjktXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM0OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNzpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQxLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Njp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTE6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUyOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTc9dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24sXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwMj1zdGF0aWMgdm9pZCBkYW1vc19zeXNmc19yZWdpb25fcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24pXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA5PXN0YXRpYyBzc2l6ZV90IHN0YXJ0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI3PXN0YXRpYyBzc2l6ZV90IG5yX2FjY2Vzc2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyOS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMwOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzMTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzY9c3RhdGljIHNzaXplX3QgYWdlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVx0XHRfX0FUVFJfUk9fTU9ERShzdGFydCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZW5kX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ni1cdFx0X19BVFRSX1JPX01PREUoZW5kLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjktXHRcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVx0XHRfX0FUVFJfUk9fTU9ERShhZ2UsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc1LVx0XHRfX0FUVFJfUk9fTU9ERShzel9maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc4Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODI6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4My1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4ODpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA1OmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTk9c3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyLCAqbmV4dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDUtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDgtXHRcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1My19O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTgtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU5Olx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2MC19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzY2OnN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY3LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM3OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzgxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg3Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zOTI9c3RhdGljIHNzaXplX3Qgc3pfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozOTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTctXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwMT1zdGF0aWMgc3NpemVfdCBucl9hcHBsaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDA0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDEyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDE0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTk9c3RhdGljIHNzaXplX3Qgc3pfb3BzX2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDIzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDI0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00Mjg9c3RhdGljIHNzaXplX3QgcXRfZXhjZWVkc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzMtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NDY9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ1NT1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NjAtXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHMsIGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Njkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzEtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Mi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzQtXHRcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVx0XHRfX0FUVFJfUk9fTU9ERShzel90cmllZCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgwLVx0XHRfX0FUVFJfUk9fTU9ERShucl9hcHBsaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODMtXHRcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXHRcdF9fQVRUUl9ST19NT0RFKHN6X29wc19maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODktXHRcdF9fQVRUUl9ST19NT0RFKHF0X2V4Y2VlZHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkyLVx0XHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cdFx0X19BVFRSX1JXX01PREUobWF4X25yX3NuYXBzaG90cywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NzpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTg6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDM6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDQ6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNi1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA3LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA4OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc3RhdHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc3RhdHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTExOlx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUxMi1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTM6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQxOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDItXHRcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXHRpZiAoZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01OTM9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01OTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5OC1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02Mjc9c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjMxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MzItXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY1Mj1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1Ny1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjYxPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY2NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2Ni1cdGJvb2wgbWF0Y2hpbmc7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY3Nj1zdGF0aWMgc3NpemVfdCBhbGxvd19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cdGJvb2wgYWxsb3c7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwMi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVx0aW50IGxlbjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3Olx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzEwLVx0XHRcdGZpbHRlci1cdTAwM2VtZW1jZ19wYXRoID8gZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGggOiBcJiMzNDtcJiMzNDspO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXHRyZXR1cm4gbGVuO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzE3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cdHN0cnNjcHkocGF0aCwgYnVmLCBjb3VudCAmIzQzOyAxKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3Mjc6XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjgtXHRcdGtmcmVlKHBhdGgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MzItXHRmaWx0ZXItXHUwMDNlbWVtY2dfcGF0aCA9IHBhdGg7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzMzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczNC1cdHJldHVybiBjb3VudDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM3PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc0Nj1zdGF0aWMgc3NpemVfdCBhZGRyX3N0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1MS1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NjU9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2Ny17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyMzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikga2VybmVsIHN5c2ZzIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBga2RhbW9uZHNgIHN0YXRlIGNvbnRyb2wuIEkmIzM5O20gY3VyaW91cyB3aGF0IGhhcHBlbnMgdW5kZXIgdGhlIGhvb2Qgd2hlbiBJIHdyaXRlICYjMzQ7b24mIzM0OyBvciAmIzM0O2NvbW1pdCYjMzQ7IHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvLi4uL3N0YXRlYCBmaWxlLiBUaGUgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgc3RhdGVfc3RvcmVgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcgLSB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhvc2Ugc3lzZnMgd3JpdGVzIGFuZCB0cmFuc2xhdGVzIHRoZW0gaW50byBEQU1PTiYjMzk7cyBvcGVyYXRpb25hbCBzdGF0ZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgJiMzNDtvbiYjMzQ7IGFjdGl2YXRlcyBhIG1vbml0b3IsIGFuZCB3aGF0ICYjMzQ7Y29tbWl0JiMzNDsgdHJ1bHkgc2lnbmlmaWVzIGluIHRlcm1zIG9mIGNoYW5nZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMzY0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNDAzLVxubW0vZGFtb24vc3lzZnMuYzoyNDA0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDUtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN0YXRlX3N0b3JlYCBpbiBgbW0vZGFtb24vc3lzZnMuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgREFNT04mIzM5O3Mgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb3JlIG9mIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIGNoYW5naW5nIHRoZSBtb25pdG9yJiMzOTtzIG9wZXJhdGlvbmFsIHN0YXRlIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGZvciB0cmFuc2l0aW9uaW5nIGJldHdlZW4gc3RhdGVzIGxpa2UgJiMzOTtydW5uaW5nJiMzOTssICYjMzk7c3RvcHBlZCYjMzk7LCBhbmQgYW55IGN1c3RvbSBzdGF0ZXMgREFNT04gbWlnaHQgc3VwcG9ydC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgYXR0cmlidXRlcyBjb25uZWN0IHRvIHRoZSBpbnRlcm5hbCBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZWNoYW5pc21zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyIGRpZmZlcmVudCBvcGVyYXRpb25hbCBiZWhhdmlvcnMgd2l0aGluIHRoZSBtb25pdG9yaW5nIGFuZCByZWNsYW1hdGlvbiBsb29wcy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBzb21lIGVycm9yIGhhbmRsaW5nIGhlcmU7IEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpbnZhbGlkIHN0YXRlIHJlcXVlc3RzIG9yIG90aGVyIGlzc3VlcyBhcmUgZGVhbHQgd2l0aC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyByb2J1c3QgdGhlIGludGVyZmFjZSBpcy4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIHN0YXRlIHZhcmlhYmxlIGFuZCBlbnN1cmUgYXRvbWljIHRyYW5zaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzOTA6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbjIzOTE6XHRcdFx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VzY2hlbWVzKTtcbjIzOTI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XG4yMzkzOlx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM5NDpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyxcbjIzOTU6XHRcdFx0XHRcdGtkYW1vbmQpO1xuMjM5NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1RVTkVEX0lOVEVSVkFMUzpcbjIzOTc6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzk4Olx0XHRcdFx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzLCBrZGFtb25kKTtcbjIzOTk6XHRcdGRlZmF1bHQ6XG4yNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjQwMTpcdFx0fVxuMjQwMjpcdH1cbjI0MDM6XHRcbjI0MDQ6XHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuMjQwNTpcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbjI0MDY6XHR7XG4yNDA3Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuMjQwODpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kLCBrb2JqKTtcbjI0MDk6XHRcdGVudW0gZGFtb25fc3lzZnNfY21kIGNtZDtcbjI0MTA6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjI0MTE6XHRcbjI0MTI6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcbjI0MTM6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI0MTQ6XHRcdGZvciAoY21kID0gMDsgY21kIFx1MDAzYyBOUl9EQU1PTl9TWVNGU19DTURTOyBjbWQmIzQzOyYjNDM7KSB7XG4yNDE1Olx0XHRcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XG4yNDE2Olx0XHRcdFx0cmV0ID0gZGFtb25fc3lzZnNfaGFuZGxlX2NtZChjbWQsIGtkYW1vbmQpO1xuMjQxNzpcdFx0XHRcdGJyZWFrO1xuMjQxODpcdFx0XHR9XG4yNDE5Olx0XHR9XG4yNDIwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4yNDIxOlx0XHRpZiAoIXJldClcbjI0MjI6XHRcdFx0cmV0ID0gY291bnQ7XG4yNDIzOlx0XHRyZXR1cm4gcmV0O1xuMjQyNDpcdH1cbjI0MjU6XHRcbjI0MjY6XHRzdGF0aWMgc3NpemVfdCBwaWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbjI0Mjc6XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4yNDI4Olx0e1xuMjQyOTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBjb250YWluZXJfb2Yoa29iaixcbjI0MzA6XHRcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCwga29iaik7XG4yNDMxOlx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4yNDMyOlx0XHRpbnQgcGlkID0gLTE7XG4yNDMzOlx0XG4yNDM0Olx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4yNDM1Olx0XHRcdHJldHVybiAtRUJVU1k7XG4yNDM2Olx0XHRjdHggPSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eDtcbjI0Mzc6XHRcdGlmICghY3R4KVxuMjQzODpcdFx0XHRnb3RvIG91dDtcbjI0Mzk6XHRcbjI0NDA6XHRcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XG4yNDQxOlx0XHRpZiAocGlkIFx1MDAzYyAwKVxuMjQ0MjpcdFx0XHRwaWQgPSAtMTtcbjI0NDM6XHRvdXQ6XG4yNDQ0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4yNDQ1Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBwaWQpO1xuMjQ0NjpcdH1cbjI0NDc6XHRcbjI0NDg6XHRzdGF0aWMgc3NpemVfdCByZWZyZXNoX21zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4yNDQ5Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBQYXRjaCBSZXZpZXc6IEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgYXJlYXMgd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QXJlIHRoZXNlIGZ1bmN0aW9ucyBhbmQgZmVhdHVyZXMgcmVhY2hhYmxlIGFuZCB0aHVzLCB3b3J0aCBmdXp6aW5nPyYjMzQ7IFllcywgYWJzb2x1dGVseS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1vbml0b3JpbmcgYW5kIG1hbmFnZW1lbnQgY29tcG9uZW50cyB3aXRoaW4gREFNT04uIEdpdmVuIERBTU9OJiMzOTtzIGFjY2Vzc2liaWxpdHkgdmlhIHN5c2ZzIGFuZCBrZXJuZWwgbW9kdWxlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRnJvbSB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUsIGBjb3JlLmNgIHJlcXVpcmVzIGBDT05GSUdfREFNT049eWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBgdmFkZHIuY2AgcmVxdWlyZXMgYENPTkZJR19EQU1PTl9WQUREUj15YCwgd2hpY2ggZGVwZW5kcyBvbiBgREFNT05gIGFuZCBgTU1VYC4gU2ltaWxhcmx5LCBgcGFkZHIuY2AgbmVlZHMgYENPTkZJR19EQU1PTl9QQUREUj15YCwgYWxzbyBkZXBlbmRpbmcgb24gYERBTU9OYCBhbmQgYE1NVWAuIEZpbmFsbHksIHRoZSBzeXNmcyBpbnRlcmZhY2UgbmVlZHMgYENPTkZJR19EQU1PTl9TWVNGUz15YCwgbmF0dXJhbGx5IGRlcGVuZGluZyBvbiBgREFNT05gIGFuZCBgU1lTRlNgLiBUaGlzIGdpdmVzIHVzIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBwcmUtcmVxdWlzaXRlcyBmb3IgdGhlIGNvZGUgdG8gYmUgY29tcGlsZWQuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgcXVvdGEsIG1pZ3JhdGlvbiwgb3IgbWVtY2cgZmVhdHVyZXMsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGFueSBgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQYCBvciBgTUVNQ0dgIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb25zIGJlaW5nIGNoYW5nZWQgYW5kIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgYSBmdXp6ZXIgc2hvdWxkIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yODA1PXN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgzMi1cbm1tL2RhbW9uL2NvcmUuYzoyODMzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmMtMjgzNC1cdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTI5ODc9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yOTkyLVxubW0vZGFtb24vY29yZS5jOjI5OTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbm1tL2RhbW9uL2NvcmUuYy0yOTk0LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzAyND1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwNDMtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDQ0Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNDUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgbW0vZGFtb24vY29yZS5jYCBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCByZWZsZWN0aW9uOgoKKipEQU1PTiYjMzk7cyBNZW1vcnkgQWNjZXNzIFBvaW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBkaXZpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgSSYjMzk7bSBob21pbmcgaW4gb24gdGhlIGAjaWZkZWZgIGJsb2NrcyBzdXJyb3VuZGluZyBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IGhhdmUgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5LCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSYjMzk7cmUgY29uZGl0aW9uYWwgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZS1jYXNlcyBhbmQgd2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyB0cmlnZ2VyIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgbG9naWMuIEkga25vdyB0aGVzZSBhcmUgbGlrZWx5IHRoZSBidWlsZGluZyBibG9ja3MsIG9yIGFjY2VzcyBwb2ludHMgZm9yIG1lbW9yeSBhY2Nlc3MsIHVzZWQgaW4gdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBmcmFtZXdvcmssIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW5kaWNhdGVzIHNvbWUgZGVncmVlIG9mIGNvbmZpZ3VyYXRpb24gZmxleGliaWxpdHkuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpZmZlcmVudCBtZW1vcnkgbm9kZSBjb25maWd1cmF0aW9ucywgbWVtb3J5IGNncm91cCBzdXBwb3J0LCBvciBwb3NzaWJseSBldmVuIHRhcmdldCBhcmNoaXRlY3R1cmUgZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRlZmluZXMgdGhlIGJ1aWxkIGNvbmRpdGlvbiwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBEQU1PTiBmdW5jdGlvbmFsaXR5IHdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgYW5kIHdoZW4gdGhleSBhcmVuJiMzOTt0LiBUaW1lIHRvIHRyYWNlIHRob3NlIHByZXByb2Nlc3NvciBzeW1ib2xzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgwMDpcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbjI4MDE6XHR7XG4yODAyOlx0XHRyZXR1cm4gbmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKTtcbjI4MDM6XHR9XG4yODA0Olx0XG4yODA1Olx0c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuMjgwNjpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbjI4MDc6XHR7XG4yODA4Olx0XHRzdHJ1Y3Qgc3lzaW5mbyBpO1xuMjgwOTpcdFx0X19rZXJuZWxfdWxvbmdfdCBudW1lcmF0b3I7XG4yODEwOlx0XG4yODExOlx0XHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVx1MDAzZW5pZCkpIHtcbjI4MTI6XHRcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4yODEzOlx0XHRcdFx0cmV0dXJuIDA7XG4yODE0Olx0XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbjI4MTU6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODE2Olx0XHR9XG4yODE3Olx0XG4yODE4Olx0XHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuMjgxOTpcdFx0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIGkuZnJlZXJhbSkge1xuMjgyMDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcbjI4MjE6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODIyOlx0XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbjI4MjM6XHRcdFx0XHRyZXR1cm4gMDtcbjI4MjQ6XHRcdH1cbjI4MjU6XHRcbjI4MjY6XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuMjgyNzpcdFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuMjgyODpcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuMjgyOTpcdFx0XHRudW1lcmF0b3IgPSBpLmZyZWVyYW07XG4yODMwOlx0XHRyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pO1xuMjgzMTpcdH1cbjI4MzI6XHRcbjI4MzM6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxuMjgzNDpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbjI4MzU6XHR7XG4yODM2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4yODM3Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4yODM4Olx0XHR1bnNpZ25lZCBsb25nIHVzZWRfcGFnZXMsIG51bWVyYXRvcjtcbjI4Mzk6XHRcdHN0cnVjdCBzeXNpbmZvIGk7XG4yODQwOlx0XG4yODQxOlx0XHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVx1MDAzZW5pZCkpIHtcbjI4NDI6XHRcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbjI4NDM6XHRcdFx0XHRyZXR1cm4gMDtcbjI4NDQ6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4yODQ1Olx0XHRcdFx0cmV0dXJuIDEwMDAwO1xuMjg0NjpcdFx0fVxuMjg0NzpcdFxuMjg0ODpcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKGdvYWwtXHUwMDNlbWVtY2dfaWQpO1xuMjg0OTpcdFx0aWYgKCFtZW1jZykge1xuMjg1MDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg1MTpcdFx0XHRcdHJldHVybiAwO1xuMjg1MjpcdFx0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbjI4NTM6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODU0Olx0XHR9XG4yODU1Olx0XG4yODU2Olx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbjI4NTc6XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEoZ29hbC1cdTAwM2VuaWQpKTtcbjI4NTg6XHRcdHVzZWRfcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKTtcbjI4NTk6XHRcdHVzZWRfcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRob3NlIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgIGFuZCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAgZnVuY3Rpb25zLiBMb29raW5nIGF0IGxpbmVzIDI3ODAtMjgwNSBhbmQgMjk4MC0zMDAwLCBJIGV4cGVjdCB0byBmaW5kIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgY29udHJvbCB0aGVpciBpbmNsdXNpb24uIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYnVpbGQgdGFyZ2V0LCBtYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBncmFudWxhcml0eSwgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlbiBjb3JyZWxhdGUgdGhhdCB3aXRoIHRoZSBwcm9qZWN0JiMzOTtzIGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb25zLCBhbmQgYnVpbGQgc2NyaXB0cy4gVW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4gb3B0aW1pemluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGlzIGNvZGUuIEl0IGNvdWxkIHBvaW50IHRvIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgcGF0aHMsIGRlYnVnIGZsYWdzLCBvciBldmVuIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwcmVwcm9jZXNzb3IgaXMgdXAgdG8hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0I2lmZGVmIENPTkZJR19QU0lcbjI3ODE6XHRcbjI3ODI6XHRzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbjI3ODM6XHR7XG4yNzg0Olx0XHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2cHNpX2Rpc2FibGVkKSlcbjI3ODU6XHRcdFx0cmV0dXJuIDA7XG4yNzg2Olx0XHRyZXR1cm4gZGl2X3U2NChwc2lfc3lzdGVtLnRvdGFsW1BTSV9BVkdTXVtQU0lfTUVNICogMl0sXG4yNzg3Olx0XHRcdFx0TlNFQ19QRVJfVVNFQyk7XG4yNzg4Olx0fVxuMjc4OTpcdFxuMjc5MDpcdCNlbHNlXHQvKiBDT05GSUdfUFNJICovXG4yNzkxOlx0XG4yNzkyOlx0c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxuMjc5MzpcdHtcbjI3OTQ6XHRcdHJldHVybiAwO1xuMjc5NTpcdH1cbjI3OTY6XHRcbjI3OTc6XHQjZW5kaWZcdC8qIENPTkZJR19QU0kgKi9cbjI3OTg6XHRcbjI3OTk6XHQjaWZkZWYgQ09ORklHX05VTUFcbjI4MDA6XHRzdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXG4yODAxOlx0e1xuMjgwMjpcdFx0cmV0dXJuIG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSk7XG4yODAzOlx0fVxuMjgwNDpcdFxuMjgwNTpcdHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbjI4MDY6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4yODA3Olx0e1xuMjgwODpcdFx0c3RydWN0IHN5c2luZm8gaTtcbjI4MDk6XHRcdF9fa2VybmVsX3Vsb25nX3QgbnVtZXJhdG9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIERBTU9OLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI5ODAtMzAyMCBpbiBgbW0vZGFtb24vY29yZS5jYC4gTGV0JiMzOTtzIGFzc3VtZSBJJiMzOTttIGRpZ2dpbmcgaW50byBhIHBlcmZvcm1hbmNlIGlzc3VlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc29tZSBhc3BlY3Qgb2YgdGhlIERBTU9OIG1vbml0b3Jpbmcvb3B0aW1pc2F0aW9uLiBGaXJzdCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhIGJsb2NrIG9mIGNvZGUgd2l0aGluIGEgZnVuY3Rpb24uIEdpdmVuIHRoZSBmaWxlIGFuZCBsaWtlbHkgc2NvcGUgb2YgREFNT04sIEkgYW50aWNpcGF0ZSB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBtb25pdG9yaW5nIGEgcmVnaW9uLCBwb3RlbnRpYWxseSB1cGRhdGluZyBzdGF0cywgb3IgbWF5YmUgZXZlbiB0cmlnZ2VyaW5nIHNvbWUgYWN0aW9uIGJhc2VkIG9uIERBTU9OJiMzOTtzIGZlZWRiYWNrLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5IGluZGljYXRvcnM6IGRhdGEgc3RydWN0dXJlIGFjY2Vzc2VzLCBjYWxscyB0byBvdGhlciBEQU1PTiBmdW5jdGlvbnMgKGxpa2UgdGhlIHVwZGF0ZSBvciBhY3Rpb24gZnVuY3Rpb25zKSwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHNlZW1zIHJlbGV2YW50IHRvIHRoZSBzdXNwZWN0ZWQgcGVyZm9ybWFuY2UgcHJvYmxlbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCBhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIG1vZGlmaWVkLiBBcmUgdGhlcmUgYW55IGxvY2tzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3k/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LCBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBhbnkgbG9vcHMgb3IgYnJhbmNoZXMuCgpUaGlzIGNvdWxkIGJlIHdoZXJlIERBTU9OIGRlY2lkZXMgdG8gaW5pdGlhdGUgc29tZSBraW5kIG9mIGFjdGlvbiBiYXNlZCBvbiB0aGUgaWRlbnRpZmllZCBob3QgcmVnaW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgaWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVwIGFuZCBkb3duIHRoZSBjYWxsIHN0YWNrIHRvIHJlY29uc3RydWN0IHRoZSBzdG9yeS4gSSYjMzk7bGwgYWxzbyBiZSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhlIHByb2JsZW0uIElmIGl0JiMzOTtzIGEgcGVyZm9ybWFuY2UgaXNzdWUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW50IGFsZ29yaXRobXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTgwOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4yOTgxOlx0XHRcdHN0cnVjdCBkYW1vcyAqcywgaW50IG5pZClcbjI5ODI6XHR7XG4yOTgzOlx0XHRyZXR1cm4gMDtcbjI5ODQ6XHR9XG4yOTg1Olx0I2VuZGlmIC8qIENPTkZJR19EQU1PTl9QQUREUiAqL1xuMjk4NjpcdCNlbHNlIC8qIENPTkZJR19OVU1BICovXG4yOTg3Olx0c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuMjk4ODpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbjI5ODk6XHR7XG4yOTkwOlx0XHRyZXR1cm4gMDtcbjI5OTE6XHR9XG4yOTkyOlx0XG4yOTkzOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbjI5OTQ6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4yOTk1Olx0e1xuMjk5NjpcdFx0cmV0dXJuIDA7XG4yOTk3Olx0fVxuMjk5ODpcdFxuMjk5OTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMzAwMDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIGludCBuaWQpXG4zMDAxOlx0e1xuMzAwMjpcdFx0cmV0dXJuIDA7XG4zMDAzOlx0fVxuMzAwNDpcdCNlbmRpZiAvKiBDT05GSUdfTlVNQSAqL1xuMzAwNTpcdFxuMzAwNjpcdC8qXG4zMDA3Olx0ICogUmV0dXJucyBMUlUtYWN0aXZlIG9yIGluYWN0aXZlIG1lbW9yeSB0byB0b3RhbCBMUlUgbWVtb3J5IHNpemUgcmF0aW8uXG4zMDA4Olx0ICovXG4zMDA5Olx0c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbjMwMTA6XHR7XG4zMDExOlx0XHR1bnNpZ25lZCBsb25nIGFjdGl2ZSwgaW5hY3RpdmUsIHRvdGFsO1xuMzAxMjpcdFxuMzAxMzpcdFx0LyogVGhpcyBzaG91bGQgYWxpZ24gd2l0aCAvcHJvYy9tZW1pbmZvIG91dHB1dCAqL1xuMzAxNDpcdFx0YWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfQUNUSVZFX0FOT04pICYjNDM7XG4zMDE1Olx0XHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTtcbjMwMTY6XHRcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfQU5PTikgJiM0MztcbjMwMTc6XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfRklMRSk7XG4zMDE4Olx0XHR0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpO1xuMzAxOTpcdFx0aWYgKGFjdGl2ZV9yYXRpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzNDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBBUEkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AsIG9idmlvdXNseS4gQWxzbywgY29uc2lkZXJpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5VTUEsIHNvIGBOVU1BYCBhbmQgbWVtb3J5IHF1b3RhcyBjb21lIGludG8gcGxheSwgYXMgd2VsbCBhcyBgTUVNQ0dgIGZvciBxdW90YSBnb2Fscy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24uCgpOZXh0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVzc2VudGlhbCBzeW1ib2xzIGFuZCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZC4gTXkgcHJlZmVyZW5jZSBpcyBhbHdheXMgdG93YXJkcyB0aGUgbW9yZSBhY2Nlc3NpYmxlLCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBhbnkgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29yZSBmdW5jdGlvbiBwYXRocy4gSW4gYGNvcmUuY2AsIEkmIzM5O2xsIHNwZWNpZmljYWxseSBsb29rIGF0OiBgZGFtb25fc3RhcnRgLCBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9jYWxsYCwgYGRhbW9zX3dhbGtgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgYGRhbW9uX3NldF9hdHRyc2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuCgpOb3csIGZvciBgc3lzZnMuY2AsIEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaW5kIHRoZSBgc3lzZnNgIHNob3cvc3RvcmUgYXR0cmlidXRlcyBhbmQgYW55IHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGV4YW1pbmUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBzeW1ib2xzIGFyZSBleHBvc2VkIHRocm91Z2ggdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3xedm9pZCBkYW1vbl98XmludCBkYW1vc198XnZvaWQgZGFtb3NfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTUwPWJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xubW0vZGFtb24vY29yZS5jOjcxOmludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcbm1tL2RhbW9uL2NvcmUuYy03Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTk3LSAqL1xubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4tLVxubW0vZGFtb24vY29yZS5jLTEyOC1cbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzLVxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NC1cbm1tL2RhbW9uL2NvcmUuYzoxNzU6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTE3Ni17XG4tLVxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbm1tL2RhbW9uL2NvcmUuYy00NzktXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NTkxPWJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02MDItXG5tbS9kYW1vbi9jb3JlLmM6NjAzOnZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjA0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NjE2PXN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyMC1cbm1tL2RhbW9uL2NvcmUuYzo2MjE6dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTYyMi17XG4tLVxubW0vZGFtb24vY29yZS5jPTYyNz1zdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTY0MS1cbm1tL2RhbW9uL2NvcmUuYzo2NDI6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTY0My17XG4tLVxubW0vZGFtb24vY29yZS5jPTY1Mj1zdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG4tLVxubW0vZGFtb24vY29yZS5jLTY1Ni1cbm1tL2RhbW9uL2NvcmUuYzo2NTc6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNjU4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzI0PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzM0LVxubW0vZGFtb24vY29yZS5jOjczNTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzQ2PXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxubW0vZGFtb24vY29yZS5jOjc1MTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy03NTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03OTItXG5tbS9kYW1vbi9jb3JlLmM6NzkzOnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNzk0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODAzPXN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODA3LVxubW0vZGFtb24vY29yZS5jOjgwODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtODA5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODE2LVxubW0vZGFtb24vY29yZS5jOjgxNzp2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04MTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04NzI9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODc5LVxubW0vZGFtb24vY29yZS5jOjg4MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNDctICovXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA5NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxubW0vZGFtb24vY29yZS5jLTEwOTctXHRcdFx0c3NpemVfdCBucl9zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTM5PXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTYxLSAqL1xubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE2My17XG4tLVxubW0vZGFtb24vY29yZS5jPTE4MDk9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MzctICovXG5tbS9kYW1vbi9jb3JlLmM6MTgzODppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xODM5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxODU4OmludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZClcbm1tL2RhbW9uL2NvcmUuYy0xODU5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTk1Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXG5tbS9kYW1vbi9jb3JlLmM6MTk3NDppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAxOT1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDM4LSAqL1xubW0vZGFtb24vY29yZS5jOjIwMzk6dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA1ND1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDY5LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNzA6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0yMDcxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEwNS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTA2OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTA3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE1OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTU5OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTYwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzk2ND1zdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTk1LSAqL1xubW0vZGFtb24vY29yZS5jOjM5OTY6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jLTM5OTctXHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MDIxOnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxubW0vZGFtb24vY29yZS5jLTQwMjIte1xuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTQtICovXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjE1OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNi1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00NS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6NDY6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ3LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cCk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI0PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy00MS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0Mjp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTcyLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjczOnZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA1LVx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTQ5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MDppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MS1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTczLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3NDp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTc1LXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9OD1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtOS1cbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTE6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEyOnZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTMtYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xNC1cbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNTppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVx0XHRcdHN0cnVjdCBkYW1vcyAqcyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTc6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE4LVx0XHRcdHN0cnVjdCBkYW1vcyAqcyk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04Mi17XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0xNz1zdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9MzQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM3PWV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM5OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MC1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDMtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01Mi1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1Nzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2ODA9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjg1OnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODYte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5Mjk6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTMwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDYyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjM6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY0LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwMC0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTAxOnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAyLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNDctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE0ODppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNDktXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODM0MgoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiA5NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gRnJhbWV3b3JrIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGV4ZWN1dGlvbiBvZiBEQU1PUyBzY2hlbWVzIHdvcmtzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBkYW1vc19hcHBseV9zY2hlbWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtkYW1vbmQgbG9vcCwgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGUgb3BlcmF0aW9ucyBmb3IgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSByZWdpc3RlcmVkIGFuZCBzZWxlY3RlZCBkeW5hbWljYWxseSwgYW5kIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgdGhlIG1vbml0b3JpbmcgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBjcnVjaWFsIHN5bWJvbHMgZm9yIGZ1enppbmcuIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NhbGxgLCBgZGFtb3Nfd2Fsa2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGxvb2sgbGlrZSBleGNlbGxlbnQgc3RhcnRpbmcgcG9pbnRzLCBnaXZlbiB0aGVpciByb2xlcyBpbiBpbml0aWFsaXppbmcsIGNvbmZpZ3VyaW5nLCBhbmQgYXBwbHlpbmcgc2NoZW1lcy4KCk5leHQsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gV2UgYWJzb2x1dGVseSBuZWVkIGBEQU1PTmAsIG5hdHVyYWxseS4gIFRoZW4gYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHZpdGFsIGZvciBlbmFibGluZyB0aGUgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLgoKVG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyByZXZpc2l0IHRoZSBLY29uZmlnIGZpbGUuICBJIHNlZSBhIGZldyBtb3JlIG9wdGlvbnMsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYCwgYWxsIGNvbmRpdGlvbmFsIG9uIGBEQU1PTl9QQUREUmAuIFdvcnRoIGtlZXBpbmcgaW4gbWluZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuCkluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHJlZ2lvbiBzcGxpdHRpbmcsIG1lbW9yeSBib3VuZCBjaGVja3MsIGFuZCBhIGNydWNpYWwgZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gdGhlIGdvYWwgY2FsY3VsYXRpb24gbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IGNvcnJlY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIGEgZnJhbWV3b3JrIHRvdWNoaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBxdW90YS4KCkluIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIHVwZGF0ZXMgdG8gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24gdXNpbmcgYFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pYCBmb3IgZm9saW9zIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgYXJlIGNyaXRpY2FsIHRvIG1haW50YWluIGFjY3VyYWN5LiBUaGlzIG1ha2VzIHNlbnNlLgoKRmluYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgIGNvcnJlY3RzIHRoZSBpdGVyYXRpb24gb3ZlciBQTUQgZW50cmllcywgZW5zdXJpbmcgY29ycmVjdCBzdHJpZGUgY2FsY3VsYXRpb25zIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLXBhZ2UgZm9saW9zIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCgpGcm9tIHRoaXMgcmV2aWV3LCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgKmFic29sdXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBmaXhlcyB0YXJnZXQgZnVuY3Rpb25hbCBidWdzIGFmZmVjdGluZyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiwgaW5jbHVkaW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGVzc2VudGlhbCBtZW1vcnkgZ29hbCBjYWxjdWxhdGlvbnMuIFRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBhbGwgaW1wb3J0YW50LgoKTXkgVmVyZGljdDoKLSBgV29ydGhGdXp6aW5nYDogdHJ1ZQotIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0RBTU9OJiMzNDssICYjMzQ7REFNT05fVkFERFImIzM0OywgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LCAmIzM0O0RBTU9OX1NZU0ZTJiMzNDtdYAotIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7ZGFtb25fc3RhcnQmIzM0OywgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywgJiMzNDtkYW1vbl9jYWxsJiMzNDssICYjMzQ7ZGFtb3Nfd2FsayYjMzQ7LCAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDtdYAotIGBSZWFzb25pbmdgOiBDb3JyZWN0cyBpbXBvcnRhbnQgZnVuY3Rpb25hbCBhbmQgbWVtb3J5LXJlbGF0ZWQgYnVncyBpbiBEQU1PTiBvcGVyYXRpb25zLCB3aGljaCBhcmUgdHJpZ2dlcmVkIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCBjb3JlIERBTU9OIGZ1bmN0aW9ucy4KCk5vdywgSSYjMzk7bGwgcGFzcyB0aGlzIGluZm9ybWF0aW9uIGFsb25nIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDssCiAgICAmIzM0O2RhbW9zX3dhbGsmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc2V2ZXJhbCBmdW5jdGlvbmFsIGJ1Z3MgaW4gREFNT04gY29yZSwgcGh5c2ljYWwgYWRkcmVzcyAocGFkZHIpLCBhbmQgdmlydHVhbCBhZGRyZXNzICh2YWRkcikgb3BlcmF0aW9uczogaGFuZGxpbmcgcmVnaW9uIHNwbGl0dGluZyBmYWlsdXJlIGluIGRhbW9zX2FwcGx5X3NjaGVtZSwgcHJldmVudGluZyBkaXZpc2lvbiBieSB6ZXJvIGFuZCBvdXQtb2YtcmFuZ2UgcXVvdGEgY2FsY3VsYXRpb25zIGluIG5vZGUvbWVtY2cgbWVtb3J5IHF1b3RhIGdvYWxzLCBmaXhpbmcgZm9saW8gYWRkcmVzcyBhZHZhbmNlbWVudCBpbiBwYWRkciBzY2hlbWUgb3BlcmF0aW9ucyAocGFnZW91dCwgZGVhY3RpdmF0ZSwgbWlncmF0ZSwgc3RhdCksIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgUE1EIGl0ZXJhdGlvbiBzdHJpZGVzIGFjcm9zcyBtdWx0aS1wYWdlIGZvbGlvcyBpbiB2YWRkciBzY2hlbWUgb3BlcmF0aW9ucyAobWlncmF0ZSwgc3RhdCkuIEFsbCB0aGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OywKICAgICYjMzQ7ZGFtb3Nfd2FsayYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyBpbiBEQU1PTiBjb3JlLCBwaHlzaWNhbCBhZGRyZXNzIChwYWRkciksIGFuZCB2aXJ0dWFsIGFkZHJlc3MgKHZhZGRyKSBvcGVyYXRpb25zOiBoYW5kbGluZyByZWdpb24gc3BsaXR0aW5nIGZhaWx1cmUgaW4gZGFtb3NfYXBwbHlfc2NoZW1lLCBwcmV2ZW50aW5nIGRpdmlzaW9uIGJ5IHplcm8gYW5kIG91dC1vZi1yYW5nZSBxdW90YSBjYWxjdWxhdGlvbnMgaW4gbm9kZS9tZW1jZyBtZW1vcnkgcXVvdGEgZ29hbHMsIGZpeGluZyBmb2xpbyBhZGRyZXNzIGFkdmFuY2VtZW50IGluIHBhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChwYWdlb3V0LCBkZWFjdGl2YXRlLCBtaWdyYXRlLCBzdGF0KSwgYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyBQTUQgaXRlcmF0aW9uIHN0cmlkZXMgYWNyb3NzIG11bHRpLXBhZ2UgZm9saW9zIGluIHZhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChtaWdyYXRlLCBzdGF0KS4gQWxsIHRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyY2U4M2ZlMjE3ZDJiNmQzMzdiYmUyYWNmMmU3NjJjMjUxOWFkMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNjozNjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJCWMtJmd0O21pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzeikKIAkJCQlnb3RvIHVwZGF0ZV9zdGF0OwotCQkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTsKJiM0MzsJCQlpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSkKJiM0MzsJCQkJZ290byB1cGRhdGVfc3RhdDsKIAkJfQogCQlpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKQogCQkJcmV0dXJuOwpAQCAtMjgxNSw2ICYjNDM7MjgxNiwxMyBAQCBzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoCiAJfQogCiAJc2lfbWVtaW5mb19ub2RlKCZhbXA7aSwgZ29hbC0mZ3Q7bmlkKTsKJiM0MzsJaWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gJmx0OyBpLmZyZWVyYW0pIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKJiM0MzsJCQlyZXR1cm4gMTAwMDA7CiYjNDM7CQllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KQEAgLTI4NTUsNiAmIzQzOzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKIAlzaV9tZW1pbmZvX25vZGUoJmFtcDtpLCBnb2FsLSZndDtuaWQpOwomIzQzOwlpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSAmbHQ7IHVzZWRfcGFnZXMpIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKQomIzQzOwkJCXJldHVybiAxMDAwMDsKJiM0MzsJCWVsc2UJLyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KIAlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gdXNlZF9wYWdlczsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqLwpAQCAtMzAwMSw3ICYjNDM7MzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pCiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTsKIAlpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0FOT04pICYjNDM7CiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0ZJTEUpOwotCXRvdGFsID0gYWN0aXZlICYjNDM7IGluYWN0aXZlOwomIzQzOwl0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpOwogCWlmIChhY3RpdmVfcmF0aW8pCiAJCXJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpOwogCXJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQllbHNlCiAJCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9fbGlzdCk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpCkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZSgKIAkJCWZvbGlvX2RlYWN0aXZhdGUoZm9saW8pOwogCQlhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKQEAgLTM1MCw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7CiAJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtmb2xpb19saXN0KTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCWFwcGxpZWQgPSBkYW1vbl9taWdyYXRlX3BhZ2VzKCZhbXA7Zm9saW9fbGlzdCwgcy0mZ3Q7dGFyZ2V0X25pZCk7CkBAIC0zNzksNyAmIzQzOzM3OSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAogCQlpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0OwotCQlhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKJiM0MzsJCWFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAl9CiAJcy0mZ3Q7bGFzdF9hcHBsaWVkID0gZm9saW87CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCAwNjQ4NDAwYjJkNjViLi5jOGMzMmIyYWUwNDAyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAwOwogCiAJZm9yICg7IGFkZHIgJmx0OyBuZXh0OyBwdGUgJiM0Mzs9IG5yLCBhZGRyICYjNDM7PSBuciAqIFBBR0VfU0laRSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKJiM0MzsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiAKQEAgLTY4MSw3ICYjNDM7NjgzLDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAkJZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstJmd0O3ZtYSwgYWRkciwgZGVzdHMsCiAJCQkJbWlncmF0aW9uX2xpc3RzKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQlwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpOwomIzQzOwkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CiAJcmV0dXJuIDA7CkBAIC04MzEsNiAmIzQzOzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gMDsKIAogCWZvciAoOyBhZGRyICZsdDsgbmV4dDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiYjNDM7CiAJCW5yID0gMTsKIAkJcHRlbnQgPSBwdGVwX2dldChwdGUpOwogCkBAIC04NDQsNyAmIzQzOzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJCWlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwotCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCXBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7CiYjNDM7CQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4OwogCQlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gYnJpbmcgb3V0IEtNU0FOLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGFueXRoaW5nIHRoYXQgY291bGQgbGVhayBkYXRhLiBHaXZlbiB0aGUgY2hhbmdlcyBhcmUgaW4gYG1tL2RhbW9uL2AsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLCBJIG5lZWQgdG8gZm9jdXMgb24gcG90ZW50aWFsIGFyZWFzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBiZSByZWFkIG9yIHBhc3NlZCB0byB1c2Vyc3BhY2UuCgpGaXJzdCwgSSBzZWUgc2V2ZXJhbCBjaGFuZ2VzIGluIGBtbS9kYW1vbi9jb3JlLmNgIHRoYXQgbG9vayBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gb3IgdW5kZXJmbG93IGlzc3VlcyB3aXRoIGNoZWNrcyBmb3IgemVybyBvciBuZWdhdGl2ZSB2YWx1ZXMuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzY3JlYW0gJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjaGVja3MgYXJlIGV4aGF1c3RpdmUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IHN0YXRpc3RpY3MuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nLCB3aGljaCBjb3VsZCBiZSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcywgYW5kIHRoZXNlIHR5cGVzIG9mIGNhbGN1bGF0aW9ucy4gSSBzZWUgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAgcmV0dXJuIHZhbHVlcyBjaGVja2VkIHdoaWNoIGlzIGZpbmUuIFRoZSBvdGhlciBjaGFuZ2VzIGRvbiYjMzk7dCBzZWVtIGxpa2UgbWVtb3J5IGlzc3Vlcy4KClRoZSBgbW0vZGFtb24vcGFkZHIuY2AgY2hhbmdlcyBsb29rIGxpa2UgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBob3cgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSBjYWxjdWxhdGVkLCBwYXJ0aWN1bGFybHkgd2hlbiB3b3JraW5nIHdpdGggYGZvbGlvYCBzdHJ1Y3R1cmVzLiBBZGp1c3RpbmcgdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24gaW4gdGhlIGRpZmZlcmVudCBgZGFtb25fcGFfKmAgZnVuY3Rpb25zIG1ha2VzIHNlbnNlIHRvIGF2b2lkIG1pc2FsaWduZWQgYWNjZXNzZXMsIHN0ZXBwaW5nIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb2xpbyBpZiBuZWNlc3NhcnkuIFdoaWxlIG5lY2Vzc2FyeSwgdGhpcyBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzdWdnZXN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLiBIb3dldmVyLCBhbnkgdGltZSB5b3UmIzM5O3JlIHdvcmtpbmcgd2l0aCBsb3ctbGV2ZWwgbWVtb3J5IGFkZHJlc3NpbmcsIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggZW5zdXJpbmcgYWxsIG1lbW9yeSBpcyBjb3JyZWN0bHkgYWxpZ25lZCBhbmQgYWNjb3VudGVkIGZvci4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGdvIGJhY2sgYW5kIGluc3BlY3QgdGhlIGNvZGUgZm9yIGFueSBpbXBsaWNpdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgcG90ZW50aWFsIHJpc2tzLgoKRmluYWxseSwgdGhlIGBtbS9kYW1vbi92YWRkci5jYCBjaGFuZ2VzIGxvb2sgYXQgaGFuZGxpbmcgUFRFIGVudHJpZXMgYW5kIHBvdGVudGlhbGx5IGZvbGlvIHNwYW5uaW5nLiBDb3JyZWN0aW5nIGhvdyB0aGUgcmFuZ2UgaXMgaGFuZGxlZCB3aXRoaW4gYSBmb2xpbywgYXZvaWRpbmcgb3V0LW9mLWJvdW5kcyBQVEUgYWNjZXNzZXMsIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQuIFRoZSBgZm9saW9fcGFnZV9pZHhgLCBgZm9saW9fbnJfcGFnZXNgLCBhbmQgdGhlIGNhbGN1bGF0ZWQgb2Zmc2V0cyBhcmUgYXJlYXMgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2suIEkgbXVzdCBiZSBjYXJlZnVsIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2dpYyBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIHBhcnRpYWwgZm9saW9zLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aGVyZSB0aGUgUFRFIGRvZXNuJiMzOTt0IG1hcCBhIGZ1bGwgZm9saW8uIFRoaXMgaXMgdGhlIGxpa2VsaWVzdCBhcmVhIHRvIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBlc3BlY2lhbGx5IGlmIHdlIGhhdmUgcGFydGlhbCBtYXBwaW5ncywgYW5kIHRoZSBwYWdlIGlzbiYjMzk7dCBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuCgpUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoaXMgcGF0Y2ggd2l0aCBgcmVhZC1maWxlYCBhbmQgYSBxdWljayBgZ3JlcHBlcmAgcGFzcyB0byBzZWFyY2ggZm9yIG1lbW9yeSBjb3B5IG9yIGFzc2lnbm1lbnQgcGF0dGVybnMgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF9ub2RlX21lbV9icCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yODAwPXN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgwNC1cbm1tL2RhbW9uL2NvcmUuYzoyODA1OnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0yODA2LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjk4MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjk4Ni0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xubW0vZGFtb24vY29yZS5jOjI5ODc6c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxubW0vZGFtb24vY29yZS5jLTI5ODgtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDI0PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAzOS1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDQwOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzA0MS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgZXhhbWluYXRpb24sIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBNZW1vcnkgTWV0cmljcyoqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGlzIHRyYWNraW5nIG1lbW9yeSB1c2FnZSBhdCB0aGUgbm9kZSBhbmQgbWVtY2cgbGV2ZWxzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSBmdW5jdGlvbnMgYGRhbW9zX2dldF9ub2RlX21lbV9icGAgYW5kIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYC4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHByb3ZpZGluZyB0aGUgbWVtb3J5IHVzYWdlIGRhdGEgdGhhdCBEQU1PTiBsZXZlcmFnZXMgZm9yIGl0cyBhbmFseXNpcywgcHJvYmFibHkgZm9yIGJsb2NrIHByb2ZpbGluZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBnZXQgdGhlIGluZm9ybWF0aW9uLCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgdGhleSBhY2Nlc3MsIGFuZCBob3cgdGhlIHJlc3VsdHMgYXJlIGZvcm1hdHRlZC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG1ldGhvZG9sb2d5IGFuZCBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgREFNT04gZ2V0cyB0aGUgZGF0YSBpdCBuZWVkcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGhvdyBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRoZSBjb2RlIGlzLCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluYWNjdXJhY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MDU6XHRzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG4yODA2Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuMjgwNzpcdHtcbjI4MDg6XHRcdHN0cnVjdCBzeXNpbmZvIGk7XG4yODA5Olx0XHRfX2tlcm5lbF91bG9uZ190IG51bWVyYXRvcjtcbjI4MTA6XHRcbjI4MTE6XHRcdGlmIChpbnZhbGlkX21lbV9ub2RlKGdvYWwtXHUwMDNlbmlkKSkge1xuMjgxMjpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcbjI4MTM6XHRcdFx0XHRyZXR1cm4gMDtcbjI4MTQ6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuMjgxNTpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4MTY6XHRcdH1cbjI4MTc6XHRcbjI4MTg6XHRcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4yODE5Olx0XHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgaS5mcmVlcmFtKSB7XG4yODIwOlx0XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuMjgyMTpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4MjI6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuMjgyMzpcdFx0XHRcdHJldHVybiAwO1xuMjgyNDpcdFx0fVxuMjgyNTpcdFxuMjgyNjpcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4yODI3Olx0XHRcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XG4yODI4Olx0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXG4yODI5Olx0XHRcdG51bWVyYXRvciA9IGkuZnJlZXJhbTtcbjI4MzA6XHRcdHJldHVybiBtdWx0X2ZyYWMobnVtZXJhdG9yLCAxMDAwMCwgaS50b3RhbHJhbSk7XG4yODMxOlx0fVxuMjgzMjpcdFxuMjgzMzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4yODM0Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuMjgzNTpcdHtcbjI4MzY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjI4Mzc6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbjI4Mzg6XHRcdHVuc2lnbmVkIGxvbmcgdXNlZF9wYWdlcywgbnVtZXJhdG9yO1xuMjgzOTpcdFx0c3RydWN0IHN5c2luZm8gaTtcbjI4NDA6XHRcbjI4NDE6XHRcdGlmIChpbnZhbGlkX21lbV9ub2RlKGdvYWwtXHUwMDNlbmlkKSkge1xuMjg0MjpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg0MzpcdFx0XHRcdHJldHVybiAwO1xuMjg0NDpcdFx0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbjI4NDU6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODQ2Olx0XHR9XG4yODQ3Olx0XG4yODQ4Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoZ29hbC1cdTAwM2VtZW1jZ19pZCk7XG4yODQ5Olx0XHRpZiAoIW1lbWNnKSB7XG4yODUwOlx0XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXG4yODUxOlx0XHRcdFx0cmV0dXJuIDA7XG4yODUyOlx0XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuMjg1MzpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4NTQ6XHRcdH1cbjI4NTU6XHRcbjI4NTY6XHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpO1xuMjg1NzpcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShnb2FsLVx1MDAzZW5pZCkpO1xuMjg1ODpcdFx0dXNlZF9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuMjg1OTpcdFx0dXNlZF9wYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKTtcbjI4NjA6XHRcdHVzZWRfcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuMjg2MTpcdFx0dXNlZF9wYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKTtcbjI4NjI6XHRcbjI4NjM6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjI4NjQ6XHRcbjI4NjU6XHRcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4yODY2Olx0XHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgdXNlZF9wYWdlcykge1xuMjg2NzpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg2ODpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4Njk6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4yODcwOlx0XHRcdFx0cmV0dXJuIDA7XG4yODcxOlx0XHR9XG4yODcyOlx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg3MzpcdFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuMjg3NDpcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IEluZm9ybWF0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gbWVtb3J5IGluZm9ybWF0aW9uIGlzIGJlaW5nIHBvcHVsYXRlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHNpX21lbWluZm9fbm9kZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBjb250cmlidXRlcyB0byBmaWxsaW5nIHVwIHRoYXQgYHN0cnVjdCBzeXNpbmZvIGlgLiBJdCBsb29rcyBsaWtlIGBzaV9tZW1pbmZvX25vZGVgIGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcsIGluaXRpYWxpemluZyBgaWAg4oCTIHNwZWNpZmljYWxseSwgSSBzdXNwZWN0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIGZpZWxkcyBsaWtlIGB0b3RhbHJhbWAsIGBmcmVlcmFtYCwgYW5kIHNvIG9uLiBMaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBgbWVtc2V0YCBhbmQgZGlyZWN0IGZpZWxkIGFzc2lnbm1lbnRzIGFyZSBpbnZvbHZlZC4gQmVzdCB0byBqdW1wIHJpZ2h0IGludG8gZXhhbWluaW5nIHRoZSBjb2RlIG9mIGBzaV9tZW1pbmZvX25vZGVgLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNpX21lbWluZm9fbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDE1Mj1leHRlcm4gdm9pZCBzaV9tZW1pbmZvKHN0cnVjdCBzeXNpbmZvICogdmFsKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0MTUzOmV4dGVybiB2b2lkIHNpX21lbWluZm9fbm9kZShzdHJ1Y3Qgc3lzaW5mbyAqdmFsLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW0uaC00MTU0LVxuLS1cbm1tL3Nob3dfbWVtLmM9ODc9RVhQT1JUX1NZTUJPTChzaV9tZW1pbmZvKTtcbi0tXG5tbS9zaG93X21lbS5jLTg5LSNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2hvd19tZW0uYzo5MDp2b2lkIHNpX21lbWluZm9fbm9kZShzdHJ1Y3Qgc3lzaW5mbyAqdmFsLCBpbnQgbmlkKVxubW0vc2hvd19tZW0uYy05MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgbW0vc2hvd19tZW0uYzo5MGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGxpbmUgOTAgaW4gYG1tL3Nob3dfbWVtLmNgLiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgdXNhZ2UuIEtub3dpbmcgdGhlIGZpbGUgcGF0aCwgYW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBsb2NhdGlvbiwgSSBleHBlY3QgdGhpcyB0byBiZSBhIGNvcmUgcGllY2Ugb2YgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBob3cgbWVtb3J5IHN0YXRpc3RpY3MgYXJlIGdhdGhlcmVkIGFuZCBwcmVzZW50ZWQuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNhbGN1bGF0aW9ucyBoYXBwZW5pbmcg4oCTIGFyZSB0aGV5IGFjY3VyYXRlLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cywgZXRjPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgcG90ZW50aWFsIGlzc3VlcykgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG93X21lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpXG4gIDkxOlx0e1xuICA5MjpcdFx0aW50IHpvbmVfdHlwZTtcdFx0LyogbmVlZHMgdG8gYmUgc2lnbmVkICovXG4gIDkzOlx0XHR1bnNpZ25lZCBsb25nIG1hbmFnZWRfcGFnZXMgPSAwO1xuICA5NDpcdFx0dW5zaWduZWQgbG9uZyBtYW5hZ2VkX2hpZ2hwYWdlcyA9IDA7XG4gIDk1Olx0XHR1bnNpZ25lZCBsb25nIGZyZWVfaGlnaHBhZ2VzID0gMDtcbiAgOTY6XHRcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbiAgOTc6XHRcbiAgOTg6XHRcdGZvciAoem9uZV90eXBlID0gMDsgem9uZV90eXBlIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmVfdHlwZSYjNDM7JiM0MzspIHtcbiAgOTk6XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBcdTAwMjZwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzW3pvbmVfdHlwZV07XG4gMTAwOlx0XHRcdG1hbmFnZWRfcGFnZXMgJiM0Mzs9IHpvbmVfbWFuYWdlZF9wYWdlcyh6b25lKTtcbiAxMDE6XHRcdFx0aWYgKGlzX2hpZ2htZW0oem9uZSkpIHtcbiAxMDI6XHRcdFx0XHRtYW5hZ2VkX2hpZ2hwYWdlcyAmIzQzOz0gem9uZV9tYW5hZ2VkX3BhZ2VzKHpvbmUpO1xuIDEwMzpcdFx0XHRcdGZyZWVfaGlnaHBhZ2VzICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4gMTA0Olx0XHRcdH1cbiAxMDU6XHRcdH1cbiAxMDY6XHRcbiAxMDc6XHRcdHZhbC1cdTAwM2V0b3RhbHJhbSA9IG1hbmFnZWRfcGFnZXM7XG4gMTA4Olx0XHR2YWwtXHUwMDNlc2hhcmVkcmFtID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TSE1FTSk7XG4gMTA5Olx0XHR2YWwtXHUwMDNlZnJlZXJhbSA9IHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0ZSRUVfUEFHRVMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc5CgkJCQkJCQlvdXRwdXQ6IDIwOQoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzLCBhcyBhbHdheXMsIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aXRoIHRoZXNlIGtpbmRzIG9mIGtlcm5lbCBwYXRjaGVzLiBgc2lfbWVtaW5mb19ub2RlYCBzZXRzIHRoZSBgdG90YWxyYW1gIGFuZCBgZnJlZXJhbWAgdmFsdWVzLCB3aGljaCBhcmUgbm93IGJlaW5nIHZhbGlkYXRlZCBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiAgVGhlIGNoZWNrcyBgIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSAmbHQ7IGkuZnJlZXJhbWAgYW5kIGAhaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtICZsdDsgdXNlZF9wYWdlc2AgbG9vayBzb2xpZC4gSXQmIzM5O3MgYSBjbGFzc2ljIGRlZmVuc2UgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvIGFuZCB0aG9zZSBuYXN0eSB1bmRlcmZsb3cgZXJyb3JzIHRoYXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zLiBHb29kIGNhdGNoIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgb3RoZXIgY29tcG9uZW50cyBvZiB0aGlzIHBhdGNoOgoKKiAgIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opYCBoYXMgcmV0dXJuIHZhbHVlIGNoZWNrcywgd2hpY2ggaXMgZXNzZW50aWFsIHRvIGhhbmRsZSBhbnkgZXJyb3JzIGR1cmluZyBtZW1vcnkgcmVnaW9uIHNwbGl0dGluZy4KKiAgIEluIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGAsIGB0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpO2AgcHJldmVudHMgZGl2aXNpb24gYnkgemVyby4gR29vZCBkZWZlbnNpdmUgY29kaW5nLgoqICAgYGRhbW9uL3BhZGRyLmNgIGlzIGNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgbmV4dCBhZGRyZXNzIGJhc2VkIG9uIHRoZSBhY3R1YWwgZm9saW8gUEZOIHJhdGhlciB0aGFuIGFuIGFzc3VtZWQgYWxpZ25tZW50LCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgYnVncy4gIGBhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7YCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IGFkZHJlc3MgbWlzY2FsY3VsYXRpb25zLgoqICAgYGRhbW9uL3ZhZGRyLmNgIGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmluZyBwYWdlcyBpbiB0aGUgZm9saW8gZnJvbSB0aGUgY3VycmVudCBQVEUgdXNpbmcgYHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7YCBUaGlzIHByZXZlbnRzIHNraXBwaW5nIFBURXMgd2hlbiB0aGUgc3RhcnRpbmcgYWRkcmVzcyBmYWxscyB3aXRoaW4gYSBsYXJnZSBmb2xpbywgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMuCgpCYXNlZCBvbiBteSBhbmFseXNpcywgKm5vbmUqIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHVzZSBvZiBmdW5jdGlvbnMgc3VjaCBhcyBgcHV0X3VzZXJgLCBgY29weV90b191c2VyYCwgZXRjLiwgYXMgYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgY2FsY3VsYXRpb25zIGFyZSBpbnRlcm5hbCBEQU1PTiBxdW90YSBjYWxjdWxhdGlvbnMgYW5kIGZvbGlvIHRyYXZlcnNhbCwgd2hpY2ggaXMgZ29vZC4gVGhlcmUgYXJlIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG5vciBpcyB0aGVyZSBhbnkgYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcy4gTW9yZW92ZXIsIEkgc2VlIG5vIGFsdGVyYXRpb24gb2YgZXhpc3RpbmcgYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgYWxsIHNvbGlkIGJ1ZyBmaXhlczogYXJpdGhtZXRpYyB1bmRlcmZsb3cvZGl2aWRlLWJ5LXplcm8gcHJvdGVjdGlvbnMsIHJldHVybiBjb2RlIGNoZWNrcywgYW5kIGZvbGlvIGFkZHJlc3Mvb2Zmc2V0IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgaGVyZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTi4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gcGF0Y2gsIHdoaWNoIGhhcyBhZGRyZXNzZWQgdGhlIG1haW4gcG9pbnRzIHRoYXQgSSB3b3VsZCBleHBlY3QgdG8gaGF2ZSBiZWVuIGFkZHJlc3NlZC4KCk9rYXksIGxldCYjMzk7cyBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBsb2dpYyBhbmQgYXJpdGhtZXRpYyBpc3N1ZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06XG4xLiBJbiBgbW0vZGFtb24vY29yZS5jYCwgaXQgYWRkcyBlcnJvciBjaGVja2luZyBmb3IgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCgpYCBhbmQgZ3VhcmRzIGFnYWluc3QgZGl2aXNpb24tYnktemVybyBhbmQgdW5kZXJmbG93IGluIGBkYW1vc19nZXRfbm9kZV9tZW1fYnAoKWAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKClgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKClgLlxuMi4gSW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0IGZpeGVzIGFkZHJlc3MgYWR2YW5jZW1lbnQgYW5kIHN0ZXAtc2l6ZSBjYWxjdWxhdGlvbnMgd2hlbiBpdGVyYXRpbmcgb3ZlciBmb2xpb3MuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgaW50ZXJhY3Qgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6MzY6MjEuNjU3ODA5Njk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MzAzMDQzNjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiLFxuICAgIFwiZGFtb3Nfd2Fsa1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGxvZ2ljIGFuZCBhcml0aG1ldGljIGlzc3VlcyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbTpcXG4xLiBJbiBgbW0vZGFtb24vY29yZS5jYCwgaXQgYWRkcyBlcnJvciBjaGVja2luZyBmb3IgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCgpYCBhbmQgZ3VhcmRzIGFnYWluc3QgZGl2aXNpb24tYnktemVybyBhbmQgdW5kZXJmbG93IGluIGBkYW1vc19nZXRfbm9kZV9tZW1fYnAoKWAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKClgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKClgLlxcbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgaW50ZXJhY3Qgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyBpbiBEQU1PTiBjb3JlLCBwaHlzaWNhbCBhZGRyZXNzIChwYWRkciksIGFuZCB2aXJ0dWFsIGFkZHJlc3MgKHZhZGRyKSBvcGVyYXRpb25zOiBoYW5kbGluZyByZWdpb24gc3BsaXR0aW5nIGZhaWx1cmUgaW4gZGFtb3NfYXBwbHlfc2NoZW1lLCBwcmV2ZW50aW5nIGRpdmlzaW9uIGJ5IHplcm8gYW5kIG91dC1vZi1yYW5nZSBxdW90YSBjYWxjdWxhdGlvbnMgaW4gbm9kZS9tZW1jZyBtZW1vcnkgcXVvdGEgZ29hbHMsIGZpeGluZyBmb2xpbyBhZGRyZXNzIGFkdmFuY2VtZW50IGluIHBhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChwYWdlb3V0LCBkZWFjdGl2YXRlLCBtaWdyYXRlLCBzdGF0KSwgYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyBQTUQgaXRlcmF0aW9uIHN0cmlkZXMgYWNyb3NzIG11bHRpLXBhZ2UgZm9saW9zIGluIHZhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChtaWdyYXRlLCBzdGF0KS4gQWxsIHRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjozNjoyMS42NTc4MTYzNDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzQwMTEwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MmNlODNmZTIxN2QyYjZkMzM3YmJlMmFjZjJlNzYyYzI1MTlhZDJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDE2OjM2OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLmY4ZGRkYmZmNzRhNzcgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTI2MTMsNyArMjYxMyw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRcXHRcXHRcXHRjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4gXFx0XFx0XFx0aWYgKCFzeilcXG4gXFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4tXFx0XFx0XFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcXG4rXFx0XFx0XFx0aWYgKGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzeikpXFxuK1xcdFxcdFxcdFxcdGdvdG8gdXBkYXRlX3N0YXQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbkBAIC0yODE1LDYgKzI4MTYsMTMgQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbiBcXHR9XFxuIFxcbiBcXHRzaV9tZW1pbmZvX25vZGUoXFx1MDAyNmksIGdvYWwtXFx1MDAzZW5pZCk7XFxuK1xcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFxcdTAwM2MgaS5mcmVlcmFtKSB7XFxuK1xcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcXG4rXFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbitcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxcbiBcXHRcXHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xcbiBcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbkBAIC0yODU1LDYgKzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXG4gXFx0c2lfbWVtaW5mb19ub2RlKFxcdTAwMjZpLCBnb2FsLVxcdTAwM2VuaWQpO1xcbitcXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcXHUwMDNjIHVzZWRfcGFnZXMpIHtcXG4rXFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxuK1xcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4rXFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4gXFx0XFx0bnVtZXJhdG9yID0gdXNlZF9wYWdlcztcXG4gXFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbkBAIC0zMDAxLDcgKzMwMTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxcbiBcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9GSUxFKTtcXG4gXFx0aW5hY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0FOT04pICtcXG4gXFx0XFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9GSUxFKTtcXG4tXFx0dG90YWwgPSBhY3RpdmUgKyBpbmFjdGl2ZTtcXG4rXFx0dG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO1xcbiBcXHRpZiAoYWN0aXZlX3JhdGlvKVxcbiBcXHRcXHRyZXR1cm4gbXVsdF9mcmFjKGFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcXG4gXFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXFxuQEAgLTI2NCw3ICsyNjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4gcHV0X2ZvbGlvOlxcbi1cXHRcXHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbitcXHRcXHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpXFxuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVfYWN0aXZhdGUoXFxuIFxcdFxcdFxcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xcbiBcXHRcXHRhcHBsaWVkICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gcHV0X2ZvbGlvOlxcbi1cXHRcXHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbitcXHRcXHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5AQCAtMzUwLDcgKzM1MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0XFx0XFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4gcHV0X2ZvbGlvOlxcbi1cXHRcXHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbitcXHRcXHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCwgcy1cXHUwMDNldGFyZ2V0X25pZCk7XFxuQEAgLTM3OSw3ICszNzksNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcbiBcXHRcXHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxcbiBcXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKSAvIGFkZHJfdW5pdDtcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXFxuaW5kZXggMDY0ODQwMGIyZDY1Yi4uYzhjMzJiMmFlMDQwMiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC02NjksNiArNjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0Zm9yICg7IGFkZHIgXFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcXG4rXFxuIFxcdFxcdG5yID0gMTtcXG4gXFx0XFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xcbiBcXG5AQCAtNjgxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstXFx1MDAzZXZtYSwgYWRkciwgZGVzdHMsXFxuIFxcdFxcdFxcdFxcdG1pZ3JhdGlvbl9saXN0cyk7XFxuLVxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRcXHRwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpO1xcbitcXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xcbiBcXHR9XFxuIFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuK1xcbiBcXHRcXHRuciA9IDE7XFxuIFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gXFxuQEAgLTg0NCw3ICs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxcbiBcXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tXFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XFxuK1xcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XFxuIFxcdFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbiBcXHR9XFxuIFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjozNjoyMy4zOTI3OTY2NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MTY1MzI2MDU1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2NhbGxcIixcbiAgICBcImRhbW9zX3dhbGtcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc2V2ZXJhbCBmdW5jdGlvbmFsIGJ1Z3MgaW4gREFNT04gY29yZSwgcGh5c2ljYWwgYWRkcmVzcyAocGFkZHIpLCBhbmQgdmlydHVhbCBhZGRyZXNzICh2YWRkcikgb3BlcmF0aW9uczogaGFuZGxpbmcgcmVnaW9uIHNwbGl0dGluZyBmYWlsdXJlIGluIGRhbW9zX2FwcGx5X3NjaGVtZSwgcHJldmVudGluZyBkaXZpc2lvbiBieSB6ZXJvIGFuZCBvdXQtb2YtcmFuZ2UgcXVvdGEgY2FsY3VsYXRpb25zIGluIG5vZGUvbWVtY2cgbWVtb3J5IHF1b3RhIGdvYWxzLCBmaXhpbmcgZm9saW8gYWRkcmVzcyBhZHZhbmNlbWVudCBpbiBwYWRkciBzY2hlbWUgb3BlcmF0aW9ucyAocGFnZW91dCwgZGVhY3RpdmF0ZSwgbWlncmF0ZSwgc3RhdCksIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgUE1EIGl0ZXJhdGlvbiBzdHJpZGVzIGFjcm9zcyBtdWx0aS1wYWdlIGZvbGlvcyBpbiB2YWRkciBzY2hlbWUgb3BlcmF0aW9ucyAobWlncmF0ZSwgc3RhdCkuIEFsbCB0aGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODJjZTgzZmUyMTdkMmI2ZDMzN2JiZTJhY2YyZTc2MmMyNTE5YWQyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE2OjM2OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgKzI2MTMsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdFx0Yy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6KVxuIFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbi1cdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opO1xuK1x0XHRcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxuK1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgKzI4MTYsMTMgQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuIFx0fVxuIFxuIFx0c2lfbWVtaW5mb19ub2RlKFx1MDAyNmksIGdvYWwtXHUwMDNlbmlkKTtcbitcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFx1MDAzYyBpLmZyZWVyYW0pIHtcbitcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4rXHRcdFx0cmV0dXJuIDEwMDAwO1xuK1x0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcbiBcdFx0bnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTtcbiBcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbkBAIC0yODU1LDYgKzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4rXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgdXNlZF9wYWdlcykge1xuK1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuK1x0XHRcdHJldHVybiAxMDAwMDtcbitcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG5AQCAtMzAwMSw3ICszMDE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9BQ1RJVkVfRklMRSk7XG4gXHRpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfSU5BQ1RJVkVfQU5PTikgK1xuIFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0ZJTEUpO1xuLVx0dG90YWwgPSBhY3RpdmUgKyBpbmFjdGl2ZTtcbitcdHRvdGFsID0gbWF4KGFjdGl2ZSArIGluYWN0aXZlLCAxKTtcbiBcdGlmIChhY3RpdmVfcmF0aW8pXG4gXHRcdHJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuIFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWM2YzNhNTk3ZmQwYi4uOWRkZDFlYzgyMDJiNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRlbHNlXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVfYWN0aXZhdGUoXG4gXHRcdFx0Zm9saW9fZGVhY3RpdmF0ZShmb2xpbyk7XG4gXHRcdGFwcGxpZWQgKz0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcbitcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuQEAgLTM1MCw3ICszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcbitcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcdTAwMjZmb2xpb19saXN0LCBzLVx1MDAzZXRhcmdldF9uaWQpO1xuQEAgLTM3OSw3ICszNzksNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXG4gXHRcdGlmICghZGFtb3NfcGFfZmlsdGVyX291dChzLCBmb2xpbykpXG4gXHRcdFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbykgLyBhZGRyX3VuaXQ7XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggMDY0ODQwMGIyZDY1Yi4uYzhjMzJiMmFlMDQwMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC02NjksNiArNjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSArPSBuciwgYWRkciArPSBuciAqIFBBR0VfU0laRSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuK1xuIFx0XHRuciA9IDE7XG4gXHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiBcbkBAIC02ODEsNyArNjgzLDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgZGVzdHMsXG4gXHRcdFx0XHRtaWdyYXRpb25fbGlzdHMpO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UocHRlbnQpKTtcbitcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtODQ0LDcgKzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiBcdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XG4rXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XG4gXHRcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG4gXHR9XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjM2OjIzLjM5Mjc5OTQ5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDMyNjM2MDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBmdXp6aW5nIGVmZm9ydCBiYXNlZCBvbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGl0IGludHJvZHVjZXMuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgZnJhbWV3b3JrKSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgcHJvbWlzaW5nOyBEQU1PTiBpcyBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC5cblxuRmlyc3QsIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBJIHNlZSBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBjaGFuZ2VzLiBgZGFtb3NfYXBwbHlfc2NoZW1lKClgIG5vdyBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fc3BsaXRfcmVnaW9uX2F0KClgLCB3aXRoIGEgYGdvdG8gdXBkYXRlX3N0YXRgIG9uIGZhaWx1cmUuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgYW5kIHBvdGVudGlhbGx5IGZ1enotYWJsZSBpZiB3ZSBjYW4gdHJpZ2dlciBmYWlsdXJlcyBpbiB0aGF0IHNwbGl0dGluZyBmdW5jdGlvbi4gU2ltaWxhcmx5LCB0aGVyZSBhcmUgbnVsbCBjaGVja3MgaW4gYGRhbW9zX2dldF9ub2RlX21lbV9icCgpYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoKWAuIFRoZSBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoKWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIGEgZGl2LWJ5LXplcm8gZml4LCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBzaWduIGZvciBmdXp6aW5nLCBzaW5jZSB0aG9zZSBhcmUgdHlwaWNhbGx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBleHBsb2l0LlxuXG5Nb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgY2hhbmdlcyBpbiBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YCBhbGwgbG9vayByZWxhdGVkIHRvIGZvbGlvIGFsaWdubWVudCBpc3N1ZXMsIHNwZWNpZmljYWxseSBjYWxjdWxhdGluZyB0aGUgYWRkcmVzcyB3aGVuIGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSBhZGRpdGlvbiBvZiBgZm9saW9fc2l6ZShmb2xpbylgIG1ha2VzIG1lIHRoaW5rIHdlIG1pZ2h0IGJlIGFibGUgdG8gY3JhZnQgc29tZSBpbnRlcmVzdGluZywgZWRnZS1jYXNlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgYW5kIHRyaWdnZXIgc29tZSBtb3JlIGludGVyZXN0aW5nIGJlaGF2aW9yLlxuXG5GaW5hbGx5LCBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAgYXJlIGZpeGVkIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbGFyZ2UgZm9saW9zL1BNRCBlbnRyaWVzLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB3aGVyZSBib3VuZGFyeSBjb25kaXRpb25zIGFyZSBjcml0aWNhbCBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuT3ZlcmFsbCwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgZnVuY3Rpb25hbCBidWcgZml4ZXMgd2l0aGluIHRoZSBEQU1PTiBjb3JlLCBwYWRkciwgYW5kIHZhZGRyIG9wZXJhdGlvbnMuIFRoZXNlIHR5cGVzIG9mIGZpeGVzIGFyZSBvZnRlbiBncmVhdCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhcyB0aGV5IHN1Z2dlc3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MsIGVkZ2UgY2FzZXMsIGFuZCBwb3RlbnRpYWxseSwgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIERBTU9OIGFjY2Vzc2libGUgdGhyb3VnaCBhIGZ1enphYmxlIGludGVyZmFjZT8gWWVzLCBpdCdzIGEgY29yZSBNTSBmZWF0dXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChzcGVjaWZpY2FsbHkgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmApLiBFeGNlbGxlbnQhIFRoYXQgbWVhbnMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCBpdCwgY29uZmlndXJlIGl0LCBhbmQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGVzZSBjb2RlIHBhdGhzIGV2ZW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQgaXMgZ3JlYXQgYmVjYXVzZSB0aGF0IG1ha2VzIGl0IGZhciBzaW1wbGVyIHRvIHRhcmdldCB3aXRoIG91ciBlZmZvcnRzLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgREFNT04sIHRvIHNlZSB3aGF0IGtub2JzIHdlIGhhdmUgdG8gY29uZmlndXJlIGRpZmZlcmVudCBvcGVyYXRpb25hbCBzdGF0ZXMgb2YgdGhlIGZlYXR1cmUuIFdlJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgbWF5YmUganVzdCBhIHNpbXBsZSBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NDQ6NTMuNzE5MTY0MjI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzA0NzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NDQ6NTMuODU2MjE2NDYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxOTI0ODE2NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNYWtlZmlsZSBJbnZlc3RpZ2F0aW9uIC0gYG1tL2RhbW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBvYmplY3QgZmlsZSBjb25zdHJ1Y3Rpb24gZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUsIGBtbS9kYW1vbmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBkaWN0YXRlcyB0aGUgY29tcGlsYXRpb24gc3RlcHMsIGRlcGVuZGVuY2llcywgYW5kIGxpbmtlciBmbGFncyBmb3IgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkIHRvIHNlZSBob3cgaXQgZml0cyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSBidWlsZCBhbmQgZm9yd2FyZHMgdG8gaG93IEknZCBjaGFuZ2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo0OTozNS43ODEwMzcwNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NDk6MzUuNzgxMTU0NjA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA5MzY3NjY0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgcmVjZW50IGNoYW5nZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgcGlucG9pbnQgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIG9yIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZmZlY3RlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMuIFRvIHN0YXJ0LCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb3JlIGZpbGVzIGZvciBEQU1PTiDigJMgc3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBEQU1PTidzIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMsIGFuZCBhIGNsb3NlciBsb29rIGF0IHRob3NlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MDozNi43MTc5MjQ1MDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODkyNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3NjaGVtZXxkYW1vbl9wYV98ZGFtb3NfdmFfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTU4PXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcxLVxcbm1tL2RhbW9uL2NvcmUuYzoyNTcyOnN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yNTczLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjQzPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjY5LVxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxubW0vZGFtb24vY29yZS5jOjI2NzA6XFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yNjcxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xOC1cXG5tbS9kYW1vbi9wYWRkci5jOjE5OnN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy0yMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNC1cXG5tbS9kYW1vbi9wYWRkci5jOjI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcXG5tbS9kYW1vbi9wYWRkci5jLTI2LVxcdFxcdHBoeXNfYWRkcl90IHBhLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzctXFxubW0vZGFtb24vcGFkZHIuYzozODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDgtXFxubW0vZGFtb24vcGFkZHIuYzo0OTpzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy01MC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTUzLVxcbm1tL2RhbW9uL3BhZGRyLmM6NTQ6XFx0ZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsIGN0eC1cXHUwMDNlYWRkcl91bml0KSk7XFxubW0vZGFtb24vcGFkZHIuYy01NS19XFxubW0vZGFtb24vcGFkZHIuYy01Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjU3OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy01OC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTYzLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxcbm1tL2RhbW9uL3BhZGRyLmM6NjQ6XFx0XFx0XFx0X19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhyLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNjUtXFx0fVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy02Ny1cXG5tbS9kYW1vbi9wYWRkci5jOjY4OnN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy04MC1cXG5tbS9kYW1vbi9wYWRkci5jOjgxOnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy04Mi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtODQtXFx0Ym9vbCBhY2Nlc3NlZDtcXG5tbS9kYW1vbi9wYWRkci5jOjg1OlxcdHBoeXNfYWRkcl90IHNhbXBsaW5nX2FkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy04Ni1cXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODctXFxubW0vZGFtb24vcGFkZHIuYzo4ODpcXHRhY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODktXFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBhY2Nlc3NlZCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTkxLVxcbm1tL2RhbW9uL3BhZGRyLmM6OTI6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy05My17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTk5LVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxMDA6XFx0XFx0XFx0X19kYW1vbl9wYV9jaGVja19hY2Nlc3MociwgY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTAxLVxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTA4OnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxubW0vZGFtb24vcGFkZHIuYy0xMDktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQwLVxcbm1tL2RhbW9uL3BhZGRyLmM6MTQxOnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQ3LVxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cXHRcXHRcXHRwYXNzID0gZi1cXHUwMDNlYWxsb3c7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE1Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjE1NzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0xNTgtXFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3My1cXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTc0OlxcdFxcdFxcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzctXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxubW0vZGFtb24vcGFkZHIuYy0xNzktXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjE5LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTIyMS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNDQtXFxubW0vZGFtb24vcGFkZHIuYzoyNDU6XFx0YWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jOjI0NjpcXHR3aGlsZSAoYWRkciBcXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI0Ny1cXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYzoyNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yNDktXFx0XFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3NC1cXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi9wYWRkci5jOjI3NTpcXHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYy0yNzYtfVxcbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jLTI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg1LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjg2OlxcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYzoyODc6XFx0d2hpbGUgKGFkZHIgXFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yODgtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg5OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjkwLVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMDgtXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxubW0vZGFtb24vcGFkZHIuYzozMDk6XFx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzEwLX1cXG5tbS9kYW1vbi9wYWRkci5jLTMxMS1cXG5tbS9kYW1vbi9wYWRkci5jOjMxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzEzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XFxubW0vZGFtb24vcGFkZHIuYzozMTY6XFx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zMTctfVxcbm1tL2RhbW9uL3BhZGRyLmMtMzE4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MzE5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTMyMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlxcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XFxubW0vZGFtb24vcGFkZHIuYy0zMjUtXFxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMzMy1cXG5tbS9kYW1vbi9wYWRkci5jOjMzNDpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM1OlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU4LVxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzU5OlxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTM2MC19XFxubW0vZGFtb24vcGFkZHIuYy0zNjEtXFxubW0vZGFtb24vcGFkZHIuYzozNjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM3MS1cXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjM3NTpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTM3Ni1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzg4LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mzg5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0zOTAtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzk2LVxcdGNhc2UgREFNT1NfUEFHRU9VVDpcXG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcXHRcXHRyZXR1cm4gZGFtb25fcGFfcGFnZW91dChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cXHRjYXNlIERBTU9TX0xSVV9QUklPOlxcbm1tL2RhbW9uL3BhZGRyLmM6Mzk5OlxcdFxcdHJldHVybiBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAwLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDAxLVxcdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcXG5tbS9kYW1vbi9wYWRkci5jOjQwMjpcXHRcXHRyZXR1cm4gZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAzLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MDUtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxubW0vZGFtb24vcGFkZHIuYzo0MDY6XFx0XFx0cmV0dXJuIGRhbW9uX3BhX21pZ3JhdGUociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy00MDctXFx0Y2FzZSBEQU1PU19TVEFUOlxcbm1tL2RhbW9uL3BhZGRyLmM6NDA4OlxcdFxcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDA5LVxcdGRlZmF1bHQ6XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQxNS1cXG5tbS9kYW1vbi9wYWRkci5jOjQxNjpzdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbm1tL2RhbW9uL3BhZGRyLmMtNDE3LVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MzYtXFxubW0vZGFtb24vcGFkZHIuYzo0Mzc6c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG5tbS9kYW1vbi9wYWRkci5jLTQzOC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ0Mi1cXHRcXHQudXBkYXRlID0gTlVMTCxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0MzpcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0OlxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NDYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxubW0vZGFtb24vcGFkZHIuYzo0NDc6XFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0ODpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3BhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi9wYWRkci5jLTQ0OS1cXHR9O1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NTMtXFxubW0vZGFtb24vcGFkZHIuYzo0NTQ6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3BhX2luaXRjYWxsKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01MjItXFxubW0vZGFtb24vdmFkZHIuYzo1MjM6c3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcXG5tbS9kYW1vbi92YWRkci5jLTUyNC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTQ0LVxcbm1tL2RhbW9uL3ZhZGRyLmM6NTQ1OnN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vZGFtb24vdmFkZHIuYy01NDYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTYyLVxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfWU9VTkcpXFxubW0vZGFtb24vdmFkZHIuYzo1NjM6XFx0XFx0XFx0bWF0Y2hlZCA9IGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChmaWx0ZXIsIGZvbGlvLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNTY0LVxcdFxcdFxcdFxcdHZtYSwgYWRkciwgcHRlcCwgcG1kcCk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTU3My1cXG5tbS9kYW1vbi92YWRkci5jOjU3NDpzdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlIHtcXG5tbS9kYW1vbi92YWRkci5jLTU3NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkICptaWdyYXRpb25fbGlzdHM7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTU4NC0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjU4NTpzdGF0aWMgdm9pZCBkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNTg2LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTYzNC1cXG5tbS9kYW1vbi92YWRkci5jOjYzNTpzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9kYW1vbi92YWRkci5jLTYzNi1cXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjM3LXtcXG5tbS9kYW1vbi92YWRkci5jOjYzODpcXHRzdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlICpwcml2ID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5tbS9kYW1vbi92YWRkci5jLTYzOS1cXHRzdHJ1Y3QgbGlzdF9oZWFkICptaWdyYXRpb25fbGlzdHMgPSBwcml2LVxcdTAwM2VtaWdyYXRpb25fbGlzdHM7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY1Ni1cXHRcXHRcXHRnb3RvIGh1Z2Vfb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6NjU3OlxcdFxcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIE5VTEwsIHBtZCkpXFxubW0vZGFtb24vdmFkZHIuYy02NTgtXFx0XFx0XFx0Z290byBodWdlX291dDtcXG5tbS9kYW1vbi92YWRkci5jOjY1OTpcXHRcXHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcXG5tbS9kYW1vbi92YWRkci5jLTY2MC1cXHRcXHRcXHRcXHRtaWdyYXRpb25fbGlzdHMpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02ODEtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vdmFkZHIuYzo2ODI6XFx0XFx0aWYgKGRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHdhbGstXFx1MDAzZXZtYSwgYWRkciwgcHRlLCBOVUxMKSlcXG5tbS9kYW1vbi92YWRkci5jLTY4My1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jOjY4NDpcXHRcXHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcXG5tbS9kYW1vbi92YWRkci5jLTY4NS1cXHRcXHRcXHRcXHRtaWdyYXRpb25fbGlzdHMpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03MjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc0MC1cXG5tbS9kYW1vbi92YWRkci5jOjc0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG5tbS9kYW1vbi92YWRkci5jLTc0Mi1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc0NS1cXHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XFxubW0vZGFtb24vdmFkZHIuYzo3NDY6XFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSBwcml2O1xcbm1tL2RhbW9uL3ZhZGRyLmMtNzQ3LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03NTMtXFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6NzU0OlxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcXG5tbS9kYW1vbi92YWRkci5jLTc1NS1cXHRcXHQucHRlX2VudHJ5ID0gTlVMTCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzg2LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Nzg3OnN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUge1xcbm1tL2RhbW9uL3ZhZGRyLmMtNzg4LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03OTEtXFxubW0vZGFtb24vdmFkZHIuYzo3OTI6c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi92YWRkci5jLTc5My1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc5Ny1cXG5tbS9kYW1vbi92YWRkci5jOjc5ODpzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9kYW1vbi92YWRkci5jLTc5OS1cXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbm1tL2RhbW9uL3ZhZGRyLmMtODAwLXtcXG5tbS9kYW1vbi92YWRkci5jOjgwMTpcXHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlICpwcml2ID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5tbS9kYW1vbi92YWRkci5jLTgwMi1cXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVxcdTAwM2VzY2hlbWU7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgxOS1cXG5tbS9kYW1vbi92YWRkci5jOjgyMDpcXHRcXHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXFxubW0vZGFtb24vdmFkZHIuYy04MjEtXFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9kYW1vbi92YWRkci5jLTgyMi1cXG5tbS9kYW1vbi92YWRkci5jOjgyMzpcXHRcXHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgTlVMTCwgcG1kKSlcXG5tbS9kYW1vbi92YWRkci5jLTgyNC1cXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODQ2LVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODQ3OlxcdFxcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcXG5tbS9kYW1vbi92YWRkci5jLTg0OC1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jLTg0OS1cXG5tbS9kYW1vbi92YWRkci5jOjg1MDpcXHRcXHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcXG5tbS9kYW1vbi92YWRkci5jLTg1MS1cXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODU5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODYwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbm1tL2RhbW9uL3ZhZGRyLmMtODYxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODYzLXtcXG5tbS9kYW1vbi92YWRkci5jOjg2NDpcXHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlIHByaXY7XFxubW0vZGFtb24vdmFkZHIuYy04NjUtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxubW0vZGFtb24vdmFkZHIuYy04NjYtXFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3OlxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9zdGF0X3BtZF9lbnRyeSxcXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cXHR9O1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz04ODU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fdmFfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTExLVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbm1tL2RhbW9uL3ZhZGRyLmM6OTEyOlxcdFxcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vdmFkZHIuYy05MTMtXFx0Y2FzZSBEQU1PU19TVEFUOlxcbm1tL2RhbW9uL3ZhZGRyLmM6OTE0OlxcdFxcdHJldHVybiBkYW1vc192YV9zdGF0KHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vdmFkZHIuYy05MTUtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NTA6MzYuODU1ODI0MTM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0MzAzMjY2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIENvcmUgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIERBTU9OIGNvcmUgYmV0dGVyLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpZGVudGlmeSB3aGljaCBzeW1ib2xzIHdpdGhpbiB0aGUgREFNT04gY29yZSBjb21wb25lbnRzIChgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBgbW0vZGFtb24vdmFkZHIuY2AsIGFuZCBgbW0vZGFtb24vc3lzZnMuY2ApIGFyZSAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbW9kdWxlJ3MgZXhwb3NlZCBpbnRlcmZhY2VzIGFuZCBob3cgdGhlc2UgdmFyaW91cyBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgd2l0aCBvdGhlciBEQU1PTiBjb21wb25lbnRzIGFzIHdlbGwuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBvZiBlYWNoIGNvbXBvbmVudCBhbmQgcGlucG9pbnQgdGhlIG5vbi1zdGF0aWMgc3ltYm9scyByZWxhdGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyAocGFkZHIpLCB2aXJ0dWFsIGFkZHJlc3NlcyAodmFkZHIpLCBhbmQgdGhlIHN5c2ZzL2t1bml0IGludGVyZmFjZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIGVpdGhlciBkZWJ1Z2dpbmcgdGhlIG1vZHVsZSwgdW5kZXJzdGFuZGluZyB0aGUgZXhwb3NlZCBjYXBhYmlsaXRpZXMsIG9yIGludGVncmF0aW5nL2V4dGVuZGluZyB0aGUgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MTowMS4yODYxNTYxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDYyNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25ffF52b2lkIGRhbW9uX3xkYW1vc19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyNjc5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxcbm1tL2RhbW9uL2NvcmUuYy03Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXFxubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTk5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI4LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTMwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDMtXFxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTE0NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc0LVxcbm1tL2RhbW9uL2NvcmUuYzoxNzU6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzctICovXFxubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01NjgtXFxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtNTcwLVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxubW0vZGFtb24vY29yZS5jLTU3MS17XFxubW0vZGFtb24vY29yZS5jOjU3MjpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxubW0vZGFtb24vY29yZS5jLTU3My1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01ODQtLyoqXFxubW0vZGFtb24vY29yZS5jOjU4NTogKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxcbm1tL2RhbW9uL2NvcmUuYy01ODYtICogQHR5cGU6XFx0dHlwZSBvZiB0aGUgZmlsdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTU5MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTkxOmJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbm1tL2RhbW9uL2NvcmUuYy01OTIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYwMi1cXG5tbS9kYW1vbi9jb3JlLmM6NjAzOnZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTYwNC17XFxubW0vZGFtb24vY29yZS5jOjYwNTpcXHRpZiAoZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZi1cXHUwMDNldHlwZSkpXFxubW0vZGFtb24vY29yZS5jLTYwNi1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZmLVxcdTAwM2VsaXN0LCBcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYxMC1cXG5tbS9kYW1vbi9jb3JlLmM6NjExOnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtNjEyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MTUtXFxubW0vZGFtb24vY29yZS5jOjYxNjpzdGF0aWMgdm9pZCBkYW1vc19mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02MTcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyMC1cXG5tbS9kYW1vbi9jb3JlLmM6NjIxOnZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtNjIyLXtcXG5tbS9kYW1vbi9jb3JlLmM6NjIzOlxcdGRhbW9zX2RlbF9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jOjYyNDpcXHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcXG5tbS9kYW1vbi9jb3JlLmMtNjI1LX1cXG5tbS9kYW1vbi9jb3JlLmMtNjI2LVxcbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYzo2Mjg6XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxubW0vZGFtb24vY29yZS5jLTYyOS1cXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcXG5tbS9kYW1vbi9jb3JlLmMtNjMwLXtcXG5tbS9kYW1vbi9jb3JlLmM6NjMxOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy02MzItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjQxLVxcbm1tL2RhbW9uL2NvcmUuYzo2NDI6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy02NDMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTY0Ni1cXG5tbS9kYW1vbi9jb3JlLmM6NjQ3OnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy02NDgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTY1MS1cXG5tbS9kYW1vbi9jb3JlLmM6NjUyOnN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNjUzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02NTYtXFxubW0vZGFtb24vY29yZS5jOjY1Nzp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNjU4LXtcXG5tbS9kYW1vbi9jb3JlLmM6NjU5OlxcdGRhbW9zX2RlbF9xdW90YV9nb2FsKGcpO1xcbm1tL2RhbW9uL2NvcmUuYzo2NjA6XFx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKGcpO1xcbm1tL2RhbW9uL2NvcmUuYy02NjEtfVxcbm1tL2RhbW9uL2NvcmUuYy02NjItXFxubW0vZGFtb24vY29yZS5jOjY2MzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9nb2Fsc19lbXB0eShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEpXFxubW0vZGFtb24vY29yZS5jLTY2NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjY4LS8qIGluaXRpYWxpemUgZmllbGRzIG9mIEBxdW90YSB0aGF0IG5vcm1hbGx5IEFQSSB1c2VycyB3b3VsZG4ndCBzZXQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6NjY5OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG5tbS9kYW1vbi9jb3JlLmMtNjcwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODEtXFxubW0vZGFtb24vY29yZS5jOjY4MjpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYzo2ODM6XFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbm1tL2RhbW9uL2NvcmUuYy02ODQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcXG5tbS9kYW1vbi9jb3JlLmM6Njg1OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxubW0vZGFtb24vY29yZS5jOjY4NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbm1tL2RhbW9uL2NvcmUuYy02ODctXFx0XFx0XFx0aW50IHRhcmdldF9uaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZW9wc19maWx0ZXJzKTtcXG5tbS9kYW1vbi9jb3JlLmM6NzA2OlxcdHNjaGVtZS1cXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcXG5tbS9kYW1vbi9jb3JlLmMtNzA3LVxcdHNjaGVtZS1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzEwLVxcbm1tL2RhbW9uL2NvcmUuYzo3MTE6XFx0c2NoZW1lLVxcdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO1xcbm1tL2RhbW9uL2NvcmUuYy03MTItXFx0LyogcXVvdGEuZ29hbHMgc2hvdWxkIGJlIHNlcGFyYXRlbHkgc2V0IGJ5IGNhbGxlciAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTcxNy1cXG5tbS9kYW1vbi9jb3JlLmM6NzE4OlxcdHNjaGVtZS1cXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcXG5tbS9kYW1vbi9jb3JlLmMtNzE5LVxcdHNjaGVtZS1cXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzIzLVxcbm1tL2RhbW9uL2NvcmUuYzo3MjQ6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy03MjUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTczNC1cXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcXG5tbS9kYW1vbi9jb3JlLmMtNzM3LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnMtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXNjaGVtZXMpO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzg6XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTczOS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NzQ2PXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NTAtXFxubW0vZGFtb24vY29yZS5jOjc1MTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzUyLXtcXG5tbS9kYW1vbi9jb3JlLmM6NzUzOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbm1tL2RhbW9uL2NvcmUuYzo3NTQ6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZiwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTc1NS1cXG5tbS9kYW1vbi9jb3JlLmM6NzU2OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZzLVxcdTAwM2VxdW90YSlcXG5tbS9kYW1vbi9jb3JlLmM6NzU3OlxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChnKTtcXG5tbS9kYW1vbi9jb3JlLmMtNzU4LVxcbm1tL2RhbW9uL2NvcmUuYzo3NTk6XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShmLCBuZXh0LCBzKVxcbm1tL2RhbW9uL2NvcmUuYzo3NjA6XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jLTc2MS1cXG5tbS9kYW1vbi9jb3JlLmM6NzYyOlxcdGRhbW9zX2Zvcl9lYWNoX29wc19maWx0ZXJfc2FmZShmLCBuZXh0LCBzKVxcbm1tL2RhbW9uL2NvcmUuYzo3NjM6XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jLTc2NC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6NzkzOnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTc5NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODAzPXN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDctXFxubW0vZGFtb24vY29yZS5jOjgwODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTgwOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODE2LVxcbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTgxOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODcyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODc5LVxcbm1tL2RhbW9uL2NvcmUuYzo4ODA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTg4MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNDctICovXFxubW0vZGFtb24vY29yZS5jOjEwNDg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxubW0vZGFtb24vY29yZS5jLTEwNDkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwODEtXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGN0eClcXG5tbS9kYW1vbi9jb3JlLmM6MTA4MjpcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTA4My1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVxcdFxcdFxcdHNzaXplX3QgbnJfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjExMDk6XFx0XFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcXG5tbS9kYW1vbi9jb3JlLmMtMTExMC17XFxubW0vZGFtb24vY29yZS5jOjExMTE6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTExMTItXFx0aW50IGkgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTEzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTE0OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcSkge1xcbm1tL2RhbW9uL2NvcmUuYy0xMTE1LVxcdFxcdGlmIChpKysgPT0gbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTIwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYzoxMTIyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExMjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMzgtXFxubW0vZGFtb24vY29yZS5jOjExMzk6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjExNDA6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTE0MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTQ3OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE0OC19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTE1MTogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTUyLSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTYyOmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTE2NDpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcXG5tbS9kYW1vbi9jb3JlLmMtMTE2NS1cXHRpbnQgaSA9IDAsIGogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTY2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTY3OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7XFxubW0vZGFtb24vY29yZS5jOjExNjg6XFx0XFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpKyssIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExNjktXFx0XFx0aWYgKHNyY19nb2FsKVxcbm1tL2RhbW9uL2NvcmUuYzoxMTcwOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExNzEtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMTcyOlxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExNzMtXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoxMTc0OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jLTExNzUtXFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxubW0vZGFtb24vY29yZS5jLTExNzYtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjExNzc6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE3OC1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTgwLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jOjExODI6XFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExODMtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODYtXFxubW0vZGFtb24vY29yZS5jOjExODc6c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTg4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTkzLVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMTk0OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExOTUtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjA1LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjA2OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfY29yZV9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMTIwNy17XFxubW0vZGFtb24vY29yZS5jOjEyMDg6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjA5LVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTIxMC1cXG5tbS9kYW1vbi9jb3JlLmM6MTIxMTpcXHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTIxMi1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIxNy1cXG5tbS9kYW1vbi9jb3JlLmM6MTIxODpzdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX29wc19maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMTIxOS17XFxubW0vZGFtb24vY29yZS5jOjEyMjA6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjIxLVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTIyMi1cXG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcXHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyKGZpbHRlciwgcykge1xcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVxcdFxcdGlmIChpKysgPT0gbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjI5LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjMwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxcbm1tL2RhbW9uL2NvcmUuYzoxMjMxOlxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjMyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjUwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjUxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXIoXFxubW0vZGFtb24vY29yZS5jOjEyNTI6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyNTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNTYtXFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxubW0vZGFtb24vY29yZS5jOjEyNTc6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjU4LX1cXG5tbS9kYW1vbi9jb3JlLmMtMTI1OS1cXG5tbS9kYW1vbi9jb3JlLmM6MTI2MDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkc3RfZmlsdGVyLCAqbmV4dCwgKnNyY19maWx0ZXIsICpuZXdfZmlsdGVyO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjYzLVxcdGludCBpID0gMCwgaiA9IDA7XFxubW0vZGFtb24vY29yZS5jLTEyNjQtXFxubW0vZGFtb24vY29yZS5jOjEyNjU6XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShkc3RfZmlsdGVyLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI2NjpcXHRcXHRzcmNfZmlsdGVyID0gZGFtb3NfbnRoX2NvcmVfZmlsdGVyKGkrKywgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI2Ny1cXHRcXHRpZiAoc3JjX2ZpbHRlcilcXG5tbS9kYW1vbi9jb3JlLmM6MTI2ODpcXHRcXHRcXHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjY5LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MTI3MDpcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihkc3RfZmlsdGVyKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3MS1cXHR9XFxubW0vZGFtb24vY29yZS5jLTEyNzItXFxubW0vZGFtb24vY29yZS5jOjEyNzM6XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShzcmNfZmlsdGVyLCBuZXh0LCBzcmMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3NC1cXHRcXHRpZiAoaisrIFxcdTAwM2MgaSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjc2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjc3OlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMjc4LVxcdFxcdFxcdFxcdHNyY19maWx0ZXItXFx1MDAzZXR5cGUsIHNyY19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyODEtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEyODI6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jOjEyODM6XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjg0LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjg3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjg4OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTI4OS17XFxubW0vZGFtb24vY29yZS5jOjEyOTA6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0X2ZpbHRlciwgKm5leHQsICpzcmNfZmlsdGVyLCAqbmV3X2ZpbHRlcjtcXG5tbS9kYW1vbi9jb3JlLmMtMTI5MS1cXHRpbnQgaSA9IDAsIGogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjkyLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjkzOlxcdGRhbW9zX2Zvcl9lYWNoX29wc19maWx0ZXJfc2FmZShkc3RfZmlsdGVyLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI5NDpcXHRcXHRzcmNfZmlsdGVyID0gZGFtb3NfbnRoX29wc19maWx0ZXIoaSsrLCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjk1LVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk2OlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEyOTctXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk4OlxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGRzdF9maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjk5LVxcdH1cXG5tbS9kYW1vbi9jb3JlLmMtMTMwMC1cXG5tbS9kYW1vbi9jb3JlLmM6MTMwMTpcXHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyX3NhZmUoc3JjX2ZpbHRlciwgbmV4dCwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jLTEzMDItXFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTMwNTpcXHRcXHRuZXdfZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihcXG5tbS9kYW1vbi9jb3JlLmMtMTMwNi1cXHRcXHRcXHRcXHRzcmNfZmlsdGVyLVxcdTAwM2V0eXBlLCBzcmNfZmlsdGVyLVxcdTAwM2VtYXRjaGluZyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzA5LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzEwOlxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKG5ld19maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzExOlxcdFxcdGRhbW9zX2FkZF9maWx0ZXIoZHN0LCBuZXdfZmlsdGVyKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTMxMi1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMxNi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTMxNzogKiBkYW1vc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KCkgLSBkZWNpZGUgd2hldGhlciB0byByZWplY3QgbWVtb3J5IHRoYXQgZGlkbid0XFxubW0vZGFtb24vY29yZS5jLTEzMTgtICpcXHRcXHRcXHRcXHQgICAgbWF0Y2ggd2l0aCBhbnkgZ2l2ZW4gZmlsdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMjAtICovXFxubW0vZGFtb24vY29yZS5jOjEzMjE6c3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgbGlzdF9oZWFkICpmaWx0ZXJzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzIyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTMyMzpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpsYXN0X2ZpbHRlcjtcXG5tbS9kYW1vbi9jb3JlLmMtMTMyNC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzI2LVxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTMyNzpcXHRsYXN0X2ZpbHRlciA9IGxpc3RfbGFzdF9lbnRyeShmaWx0ZXJzLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyLCBsaXN0KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTMyOC1cXHRyZXR1cm4gbGFzdF9maWx0ZXItXFx1MDAzZWFsbG93O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMzAtXFxubW0vZGFtb24vY29yZS5jOjEzMzE6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzMyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzM2LVxcdFxcdHMtXFx1MDAzZWNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCA9XFxubW0vZGFtb24vY29yZS5jOjEzMzc6XFx0XFx0XFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcXHUwMDI2cy1cXHUwMDNlY29yZV9maWx0ZXJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTMzOC1cXHRzLVxcdTAwM2VvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCA9XFxubW0vZGFtb24vY29yZS5jOjEzMzk6XFx0XFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzQwLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzQyPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM3MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoxMzcxOiAqIGRhbW9zX2NvbW1pdF9kZXN0cygpIC0gQ29weSBtaWdyYXRpb24gZGVzdGluYXRpb25zIGZyb20gQHNyYyB0byBAZHN0Llxcbm1tL2RhbW9uL2NvcmUuYy0xMzcyLSAqIEBkc3Q6XFx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzg2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMzg3OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2Rlc3RzKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkc3QsXFxubW0vZGFtb24vY29yZS5jOjEzODg6XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTM4OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQxNy1cXG5tbS9kYW1vbi9jb3JlLmM6MTQxODpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTQxOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQyMS1cXG5tbS9kYW1vbi9jb3JlLmM6MTQyMjpcXHRlcnIgPSBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQyMy1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDI0LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE0MjU6XFx0ZXJyID0gZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQyNi1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDI3LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE0Mjg6XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoZHN0KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQyOS1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDQzLVxcbm1tL2RhbW9uL2NvcmUuYzoxNDQ0OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTQ0NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ1MjpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdC1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmMtXFx1MDAzZXF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1My1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NTgtXFxubW0vZGFtb24vY29yZS5jOjE0NTk6XFx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFxcdTAwMjZkc3QtXFx1MDAzZW1pZ3JhdGVfZGVzdHMsIFxcdTAwMjZzcmMtXFx1MDAzZW1pZ3JhdGVfZGVzdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDYwLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ2Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcXHRlcnIgPSBkYW1vc19jb21taXRfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE0NjQtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDcxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ3OC1cXHRcXHRpZiAoc3JjX3NjaGVtZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNDc5OlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdChkc3Rfc2NoZW1lLCBzcmNfc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ4MC1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0OTYtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE0OTc6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0KG5ld19zY2hlbWUsIHNyY19zY2hlbWUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDk4LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzUxPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTQtXFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxubW0vZGFtb24vY29yZS5jOjE3NTU6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTE3NTYtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc2My1cXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBzcmMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTc2NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTE3NjUtXFxubW0vZGFtb24vY29yZS5jOjE3NjY6XFx0XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xcbm1tL2RhbW9uL2NvcmUuYy0xNzY3LVxcdFxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MzctICovXFxubW0vZGFtb24vY29yZS5jOjE4Mzg6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4Mzkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NTctICovXFxubW0vZGFtb24vY29yZS5jOjE4NTg6aW50IGRhbW9uX25yX3J1bm5pbmdfY3R4cyh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0xODU5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTU3PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB2b2lkIF9fZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjAzOTp2b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDU0PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2OS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA3MDppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0yMDcxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTA1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTA2OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjEwNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjEzNC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjEzNTogKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxcbm1tL2RhbW9uL2NvcmUuYy0yMTM2LSAqIEBjdHg6XFx0REFNT04gY29udGV4dCB0byBjYWxsIHRoZSBmdW5jdGlvbnMgZm9yLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNDQtICoganVzdCBhZnRlciBpdCBhcHBsaWVkIGFueSBEQU1PUyBhY3Rpb25zIG9mIEBjdHggdG8gaXQuICBUaGUgaW52b2NhdGlvbiBpc1xcbm1tL2RhbW9uL2NvcmUuYzoyMTQ1OiAqIG1hZGUgb25seSB3aXRoaW4gb25lIFxcdTAwMjZkYW1vcy1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgc2luY2UgZGFtb3Nfd2FsaygpXFxubW0vZGFtb24vY29yZS5jLTIxNDYtICogaW52b2NhdGlvbiwgZm9yIGVhY2ggc2NoZW1lLiAgVGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBoZW5jZSBzYWZlbHlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTUwLSAqIHBhc3NlZCBhdCBsZWFzdCBvbmUgXFx1MDAyNmRhbW9zLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywga2RhbW9uZCBtYXJrcyB0aGUgcmVxdWVzdCBhc1xcbm1tL2RhbW9uL2NvcmUuYzoyMTUxOiAqIGNvbXBsZXRlZCBzbyB0aGF0IGRhbW9zX3dhbGsoKSBjYW4gd2FrZXVwIGFuZCByZXR1cm4uXFxubW0vZGFtb24vY29yZS5jLTIxNTItICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTU5OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjI1ND1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNzUtXFxubW0vZGFtb24vY29yZS5jOjIyNzY6c3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYy0yMjc3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI5MS0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMjkyOiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXFxubW0vZGFtb24vY29yZS5jLTIyOTMtICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMjk3OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk4LXtcXG5tbS9kYW1vbi9jb3JlLmMtMjI5OS1cXHRyZXR1cm4gcXVvdGEtXFx1MDAzZWVzeiB8fCBxdW90YS1cXHUwMDNlc3ogfHwgcXVvdGEtXFx1MDAzZW1zIHx8XFxubW0vZGFtb24vY29yZS5jOjIzMDA6XFx0XFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjMwMS19XFxubW0vZGFtb24vY29yZS5jLTIzMDItXFxubW0vZGFtb24vY29yZS5jOjIzMDM6c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTIzMDQtXFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzA1LXtcXG5tbS9kYW1vbi9jb3JlLmM6MjMwNjpcXHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzA3LVxcbm1tL2RhbW9uL2NvcmUuYzoyMzA4OlxcdGlmICghcmV0IHx8ICFkYW1vc19xdW90YV9pc19zZXQoXFx1MDAyNnMtXFx1MDAzZXF1b3RhKSB8fCAhYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTIzMDktXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzE0LS8qXFxubW0vZGFtb24vY29yZS5jOjIzMTU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxubW0vZGFtb24vY29yZS5jLTIzMTYtICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMzOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjMzOTpzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTIzNDAtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MTowMS4zNTY2MjM2MjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU4OTgyOTQ0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBTeXNmcyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gYSB1c2VyIGludGVyYWN0cyB3aXRoIERBTU9OIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGltZSB0byBkaWcgaW4hIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgaGFuZGxlcyB0aG9zZSBzeXNmcyBpbnRlcmFjdGlvbnMsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBtbS9kYW1vbi9zeXNmcy5jYC4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgREFNT04ncyBmdW5jdGlvbmFsaXR5IGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdXNlciBjb21tYW5kcyBhcmUgaW50ZXJwcmV0ZWQgYW5kIGV4ZWN1dGVkIHdpdGhpbiB0aGUgREFNT04gZnJhbWV3b3JrLiBTaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgam91cm5leSwgaG9wZWZ1bGx5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE5OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjUyOjE3LjI1NDkyMDgzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTg0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNTA5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MjA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGttYWxsb2Nfb2JqKCpyYW5nZSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0zMT1zdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMzMte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM0OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTM2LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NDA9c3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NDM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNDUtXFx0dW5zaWduZWQgbG9uZyBtaW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz01Nj1zdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02Ny17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXFx0dW5zaWduZWQgbG9uZyBtYXg7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NC19XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODctXFx0XFx0X19BVFRSX1JXX01PREUobWluLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MC1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkxLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0OlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTYtfTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5OTpjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAxLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAyOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDMtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDY6c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA3LVxcdFxcdGNoYXIgKm1lbWNnX3BhdGhfYnVmLCBjaGFyICpwYXRoKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzQtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM1OlxcdFxcdGlmIChkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKG1lbWNnLCBwYXRoLCBtZW1jZ19wYXRoKSkge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNi1cXHRcXHRcXHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6OTpleHRlcm4gc3RydWN0IG11dGV4IGRhbW9uX3N5c2ZzX2xvY2s7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTE6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOC1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOS1cXHRcXHR1bnNpZ25lZCBsb25nIG1heCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MjA6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjI4OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yOS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjMwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2FycjtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQwOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTI6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDI9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcmVnaW9uX3JtX2RpcnMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwOT1zdGF0aWMgc3NpemVfdCBzdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEyOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjE0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjc9c3RhdGljIHNzaXplX3QgbnJfYWNjZXNzZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjM2PXN0YXRpYyBzc2l6ZV90IGFnZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQ3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjYyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN0YXJ0LCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2VuZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY2LVxcdFxcdF9fQVRUUl9ST19NT0RFKGVuZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY5LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVxcdFxcdF9fQVRUUl9ST19NT0RFKGFnZSwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc0OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zel9maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzUtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfZmlsdGVyX3Bhc3NlZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3OTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODA6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODE6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODMtXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODg6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MS19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk3OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDU6ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA3OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGttYWxsb2Nfb2JqKCpyZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxOT1zdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzIzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnIsICpuZXh0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQzLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ0OlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ1LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ4LVxcdFxcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUzLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OC1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTk6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjAtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM2NjpzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4MS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM5Mj1zdGF0aWMgc3NpemVfdCBzel90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzk0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5Ny1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MDE9c3RhdGljIHNzaXplX3QgbnJfYXBwbGllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MDYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBzel9vcHNfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDI4PXN0YXRpYyBzc2l6ZV90IHF0X2V4Y2VlZHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDMzLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Mzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ0Nj1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQ4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQ5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NTU9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDYwLVxcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cywgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDcwOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcxLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc0LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Nzk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODAtXFx0XFx0X19BVFRSX1JPX01PREUobnJfYXBwbGllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfb3BzX2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShxdF9leGNlZWRzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5Mi1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXhfbnJfc25hcHNob3RzLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfdHJpZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTk6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X3RyaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMzpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA1OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA2LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNy19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDg6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3N0YXRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTE6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTItXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEzOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTIzPWVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1Mjk6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0MTpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Mi1cXHRcXHRlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcXHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cXHRpZiAoZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU5Mz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk4LVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTYyNz1zdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYzMi1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjUyPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU3LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY2MT1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjYtXFx0Ym9vbCBtYXRjaGluZztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NzY9c3RhdGljIHNzaXplX3QgYWxsb3dfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2Nzk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cXHRib29sIGFsbG93O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzAyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVxcdGludCBsZW47XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcxMC1cXHRcXHRcXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPyBmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggOiBcXFwiXFxcIik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXFx0cmV0dXJuIGxlbjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXFx0Y2hhciAqcGF0aCA9IGttYWxsb2NfYXJyYXkoc2l6ZV9hZGQoY291bnQsIDEpLCBzaXplb2YoKnBhdGgpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cXHRzdHJzY3B5KHBhdGgsIGJ1ZiwgY291bnQgKyAxKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzI3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzI4LVxcdFxcdGtmcmVlKHBhdGgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczMi1cXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPSBwYXRoO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MzM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM0LVxcdHJldHVybiBjb3VudDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03Mzc9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0Mi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NDY9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NTEtXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzU4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzYwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc2NT1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Njcte1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MjoxNy4zNTU1MDkxMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1Mjg5NDg3NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgREFNT04ncyBTeXNmcyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBrZXJuZWwgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBrZGFtb25kc2Agc3RhdGUgY29udHJvbC4gSSdtIGN1cmlvdXMgd2hhdCBoYXBwZW5zIHVuZGVyIHRoZSBob29kIHdoZW4gSSB3cml0ZSBcIm9uXCIgb3IgXCJjb21taXRcIiB0byB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLi9zdGF0ZWAgZmlsZS4gVGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcgLSB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhvc2Ugc3lzZnMgd3JpdGVzIGFuZCB0cmFuc2xhdGVzIHRoZW0gaW50byBEQU1PTidzIG9wZXJhdGlvbmFsIHN0YXRlIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBcIm9uXCIgYWN0aXZhdGVzIGEgbW9uaXRvciwgYW5kIHdoYXQgXCJjb21taXRcIiB0cnVseSBzaWduaWZpZXMgaW4gdGVybXMgb2YgY2hhbmdlcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIzMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU2OjAyLjY0NDk5OTQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIzNjQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwMy1cXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDUtXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU2OjAyLjY5MTU1NTE4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjcyNDcxODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzdGF0ZV9zdG9yZWAgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgREFNT04ncyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhdGVfc3RvcmVgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvcmUgb2YgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHJlbGF0ZWQgdG8gY2hhbmdpbmcgdGhlIG1vbml0b3IncyBvcGVyYXRpb25hbCBzdGF0ZSBpcyBpbXBsZW1lbnRlZC4gSSdtIHRoaW5raW5nIEknbGwgZmluZCB0aGUgbG9naWMgZm9yIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMgbGlrZSAncnVubmluZycsICdzdG9wcGVkJywgYW5kIGFueSBjdXN0b20gc3RhdGVzIERBTU9OIG1pZ2h0IHN1cHBvcnQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgYXR0cmlidXRlcyBjb25uZWN0IHRvIHRoZSBpbnRlcm5hbCBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZWNoYW5pc21zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyIGRpZmZlcmVudCBvcGVyYXRpb25hbCBiZWhhdmlvcnMgd2l0aGluIHRoZSBtb25pdG9yaW5nIGFuZCByZWNsYW1hdGlvbiBsb29wcy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgZXJyb3IgaGFuZGxpbmcgaGVyZTsgSSdsbCB3YW50IHRvIHNlZSBob3cgaW52YWxpZCBzdGF0ZSByZXF1ZXN0cyBvciBvdGhlciBpc3N1ZXMgYXJlIGRlYWx0IHdpdGguIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcm9idXN0IHRoZSBpbnRlcmZhY2UgaXMuIEZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIHN0YXRlIHZhcmlhYmxlIGFuZCBlbnN1cmUgYXRvbWljIHRyYW5zaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU2OjI4Ljk2NDAyOTQ5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzkwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzkwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuMjM5MTpcXHRcXHRcXHRcXHRrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzKTtcXG4yMzkyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxuMjM5MzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk0OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuMjM5NTpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzk2OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxuMjM5NzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk4OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcbjIzOTk6XFx0XFx0ZGVmYXVsdDpcXG4yNDAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0MDE6XFx0XFx0fVxcbjI0MDI6XFx0fVxcbjI0MDM6XFx0XFxuMjQwNDpcXHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjI0MDU6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMjQwNjpcXHR7XFxuMjQwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbjI0MDg6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xcbjI0MDk6XFx0XFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xcbjI0MTA6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbjI0MTE6XFx0XFxuMjQxMjpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjI0MTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNDE0OlxcdFxcdGZvciAoY21kID0gMDsgY21kIFxcdTAwM2MgTlJfREFNT05fU1lTRlNfQ01EUzsgY21kKyspIHtcXG4yNDE1OlxcdFxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XFxuMjQxNjpcXHRcXHRcXHRcXHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XFxuMjQxNzpcXHRcXHRcXHRcXHRicmVhaztcXG4yNDE4OlxcdFxcdFxcdH1cXG4yNDE5OlxcdFxcdH1cXG4yNDIwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XFxuMjQyMTpcXHRcXHRpZiAoIXJldClcXG4yNDIyOlxcdFxcdFxcdHJldCA9IGNvdW50O1xcbjI0MjM6XFx0XFx0cmV0dXJuIHJldDtcXG4yNDI0OlxcdH1cXG4yNDI1OlxcdFxcbjI0MjY6XFx0c3RhdGljIHNzaXplX3QgcGlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMjQyNzpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4yNDI4OlxcdHtcXG4yNDI5OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gY29udGFpbmVyX29mKGtvYmosXFxuMjQzMDpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCwga29iaik7XFxuMjQzMTpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMjQzMjpcXHRcXHRpbnQgcGlkID0gLTE7XFxuMjQzMzpcXHRcXG4yNDM0OlxcdFxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXFxuMjQzNTpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjI0MzY6XFx0XFx0Y3R4ID0ga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4O1xcbjI0Mzc6XFx0XFx0aWYgKCFjdHgpXFxuMjQzODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNDM5OlxcdFxcbjI0NDA6XFx0XFx0cGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcXG4yNDQxOlxcdFxcdGlmIChwaWQgXFx1MDAzYyAwKVxcbjI0NDI6XFx0XFx0XFx0cGlkID0gLTE7XFxuMjQ0MzpcXHRvdXQ6XFxuMjQ0NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjI0NDU6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHBpZCk7XFxuMjQ0NjpcXHR9XFxuMjQ0NzpcXHRcXG4yNDQ4OlxcdHN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4yNDQ5OlxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1NjoyOC45NjQyMTE3MDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQzODA4NTgxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhcyB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBcmUgdGhlc2UgZnVuY3Rpb25zIGFuZCBmZWF0dXJlcyByZWFjaGFibGUgYW5kIHRodXMsIHdvcnRoIGZ1enppbmc/XCIgWWVzLCBhYnNvbHV0ZWx5LiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbW9uaXRvcmluZyBhbmQgbWFuYWdlbWVudCBjb21wb25lbnRzIHdpdGhpbiBEQU1PTi4gR2l2ZW4gREFNT04ncyBhY2Nlc3NpYmlsaXR5IHZpYSBzeXNmcyBhbmQga2VybmVsIG1vZHVsZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZyb20gdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlLCBgY29yZS5jYCByZXF1aXJlcyBgQ09ORklHX0RBTU9OPXlgLCB3aGljaCBpcyBleHBlY3RlZC4gYHZhZGRyLmNgIHJlcXVpcmVzIGBDT05GSUdfREFNT05fVkFERFI9eWAsIHdoaWNoIGRlcGVuZHMgb24gYERBTU9OYCBhbmQgYE1NVWAuIFNpbWlsYXJseSwgYHBhZGRyLmNgIG5lZWRzIGBDT05GSUdfREFNT05fUEFERFI9eWAsIGFsc28gZGVwZW5kaW5nIG9uIGBEQU1PTmAgYW5kIGBNTVVgLiBGaW5hbGx5LCB0aGUgc3lzZnMgaW50ZXJmYWNlIG5lZWRzIGBDT05GSUdfREFNT05fU1lTRlM9eWAsIG5hdHVyYWxseSBkZXBlbmRpbmcgb24gYERBTU9OYCBhbmQgYFNZU0ZTYC4gVGhpcyBnaXZlcyB1cyBhIGdvb2QgcGljdHVyZSBvZiB0aGUgcHJlLXJlcXVpc2l0ZXMgZm9yIHRoZSBjb2RlIHRvIGJlIGNvbXBpbGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gREFNT04ncyBxdW90YSwgbWlncmF0aW9uLCBvciBtZW1jZyBmZWF0dXJlcywgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBmdW5jdGlvbnMgbGlrZSBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBhbnkgYERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUGAgb3IgYE1FTUNHYCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9ucyBiZWluZyBjaGFuZ2VkIGFuZCB0byBpZGVudGlmeSBwb3RlbnRpYWwgZWRnZSBjYXNlcyB0aGF0IGEgZnV6emVyIHNob3VsZCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NTc6MzMuMzQ1MDcyMjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ0ODAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yODA1PXN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODMyLVxcbm1tL2RhbW9uL2NvcmUuYzoyODMzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jLTI4MzQtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjk4Nz1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjk5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6Mjk5MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbm1tL2RhbW9uL2NvcmUuYy0yOTk0LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwMjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwNDMtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxubW0vZGFtb24vY29yZS5jOjMwNDQ6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwNDUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU3OjMzLjM4OTUyMzg4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkxNzEwOTM1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgY29kZSwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgcmVmbGVjdGlvbjpcblxuKipEQU1PTidzIE1lbW9yeSBBY2Nlc3MgUG9pbnQgRnVuY3Rpb25zKipcblxuT2theSwgZGl2aW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AsIEknbSBob21pbmcgaW4gb24gdGhlIGAjaWZkZWZgIGJsb2NrcyBzdXJyb3VuZGluZyBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IGhhdmUgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5LCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSdyZSBjb25kaXRpb25hbCBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIGFuZCB3aGF0IGNvbXBpbGUtdGltZSBvcHRpb25zIHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBsb2dpYy4gSSBrbm93IHRoZXNlIGFyZSBsaWtlbHkgdGhlIGJ1aWxkaW5nIGJsb2Nrcywgb3IgYWNjZXNzIHBvaW50cyBmb3IgbWVtb3J5IGFjY2VzcywgdXNlZCBpbiB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGZyYW1ld29yaywgYW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbmRpY2F0ZXMgc29tZSBkZWdyZWUgb2YgY29uZmlndXJhdGlvbiBmbGV4aWJpbGl0eS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlmZmVyZW50IG1lbW9yeSBub2RlIGNvbmZpZ3VyYXRpb25zLCBtZW1vcnkgY2dyb3VwIHN1cHBvcnQsIG9yIHBvc3NpYmx5IGV2ZW4gdGFyZ2V0IGFyY2hpdGVjdHVyZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGVmaW5lcyB0aGUgYnVpbGQgY29uZGl0aW9uLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHkgd2hlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgd2hlbiB0aGV5IGFyZW4ndC4gVGltZSB0byB0cmFjZSB0aG9zZSBwcmVwcm9jZXNzb3Igc3ltYm9scyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1OToyMi41NjA2MTk5NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODAwOlxcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcXG4yODAxOlxcdHtcXG4yODAyOlxcdFxcdHJldHVybiBuaWQgXFx1MDAzYyAwIHx8IG5pZCBcXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSk7XFxuMjgwMzpcXHR9XFxuMjgwNDpcXHRcXG4yODA1OlxcdHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4yODA2OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MDc6XFx0e1xcbjI4MDg6XFx0XFx0c3RydWN0IHN5c2luZm8gaTtcXG4yODA5OlxcdFxcdF9fa2VybmVsX3Vsb25nX3QgbnVtZXJhdG9yO1xcbjI4MTA6XFx0XFxuMjgxMTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjgxMjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgxMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODE0OlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXFxuMjgxNTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgxNjpcXHRcXHR9XFxuMjgxNzpcXHRcXG4yODE4OlxcdFxcdHNpX21lbWluZm9fbm9kZShcXHUwMDI2aSwgZ29hbC1cXHUwMDNlbmlkKTtcXG4yODE5OlxcdFxcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFxcdTAwM2MgaS5mcmVlcmFtKSB7XFxuMjgyMDpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgyMTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgyMjpcXHRcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4MjM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgyNDpcXHRcXHR9XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcXG4yODI3OlxcdFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XFxuMjgyODpcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4Mjk6XFx0XFx0XFx0bnVtZXJhdG9yID0gaS5mcmVlcmFtO1xcbjI4MzA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyhudW1lcmF0b3IsIDEwMDAwLCBpLnRvdGFscmFtKTtcXG4yODMxOlxcdH1cXG4yODMyOlxcdFxcbjI4MzM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4yODM0OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MzU6XFx0e1xcbjI4MzY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjI4Mzc6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjI4Mzg6XFx0XFx0dW5zaWduZWQgbG9uZyB1c2VkX3BhZ2VzLCBudW1lcmF0b3I7XFxuMjgzOTpcXHRcXHRzdHJ1Y3Qgc3lzaW5mbyBpO1xcbjI4NDA6XFx0XFxuMjg0MTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjg0MjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4yODQzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjI4NDQ6XFx0XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbjI4NDU6XFx0XFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbjI4NDY6XFx0XFx0fVxcbjI4NDc6XFx0XFxuMjg0ODpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoZ29hbC1cXHUwMDNlbWVtY2dfaWQpO1xcbjI4NDk6XFx0XFx0aWYgKCFtZW1jZykge1xcbjI4NTA6XFx0XFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxuMjg1MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODUyOlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG4yODUzOlxcdFxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4yODU0OlxcdFxcdH1cXG4yODU1OlxcdFxcbjI4NTY6XFx0XFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuMjg1NzpcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKGdvYWwtXFx1MDAzZW5pZCkpO1xcbjI4NTg6XFx0XFx0dXNlZF9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xcbjI4NTk6XFx0XFx0dXNlZF9wYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1OToyMi41NjA3OTE1MDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwNjE3NzQ2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgdGhvc2UgYGRhbW9zX2dldF9ub2RlX21lbV9icGAgYW5kIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCBmdW5jdGlvbnMuIExvb2tpbmcgYXQgbGluZXMgMjc4MC0yODA1IGFuZCAyOTgwLTMwMDAsIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgdGhhdCBjb250cm9sIHRoZWlyIGluY2x1c2lvbi4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBidWlsZCB0YXJnZXQsIG1heWJlIHNvbWV0aGluZyB0byBkbyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGdyYW51bGFyaXR5LCBvciBwZXJoYXBzIGV2ZW4gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHRoZW4gY29ycmVsYXRlIHRoYXQgd2l0aCB0aGUgcHJvamVjdCdzIGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb25zLCBhbmQgYnVpbGQgc2NyaXB0cy4gVW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4gb3B0aW1pemluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGlzIGNvZGUuIEl0IGNvdWxkIHBvaW50IHRvIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgcGF0aHMsIGRlYnVnIGZsYWdzLCBvciBldmVuIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHByZXByb2Nlc3NvciBpcyB1cCB0byFcblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjAwOjI1LjYyMjU2ODY3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0I2lmZGVmIENPTkZJR19QU0lcXG4yNzgxOlxcdFxcbjI3ODI6XFx0c3RhdGljIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxuMjc4MzpcXHR7XFxuMjc4NDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnBzaV9kaXNhYmxlZCkpXFxuMjc4NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNzg2OlxcdFxcdHJldHVybiBkaXZfdTY0KHBzaV9zeXN0ZW0udG90YWxbUFNJX0FWR1NdW1BTSV9NRU0gKiAyXSxcXG4yNzg3OlxcdFxcdFxcdFxcdE5TRUNfUEVSX1VTRUMpO1xcbjI3ODg6XFx0fVxcbjI3ODk6XFx0XFxuMjc5MDpcXHQjZWxzZVxcdC8qIENPTkZJR19QU0kgKi9cXG4yNzkxOlxcdFxcbjI3OTI6XFx0c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxcbjI3OTM6XFx0e1xcbjI3OTQ6XFx0XFx0cmV0dXJuIDA7XFxuMjc5NTpcXHR9XFxuMjc5NjpcXHRcXG4yNzk3OlxcdCNlbmRpZlxcdC8qIENPTkZJR19QU0kgKi9cXG4yNzk4OlxcdFxcbjI3OTk6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMjgwMDpcXHRzdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXFxuMjgwMTpcXHR7XFxuMjgwMjpcXHRcXHRyZXR1cm4gbmlkIFxcdTAwM2MgMCB8fCBuaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpO1xcbjI4MDM6XFx0fVxcbjI4MDQ6XFx0XFxuMjgwNTpcXHRzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxuMjgwNjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4yODA3OlxcdHtcXG4yODA4OlxcdFxcdHN0cnVjdCBzeXNpbmZvIGk7XFxuMjgwOTpcXHRcXHRfX2tlcm5lbF91bG9uZ190IG51bWVyYXRvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDA6MjUuNjIyNzI0OTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2MzAzMTA1MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gREFNT04sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjk4MC0zMDIwIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBMZXQncyBhc3N1bWUgSSdtIGRpZ2dpbmcgaW50byBhIHBlcmZvcm1hbmNlIGlzc3VlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc29tZSBhc3BlY3Qgb2YgdGhlIERBTU9OIG1vbml0b3Jpbmcvb3B0aW1pc2F0aW9uLiBGaXJzdCwgSSdtIGV4cGVjdGluZyB0byBzZWUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGEgYmxvY2sgb2YgY29kZSB3aXRoaW4gYSBmdW5jdGlvbi4gR2l2ZW4gdGhlIGZpbGUgYW5kIGxpa2VseSBzY29wZSBvZiBEQU1PTiwgSSBhbnRpY2lwYXRlIHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIG1vbml0b3JpbmcgYSByZWdpb24sIHBvdGVudGlhbGx5IHVwZGF0aW5nIHN0YXRzLCBvciBtYXliZSBldmVuIHRyaWdnZXJpbmcgc29tZSBhY3Rpb24gYmFzZWQgb24gREFNT04ncyBmZWVkYmFjay5cblxuSSdsbCBiZSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9yczogZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMsIGNhbGxzIHRvIG90aGVyIERBTU9OIGZ1bmN0aW9ucyAobGlrZSB0aGUgdXBkYXRlIG9yIGFjdGlvbiBmdW5jdGlvbnMpLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhlIHN1c3BlY3RlZCBwZXJmb3JtYW5jZSBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaWFibGVzIGJlaW5nIHVzZWQgYW5kIGhvdyB0aGV5J3JlIGJlaW5nIG1vZGlmaWVkLiBBcmUgdGhlcmUgYW55IGxvY2tzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3k/IEknbGwgcHJvYmFibHkgYmUgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBsb29wcyBvciBicmFuY2hlcy5cblxuVGhpcyBjb3VsZCBiZSB3aGVyZSBEQU1PTiBkZWNpZGVzIHRvIGluaXRpYXRlIHNvbWUga2luZCBvZiBhY3Rpb24gYmFzZWQgb24gdGhlIGlkZW50aWZpZWQgaG90IHJlZ2lvbnMuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgaWYgbm90LCBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgdXAgYW5kIGRvd24gdGhlIGNhbGwgc3RhY2sgdG8gcmVjb25zdHJ1Y3QgdGhlIHN0b3J5LiBJJ2xsIGFsc28gYmUgY2hlY2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtLiBJZiBpdCdzIGEgcGVyZm9ybWFuY2UgaXNzdWUsIEknbGwgYmUgbG9va2luZyBmb3IgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbnQgYWxnb3JpdGhtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjAxOjQxLjkyNTgzMjQ3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5ODA6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMjk4MTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIGludCBuaWQpXFxuMjk4MjpcXHR7XFxuMjk4MzpcXHRcXHRyZXR1cm4gMDtcXG4yOTg0OlxcdH1cXG4yOTg1OlxcdCNlbmRpZiAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cXG4yOTg2OlxcdCNlbHNlIC8qIENPTkZJR19OVU1BICovXFxuMjk4NzpcXHRzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxuMjk4ODpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4yOTg5OlxcdHtcXG4yOTkwOlxcdFxcdHJldHVybiAwO1xcbjI5OTE6XFx0fVxcbjI5OTI6XFx0XFxuMjk5MzpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbjI5OTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuMjk5NTpcXHR7XFxuMjk5NjpcXHRcXHRyZXR1cm4gMDtcXG4yOTk3OlxcdH1cXG4yOTk4OlxcdFxcbjI5OTk6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMzAwMDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIGludCBuaWQpXFxuMzAwMTpcXHR7XFxuMzAwMjpcXHRcXHRyZXR1cm4gMDtcXG4zMDAzOlxcdH1cXG4zMDA0OlxcdCNlbmRpZiAvKiBDT05GSUdfTlVNQSAqL1xcbjMwMDU6XFx0XFxuMzAwNjpcXHQvKlxcbjMwMDc6XFx0ICogUmV0dXJucyBMUlUtYWN0aXZlIG9yIGluYWN0aXZlIG1lbW9yeSB0byB0b3RhbCBMUlUgbWVtb3J5IHNpemUgcmF0aW8uXFxuMzAwODpcXHQgKi9cXG4zMDA5OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxuMzAxMDpcXHR7XFxuMzAxMTpcXHRcXHR1bnNpZ25lZCBsb25nIGFjdGl2ZSwgaW5hY3RpdmUsIHRvdGFsO1xcbjMwMTI6XFx0XFxuMzAxMzpcXHRcXHQvKiBUaGlzIHNob3VsZCBhbGlnbiB3aXRoIC9wcm9jL21lbWluZm8gb3V0cHV0ICovXFxuMzAxNDpcXHRcXHRhY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9BTk9OKSArXFxuMzAxNTpcXHRcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9GSUxFKTtcXG4zMDE2OlxcdFxcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9BTk9OKSArXFxuMzAxNzpcXHRcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0ZJTEUpO1xcbjMwMTg6XFx0XFx0dG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO1xcbjMwMTk6XFx0XFx0aWYgKGFjdGl2ZV9yYXRpbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDE6NDEuOTI2MDY0OTg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzAzMDUxMDcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEFQSSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLCBvYnZpb3VzbHkuIEFsc28sIGNvbnNpZGVyaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbXBsaWNhdGlvbnMsIEknbGwgbmVlZCB0byBjaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggTlVNQSwgc28gYE5VTUFgIGFuZCBtZW1vcnkgcXVvdGFzIGNvbWUgaW50byBwbGF5LCBhcyB3ZWxsIGFzIGBNRU1DR2AgZm9yIHF1b3RhIGdvYWxzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgYmFzZSBjb25maWd1cmF0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVzc2VudGlhbCBzeW1ib2xzIGFuZCBob3cgdGhleSdyZSBleHBvc2VkLiBNeSBwcmVmZXJlbmNlIGlzIGFsd2F5cyB0b3dhcmRzIHRoZSBtb3JlIGFjY2Vzc2libGUsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGFueSBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb3JlIGZ1bmN0aW9uIHBhdGhzLiBJbiBgY29yZS5jYCwgSSdsbCBzcGVjaWZpY2FsbHkgbG9vayBhdDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fY2FsbGAsIGBkYW1vc193YWxrYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9zZXRfYXR0cnNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LlxuXG5Ob3csIGZvciBgc3lzZnMuY2AsIEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaW5kIHRoZSBgc3lzZnNgIHNob3cvc3RvcmUgYXR0cmlidXRlcyBhbmQgYW55IHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEknbGwgZXhhbWluZSBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgd2hhdCBvdGhlciBub24tc3RhdGljIHN5bWJvbHMgYXJlIGV4cG9zZWQgdGhyb3VnaCB0aGUgYG1tL2RhbW9uYCBkaXJlY3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzQ0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDQ6MjguOTU2NTc4Mjg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYwNjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGRhbW9uX3xedm9pZCBkYW1vbl98XmludCBkYW1vc198XnZvaWQgZGFtb3NfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjgtXFxubW0vZGFtb24vY29yZS5jOjEyOTp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzOT1zdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0My1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzQtXFxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDc4OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy00NzktXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTU5MT1ib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MDItXFxubW0vZGFtb24vY29yZS5jOjYwMzp2b2lkIGRhbW9zX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02MDQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTYxNj1zdGF0aWMgdm9pZCBkYW1vc19mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyMC1cXG5tbS9kYW1vbi9jb3JlLmM6NjIxOnZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtNjIyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02Mjc9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY0MS1cXG5tbS9kYW1vbi9jb3JlLmM6NjQyOnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNjQzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02NTI9c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY1Ni1cXG5tbS9kYW1vbi9jb3JlLmM6NjU3OnZvaWQgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy02NTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTcyND1zdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzM0LVxcbm1tL2RhbW9uL2NvcmUuYzo3MzU6dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy03MzYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc0Nj1zdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxcbm1tL2RhbW9uL2NvcmUuYzo3NTE6dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTc1Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzc2PXN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTItXFxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgwMz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA3LVxcbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04MDkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNi1cXG5tbS9kYW1vbi9jb3JlLmM6ODE3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04MTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTg3Mj1zdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTg3OS1cXG5tbS9kYW1vbi9jb3JlLmM6ODgwOnZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDQ4OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVxcdFxcdFxcdHNzaXplX3QgbnJfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTM5PXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjEtICovXFxubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MDk9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzNy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTgzODppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTE4NTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXFxubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxubW0vZGFtb24vY29yZS5jLTE5NzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXFxubW0vZGFtb24vY29yZS5jLTIwNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDY5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNzEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXFxubW0vZGFtb24vY29yZS5jOjIxMDY6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMTA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTU5OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzk2ND1zdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5OTUtICovXFxubW0vZGFtb24vY29yZS5jOjM5OTY6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTk3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAyMTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcXG5tbS9kYW1vbi9jb3JlLmMtNDAyMi17XFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE0LSAqL1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MTU6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNi1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cClcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDo0NjppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0yND1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00MS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDI6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQzLXtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Mi1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzM6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTQ5LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNTA6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTk9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTczLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNzQ6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzUte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjExOnZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTMtYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTY1PXN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODE6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwNj1zdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTc6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZClcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9MTc9c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4KTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTIxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9MzQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM3PWV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzk6aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00My1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQ2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUyLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU3OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTgtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC02MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNjgwPXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4NTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4Ni17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTI5OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzAtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ1LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjM6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2NC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAwLSAqL1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTAxOnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE0ODppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ5LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowNDoyOS4wMDQxODc1MjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MzkyNTk5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gRnJhbWV3b3JrIFBhdGNoIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIERBTU9OIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEkgbmVlZCB0byBzZWUgaG93IHRoZSBleGVjdXRpb24gb2YgREFNT1Mgc2NoZW1lcyB3b3Jrcy4gSXQncyBjbGVhciB0aGF0IGBkYW1vc19hcHBseV9zY2hlbWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtkYW1vbmQgbG9vcCwgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGUgb3BlcmF0aW9ucyBmb3IgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSByZWdpc3RlcmVkIGFuZCBzZWxlY3RlZCBkeW5hbWljYWxseSwgYW5kIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgdGhlIG1vbml0b3JpbmcgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbi5cblxuTm93LCBsZXQncyBwaW5wb2ludCB0aGUgY3J1Y2lhbCBzeW1ib2xzIGZvciBmdXp6aW5nLiBgZGFtb25fc3RhcnRgLCBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jYWxsYCwgYGRhbW9zX3dhbGtgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBsb29rIGxpa2UgZXhjZWxsZW50IHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlaXIgcm9sZXMgaW4gaW5pdGlhbGl6aW5nLCBjb25maWd1cmluZywgYW5kIGFwcGx5aW5nIHNjaGVtZXMuXG5cbk5leHQsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gV2UgYWJzb2x1dGVseSBuZWVkIGBEQU1PTmAsIG5hdHVyYWxseS4gIFRoZW4gYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHZpdGFsIGZvciBlbmFibGluZyB0aGUgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLlxuXG5UbyBiZSB0aG9yb3VnaCwgbGV0J3MgcmV2aXNpdCB0aGUgS2NvbmZpZyBmaWxlLiAgSSBzZWUgYSBmZXcgbW9yZSBvcHRpb25zLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAsIGFsbCBjb25kaXRpb25hbCBvbiBgREFNT05fUEFERFJgLiBXb3J0aCBrZWVwaW5nIGluIG1pbmQgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy5cbkluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHJlZ2lvbiBzcGxpdHRpbmcsIG1lbW9yeSBib3VuZCBjaGVja3MsIGFuZCBhIGNydWNpYWwgZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gdGhlIGdvYWwgY2FsY3VsYXRpb24gbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IGNvcnJlY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIGEgZnJhbWV3b3JrIHRvdWNoaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBxdW90YS5cblxuSW4gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgdXBkYXRlcyB0byB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbiB1c2luZyBgUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKWAgZm9yIGZvbGlvcyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBjcml0aWNhbCB0byBtYWludGFpbiBhY2N1cmFjeS4gVGhpcyBtYWtlcyBzZW5zZS5cblxuRmluYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgIGNvcnJlY3RzIHRoZSBpdGVyYXRpb24gb3ZlciBQTUQgZW50cmllcywgZW5zdXJpbmcgY29ycmVjdCBzdHJpZGUgY2FsY3VsYXRpb25zIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLXBhZ2UgZm9saW9zIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuXG5cbkZyb20gdGhpcyByZXZpZXcsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gVGhlIGZpeGVzIHRhcmdldCBmdW5jdGlvbmFsIGJ1Z3MgYWZmZWN0aW5nIHRoZSBjb3JlIGxvZ2ljIG9mIERBTU9OLCBpbmNsdWRpbmcgdGhlIHN5c2ZzIGludGVyZmFjZSBhbmQgZXNzZW50aWFsIG1lbW9yeSBnb2FsIGNhbGN1bGF0aW9ucy4gVGhlIGxpc3RlZCBmdW5jdGlvbnMgYXJlIGFsbCBpbXBvcnRhbnQuXG5cbk15IFZlcmRpY3Q6XG4tIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4tIGBFbmFibGVDb25maWdzYDogYFtcIkRBTU9OXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9QQUREUlwiLCBcIkRBTU9OX1NZU0ZTXCJdYFxuLSBgRm9jdXNTeW1ib2xzYDogYFtcImRhbW9uX3N0YXJ0XCIsIFwiZGFtb25fY29tbWl0X2N0eFwiLCBcImRhbW9uX3NldF9zY2hlbWVzXCIsIFwiZGFtb25fY2FsbFwiLCBcImRhbW9zX3dhbGtcIiwgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXWBcbi0gYFJlYXNvbmluZ2A6IENvcnJlY3RzIGltcG9ydGFudCBmdW5jdGlvbmFsIGFuZCBtZW1vcnktcmVsYXRlZCBidWdzIGluIERBTU9OIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGNvcmUgREFNT04gZnVuY3Rpb25zLlxuXG5Ob3csIEknbGwgcGFzcyB0aGlzIGluZm9ybWF0aW9uIGFsb25nIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNDIsIk91dHB1dFRva2VucyI6MjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA0OjU5Ljg0MzQ1MDI1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTQ4ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiLFxuICAgIFwiZGFtb3Nfd2Fsa1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyBpbiBEQU1PTiBjb3JlLCBwaHlzaWNhbCBhZGRyZXNzIChwYWRkciksIGFuZCB2aXJ0dWFsIGFkZHJlc3MgKHZhZGRyKSBvcGVyYXRpb25zOiBoYW5kbGluZyByZWdpb24gc3BsaXR0aW5nIGZhaWx1cmUgaW4gZGFtb3NfYXBwbHlfc2NoZW1lLCBwcmV2ZW50aW5nIGRpdmlzaW9uIGJ5IHplcm8gYW5kIG91dC1vZi1yYW5nZSBxdW90YSBjYWxjdWxhdGlvbnMgaW4gbm9kZS9tZW1jZyBtZW1vcnkgcXVvdGEgZ29hbHMsIGZpeGluZyBmb2xpbyBhZGRyZXNzIGFkdmFuY2VtZW50IGluIHBhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChwYWdlb3V0LCBkZWFjdGl2YXRlLCBtaWdyYXRlLCBzdGF0KSwgYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyBQTUQgaXRlcmF0aW9uIHN0cmlkZXMgYWNyb3NzIG11bHRpLXBhZ2UgZm9saW9zIGluIHZhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChtaWdyYXRlLCBzdGF0KS4gQWxsIHRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9jYWxsXCIsXG4gICAgXCJkYW1vc193YWxrXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNldmVyYWwgZnVuY3Rpb25hbCBidWdzIGluIERBTU9OIGNvcmUsIHBoeXNpY2FsIGFkZHJlc3MgKHBhZGRyKSwgYW5kIHZpcnR1YWwgYWRkcmVzcyAodmFkZHIpIG9wZXJhdGlvbnM6IGhhbmRsaW5nIHJlZ2lvbiBzcGxpdHRpbmcgZmFpbHVyZSBpbiBkYW1vc19hcHBseV9zY2hlbWUsIHByZXZlbnRpbmcgZGl2aXNpb24gYnkgemVybyBhbmQgb3V0LW9mLXJhbmdlIHF1b3RhIGNhbGN1bGF0aW9ucyBpbiBub2RlL21lbWNnIG1lbW9yeSBxdW90YSBnb2FscywgZml4aW5nIGZvbGlvIGFkZHJlc3MgYWR2YW5jZW1lbnQgaW4gcGFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKHBhZ2VvdXQsIGRlYWN0aXZhdGUsIG1pZ3JhdGUsIHN0YXQpLCBhbmQgY29ycmVjdGx5IGNhbGN1bGF0aW5nIFBNRCBpdGVyYXRpb24gc3RyaWRlcyBhY3Jvc3MgbXVsdGktcGFnZSBmb2xpb3MgaW4gdmFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKG1pZ3JhdGUsIHN0YXQpLiBBbGwgdGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA0OjU5LjkyNTQwNjMzWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ3NjI4MzEyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowNDo1OS45MjU4Nzk3N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzNDc2MjM1Mzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxcbjEuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBpdCBhZGRzIGVycm9yIGNoZWNraW5nIGZvciBgZGFtb25fc3BsaXRfcmVnaW9uX2F0KClgIGFuZCBndWFyZHMgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvIGFuZCB1bmRlcmZsb3cgaW4gYGRhbW9zX2dldF9ub2RlX21lbV9icCgpYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoKWAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoKWAuXFxuMi4gSW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0IGZpeGVzIGFkZHJlc3MgYWR2YW5jZW1lbnQgYW5kIHN0ZXAtc2l6ZSBjYWxjdWxhdGlvbnMgd2hlbiBpdGVyYXRpbmcgb3ZlciBmb2xpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBpbnRlcmFjdCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgyY2U4M2ZlMjE3ZDJiNmQzMzdiYmUyYWNmMmU3NjJjMjUxOWFkMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNjozNjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uZjhkZGRiZmY3NGE3NyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjYxMyw3ICsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzeilcbiBcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4tXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcbitcdFx0XHRpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSlcbitcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4gXHRcdH1cbiBcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbiBcdFx0XHRyZXR1cm47XG5AQCAtMjgxNSw2ICsyODE2LDEzIEBAIHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbiBcdH1cbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4rXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgaS5mcmVlcmFtKSB7XG4rXHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuK1x0XHRcdHJldHVybiAxMDAwMDtcbitcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4gXHRcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XG4gXHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXG5AQCAtMjg1NSw2ICsyODYzLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG4gXHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuK1x0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXMpIHtcbitcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbitcdFx0XHRyZXR1cm4gMTAwMDA7XG4rXHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuIFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbiBcdFx0bnVtZXJhdG9yID0gdXNlZF9wYWdlcztcbiBcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuQEAgLTMwMDEsNyArMzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4gXHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfQUNUSVZFX0ZJTEUpO1xuIFx0aW5hY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0FOT04pICtcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9GSUxFKTtcbi1cdHRvdGFsID0gYWN0aXZlICsgaW5hY3RpdmU7XG4rXHR0b3RhbCA9IG1heChhY3RpdmUgKyBpbmFjdGl2ZSwgMSk7XG4gXHRpZiAoYWN0aXZlX3JhdGlvKVxuIFx0XHRyZXR1cm4gbXVsdF9mcmFjKGFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbiBcdHJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLjlkZGQxZWM4MjAyYjcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjY0LDcgKzI2NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0ZWxzZVxuIFx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9fbGlzdCk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcilcbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbkBAIC0zNTAsNyArMzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXHUwMDI2Zm9saW9fbGlzdCwgcy1cdTAwM2V0YXJnZXRfbmlkKTtcbkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0O1xuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDA2NDg0MDBiMmQ2NWIuLmM4YzMyYjJhZTA0MDIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNjY5LDYgKzY2OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxuIFx0XHRcdFx0bWlncmF0aW9uX2xpc3RzKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XG4rXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XG4gXHR9XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcbiBcdHJldHVybiAwO1xuQEAgLTgzMSw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRmb3IgKDsgYWRkciBcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4rXG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuIFxuQEAgLTg0NCw3ICs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0aWYgKCFkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB2bWEsIGFkZHIsIHB0ZSwgTlVMTCkpXG4gXHRcdFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0XHRwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpO1xuK1x0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xuIFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuIFx0fVxuIFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowNDo1OS45MjU4ODA3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDk5MzMyNjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBvdXQgS01TQU4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFrIGRhdGEuIEdpdmVuIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vZGFtb24vYCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcsIEkgbmVlZCB0byBmb2N1cyBvbiBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGNvdWxkIGJlIHJlYWQgb3IgcGFzc2VkIHRvIHVzZXJzcGFjZS5cblxuRmlyc3QsIEkgc2VlIHNldmVyYWwgY2hhbmdlcyBpbiBgbW0vZGFtb24vY29yZS5jYCB0aGF0IGxvb2sgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gb3IgdW5kZXJmbG93IGlzc3VlcyB3aXRoIGNoZWNrcyBmb3IgemVybyBvciBuZWdhdGl2ZSB2YWx1ZXMuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY2hlY2tzIGFyZSBleGhhdXN0aXZlLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBzdGF0aXN0aWNzLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nLCB3aGljaCBjb3VsZCBiZSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcywgYW5kIHRoZXNlIHR5cGVzIG9mIGNhbGN1bGF0aW9ucy4gSSBzZWUgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAgcmV0dXJuIHZhbHVlcyBjaGVja2VkIHdoaWNoIGlzIGZpbmUuIFRoZSBvdGhlciBjaGFuZ2VzIGRvbid0IHNlZW0gbGlrZSBtZW1vcnkgaXNzdWVzLlxuXG5UaGUgYG1tL2RhbW9uL3BhZGRyLmNgIGNoYW5nZXMgbG9vayBsaWtlIHRoZXkncmUgYWRkcmVzc2luZyBob3cgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSBjYWxjdWxhdGVkLCBwYXJ0aWN1bGFybHkgd2hlbiB3b3JraW5nIHdpdGggYGZvbGlvYCBzdHJ1Y3R1cmVzLiBBZGp1c3RpbmcgdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24gaW4gdGhlIGRpZmZlcmVudCBgZGFtb25fcGFfKmAgZnVuY3Rpb25zIG1ha2VzIHNlbnNlIHRvIGF2b2lkIG1pc2FsaWduZWQgYWNjZXNzZXMsIHN0ZXBwaW5nIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb2xpbyBpZiBuZWNlc3NhcnkuIFdoaWxlIG5lY2Vzc2FyeSwgdGhpcyBkb2Vzbid0IGltbWVkaWF0ZWx5IHN1Z2dlc3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuIEhvd2V2ZXIsIGFueSB0aW1lIHlvdSdyZSB3b3JraW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBhZGRyZXNzaW5nLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGVuc3VyaW5nIGFsbCBtZW1vcnkgaXMgY29ycmVjdGx5IGFsaWduZWQgYW5kIGFjY291bnRlZCBmb3IuIFRoaXMgaXMgd2hlcmUgSSdkIGdvIGJhY2sgYW5kIGluc3BlY3QgdGhlIGNvZGUgZm9yIGFueSBpbXBsaWNpdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgcG90ZW50aWFsIHJpc2tzLlxuXG5GaW5hbGx5LCB0aGUgYG1tL2RhbW9uL3ZhZGRyLmNgIGNoYW5nZXMgbG9vayBhdCBoYW5kbGluZyBQVEUgZW50cmllcyBhbmQgcG90ZW50aWFsbHkgZm9saW8gc3Bhbm5pbmcuIENvcnJlY3RpbmcgaG93IHRoZSByYW5nZSBpcyBoYW5kbGVkIHdpdGhpbiBhIGZvbGlvLCBhdm9pZGluZyBvdXQtb2YtYm91bmRzIFBURSBhY2Nlc3NlcywgaXMgYSBjbGVhciBpbXByb3ZlbWVudC4gVGhlIGBmb2xpb19wYWdlX2lkeGAsIGBmb2xpb19ucl9wYWdlc2AsIGFuZCB0aGUgY2FsY3VsYXRlZCBvZmZzZXRzIGFyZSBhcmVhcyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJIG11c3QgYmUgY2FyZWZ1bCB0byBlbnN1cmUgdGhhdCB0aGUgbG9naWMgY29ycmVjdGx5IGFjY291bnRzIGZvciBwYXJ0aWFsIGZvbGlvcywgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3Mgd2hlcmUgdGhlIFBURSBkb2Vzbid0IG1hcCBhIGZ1bGwgZm9saW8uIFRoaXMgaXMgdGhlIGxpa2VsaWVzdCBhcmVhIHRvIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBlc3BlY2lhbGx5IGlmIHdlIGhhdmUgcGFydGlhbCBtYXBwaW5ncywgYW5kIHRoZSBwYWdlIGlzbid0IGNvcnJlY3RseSBpbml0aWFsaXplZC5cblxuVG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBzY2FuIHRoaXMgcGF0Y2ggd2l0aCBgcmVhZC1maWxlYCBhbmQgYSBxdWljayBgZ3JlcHBlcmAgcGFzcyB0byBzZWFyY2ggZm9yIG1lbW9yeSBjb3B5IG9yIGFzc2lnbm1lbnQgcGF0dGVybnMgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA4OjM0LjkxOTIwOTI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyNTQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19nZXRfbm9kZV9tZW1fYnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI4MDA9c3RhdGljIGJvb2wgaW52YWxpZF9tZW1fbm9kZShpbnQgbmlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MDQtXFxubW0vZGFtb24vY29yZS5jOjI4MDU6c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbm1tL2RhbW9uL2NvcmUuYy0yODA2LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjk4Ni0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyOTg3OnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMjk4OC1cXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDI0PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDM5LVxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzA0MDpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtX2JwKGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMDQxLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowODozNC45NjM5NDAzMzlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI2Njk1MDc5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGV4YW1pbmF0aW9uLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIE1lbW9yeSBNZXRyaWNzKipcblxuUmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBEQU1PTiBpcyB0cmFja2luZyBtZW1vcnkgdXNhZ2UgYXQgdGhlIG5vZGUgYW5kIG1lbWNnIGxldmVscy4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSBmdW5jdGlvbnMgYGRhbW9zX2dldF9ub2RlX21lbV9icGAgYW5kIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgcHJvdmlkaW5nIHRoZSBtZW1vcnkgdXNhZ2UgZGF0YSB0aGF0IERBTU9OIGxldmVyYWdlcyBmb3IgaXRzIGFuYWx5c2lzLCBwcm9iYWJseSBmb3IgYmxvY2sgcHJvZmlsaW5nLiBMZXQncyBzZWUgaG93IHRoZXkgZ2V0IHRoZSBpbmZvcm1hdGlvbiwgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgYWNjZXNzLCBhbmQgaG93IHRoZSByZXN1bHRzIGFyZSBmb3JtYXR0ZWQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBtZXRob2RvbG9neSBhbmQgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGdldHMgdGhlIGRhdGEgaXQgbmVlZHMuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBob3cgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0aGUgY29kZSBpcywgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmFjY3VyYWNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowOTo1Ny42MzM0NTE0MzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODA1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODA1OlxcdHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4yODA2OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MDc6XFx0e1xcbjI4MDg6XFx0XFx0c3RydWN0IHN5c2luZm8gaTtcXG4yODA5OlxcdFxcdF9fa2VybmVsX3Vsb25nX3QgbnVtZXJhdG9yO1xcbjI4MTA6XFx0XFxuMjgxMTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjgxMjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgxMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODE0OlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXFxuMjgxNTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgxNjpcXHRcXHR9XFxuMjgxNzpcXHRcXG4yODE4OlxcdFxcdHNpX21lbWluZm9fbm9kZShcXHUwMDI2aSwgZ29hbC1cXHUwMDNlbmlkKTtcXG4yODE5OlxcdFxcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFxcdTAwM2MgaS5mcmVlcmFtKSB7XFxuMjgyMDpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgyMTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgyMjpcXHRcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4MjM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgyNDpcXHRcXHR9XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcXG4yODI3OlxcdFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XFxuMjgyODpcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4Mjk6XFx0XFx0XFx0bnVtZXJhdG9yID0gaS5mcmVlcmFtO1xcbjI4MzA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyhudW1lcmF0b3IsIDEwMDAwLCBpLnRvdGFscmFtKTtcXG4yODMxOlxcdH1cXG4yODMyOlxcdFxcbjI4MzM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4yODM0OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MzU6XFx0e1xcbjI4MzY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjI4Mzc6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjI4Mzg6XFx0XFx0dW5zaWduZWQgbG9uZyB1c2VkX3BhZ2VzLCBudW1lcmF0b3I7XFxuMjgzOTpcXHRcXHRzdHJ1Y3Qgc3lzaW5mbyBpO1xcbjI4NDA6XFx0XFxuMjg0MTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjg0MjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4yODQzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjI4NDQ6XFx0XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbjI4NDU6XFx0XFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbjI4NDY6XFx0XFx0fVxcbjI4NDc6XFx0XFxuMjg0ODpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoZ29hbC1cXHUwMDNlbWVtY2dfaWQpO1xcbjI4NDk6XFx0XFx0aWYgKCFtZW1jZykge1xcbjI4NTA6XFx0XFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxuMjg1MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODUyOlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG4yODUzOlxcdFxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4yODU0OlxcdFxcdH1cXG4yODU1OlxcdFxcbjI4NTY6XFx0XFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuMjg1NzpcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKGdvYWwtXFx1MDAzZW5pZCkpO1xcbjI4NTg6XFx0XFx0dXNlZF9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xcbjI4NTk6XFx0XFx0dXNlZF9wYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pO1xcbjI4NjA6XFx0XFx0dXNlZF9wYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcXG4yODYxOlxcdFxcdHVzZWRfcGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKTtcXG4yODYyOlxcdFxcbjI4NjM6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjI4NjQ6XFx0XFxuMjg2NTpcXHRcXHRzaV9tZW1pbmZvX25vZGUoXFx1MDAyNmksIGdvYWwtXFx1MDAzZW5pZCk7XFxuMjg2NjpcXHRcXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcXHUwMDNjIHVzZWRfcGFnZXMpIHtcXG4yODY3OlxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxcbjI4Njg6XFx0XFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbjI4Njk6XFx0XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbjI4NzA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjg3MTpcXHRcXHR9XFxuMjg3MjpcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4yODczOlxcdFxcdFxcdG51bWVyYXRvciA9IHVzZWRfcGFnZXM7XFxuMjg3NDpcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA5OjU3LjYzMzYxNTMzNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDAzNTA4NDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEluZm9ybWF0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBtZW1vcnkgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgc2lfbWVtaW5mb19ub2RlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIGZpbGxpbmcgdXAgdGhhdCBgc3RydWN0IHN5c2luZm8gaWAuIEl0IGxvb2tzIGxpa2UgYHNpX21lbWluZm9fbm9kZWAgZG9lcyB0aGUgaGVhdnkgbGlmdGluZywgaW5pdGlhbGl6aW5nIGBpYCDigJMgc3BlY2lmaWNhbGx5LCBJIHN1c3BlY3QgaXQncyByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyBmaWVsZHMgbGlrZSBgdG90YWxyYW1gLCBgZnJlZXJhbWAsIGFuZCBzbyBvbi4gTGlrZWx5IGEgY29tYmluYXRpb24gb2YgYG1lbXNldGAgYW5kIGRpcmVjdCBmaWVsZCBhc3NpZ25tZW50cyBhcmUgaW52b2x2ZWQuIEJlc3QgdG8ganVtcCByaWdodCBpbnRvIGV4YW1pbmluZyB0aGUgY29kZSBvZiBgc2lfbWVtaW5mb19ub2RlYC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDozMS42Njg3MDE2NjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODk4ODk1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBzaV9tZW1pbmZvX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTQxNTI9ZXh0ZXJuIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjQxNTM6ZXh0ZXJuIHZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC00MTU0LVxcbi0tXFxubW0vc2hvd19tZW0uYz04Nz1FWFBPUlRfU1lNQk9MKHNpX21lbWluZm8pO1xcbi0tXFxubW0vc2hvd19tZW0uYy04OS0jaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zaG93X21lbS5jOjkwOnZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpXFxubW0vc2hvd19tZW0uYy05MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjEwOjMzLjI1ODU5NTgzOVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjI0Mzg3NDI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgbW0vc2hvd19tZW0uYzo5MGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBsaW5lIDkwIGluIGBtbS9zaG93X21lbS5jYC4gSSdtIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbSdzIG1lbW9yeSB1c2FnZS4gS25vd2luZyB0aGUgZmlsZSBwYXRoLCBhbmQgdGhlIGZ1bmN0aW9uJ3MgbG9jYXRpb24sIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBjb3JlIHBpZWNlIG9mIGNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBob3cgbWVtb3J5IHN0YXRpc3RpY3MgYXJlIGdhdGhlcmVkIGFuZCBwcmVzZW50ZWQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2FsY3VsYXRpb25zIGhhcHBlbmluZyDigJMgYXJlIHRoZXkgYWNjdXJhdGUsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzLCBldGM/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBwb3RlbnRpYWwgaXNzdWVzKSBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTA6NTUuNTAyNDczMTA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Nob3dfbWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0dm9pZCBzaV9tZW1pbmZvX25vZGUoc3RydWN0IHN5c2luZm8gKnZhbCwgaW50IG5pZClcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdGludCB6b25lX3R5cGU7XFx0XFx0LyogbmVlZHMgdG8gYmUgc2lnbmVkICovXFxuICA5MzpcXHRcXHR1bnNpZ25lZCBsb25nIG1hbmFnZWRfcGFnZXMgPSAwO1xcbiAgOTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBtYW5hZ2VkX2hpZ2hwYWdlcyA9IDA7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVfaGlnaHBhZ2VzID0gMDtcXG4gIDk2OlxcdFxcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0Zm9yICh6b25lX3R5cGUgPSAwOyB6b25lX3R5cGUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmVfdHlwZSsrKSB7XFxuICA5OTpcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lc1t6b25lX3R5cGVdO1xcbiAxMDA6XFx0XFx0XFx0bWFuYWdlZF9wYWdlcyArPSB6b25lX21hbmFnZWRfcGFnZXMoem9uZSk7XFxuIDEwMTpcXHRcXHRcXHRpZiAoaXNfaGlnaG1lbSh6b25lKSkge1xcbiAxMDI6XFx0XFx0XFx0XFx0bWFuYWdlZF9oaWdocGFnZXMgKz0gem9uZV9tYW5hZ2VkX3BhZ2VzKHpvbmUpO1xcbiAxMDM6XFx0XFx0XFx0XFx0ZnJlZV9oaWdocGFnZXMgKz0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbiAxMDQ6XFx0XFx0XFx0fVxcbiAxMDU6XFx0XFx0fVxcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHR2YWwtXFx1MDAzZXRvdGFscmFtID0gbWFuYWdlZF9wYWdlcztcXG4gMTA4OlxcdFxcdHZhbC1cXHUwMDNlc2hhcmVkcmFtID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TSE1FTSk7XFxuIDEwOTpcXHRcXHR2YWwtXFx1MDAzZWZyZWVyYW0gPSBzdW1fem9uZV9ub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9GUkVFX1BBR0VTKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTA6NTUuNTAyNTQ4ODA0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MTg1NjY2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzLCBhcyBhbHdheXMsIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aXRoIHRoZXNlIGtpbmRzIG9mIGtlcm5lbCBwYXRjaGVzLiBgc2lfbWVtaW5mb19ub2RlYCBzZXRzIHRoZSBgdG90YWxyYW1gIGFuZCBgZnJlZXJhbWAgdmFsdWVzLCB3aGljaCBhcmUgbm93IGJlaW5nIHZhbGlkYXRlZCBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiAgVGhlIGNoZWNrcyBgIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgaS5mcmVlcmFtYCBhbmQgYCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXNgIGxvb2sgc29saWQuIEl0J3MgYSBjbGFzc2ljIGRlZmVuc2UgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvIGFuZCB0aG9zZSBuYXN0eSB1bmRlcmZsb3cgZXJyb3JzIHRoYXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zLiBHb29kIGNhdGNoIHRoZXJlLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG90aGVyIGNvbXBvbmVudHMgb2YgdGhpcyBwYXRjaDpcblxuKiAgIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opYCBoYXMgcmV0dXJuIHZhbHVlIGNoZWNrcywgd2hpY2ggaXMgZXNzZW50aWFsIHRvIGhhbmRsZSBhbnkgZXJyb3JzIGR1cmluZyBtZW1vcnkgcmVnaW9uIHNwbGl0dGluZy5cbiogICBJbiBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLCBgdG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO2AgcHJldmVudHMgZGl2aXNpb24gYnkgemVyby4gR29vZCBkZWZlbnNpdmUgY29kaW5nLlxuKiAgIGBkYW1vbi9wYWRkci5jYCBpcyBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgdGhlIG5leHQgYWRkcmVzcyBiYXNlZCBvbiB0aGUgYWN0dWFsIGZvbGlvIFBGTiByYXRoZXIgdGhhbiBhbiBhc3N1bWVkIGFsaWdubWVudCwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIGJ1Z3MuICBgYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7YCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IGFkZHJlc3MgbWlzY2FsY3VsYXRpb25zLlxuKiAgIGBkYW1vbi92YWRkci5jYCBjYWxjdWxhdGVzIHRoZSByZW1haW5pbmcgcGFnZXMgaW4gdGhlIGZvbGlvIGZyb20gdGhlIGN1cnJlbnQgUFRFIHVzaW5nIGBwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpOyBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O2AgVGhpcyBwcmV2ZW50cyBza2lwcGluZyBQVEVzIHdoZW4gdGhlIHN0YXJ0aW5nIGFkZHJlc3MgZmFsbHMgd2l0aGluIGEgbGFyZ2UgZm9saW8sIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBvZmYtYnktb25lIGVycm9ycyBhbmQgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb25zLlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcywgKm5vbmUqIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm8gdXNlIG9mIGZ1bmN0aW9ucyBzdWNoIGFzIGBwdXRfdXNlcmAsIGBjb3B5X3RvX3VzZXJgLCBldGMuLCBhcyBhbGwgdGhlc2UgZnVuY3Rpb25zIGFuZCBjYWxjdWxhdGlvbnMgYXJlIGludGVybmFsIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9ucyBhbmQgZm9saW8gdHJhdmVyc2FsLCB3aGljaCBpcyBnb29kLiBUaGVyZSBhcmUgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGlzIHRoZXJlIGFueSBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBNb3Jlb3ZlciwgSSBzZWUgbm8gYWx0ZXJhdGlvbiBvZiBleGlzdGluZyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgYXJlIGFsbCBzb2xpZCBidWcgZml4ZXM6IGFyaXRobWV0aWMgdW5kZXJmbG93L2RpdmlkZS1ieS16ZXJvIHByb3RlY3Rpb25zLCByZXR1cm4gY29kZSBjaGVja3MsIGFuZCBmb2xpbyBhZGRyZXNzL29mZnNldCBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIEkgZG9uJ3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTi4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gcGF0Y2gsIHdoaWNoIGhhcyBhZGRyZXNzZWQgdGhlIG1haW4gcG9pbnRzIHRoYXQgSSB3b3VsZCBleHBlY3QgdG8gaGF2ZSBiZWVuIGFkZHJlc3NlZC5cblxuT2theSwgbGV0J3MgcHJlcGFyZSB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzksIk91dHB1dFRva2VucyI6MjA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTI6MTQuNjg4MjE4MTU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBsb2dpYyBhbmQgYXJpdGhtZXRpYyBpc3N1ZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06XFxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cXG4yLiBJbiBgbW0vZGFtb24vcGFkZHIuY2AgYW5kIGBtbS9kYW1vbi92YWRkci5jYCwgaXQgZml4ZXMgYWRkcmVzcyBhZHZhbmNlbWVudCBhbmQgc3RlcC1zaXplIGNhbGN1bGF0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIGZvbGlvcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxcbjEuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBpdCBhZGRzIGVycm9yIGNoZWNraW5nIGZvciBgZGFtb25fc3BsaXRfcmVnaW9uX2F0KClgIGFuZCBndWFyZHMgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvIGFuZCB1bmRlcmZsb3cgaW4gYGRhbW9zX2dldF9ub2RlX21lbV9icCgpYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoKWAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoKWAuXFxuMi4gSW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0IGZpeGVzIGFkZHJlc3MgYWR2YW5jZW1lbnQgYW5kIHN0ZXAtc2l6ZSBjYWxjdWxhdGlvbnMgd2hlbiBpdGVyYXRpbmcgb3ZlciBmb2xpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBpbnRlcmFjdCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 15:51:36 +0000 UTC FinishedAt: 2026-08-31 17:12:16 +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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "36b26662-5d6c-4ca1-8d77-89e5d026a8a8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_commit_ctx", "damon_set_schemes", "damon_call", "damos_walk", "damon_sysfs_add_schemes" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7LAogICAgJiMzNDtkYW1vc193YWxrJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNldmVyYWwgZnVuY3Rpb25hbCBidWdzIGluIERBTU9OIGNvcmUsIHBoeXNpY2FsIGFkZHJlc3MgKHBhZGRyKSwgYW5kIHZpcnR1YWwgYWRkcmVzcyAodmFkZHIpIG9wZXJhdGlvbnM6IGhhbmRsaW5nIHJlZ2lvbiBzcGxpdHRpbmcgZmFpbHVyZSBpbiBkYW1vc19hcHBseV9zY2hlbWUsIHByZXZlbnRpbmcgZGl2aXNpb24gYnkgemVybyBhbmQgb3V0LW9mLXJhbmdlIHF1b3RhIGNhbGN1bGF0aW9ucyBpbiBub2RlL21lbWNnIG1lbW9yeSBxdW90YSBnb2FscywgZml4aW5nIGZvbGlvIGFkZHJlc3MgYWR2YW5jZW1lbnQgaW4gcGFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKHBhZ2VvdXQsIGRlYWN0aXZhdGUsIG1pZ3JhdGUsIHN0YXQpLCBhbmQgY29ycmVjdGx5IGNhbGN1bGF0aW5nIFBNRCBpdGVyYXRpb24gc3RyaWRlcyBhY3Jvc3MgbXVsdGktcGFnZSBmb2xpb3MgaW4gdmFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKG1pZ3JhdGUsIHN0YXQpLiBBbGwgdGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MmNlODNmZTIxN2QyYjZkMzM3YmJlMmFjZjJlNzYyYzI1MTlhZDJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTY6MzY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzeilcbiBcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4tXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcbiYjNDM7XHRcdFx0aWYgKGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzeikpXG4mIzQzO1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgJiM0MzsyODE2LDEzIEBAIHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbiBcdH1cbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4mIzQzO1x0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIGkuZnJlZXJhbSkge1xuJiM0MztcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4mIzQzO1x0XHRcdHJldHVybiAxMDAwMDtcbiYjNDM7XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuQEAgLTI4NTUsNiAmIzQzOzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4mIzQzO1x0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXMpIHtcbiYjNDM7XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXG4mIzQzO1x0XHRcdHJldHVybiAxMDAwMDtcbiYjNDM7XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG5AQCAtMzAwMSw3ICYjNDM7MzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4gXHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTtcbiBcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfQU5PTikgJiM0MztcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfRklMRSk7XG4tXHR0b3RhbCA9IGFjdGl2ZSAmIzQzOyBpbmFjdGl2ZTtcbiYjNDM7XHR0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpO1xuIFx0aWYgKGFjdGl2ZV9yYXRpbylcbiBcdFx0cmV0dXJuIG11bHRfZnJhYyhhY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG4gXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRlbHNlXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pO1xuJiM0MztcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxuQEAgLTMwMiw3ICYjNDM7MzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiYjNDM7XHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5AQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcdTAwMjZmb2xpb19saXN0LCBzLVx1MDAzZXRhcmdldF9uaWQpO1xuQEAgLTM3OSw3ICYjNDM7Mzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKSAvIGFkZHJfdW5pdDtcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCAwNjQ4NDAwYjJkNjViLi5jOGMzMmIyYWUwNDAyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuJiM0MztcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcbiBcdFx0XHRcdG1pZ3JhdGlvbl9saXN0cyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UocHRlbnQpKTtcbiYjNDM7XHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XG4gXHR9XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcbiBcdHJldHVybiAwO1xuQEAgLTgzMSw2ICYjNDM7ODM0LDggQEAgc3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuJiM0MztcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtODQ0LDcgJiM0Mzs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0aWYgKCFkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB2bWEsIGFkZHIsIHB0ZSwgTlVMTCkpXG4gXHRcdFx0KnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XG4mIzQzO1x0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xuIFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuIFx0fVxuIFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDssCiAgICAmIzM0O2RhbW9zX3dhbGsmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc2V2ZXJhbCBmdW5jdGlvbmFsIGJ1Z3MgaW4gREFNT04gY29yZSwgcGh5c2ljYWwgYWRkcmVzcyAocGFkZHIpLCBhbmQgdmlydHVhbCBhZGRyZXNzICh2YWRkcikgb3BlcmF0aW9uczogaGFuZGxpbmcgcmVnaW9uIHNwbGl0dGluZyBmYWlsdXJlIGluIGRhbW9zX2FwcGx5X3NjaGVtZSwgcHJldmVudGluZyBkaXZpc2lvbiBieSB6ZXJvIGFuZCBvdXQtb2YtcmFuZ2UgcXVvdGEgY2FsY3VsYXRpb25zIGluIG5vZGUvbWVtY2cgbWVtb3J5IHF1b3RhIGdvYWxzLCBmaXhpbmcgZm9saW8gYWRkcmVzcyBhZHZhbmNlbWVudCBpbiBwYWRkciBzY2hlbWUgb3BlcmF0aW9ucyAocGFnZW91dCwgZGVhY3RpdmF0ZSwgbWlncmF0ZSwgc3RhdCksIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgUE1EIGl0ZXJhdGlvbiBzdHJpZGVzIGFjcm9zcyBtdWx0aS1wYWdlIGZvbGlvcyBpbiB2YWRkciBzY2hlbWUgb3BlcmF0aW9ucyAobWlncmF0ZSwgc3RhdCkuIEFsbCB0aGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyY2U4M2ZlMjE3ZDJiNmQzMzdiYmUyYWNmMmU3NjJjMjUxOWFkMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNjozNjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJCWMtJmd0O21pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzeikKIAkJCQlnb3RvIHVwZGF0ZV9zdGF0OwotCQkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTsKJiM0MzsJCQlpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSkKJiM0MzsJCQkJZ290byB1cGRhdGVfc3RhdDsKIAkJfQogCQlpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKQogCQkJcmV0dXJuOwpAQCAtMjgxNSw2ICYjNDM7MjgxNiwxMyBAQCBzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoCiAJfQogCiAJc2lfbWVtaW5mb19ub2RlKCZhbXA7aSwgZ29hbC0mZ3Q7bmlkKTsKJiM0MzsJaWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gJmx0OyBpLmZyZWVyYW0pIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKJiM0MzsJCQlyZXR1cm4gMTAwMDA7CiYjNDM7CQllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KQEAgLTI4NTUsNiAmIzQzOzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKIAlzaV9tZW1pbmZvX25vZGUoJmFtcDtpLCBnb2FsLSZndDtuaWQpOwomIzQzOwlpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSAmbHQ7IHVzZWRfcGFnZXMpIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKQomIzQzOwkJCXJldHVybiAxMDAwMDsKJiM0MzsJCWVsc2UJLyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KIAlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gdXNlZF9wYWdlczsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqLwpAQCAtMzAwMSw3ICYjNDM7MzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pCiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTsKIAlpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0FOT04pICYjNDM7CiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0ZJTEUpOwotCXRvdGFsID0gYWN0aXZlICYjNDM7IGluYWN0aXZlOwomIzQzOwl0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpOwogCWlmIChhY3RpdmVfcmF0aW8pCiAJCXJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpOwogCXJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQllbHNlCiAJCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9fbGlzdCk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpCkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZSgKIAkJCWZvbGlvX2RlYWN0aXZhdGUoZm9saW8pOwogCQlhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKQEAgLTM1MCw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7CiAJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtmb2xpb19saXN0KTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCWFwcGxpZWQgPSBkYW1vbl9taWdyYXRlX3BhZ2VzKCZhbXA7Zm9saW9fbGlzdCwgcy0mZ3Q7dGFyZ2V0X25pZCk7CkBAIC0zNzksNyAmIzQzOzM3OSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAogCQlpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0OwotCQlhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKJiM0MzsJCWFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAl9CiAJcy0mZ3Q7bGFzdF9hcHBsaWVkID0gZm9saW87CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCAwNjQ4NDAwYjJkNjViLi5jOGMzMmIyYWUwNDAyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAwOwogCiAJZm9yICg7IGFkZHIgJmx0OyBuZXh0OyBwdGUgJiM0Mzs9IG5yLCBhZGRyICYjNDM7PSBuciAqIFBBR0VfU0laRSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKJiM0MzsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiAKQEAgLTY4MSw3ICYjNDM7NjgzLDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAkJZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstJmd0O3ZtYSwgYWRkciwgZGVzdHMsCiAJCQkJbWlncmF0aW9uX2xpc3RzKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQlwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpOwomIzQzOwkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CiAJcmV0dXJuIDA7CkBAIC04MzEsNiAmIzQzOzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gMDsKIAogCWZvciAoOyBhZGRyICZsdDsgbmV4dDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiYjNDM7CiAJCW5yID0gMTsKIAkJcHRlbnQgPSBwdGVwX2dldChwdGUpOwogCkBAIC04NDQsNyAmIzQzOzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJCWlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwotCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCXBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7CiYjNDM7CQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4OwogCQlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBmdXp6aW5nIGVmZm9ydCBiYXNlZCBvbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGl0IGludHJvZHVjZXMuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgZnJhbWV3b3JrKSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgcHJvbWlzaW5nOyBEQU1PTiBpcyBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4KCkZpcnN0LCBpbiBgbW0vZGFtb24vY29yZS5jYCwgSSBzZWUgYSBjb3VwbGUgb2YgaW50ZXJlc3RpbmcgY2hhbmdlcy4gYGRhbW9zX2FwcGx5X3NjaGVtZSgpYCBub3cgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCgpYCwgd2l0aCBhIGBnb3RvIHVwZGF0ZV9zdGF0YCBvbiBmYWlsdXJlLiBUaGF0JiMzOTtzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBhbmQgcG90ZW50aWFsbHkgZnV6ei1hYmxlIGlmIHdlIGNhbiB0cmlnZ2VyIGZhaWx1cmVzIGluIHRoYXQgc3BsaXR0aW5nIGZ1bmN0aW9uLiBTaW1pbGFybHksIHRoZXJlIGFyZSBudWxsIGNoZWNrcyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgIGFuZCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYC4gVGhlIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBkaXYtYnktemVybyBmaXgsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBnb29kIHNpZ24gZm9yIGZ1enppbmcsIHNpbmNlIHRob3NlIGFyZSB0eXBpY2FsbHkgc3RyYWlnaHRmb3J3YXJkIHRvIGV4cGxvaXQuCgpNb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgY2hhbmdlcyBpbiBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YCBhbGwgbG9vayByZWxhdGVkIHRvIGZvbGlvIGFsaWdubWVudCBpc3N1ZXMsIHNwZWNpZmljYWxseSBjYWxjdWxhdGluZyB0aGUgYWRkcmVzcyB3aGVuIGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSBhZGRpdGlvbiBvZiBgZm9saW9fc2l6ZShmb2xpbylgIG1ha2VzIG1lIHRoaW5rIHdlIG1pZ2h0IGJlIGFibGUgdG8gY3JhZnQgc29tZSBpbnRlcmVzdGluZywgZWRnZS1jYXNlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgYW5kIHRyaWdnZXIgc29tZSBtb3JlIGludGVyZXN0aW5nIGJlaGF2aW9yLgoKRmluYWxseSwgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgIGFuZCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgIGFyZSBmaXhlZCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIGxhcmdlIGZvbGlvcy9QTUQgZW50cmllcy4gVGhpcyBpcyBhbm90aGVyIGFyZWEgd2hlcmUgYm91bmRhcnkgY29uZGl0aW9ucyBhcmUgY3JpdGljYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGJ1ZyBmaXhlcyB3aXRoaW4gdGhlIERBTU9OIGNvcmUsIHBhZGRyLCBhbmQgdmFkZHIgb3BlcmF0aW9ucy4gVGhlc2UgdHlwZXMgb2YgZml4ZXMgYXJlIG9mdGVuIGdyZWF0IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFzIHRoZXkgc3VnZ2VzdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcywgZWRnZSBjYXNlcywgYW5kIHBvdGVudGlhbGx5LCBjb25jdXJyZW5jeSBpc3N1ZXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIERBTU9OIGFjY2Vzc2libGUgdGhyb3VnaCBhIGZ1enphYmxlIGludGVyZmFjZT8gWWVzLCBpdCYjMzk7cyBhIGNvcmUgTU0gZmVhdHVyZSBjb25maWd1cmVkIHZpYSBzeXNmcyAoc3BlY2lmaWNhbGx5IGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gKS4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQsIGNvbmZpZ3VyZSBpdCwgYW5kIHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlc2UgY29kZSBwYXRocyBldmVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0IGlzIGdyZWF0IGJlY2F1c2UgdGhhdCBtYWtlcyBpdCBmYXIgc2ltcGxlciB0byB0YXJnZXQgd2l0aCBvdXIgZWZmb3J0cy4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBEQU1PTiwgdG8gc2VlIHdoYXQga25vYnMgd2UgaGF2ZSB0byBjb25maWd1cmUgZGlmZmVyZW50IG9wZXJhdGlvbmFsIHN0YXRlcyBvZiB0aGUgZmVhdHVyZS4gV2UmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgbWF5YmUganVzdCBhIHNpbXBsZSBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWFrZWZpbGUgSW52ZXN0aWdhdGlvbiAtIGBtbS9kYW1vbmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG9iamVjdCBmaWxlIGNvbnN0cnVjdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgYG1tL2RhbW9uYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBkaWN0YXRlcyB0aGUgY29tcGlsYXRpb24gc3RlcHMsIGRlcGVuZGVuY2llcywgYW5kIGxpbmtlciBmbGFncyBmb3IgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCB0byBzZWUgaG93IGl0IGZpdHMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYnVpbGQgYW5kIGZvcndhcmRzIHRvIGhvdyBJJiMzOTtkIGNoYW5nZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgcmVjZW50IGNoYW5nZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgcGlucG9pbnQgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIG9yIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZmZlY3RlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLiBUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvcmUgZmlsZXMgZm9yIERBTU9OIOKAkyBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgREFNT04mIzM5O3MgZnVuZGFtZW50YWwgb3BlcmF0aW9ucywgYW5kIGEgY2xvc2VyIGxvb2sgYXQgdGhvc2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfc2NoZW1lfGRhbW9uX3BhX3xkYW1vc192YV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjU1OD1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTI1NzEtXG5tbS9kYW1vbi9jb3JlLmM6MjU3MjpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yNTczLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jPTI2NDM9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjY5LVx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxubW0vZGFtb24vY29yZS5jOjI2NzA6XHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xubW0vZGFtb24vY29yZS5jLTI2NzEtXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOC1cbm1tL2RhbW9uL3BhZGRyLmM6MTk6c3RhdGljIHBoeXNfYWRkcl90IGRhbW9uX3BhX3BoeXNfYWRkcihcbm1tL2RhbW9uL3BhZGRyLmMtMjAtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNC1cbm1tL2RhbW9uL3BhZGRyLmM6MjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxubW0vZGFtb24vcGFkZHIuYy0yNi1cdFx0cGh5c19hZGRyX3QgcGEsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzctXG5tbS9kYW1vbi9wYWRkci5jOjM4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy0zOS17XG4tLVxubW0vZGFtb24vcGFkZHIuYy00OC1cbm1tL2RhbW9uL3BhZGRyLmM6NDk6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy01MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNTMtXG5tbS9kYW1vbi9wYWRkci5jOjU0Olx0ZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlc2FtcGxpbmdfYWRkciwgY3R4LVx1MDAzZWFkZHJfdW5pdCkpO1xubW0vZGFtb24vcGFkZHIuYy01NS19XG5tbS9kYW1vbi9wYWRkci5jLTU2LVxubW0vZGFtb24vcGFkZHIuYzo1NzpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vcGFkZHIuYy01OC17XG4tLVxubW0vZGFtb24vcGFkZHIuYy02My1cdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXG5tbS9kYW1vbi9wYWRkci5jOjY0Olx0XHRcdF9fZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2sociwgY3R4KTtcbm1tL2RhbW9uL3BhZGRyLmMtNjUtXHR9XG4tLVxubW0vZGFtb24vcGFkZHIuYy02Ny1cbm1tL2RhbW9uL3BhZGRyLmM6Njg6c3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG5tbS9kYW1vbi9wYWRkci5jLTY5LXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTgwLVxubW0vZGFtb24vcGFkZHIuYzo4MTpzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy04Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy04NC1cdGJvb2wgYWNjZXNzZWQ7XG5tbS9kYW1vbi9wYWRkci5jOjg1Olx0cGh5c19hZGRyX3Qgc2FtcGxpbmdfYWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihcbm1tL2RhbW9uL3BhZGRyLmMtODYtXHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyLCBhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYy04Ny1cbm1tL2RhbW9uL3BhZGRyLmM6ODg6XHRhY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIpO1xubW0vZGFtb24vcGFkZHIuYy04OS1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgYWNjZXNzZWQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtOTEtXG5tbS9kYW1vbi9wYWRkci5jOjkyOnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vcGFkZHIuYy05My17XG4tLVxubW0vZGFtb24vcGFkZHIuYy05OS1cdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbm1tL2RhbW9uL3BhZGRyLmM6MTAwOlx0XHRcdF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHIsIGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYy0xMDEtXHRcdFx0bWF4X25yX2FjY2Vzc2VzID0gbWF4KHItXHUwMDNlbnJfYWNjZXNzZXMsIG1heF9ucl9hY2Nlc3Nlcyk7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMDctXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxubW0vZGFtb24vcGFkZHIuYy0xMDktXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDAtXG5tbS9kYW1vbi9wYWRkci5jOjE0MTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDctXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xubW0vZGFtb24vcGFkZHIuYzoxNDg6XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfbWF0Y2goZiwgZm9saW8pKSB7XG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE1Ni1cbm1tL2RhbW9uL3BhZGRyLmM6MTU3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3BhZGRyLmMtMTU4LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE3My1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9wYWRkci5jOjE3NDpcdFx0XHRwYSA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsXG5tbS9kYW1vbi9wYWRkci5jLTE3NS1cdFx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzctXHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9wYWRkci5jOjE3ODpcdFx0XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxubW0vZGFtb24vcGFkZHIuYy0xNzktXHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIwOC1cbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vcGFkZHIuYy0yMTAte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjE5LVxubW0vZGFtb24vcGFkZHIuYzoyMjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0yMjEtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNDQtXG5tbS9kYW1vbi9wYWRkci5jOjI0NTpcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmM6MjQ2Olx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYy0yNDctXHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MjQ4Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMjQ5LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI3NC1cdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5tbS9kYW1vbi9wYWRkci5jOjI3NTpcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtMjc2LX1cbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxubW0vZGFtb24vcGFkZHIuYzoyNzg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxubW0vZGFtb24vcGFkZHIuYy0yNzktXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjg1LVxubW0vZGFtb24vcGFkZHIuYzoyODY6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjI4NzpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMjg4LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMDgtXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYzozMDk6XHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jLTMxMC19XG5tbS9kYW1vbi9wYWRkci5jLTMxMS1cbm1tL2RhbW9uL3BhZGRyLmM6MzEyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMxMy1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XG5tbS9kYW1vbi9wYWRkci5jOjMxNjpcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIHRydWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy0zMTctfVxubW0vZGFtb24vcGFkZHIuYy0zMTgtXG5tbS9kYW1vbi9wYWRkci5jOjMxOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZWFjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMyMC1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMyMi17XG5tbS9kYW1vbi9wYWRkci5jOjMyMzpcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzI0LX1cbm1tL2RhbW9uL3BhZGRyLmMtMzI1LVxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMjctXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMzMtXG5tbS9kYW1vbi9wYWRkci5jOjMzNDpcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmM6MzM1Olx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYy0zMzYtXHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MzM3Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzM4LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM1OC1cdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5tbS9kYW1vbi9wYWRkci5jOjM1OTpcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtMzYwLX1cbm1tL2RhbW9uL3BhZGRyLmMtMzYxLVxubW0vZGFtb24vcGFkZHIuYzozNjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zNjMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zNzEtXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYy0zNzQtXHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6Mzc1Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzc2LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM4OC1cbm1tL2RhbW9uL3BhZGRyLmM6Mzg5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTM5MC1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM5Ni1cdGNhc2UgREFNT1NfUEFHRU9VVDpcbm1tL2RhbW9uL3BhZGRyLmM6Mzk3Olx0XHRyZXR1cm4gZGFtb25fcGFfcGFnZW91dChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzk4LVx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcbm1tL2RhbW9uL3BhZGRyLmM6Mzk5Olx0XHRyZXR1cm4gZGFtb25fcGFfYWN0aXZhdGVfcGFnZXMociwgYXVuaXQsIHNjaGVtZSxcbm1tL2RhbW9uL3BhZGRyLmMtNDAwLVx0XHRcdFx0c3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTQwMS1cdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcbm1tL2RhbW9uL3BhZGRyLmM6NDAyOlx0XHRyZXR1cm4gZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxubW0vZGFtb24vcGFkZHIuYy00MDMtXHRcdFx0XHRzel9maWx0ZXJfcGFzc2VkKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQwNS1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxubW0vZGFtb24vcGFkZHIuYzo0MDY6XHRcdHJldHVybiBkYW1vbl9wYV9taWdyYXRlKHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDctXHRjYXNlIERBTU9TX1NUQVQ6XG5tbS9kYW1vbi9wYWRkci5jOjQwODpcdFx0cmV0dXJuIGRhbW9uX3BhX3N0YXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTQwOS1cdGRlZmF1bHQ6XG4tLVxubW0vZGFtb24vcGFkZHIuYy00MTUtXG5tbS9kYW1vbi9wYWRkci5jOjQxNjpzdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxubW0vZGFtb24vcGFkZHIuYy00MTctXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDM2LVxubW0vZGFtb24vcGFkZHIuYzo0Mzc6c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcbm1tL2RhbW9uL3BhZGRyLmMtNDM4LXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQ0Mi1cdFx0LnVwZGF0ZSA9IE5VTEwsXG5tbS9kYW1vbi9wYWRkci5jOjQ0MzpcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0Olx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NDYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxubW0vZGFtb24vcGFkZHIuYzo0NDc6XHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl9wYV9hcHBseV9zY2hlbWUsXG5tbS9kYW1vbi9wYWRkci5jOjQ0ODpcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl9wYV9zY2hlbWVfc2NvcmUsXG5tbS9kYW1vbi9wYWRkci5jLTQ0OS1cdH07XG4tLVxubW0vZGFtb24vcGFkZHIuYy00NTMtXG5tbS9kYW1vbi9wYWRkci5jOjQ1NDpzdWJzeXNfaW5pdGNhbGwoZGFtb25fcGFfaW5pdGNhbGwpO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTIyLVxubW0vZGFtb24vdmFkZHIuYzo1MjM6c3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbm1tL2RhbW9uL3ZhZGRyLmMtNTI0LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTU0NC1cbm1tL2RhbW9uL3ZhZGRyLmM6NTQ1OnN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi92YWRkci5jLTU0Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTU2Mi1cdFx0aWYgKGZpbHRlci1cdTAwM2V0eXBlID09IERBTU9TX0ZJTFRFUl9UWVBFX1lPVU5HKVxubW0vZGFtb24vdmFkZHIuYzo1NjM6XHRcdFx0bWF0Y2hlZCA9IGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChmaWx0ZXIsIGZvbGlvLFxubW0vZGFtb24vdmFkZHIuYy01NjQtXHRcdFx0XHR2bWEsIGFkZHIsIHB0ZXAsIHBtZHApO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTczLVxubW0vZGFtb24vdmFkZHIuYzo1NzQ6c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSB7XG5tbS9kYW1vbi92YWRkci5jLTU3NS1cdHN0cnVjdCBsaXN0X2hlYWQgKm1pZ3JhdGlvbl9saXN0cztcbi0tXG5tbS9kYW1vbi92YWRkci5jLTU4NC0gKi9cbm1tL2RhbW9uL3ZhZGRyLmM6NTg1OnN0YXRpYyB2b2lkIGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi92YWRkci5jLTU4Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTYzNC1cbm1tL2RhbW9uL3ZhZGRyLmM6NjM1OnN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vZGFtb24vdmFkZHIuYy02MzYtXHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG5tbS9kYW1vbi92YWRkci5jLTYzNy17XG5tbS9kYW1vbi92YWRkci5jOjYzODpcdHN0cnVjdCBkYW1vc192YV9taWdyYXRlX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG5tbS9kYW1vbi92YWRkci5jLTYzOS1cdHN0cnVjdCBsaXN0X2hlYWQgKm1pZ3JhdGlvbl9saXN0cyA9IHByaXYtXHUwMDNlbWlncmF0aW9uX2xpc3RzO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjU2LVx0XHRcdGdvdG8gaHVnZV9vdXQ7XG5tbS9kYW1vbi92YWRkci5jOjY1NzpcdFx0aWYgKGRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHdhbGstXHUwMDNldm1hLCBhZGRyLCBOVUxMLCBwbWQpKVxubW0vZGFtb24vdmFkZHIuYy02NTgtXHRcdFx0Z290byBodWdlX291dDtcbm1tL2RhbW9uL3ZhZGRyLmM6NjU5Olx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxubW0vZGFtb24vdmFkZHIuYy02NjAtXHRcdFx0XHRtaWdyYXRpb25fbGlzdHMpO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjgxLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzo2ODI6XHRcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbm1tL2RhbW9uL3ZhZGRyLmMtNjgzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzo2ODQ6XHRcdGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgZGVzdHMsXG5tbS9kYW1vbi92YWRkci5jLTY4NS1cdFx0XHRcdG1pZ3JhdGlvbl9saXN0cyk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03MjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03NDAtXG5tbS9kYW1vbi92YWRkci5jOjc0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbm1tL2RhbW9uL3ZhZGRyLmMtNzQyLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03NDUtXHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XG5tbS9kYW1vbi92YWRkci5jOjc0NjpcdHN0cnVjdCBkYW1vc192YV9taWdyYXRlX3ByaXZhdGUgcHJpdjtcbm1tL2RhbW9uL3ZhZGRyLmMtNzQ3LVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tLVxubW0vZGFtb24vdmFkZHIuYy03NTMtXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG5tbS9kYW1vbi92YWRkci5jOjc1NDpcdFx0LnBtZF9lbnRyeSA9IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5LFxubW0vZGFtb24vdmFkZHIuYy03NTUtXHRcdC5wdGVfZW50cnkgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzg2LVxubW0vZGFtb24vdmFkZHIuYzo3ODc6c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSB7XG5tbS9kYW1vbi92YWRkci5jLTc4OC1cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzkxLVxubW0vZGFtb24vdmFkZHIuYzo3OTI6c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3ZhZGRyLmMtNzkzLVx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vdmFkZHIuYy03OTctXG5tbS9kYW1vbi92YWRkci5jOjc5ODpzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2RhbW9uL3ZhZGRyLmMtNzk5LVx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxubW0vZGFtb24vdmFkZHIuYy04MDAte1xubW0vZGFtb24vdmFkZHIuYzo4MDE6XHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xubW0vZGFtb24vdmFkZHIuYy04MDItXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVx1MDAzZXNjaGVtZTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgxOS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODIwOlx0XHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXG5tbS9kYW1vbi92YWRkci5jLTgyMS1cdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xubW0vZGFtb24vdmFkZHIuYy04MjItXG5tbS9kYW1vbi92YWRkci5jOjgyMzpcdFx0aWYgKCFkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB2bWEsIGFkZHIsIE5VTEwsIHBtZCkpXG5tbS9kYW1vbi92YWRkci5jLTgyNC1cdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4tLVxubW0vZGFtb24vdmFkZHIuYy04NDYtXG5tbS9kYW1vbi92YWRkci5jOjg0NzpcdFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxubW0vZGFtb24vdmFkZHIuYy04NDgtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi92YWRkci5jLTg0OS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODUwOlx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbm1tL2RhbW9uL3ZhZGRyLmMtODUxLVx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTg1OS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODYwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxubW0vZGFtb24vdmFkZHIuYy04NjEtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTg2My17XG5tbS9kYW1vbi92YWRkci5jOjg2NDpcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUgcHJpdjtcbm1tL2RhbW9uL3ZhZGRyLmMtODY1LVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG5tbS9kYW1vbi92YWRkci5jLTg2Ni1cdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3Olx0XHQucG1kX2VudHJ5ID0gZGFtb3NfdmFfc3RhdF9wbWRfZW50cnksXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cdH07XG4tLVxubW0vZGFtb24vdmFkZHIuYz04ODU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fdmFfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTkxMS1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxubW0vZGFtb24vdmFkZHIuYzo5MTI6XHRcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi92YWRkci5jLTkxMy1cdGNhc2UgREFNT1NfU1RBVDpcbm1tL2RhbW9uL3ZhZGRyLmM6OTE0Olx0XHRyZXR1cm4gZGFtb3NfdmFfc3RhdCh0LCByLCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vdmFkZHIuYy05MTUtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIENvcmUgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgREFNT04gY29yZSBiZXR0ZXIuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgd2l0aGluIHRoZSBEQU1PTiBjb3JlIGNvbXBvbmVudHMgKGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGBtbS9kYW1vbi92YWRkci5jYCwgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYCkgYXJlICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3MgZXhwb3NlZCBpbnRlcmZhY2VzIGFuZCBob3cgdGhlc2UgdmFyaW91cyBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgd2l0aCBvdGhlciBEQU1PTiBjb21wb25lbnRzIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUgb2YgZWFjaCBjb21wb25lbnQgYW5kIHBpbnBvaW50IHRoZSBub24tc3RhdGljIHN5bWJvbHMgcmVsYXRlZCB0byBwaHlzaWNhbCBhZGRyZXNzZXMgKHBhZGRyKSwgdmlydHVhbCBhZGRyZXNzZXMgKHZhZGRyKSwgYW5kIHRoZSBzeXNmcy9rdW5pdCBpbnRlcmZhY2UuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiBlaXRoZXIgZGVidWdnaW5nIHRoZSBtb2R1bGUsIHVuZGVyc3RhbmRpbmcgdGhlIGV4cG9zZWQgY2FwYWJpbGl0aWVzLCBvciBpbnRlZ3JhdGluZy9leHRlbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZGFtb25ffF52b2lkIGRhbW9uX3xkYW1vc18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjY3OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vY29yZS5jPTUwPWJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xubW0vZGFtb24vY29yZS5jOjcxOmludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcbm1tL2RhbW9uL2NvcmUuYy03Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTk3LSAqL1xubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4tLVxubW0vZGFtb24vY29yZS5jLTEyOC1cbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzLVxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NC1cbm1tL2RhbW9uL2NvcmUuYzoxNzU6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTE3Ni17XG4tLVxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbm1tL2RhbW9uL2NvcmUuYy00NzktXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTY4LVxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy01NzAtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG5tbS9kYW1vbi9jb3JlLmMtNTcxLXtcbm1tL2RhbW9uL2NvcmUuYzo1NzI6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtNTczLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01ODQtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NTg1OiAqIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKCkgLSBSZXR1cm4gaWYgdGhlIGZpbHRlciBpcyBvcHMtaGFuZGxlZCBvbmUuXG5tbS9kYW1vbi9jb3JlLmMtNTg2LSAqIEB0eXBlOlx0dHlwZSBvZiB0aGUgZmlsdGVyLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy01OTAtICovXG5tbS9kYW1vbi9jb3JlLmM6NTkxOmJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxubW0vZGFtb24vY29yZS5jLTU5Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTYwMi1cbm1tL2RhbW9uL2NvcmUuYzo2MDM6dm9pZCBkYW1vc19hZGRfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02MDQte1xubW0vZGFtb24vY29yZS5jOjYwNTpcdGlmIChkYW1vc19maWx0ZXJfZm9yX29wcyhmLVx1MDAzZXR5cGUpKVxubW0vZGFtb24vY29yZS5jLTYwNi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZmLVx1MDAzZWxpc3QsIFx1MDAyNnMtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02MTAtXG5tbS9kYW1vbi9jb3JlLmM6NjExOnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy02MTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02MTUtXG5tbS9kYW1vbi9jb3JlLmM6NjE2OnN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjE3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjIwLVxubW0vZGFtb24vY29yZS5jOjYyMTp2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjIyLXtcbm1tL2RhbW9uL2NvcmUuYzo2MjM6XHRkYW1vc19kZWxfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jOjYyNDpcdGRhbW9zX2ZyZWVfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTYyNS19XG5tbS9kYW1vbi9jb3JlLmMtNjI2LVxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6NjI4Olx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbm1tL2RhbW9uL2NvcmUuYy02MjktXHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxubW0vZGFtb24vY29yZS5jLTYzMC17XG5tbS9kYW1vbi9jb3JlLmM6NjMxOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtNjMyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02NDEtXG5tbS9kYW1vbi9jb3JlLmM6NjQyOnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy02NDMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02NDYtXG5tbS9kYW1vbi9jb3JlLmM6NjQ3OnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTY0OC17XG4tLVxubW0vZGFtb24vY29yZS5jLTY1MS1cbm1tL2RhbW9uL2NvcmUuYzo2NTI6c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTY1My17XG4tLVxubW0vZGFtb24vY29yZS5jLTY1Ni1cbm1tL2RhbW9uL2NvcmUuYzo2NTc6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNjU4LXtcbm1tL2RhbW9uL2NvcmUuYzo2NTk6XHRkYW1vc19kZWxfcXVvdGFfZ29hbChnKTtcbm1tL2RhbW9uL2NvcmUuYzo2NjA6XHRkYW1vc19mcmVlX3F1b3RhX2dvYWwoZyk7XG5tbS9kYW1vbi9jb3JlLmMtNjYxLX1cbm1tL2RhbW9uL2NvcmUuYy02NjItXG5tbS9kYW1vbi9jb3JlLmM6NjYzOnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy02NjQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02NjgtLyogaW5pdGlhbGl6ZSBmaWVsZHMgb2YgQHF1b3RhIHRoYXQgbm9ybWFsbHkgQVBJIHVzZXJzIHdvdWxkbiYjMzk7dCBzZXQgKi9cbm1tL2RhbW9uL2NvcmUuYzo2Njk6c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxubW0vZGFtb24vY29yZS5jLTY3MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTY4MS1cbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYzo2ODM6XHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxubW0vZGFtb24vY29yZS5jLTY4NC1cdFx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxubW0vZGFtb24vY29yZS5jOjY4NTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxubW0vZGFtb24vY29yZS5jOjY4NjpcdFx0XHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxubW0vZGFtb24vY29yZS5jLTY4Ny1cdFx0XHRpbnQgdGFyZ2V0X25pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZW9wc19maWx0ZXJzKTtcbm1tL2RhbW9uL2NvcmUuYzo3MDY6XHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbm1tL2RhbW9uL2NvcmUuYy03MDctXHRzY2hlbWUtXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTcxMC1cbm1tL2RhbW9uL2NvcmUuYzo3MTE6XHRzY2hlbWUtXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcbm1tL2RhbW9uL2NvcmUuYy03MTItXHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG4tLVxubW0vZGFtb24vY29yZS5jLTcxNy1cbm1tL2RhbW9uL2NvcmUuYzo3MTg6XHRzY2hlbWUtXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcbm1tL2RhbW9uL2NvcmUuYy03MTktXHRzY2hlbWUtXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XG4tLVxubW0vZGFtb24vY29yZS5jLTcyMy1cbm1tL2RhbW9uL2NvcmUuYzo3MjQ6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTcyNS17XG4tLVxubW0vZGFtb24vY29yZS5jLTczNC1cbm1tL2RhbW9uL2NvcmUuYzo3MzU6dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTczNi17XG5tbS9kYW1vbi9jb3JlLmMtNzM3LVx0bGlzdF9hZGRfdGFpbChcdTAwMjZzLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2VzY2hlbWVzKTtcbm1tL2RhbW9uL2NvcmUuYzo3Mzg6XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy03MzktfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NTAtXG5tbS9kYW1vbi9jb3JlLmM6NzUxOnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTc1Mi17XG5tbS9kYW1vbi9jb3JlLmM6NzUzOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XG5tbS9kYW1vbi9jb3JlLmM6NzU0Olx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZiwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmMtNzU1LVxubW0vZGFtb24vY29yZS5jOjc1NjpcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnMtXHUwMDNlcXVvdGEpXG5tbS9kYW1vbi9jb3JlLmM6NzU3Olx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XG5tbS9kYW1vbi9jb3JlLmMtNzU4LVxubW0vZGFtb24vY29yZS5jOjc1OTpcdGRhbW9zX2Zvcl9lYWNoX2NvcmVfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcylcbm1tL2RhbW9uL2NvcmUuYzo3NjA6XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTc2MS1cbm1tL2RhbW9uL2NvcmUuYzo3NjI6XHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyX3NhZmUoZiwgbmV4dCwgcylcbm1tL2RhbW9uL2NvcmUuYzo3NjM6XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xubW0vZGFtb24vY29yZS5jLTc2NC1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Nzc2PXN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzkyLVxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTc5NC17XG4tLVxubW0vZGFtb24vY29yZS5jPTgwMz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTgwNy1cbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTgwOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTgxNi1cbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODE4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODcyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTg3OS1cbm1tL2RhbW9uL2NvcmUuYzo4ODA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODgxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xubW0vZGFtb24vY29yZS5jOjEwNDg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTEwODEtXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgY3R4KVxubW0vZGFtb24vY29yZS5jOjEwODI6XHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjdHgpO1xubW0vZGFtb24vY29yZS5jLTEwODMtXG4tLVxubW0vZGFtb24vY29yZS5jLTEwOTUtICovXG5tbS9kYW1vbi9jb3JlLmM6MTA5Njp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVx0XHRcdHNzaXplX3QgbnJfc2NoZW1lcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwNy1cbm1tL2RhbW9uL2NvcmUuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTpcdFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy0xMTEwLXtcbm1tL2RhbW9uL2NvcmUuYzoxMTExOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTExMi1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMTEzLVxubW0vZGFtb24vY29yZS5jOjExMTQ6XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHEpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMTE1LVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMC1cbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jOjExMjI6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTEyMy17XG4tLVxubW0vZGFtb24vY29yZS5jLTExMzgtXG5tbS9kYW1vbi9jb3JlLmM6MTEzOTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYzoxMTQwOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTExNDEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ2LVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbm1tL2RhbW9uL2NvcmUuYzoxMTQ3Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTExNDgtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTUwLS8qKlxubW0vZGFtb24vY29yZS5jOjExNTE6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbm1tL2RhbW9uL2NvcmUuYy0xMTUyLSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTYxLSAqL1xubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE2My17XG5tbS9kYW1vbi9jb3JlLmM6MTE2NDpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xubW0vZGFtb24vY29yZS5jLTExNjUtXHRpbnQgaSA9IDAsIGogPSAwO1xubW0vZGFtb24vY29yZS5jLTExNjYtXG5tbS9kYW1vbi9jb3JlLmM6MTE2NzpcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTE2ODpcdFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpJiM0MzsmIzQzOywgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTY5LVx0XHRpZiAoc3JjX2dvYWwpXG5tbS9kYW1vbi9jb3JlLmM6MTE3MDpcdFx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTExNzEtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzoxMTcyOlx0XHRcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMTE3My1cdH1cbm1tL2RhbW9uL2NvcmUuYzoxMTc0Olx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMTc1LVx0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ni1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxMTc3Olx0XHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTExNzgtXHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTExODAtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTE4MTpcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYzoxMTgyOlx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTg2LVxubW0vZGFtb24vY29yZS5jOjExODc6c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxubW0vZGFtb24vY29yZS5jLTExODgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTkzLVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjExOTQ6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTExOTUtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjA1LVxubW0vZGFtb24vY29yZS5jOjEyMDY6c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9jb3JlX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTEyMDcte1xubW0vZGFtb24vY29yZS5jOjEyMDg6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTIwOS1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMjEwLVxubW0vZGFtb24vY29yZS5jOjEyMTE6XHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xMjEyLVx0XHRpZiAoaSYjNDM7JiM0MzsgPT0gbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTIxNy1cbm1tL2RhbW9uL2NvcmUuYzoxMjE4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfb3BzX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTEyMTkte1xubW0vZGFtb24vY29yZS5jOjEyMjA6XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTIyMS1cdGludCBpID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVxubW0vZGFtb24vY29yZS5jOjEyMjM6XHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyKGZpbHRlciwgcykge1xubW0vZGFtb24vY29yZS5jLTEyMjQtXHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjI5LVxubW0vZGFtb24vY29yZS5jOjEyMzA6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG5tbS9kYW1vbi9jb3JlLmM6MTIzMTpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTIzMi17XG4tLVxubW0vZGFtb24vY29yZS5jLTEyNTAtXG5tbS9kYW1vbi9jb3JlLmM6MTI1MTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jOjEyNTI6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEyNTMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjU2LVx0ZHN0LVx1MDAzZWFsbG93ID0gc3JjLVx1MDAzZWFsbG93O1xubW0vZGFtb24vY29yZS5jOjEyNTc6XHRkYW1vc19jb21taXRfZmlsdGVyX2FyZyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTI1OC19XG5tbS9kYW1vbi9jb3JlLmMtMTI1OS1cbm1tL2RhbW9uL2NvcmUuYzoxMjYwOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI2MS17XG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdF9maWx0ZXIsICpuZXh0LCAqc3JjX2ZpbHRlciwgKm5ld19maWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTI2My1cdGludCBpID0gMCwgaiA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTI2NC1cbm1tL2RhbW9uL2NvcmUuYzoxMjY1Olx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShkc3RfZmlsdGVyLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMjY2Olx0XHRzcmNfZmlsdGVyID0gZGFtb3NfbnRoX2NvcmVfZmlsdGVyKGkmIzQzOyYjNDM7LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyNjctXHRcdGlmIChzcmNfZmlsdGVyKVxubW0vZGFtb24vY29yZS5jOjEyNjg6XHRcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3RfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjY5LVx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MTI3MDpcdFx0XHRkYW1vc19kZXN0cm95X2ZpbHRlcihkc3RfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjcxLVx0fVxubW0vZGFtb24vY29yZS5jLTEyNzItXG5tbS9kYW1vbi9jb3JlLmM6MTI3MzpcdGRhbW9zX2Zvcl9lYWNoX2NvcmVfZmlsdGVyX3NhZmUoc3JjX2ZpbHRlciwgbmV4dCwgc3JjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTI3NC1cdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjc2LVxubW0vZGFtb24vY29yZS5jOjEyNzc6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTEyNzgtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vY29yZS5jLTEyODEtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTI4MjpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmM6MTI4MzpcdFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEyODQtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTEyODctXG5tbS9kYW1vbi9jb3JlLmM6MTI4ODpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9vcHNfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI4OS17XG5tbS9kYW1vbi9jb3JlLmM6MTI5MDpcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdF9maWx0ZXIsICpuZXh0LCAqc3JjX2ZpbHRlciwgKm5ld19maWx0ZXI7XG5tbS9kYW1vbi9jb3JlLmMtMTI5MS1cdGludCBpID0gMCwgaiA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTI5Mi1cbm1tL2RhbW9uL2NvcmUuYzoxMjkzOlx0ZGFtb3NfZm9yX2VhY2hfb3BzX2ZpbHRlcl9zYWZlKGRzdF9maWx0ZXIsIG5leHQsIGRzdCkge1xubW0vZGFtb24vY29yZS5jOjEyOTQ6XHRcdHNyY19maWx0ZXIgPSBkYW1vc19udGhfb3BzX2ZpbHRlcihpJiM0MzsmIzQzOywgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjk1LVx0XHRpZiAoc3JjX2ZpbHRlcilcbm1tL2RhbW9uL2NvcmUuYzoxMjk2Olx0XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTI5Ny1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEyOTg6XHRcdFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZHN0X2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTI5OS1cdH1cbm1tL2RhbW9uL2NvcmUuYy0xMzAwLVxubW0vZGFtb24vY29yZS5jOjEzMDE6XHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyX3NhZmUoc3JjX2ZpbHRlciwgbmV4dCwgc3JjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTMwMi1cdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzA0LVxubW0vZGFtb24vY29yZS5jOjEzMDU6XHRcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxubW0vZGFtb24vY29yZS5jLTEzMDYtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZXR5cGUsIHNyY19maWx0ZXItXHUwMDNlbWF0Y2hpbmcsXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMDktXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTMxMDpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmM6MTMxMTpcdFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzMTItXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTEzMTYtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTMxNzogKiBkYW1vc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KCkgLSBkZWNpZGUgd2hldGhlciB0byByZWplY3QgbWVtb3J5IHRoYXQgZGlkbiYjMzk7dFxubW0vZGFtb24vY29yZS5jLTEzMTgtICpcdFx0XHRcdCAgICBtYXRjaCB3aXRoIGFueSBnaXZlbiBmaWx0ZXIuXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMjAtICovXG5tbS9kYW1vbi9jb3JlLmM6MTMyMTpzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBsaXN0X2hlYWQgKmZpbHRlcnMpXG5tbS9kYW1vbi9jb3JlLmMtMTMyMi17XG5tbS9kYW1vbi9jb3JlLmM6MTMyMzpcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmxhc3RfZmlsdGVyO1xubW0vZGFtb24vY29yZS5jLTEzMjQtXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMjYtXHRcdHJldHVybiBmYWxzZTtcbm1tL2RhbW9uL2NvcmUuYzoxMzI3Olx0bGFzdF9maWx0ZXIgPSBsaXN0X2xhc3RfZW50cnkoZmlsdGVycywgc3RydWN0IGRhbW9zX2ZpbHRlciwgbGlzdCk7XG5tbS9kYW1vbi9jb3JlLmMtMTMyOC1cdHJldHVybiBsYXN0X2ZpbHRlci1cdTAwM2VhbGxvdztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMzMC1cbm1tL2RhbW9uL2NvcmUuYzoxMzMxOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0xMzMyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMzNi1cdFx0cy1cdTAwM2Vjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QgPVxubW0vZGFtb24vY29yZS5jOjEzMzc6XHRcdFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcdTAwMjZzLVx1MDAzZWNvcmVfZmlsdGVycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTMzOC1cdHMtXHUwMDNlb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QgPVxubW0vZGFtb24vY29yZS5jOjEzMzk6XHRcdGRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2cy1cdTAwM2VvcHNfZmlsdGVycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTM0MC19XG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDI9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM3MC0vKlxubW0vZGFtb24vY29yZS5jOjEzNzE6ICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXG5tbS9kYW1vbi9jb3JlLmMtMTM3Mi0gKiBAZHN0Olx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM4Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMzg3OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2Rlc3RzKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkc3QsXG5tbS9kYW1vbi9jb3JlLmM6MTM4ODpcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMzg5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQxNy1cbm1tL2RhbW9uL2NvcmUuYzoxNDE4OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE0MTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDIxLVxubW0vZGFtb24vY29yZS5jOjE0MjI6XHRlcnIgPSBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDIzLVx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xNDI0LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vY29yZS5jOjE0MjU6XHRlcnIgPSBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE0MjYtXHRpZiAoZXJyKVxubW0vZGFtb24vY29yZS5jLTE0MjctXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTQyODpcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KGRzdCk7XG5tbS9kYW1vbi9jb3JlLmMtMTQyOS1cdHJldHVybiAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ0My1cbm1tL2RhbW9uL2NvcmUuYzoxNDQ0OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNDQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MS1cbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhKFx1MDAyNmRzdC1cdTAwM2VxdW90YSwgXHUwMDI2c3JjLVx1MDAzZXF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDUzLVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1OC1cbm1tL2RhbW9uL2NvcmUuYzoxNDU5Olx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFx1MDAyNmRzdC1cdTAwM2VtaWdyYXRlX2Rlc3RzLCBcdTAwMjZzcmMtXHUwMDNlbWlncmF0ZV9kZXN0cyk7XG5tbS9kYW1vbi9jb3JlLmMtMTQ2MC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0NjItXG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcdGVyciA9IGRhbW9zX2NvbW1pdF9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDY0LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQ3MT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDc4LVx0XHRpZiAoc3JjX3NjaGVtZSkge1xubW0vZGFtb24vY29yZS5jOjE0Nzk6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0KGRzdF9zY2hlbWUsIHNyY19zY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTE0ODAtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ5Ni1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNDk3Olx0XHRlcnIgPSBkYW1vc19jb21taXQobmV3X3NjaGVtZSwgc3JjX3NjaGVtZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTQ5OC1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUxPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzU0LVx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG5tbS9kYW1vbi9jb3JlLmM6MTc1NTpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vY29yZS5jLTE3NTYtXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NjMtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xubW0vZGFtb24vY29yZS5jOjE3NjQ6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYy0xNzY1LVxubW0vZGFtb24vY29yZS5jOjE3NjY6XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jLTE3NjctXHRcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgwOT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgzNy0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxODM4OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE4Mzkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODU3LSAqL1xubW0vZGFtb24vY29yZS5jOjE4NTg6aW50IGRhbW9uX25yX3J1bm5pbmdfY3R4cyh2b2lkKVxubW0vZGFtb24vY29yZS5jLTE4NTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xOTU3PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB2b2lkIF9fZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwMzgtICovXG5tbS9kYW1vbi9jb3JlLmM6MjAzOTp2b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxubW0vZGFtb24vY29yZS5jLTIwNDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDU0PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjktICovXG5tbS9kYW1vbi9jb3JlLmM6MjA3MDppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIwNzEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTA1LSAqL1xubW0vZGFtb24vY29yZS5jOjIxMDY6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIxMDcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTM0LS8qKlxubW0vZGFtb24vY29yZS5jOjIxMzU6ICogZGFtb3Nfd2FsaygpIC0gSW52b2tlIGEgZ2l2ZW4gZnVuY3Rpb25zIHdoaWxlIERBTU9TIHdhbGsgcmVnaW9ucy5cbm1tL2RhbW9uL2NvcmUuYy0yMTM2LSAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNDQtICoganVzdCBhZnRlciBpdCBhcHBsaWVkIGFueSBEQU1PUyBhY3Rpb25zIG9mIEBjdHggdG8gaXQuICBUaGUgaW52b2NhdGlvbiBpc1xubW0vZGFtb24vY29yZS5jOjIxNDU6ICogbWFkZSBvbmx5IHdpdGhpbiBvbmUgXHUwMDI2ZGFtb3MtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgc2luY2UgZGFtb3Nfd2FsaygpXG5tbS9kYW1vbi9jb3JlLmMtMjE0Ni0gKiBpbnZvY2F0aW9uLCBmb3IgZWFjaCBzY2hlbWUuICBUaGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gY2FuIGhlbmNlIHNhZmVseVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTUwLSAqIHBhc3NlZCBhdCBsZWFzdCBvbmUgXHUwMDI2ZGFtb3MtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIGtkYW1vbmQgbWFya3MgdGhlIHJlcXVlc3QgYXNcbm1tL2RhbW9uL2NvcmUuYzoyMTUxOiAqIGNvbXBsZXRlZCBzbyB0aGF0IGRhbW9zX3dhbGsoKSBjYW4gd2FrZXVwIGFuZCByZXR1cm4uXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTU4LSAqL1xubW0vZGFtb24vY29yZS5jOjIxNTk6aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIxNjAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjU0PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzUtXG5tbS9kYW1vbi9jb3JlLmM6MjI3NjpzdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5tbS9kYW1vbi9jb3JlLmMtMjI3Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5MS0vKlxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cbm1tL2RhbW9uL2NvcmUuYy0yMjkzLSAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMjk3OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxubW0vZGFtb24vY29yZS5jLTIyOTgte1xubW0vZGFtb24vY29yZS5jLTIyOTktXHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IHx8IHF1b3RhLVx1MDAzZXN6IHx8IHF1b3RhLVx1MDAzZW1zIHx8XG5tbS9kYW1vbi9jb3JlLmM6MjMwMDpcdFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0yMzAxLX1cbm1tL2RhbW9uL2NvcmUuYy0yMzAyLVxubW0vZGFtb24vY29yZS5jOjIzMDM6c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMjMwNC1cdFx0c3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTIzMDUte1xubW0vZGFtb24vY29yZS5jOjIzMDY6XHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpO1xubW0vZGFtb24vY29yZS5jLTIzMDctXG5tbS9kYW1vbi9jb3JlLmM6MjMwODpcdGlmICghcmV0IHx8ICFkYW1vc19xdW90YV9pc19zZXQoXHUwMDI2cy1cdTAwM2VxdW90YSkgfHwgIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5tbS9kYW1vbi9jb3JlLmMtMjMwOS1cdFx0cmV0dXJuIHJldDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMxNC0vKlxubW0vZGFtb24vY29yZS5jOjIzMTU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG5tbS9kYW1vbi9jb3JlLmMtMjMxNi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMzM5OnN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yMzQwLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxOTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIGEgdXNlciBpbnRlcmFjdHMgd2l0aCBEQU1PTiB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRpbWUgdG8gZGlnIGluISBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhvc2Ugc3lzZnMgaW50ZXJhY3Rpb25zLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgREFNT04mIzM5O3MgZnVuY3Rpb25hbGl0eSBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB1c2VyIGNvbW1hbmRzIGFyZSBpbnRlcnByZXRlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBqb3VybmV5LCBob3BlZnVsbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzUwOSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTY6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE3LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoyMDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBrbWFsbG9jX29iaigqcmFuZ2UpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MzE9c3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zMy17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz00MD1zdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo0MzpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00NS1cdHVuc2lnbmVkIGxvbmcgbWluO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTU2PXN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjcte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXHR1bnNpZ25lZCBsb25nIG1heDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgxOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaikpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODQtfVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21pbl9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg3LVx0XHRfX0FUVFJfUldfTU9ERShtaW4sIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkwLVx0XHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0Olx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk2LX07XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk4LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTk6Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMjpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMy19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwNjpzdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNy1cdFx0Y2hhciAqbWVtY2dfcGF0aF9idWYsIGNoYXIgKnBhdGgpXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNC1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNTpcdFx0aWYgKGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEobWVtY2csIHBhdGgsIG1lbWNnX3BhdGgpKSB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzYtXHRcdFx0KmlkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjk6ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2Uge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTItXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mjg6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjktXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM0OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNzpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQxLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Njp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTE6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUyOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTc9dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24sXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwMj1zdGF0aWMgdm9pZCBkYW1vc19zeXNmc19yZWdpb25fcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24pXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA5PXN0YXRpYyBzc2l6ZV90IHN0YXJ0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI3PXN0YXRpYyBzc2l6ZV90IG5yX2FjY2Vzc2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyOS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMwOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzMTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzY9c3RhdGljIHNzaXplX3QgYWdlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVx0XHRfX0FUVFJfUk9fTU9ERShzdGFydCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZW5kX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ni1cdFx0X19BVFRSX1JPX01PREUoZW5kLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjktXHRcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVx0XHRfX0FUVFJfUk9fTU9ERShhZ2UsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc1LVx0XHRfX0FUVFJfUk9fTU9ERShzel9maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc4Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODI6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4My1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4ODpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA1OmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTk9c3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyLCAqbmV4dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDUtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDgtXHRcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1My19O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTgtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU5Olx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2MC19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzY2OnN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY3LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM3OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzgxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg3Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zOTI9c3RhdGljIHNzaXplX3Qgc3pfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozOTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTctXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwMT1zdGF0aWMgc3NpemVfdCBucl9hcHBsaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDA0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDEyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDE0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTk9c3RhdGljIHNzaXplX3Qgc3pfb3BzX2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDIzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDI0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00Mjg9c3RhdGljIHNzaXplX3QgcXRfZXhjZWVkc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzMtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NDY9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ1NT1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NjAtXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHMsIGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Njkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzEtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Mi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzQtXHRcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVx0XHRfX0FUVFJfUk9fTU9ERShzel90cmllZCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgwLVx0XHRfX0FUVFJfUk9fTU9ERShucl9hcHBsaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODMtXHRcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXHRcdF9fQVRUUl9ST19NT0RFKHN6X29wc19maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODktXHRcdF9fQVRUUl9ST19NT0RFKHF0X2V4Y2VlZHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkyLVx0XHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cdFx0X19BVFRSX1JXX01PREUobWF4X25yX3NuYXBzaG90cywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NzpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTg6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDM6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDQ6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNi1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA3LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA4OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc3RhdHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc3RhdHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTExOlx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUxMi1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTM6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQxOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDItXHRcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXHRpZiAoZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01OTM9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01OTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5OC1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02Mjc9c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjMxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MzItXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY1Mj1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1Ny1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjYxPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY2NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2Ni1cdGJvb2wgbWF0Y2hpbmc7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY3Nj1zdGF0aWMgc3NpemVfdCBhbGxvd19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cdGJvb2wgYWxsb3c7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwMi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVx0aW50IGxlbjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3Olx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzEwLVx0XHRcdGZpbHRlci1cdTAwM2VtZW1jZ19wYXRoID8gZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGggOiBcJiMzNDtcJiMzNDspO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXHRyZXR1cm4gbGVuO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzE3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cdHN0cnNjcHkocGF0aCwgYnVmLCBjb3VudCAmIzQzOyAxKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3Mjc6XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjgtXHRcdGtmcmVlKHBhdGgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MzItXHRmaWx0ZXItXHUwMDNlbWVtY2dfcGF0aCA9IHBhdGg7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzMzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczNC1cdHJldHVybiBjb3VudDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM3PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc0Nj1zdGF0aWMgc3NpemVfdCBhZGRyX3N0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1MS1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NjU9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2Ny17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyMzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikga2VybmVsIHN5c2ZzIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBga2RhbW9uZHNgIHN0YXRlIGNvbnRyb2wuIEkmIzM5O20gY3VyaW91cyB3aGF0IGhhcHBlbnMgdW5kZXIgdGhlIGhvb2Qgd2hlbiBJIHdyaXRlICYjMzQ7b24mIzM0OyBvciAmIzM0O2NvbW1pdCYjMzQ7IHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvLi4uL3N0YXRlYCBmaWxlLiBUaGUgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgc3RhdGVfc3RvcmVgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcgLSB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhvc2Ugc3lzZnMgd3JpdGVzIGFuZCB0cmFuc2xhdGVzIHRoZW0gaW50byBEQU1PTiYjMzk7cyBvcGVyYXRpb25hbCBzdGF0ZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgJiMzNDtvbiYjMzQ7IGFjdGl2YXRlcyBhIG1vbml0b3IsIGFuZCB3aGF0ICYjMzQ7Y29tbWl0JiMzNDsgdHJ1bHkgc2lnbmlmaWVzIGluIHRlcm1zIG9mIGNoYW5nZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMzY0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNDAzLVxubW0vZGFtb24vc3lzZnMuYzoyNDA0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDUtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN0YXRlX3N0b3JlYCBpbiBgbW0vZGFtb24vc3lzZnMuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgREFNT04mIzM5O3Mgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb3JlIG9mIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIGNoYW5naW5nIHRoZSBtb25pdG9yJiMzOTtzIG9wZXJhdGlvbmFsIHN0YXRlIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGZvciB0cmFuc2l0aW9uaW5nIGJldHdlZW4gc3RhdGVzIGxpa2UgJiMzOTtydW5uaW5nJiMzOTssICYjMzk7c3RvcHBlZCYjMzk7LCBhbmQgYW55IGN1c3RvbSBzdGF0ZXMgREFNT04gbWlnaHQgc3VwcG9ydC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgYXR0cmlidXRlcyBjb25uZWN0IHRvIHRoZSBpbnRlcm5hbCBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZWNoYW5pc21zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyIGRpZmZlcmVudCBvcGVyYXRpb25hbCBiZWhhdmlvcnMgd2l0aGluIHRoZSBtb25pdG9yaW5nIGFuZCByZWNsYW1hdGlvbiBsb29wcy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBzb21lIGVycm9yIGhhbmRsaW5nIGhlcmU7IEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpbnZhbGlkIHN0YXRlIHJlcXVlc3RzIG9yIG90aGVyIGlzc3VlcyBhcmUgZGVhbHQgd2l0aC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyByb2J1c3QgdGhlIGludGVyZmFjZSBpcy4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIHN0YXRlIHZhcmlhYmxlIGFuZCBlbnN1cmUgYXRvbWljIHRyYW5zaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzOTA6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbjIzOTE6XHRcdFx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VzY2hlbWVzKTtcbjIzOTI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XG4yMzkzOlx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM5NDpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyxcbjIzOTU6XHRcdFx0XHRcdGtkYW1vbmQpO1xuMjM5NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1RVTkVEX0lOVEVSVkFMUzpcbjIzOTc6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzk4Olx0XHRcdFx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzLCBrZGFtb25kKTtcbjIzOTk6XHRcdGRlZmF1bHQ6XG4yNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjQwMTpcdFx0fVxuMjQwMjpcdH1cbjI0MDM6XHRcbjI0MDQ6XHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuMjQwNTpcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbjI0MDY6XHR7XG4yNDA3Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuMjQwODpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kLCBrb2JqKTtcbjI0MDk6XHRcdGVudW0gZGFtb25fc3lzZnNfY21kIGNtZDtcbjI0MTA6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjI0MTE6XHRcbjI0MTI6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcbjI0MTM6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI0MTQ6XHRcdGZvciAoY21kID0gMDsgY21kIFx1MDAzYyBOUl9EQU1PTl9TWVNGU19DTURTOyBjbWQmIzQzOyYjNDM7KSB7XG4yNDE1Olx0XHRcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XG4yNDE2Olx0XHRcdFx0cmV0ID0gZGFtb25fc3lzZnNfaGFuZGxlX2NtZChjbWQsIGtkYW1vbmQpO1xuMjQxNzpcdFx0XHRcdGJyZWFrO1xuMjQxODpcdFx0XHR9XG4yNDE5Olx0XHR9XG4yNDIwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4yNDIxOlx0XHRpZiAoIXJldClcbjI0MjI6XHRcdFx0cmV0ID0gY291bnQ7XG4yNDIzOlx0XHRyZXR1cm4gcmV0O1xuMjQyNDpcdH1cbjI0MjU6XHRcbjI0MjY6XHRzdGF0aWMgc3NpemVfdCBwaWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbjI0Mjc6XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4yNDI4Olx0e1xuMjQyOTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBjb250YWluZXJfb2Yoa29iaixcbjI0MzA6XHRcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCwga29iaik7XG4yNDMxOlx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4yNDMyOlx0XHRpbnQgcGlkID0gLTE7XG4yNDMzOlx0XG4yNDM0Olx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4yNDM1Olx0XHRcdHJldHVybiAtRUJVU1k7XG4yNDM2Olx0XHRjdHggPSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eDtcbjI0Mzc6XHRcdGlmICghY3R4KVxuMjQzODpcdFx0XHRnb3RvIG91dDtcbjI0Mzk6XHRcbjI0NDA6XHRcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XG4yNDQxOlx0XHRpZiAocGlkIFx1MDAzYyAwKVxuMjQ0MjpcdFx0XHRwaWQgPSAtMTtcbjI0NDM6XHRvdXQ6XG4yNDQ0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4yNDQ1Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBwaWQpO1xuMjQ0NjpcdH1cbjI0NDc6XHRcbjI0NDg6XHRzdGF0aWMgc3NpemVfdCByZWZyZXNoX21zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4yNDQ5Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBQYXRjaCBSZXZpZXc6IEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgYXJlYXMgd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QXJlIHRoZXNlIGZ1bmN0aW9ucyBhbmQgZmVhdHVyZXMgcmVhY2hhYmxlIGFuZCB0aHVzLCB3b3J0aCBmdXp6aW5nPyYjMzQ7IFllcywgYWJzb2x1dGVseS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1vbml0b3JpbmcgYW5kIG1hbmFnZW1lbnQgY29tcG9uZW50cyB3aXRoaW4gREFNT04uIEdpdmVuIERBTU9OJiMzOTtzIGFjY2Vzc2liaWxpdHkgdmlhIHN5c2ZzIGFuZCBrZXJuZWwgbW9kdWxlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRnJvbSB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUsIGBjb3JlLmNgIHJlcXVpcmVzIGBDT05GSUdfREFNT049eWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBgdmFkZHIuY2AgcmVxdWlyZXMgYENPTkZJR19EQU1PTl9WQUREUj15YCwgd2hpY2ggZGVwZW5kcyBvbiBgREFNT05gIGFuZCBgTU1VYC4gU2ltaWxhcmx5LCBgcGFkZHIuY2AgbmVlZHMgYENPTkZJR19EQU1PTl9QQUREUj15YCwgYWxzbyBkZXBlbmRpbmcgb24gYERBTU9OYCBhbmQgYE1NVWAuIEZpbmFsbHksIHRoZSBzeXNmcyBpbnRlcmZhY2UgbmVlZHMgYENPTkZJR19EQU1PTl9TWVNGUz15YCwgbmF0dXJhbGx5IGRlcGVuZGluZyBvbiBgREFNT05gIGFuZCBgU1lTRlNgLiBUaGlzIGdpdmVzIHVzIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBwcmUtcmVxdWlzaXRlcyBmb3IgdGhlIGNvZGUgdG8gYmUgY29tcGlsZWQuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgcXVvdGEsIG1pZ3JhdGlvbiwgb3IgbWVtY2cgZmVhdHVyZXMsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGFueSBgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQYCBvciBgTUVNQ0dgIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb25zIGJlaW5nIGNoYW5nZWQgYW5kIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgYSBmdXp6ZXIgc2hvdWxkIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yODA1PXN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgzMi1cbm1tL2RhbW9uL2NvcmUuYzoyODMzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmMtMjgzNC1cdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTI5ODc9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yOTkyLVxubW0vZGFtb24vY29yZS5jOjI5OTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbm1tL2RhbW9uL2NvcmUuYy0yOTk0LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzAyND1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwNDMtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDQ0Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNDUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgbW0vZGFtb24vY29yZS5jYCBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCByZWZsZWN0aW9uOgoKKipEQU1PTiYjMzk7cyBNZW1vcnkgQWNjZXNzIFBvaW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBkaXZpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgSSYjMzk7bSBob21pbmcgaW4gb24gdGhlIGAjaWZkZWZgIGJsb2NrcyBzdXJyb3VuZGluZyBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IGhhdmUgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5LCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSYjMzk7cmUgY29uZGl0aW9uYWwgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZS1jYXNlcyBhbmQgd2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyB0cmlnZ2VyIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgbG9naWMuIEkga25vdyB0aGVzZSBhcmUgbGlrZWx5IHRoZSBidWlsZGluZyBibG9ja3MsIG9yIGFjY2VzcyBwb2ludHMgZm9yIG1lbW9yeSBhY2Nlc3MsIHVzZWQgaW4gdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBmcmFtZXdvcmssIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW5kaWNhdGVzIHNvbWUgZGVncmVlIG9mIGNvbmZpZ3VyYXRpb24gZmxleGliaWxpdHkuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpZmZlcmVudCBtZW1vcnkgbm9kZSBjb25maWd1cmF0aW9ucywgbWVtb3J5IGNncm91cCBzdXBwb3J0LCBvciBwb3NzaWJseSBldmVuIHRhcmdldCBhcmNoaXRlY3R1cmUgZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRlZmluZXMgdGhlIGJ1aWxkIGNvbmRpdGlvbiwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBEQU1PTiBmdW5jdGlvbmFsaXR5IHdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgYW5kIHdoZW4gdGhleSBhcmVuJiMzOTt0LiBUaW1lIHRvIHRyYWNlIHRob3NlIHByZXByb2Nlc3NvciBzeW1ib2xzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgwMDpcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbjI4MDE6XHR7XG4yODAyOlx0XHRyZXR1cm4gbmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKTtcbjI4MDM6XHR9XG4yODA0Olx0XG4yODA1Olx0c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuMjgwNjpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbjI4MDc6XHR7XG4yODA4Olx0XHRzdHJ1Y3Qgc3lzaW5mbyBpO1xuMjgwOTpcdFx0X19rZXJuZWxfdWxvbmdfdCBudW1lcmF0b3I7XG4yODEwOlx0XG4yODExOlx0XHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVx1MDAzZW5pZCkpIHtcbjI4MTI6XHRcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4yODEzOlx0XHRcdFx0cmV0dXJuIDA7XG4yODE0Olx0XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbjI4MTU6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODE2Olx0XHR9XG4yODE3Olx0XG4yODE4Olx0XHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuMjgxOTpcdFx0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIGkuZnJlZXJhbSkge1xuMjgyMDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcbjI4MjE6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODIyOlx0XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbjI4MjM6XHRcdFx0XHRyZXR1cm4gMDtcbjI4MjQ6XHRcdH1cbjI4MjU6XHRcbjI4MjY6XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuMjgyNzpcdFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuMjgyODpcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuMjgyOTpcdFx0XHRudW1lcmF0b3IgPSBpLmZyZWVyYW07XG4yODMwOlx0XHRyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pO1xuMjgzMTpcdH1cbjI4MzI6XHRcbjI4MzM6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxuMjgzNDpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbjI4MzU6XHR7XG4yODM2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4yODM3Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4yODM4Olx0XHR1bnNpZ25lZCBsb25nIHVzZWRfcGFnZXMsIG51bWVyYXRvcjtcbjI4Mzk6XHRcdHN0cnVjdCBzeXNpbmZvIGk7XG4yODQwOlx0XG4yODQxOlx0XHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVx1MDAzZW5pZCkpIHtcbjI4NDI6XHRcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbjI4NDM6XHRcdFx0XHRyZXR1cm4gMDtcbjI4NDQ6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4yODQ1Olx0XHRcdFx0cmV0dXJuIDEwMDAwO1xuMjg0NjpcdFx0fVxuMjg0NzpcdFxuMjg0ODpcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKGdvYWwtXHUwMDNlbWVtY2dfaWQpO1xuMjg0OTpcdFx0aWYgKCFtZW1jZykge1xuMjg1MDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg1MTpcdFx0XHRcdHJldHVybiAwO1xuMjg1MjpcdFx0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbjI4NTM6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODU0Olx0XHR9XG4yODU1Olx0XG4yODU2Olx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbjI4NTc6XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEoZ29hbC1cdTAwM2VuaWQpKTtcbjI4NTg6XHRcdHVzZWRfcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKTtcbjI4NTk6XHRcdHVzZWRfcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRob3NlIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgIGFuZCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAgZnVuY3Rpb25zLiBMb29raW5nIGF0IGxpbmVzIDI3ODAtMjgwNSBhbmQgMjk4MC0zMDAwLCBJIGV4cGVjdCB0byBmaW5kIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgY29udHJvbCB0aGVpciBpbmNsdXNpb24uIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYnVpbGQgdGFyZ2V0LCBtYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBncmFudWxhcml0eSwgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlbiBjb3JyZWxhdGUgdGhhdCB3aXRoIHRoZSBwcm9qZWN0JiMzOTtzIGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb25zLCBhbmQgYnVpbGQgc2NyaXB0cy4gVW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4gb3B0aW1pemluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGlzIGNvZGUuIEl0IGNvdWxkIHBvaW50IHRvIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgcGF0aHMsIGRlYnVnIGZsYWdzLCBvciBldmVuIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwcmVwcm9jZXNzb3IgaXMgdXAgdG8hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0I2lmZGVmIENPTkZJR19QU0lcbjI3ODE6XHRcbjI3ODI6XHRzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbjI3ODM6XHR7XG4yNzg0Olx0XHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2cHNpX2Rpc2FibGVkKSlcbjI3ODU6XHRcdFx0cmV0dXJuIDA7XG4yNzg2Olx0XHRyZXR1cm4gZGl2X3U2NChwc2lfc3lzdGVtLnRvdGFsW1BTSV9BVkdTXVtQU0lfTUVNICogMl0sXG4yNzg3Olx0XHRcdFx0TlNFQ19QRVJfVVNFQyk7XG4yNzg4Olx0fVxuMjc4OTpcdFxuMjc5MDpcdCNlbHNlXHQvKiBDT05GSUdfUFNJICovXG4yNzkxOlx0XG4yNzkyOlx0c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxuMjc5MzpcdHtcbjI3OTQ6XHRcdHJldHVybiAwO1xuMjc5NTpcdH1cbjI3OTY6XHRcbjI3OTc6XHQjZW5kaWZcdC8qIENPTkZJR19QU0kgKi9cbjI3OTg6XHRcbjI3OTk6XHQjaWZkZWYgQ09ORklHX05VTUFcbjI4MDA6XHRzdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXG4yODAxOlx0e1xuMjgwMjpcdFx0cmV0dXJuIG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSk7XG4yODAzOlx0fVxuMjgwNDpcdFxuMjgwNTpcdHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbjI4MDY6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4yODA3Olx0e1xuMjgwODpcdFx0c3RydWN0IHN5c2luZm8gaTtcbjI4MDk6XHRcdF9fa2VybmVsX3Vsb25nX3QgbnVtZXJhdG9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIERBTU9OLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI5ODAtMzAyMCBpbiBgbW0vZGFtb24vY29yZS5jYC4gTGV0JiMzOTtzIGFzc3VtZSBJJiMzOTttIGRpZ2dpbmcgaW50byBhIHBlcmZvcm1hbmNlIGlzc3VlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc29tZSBhc3BlY3Qgb2YgdGhlIERBTU9OIG1vbml0b3Jpbmcvb3B0aW1pc2F0aW9uLiBGaXJzdCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhIGJsb2NrIG9mIGNvZGUgd2l0aGluIGEgZnVuY3Rpb24uIEdpdmVuIHRoZSBmaWxlIGFuZCBsaWtlbHkgc2NvcGUgb2YgREFNT04sIEkgYW50aWNpcGF0ZSB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBtb25pdG9yaW5nIGEgcmVnaW9uLCBwb3RlbnRpYWxseSB1cGRhdGluZyBzdGF0cywgb3IgbWF5YmUgZXZlbiB0cmlnZ2VyaW5nIHNvbWUgYWN0aW9uIGJhc2VkIG9uIERBTU9OJiMzOTtzIGZlZWRiYWNrLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5IGluZGljYXRvcnM6IGRhdGEgc3RydWN0dXJlIGFjY2Vzc2VzLCBjYWxscyB0byBvdGhlciBEQU1PTiBmdW5jdGlvbnMgKGxpa2UgdGhlIHVwZGF0ZSBvciBhY3Rpb24gZnVuY3Rpb25zKSwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHNlZW1zIHJlbGV2YW50IHRvIHRoZSBzdXNwZWN0ZWQgcGVyZm9ybWFuY2UgcHJvYmxlbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCBhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIG1vZGlmaWVkLiBBcmUgdGhlcmUgYW55IGxvY2tzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3k/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LCBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBhbnkgbG9vcHMgb3IgYnJhbmNoZXMuCgpUaGlzIGNvdWxkIGJlIHdoZXJlIERBTU9OIGRlY2lkZXMgdG8gaW5pdGlhdGUgc29tZSBraW5kIG9mIGFjdGlvbiBiYXNlZCBvbiB0aGUgaWRlbnRpZmllZCBob3QgcmVnaW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgaWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVwIGFuZCBkb3duIHRoZSBjYWxsIHN0YWNrIHRvIHJlY29uc3RydWN0IHRoZSBzdG9yeS4gSSYjMzk7bGwgYWxzbyBiZSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhlIHByb2JsZW0uIElmIGl0JiMzOTtzIGEgcGVyZm9ybWFuY2UgaXNzdWUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW50IGFsZ29yaXRobXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTgwOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4yOTgxOlx0XHRcdHN0cnVjdCBkYW1vcyAqcywgaW50IG5pZClcbjI5ODI6XHR7XG4yOTgzOlx0XHRyZXR1cm4gMDtcbjI5ODQ6XHR9XG4yOTg1Olx0I2VuZGlmIC8qIENPTkZJR19EQU1PTl9QQUREUiAqL1xuMjk4NjpcdCNlbHNlIC8qIENPTkZJR19OVU1BICovXG4yOTg3Olx0c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuMjk4ODpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbjI5ODk6XHR7XG4yOTkwOlx0XHRyZXR1cm4gMDtcbjI5OTE6XHR9XG4yOTkyOlx0XG4yOTkzOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbjI5OTQ6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4yOTk1Olx0e1xuMjk5NjpcdFx0cmV0dXJuIDA7XG4yOTk3Olx0fVxuMjk5ODpcdFxuMjk5OTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMzAwMDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIGludCBuaWQpXG4zMDAxOlx0e1xuMzAwMjpcdFx0cmV0dXJuIDA7XG4zMDAzOlx0fVxuMzAwNDpcdCNlbmRpZiAvKiBDT05GSUdfTlVNQSAqL1xuMzAwNTpcdFxuMzAwNjpcdC8qXG4zMDA3Olx0ICogUmV0dXJucyBMUlUtYWN0aXZlIG9yIGluYWN0aXZlIG1lbW9yeSB0byB0b3RhbCBMUlUgbWVtb3J5IHNpemUgcmF0aW8uXG4zMDA4Olx0ICovXG4zMDA5Olx0c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbjMwMTA6XHR7XG4zMDExOlx0XHR1bnNpZ25lZCBsb25nIGFjdGl2ZSwgaW5hY3RpdmUsIHRvdGFsO1xuMzAxMjpcdFxuMzAxMzpcdFx0LyogVGhpcyBzaG91bGQgYWxpZ24gd2l0aCAvcHJvYy9tZW1pbmZvIG91dHB1dCAqL1xuMzAxNDpcdFx0YWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfQUNUSVZFX0FOT04pICYjNDM7XG4zMDE1Olx0XHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTtcbjMwMTY6XHRcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfQU5PTikgJiM0MztcbjMwMTc6XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfRklMRSk7XG4zMDE4Olx0XHR0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpO1xuMzAxOTpcdFx0aWYgKGFjdGl2ZV9yYXRpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzNDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBBUEkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AsIG9idmlvdXNseS4gQWxzbywgY29uc2lkZXJpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5VTUEsIHNvIGBOVU1BYCBhbmQgbWVtb3J5IHF1b3RhcyBjb21lIGludG8gcGxheSwgYXMgd2VsbCBhcyBgTUVNQ0dgIGZvciBxdW90YSBnb2Fscy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24uCgpOZXh0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVzc2VudGlhbCBzeW1ib2xzIGFuZCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZC4gTXkgcHJlZmVyZW5jZSBpcyBhbHdheXMgdG93YXJkcyB0aGUgbW9yZSBhY2Nlc3NpYmxlLCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBhbnkgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29yZSBmdW5jdGlvbiBwYXRocy4gSW4gYGNvcmUuY2AsIEkmIzM5O2xsIHNwZWNpZmljYWxseSBsb29rIGF0OiBgZGFtb25fc3RhcnRgLCBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9jYWxsYCwgYGRhbW9zX3dhbGtgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgYGRhbW9uX3NldF9hdHRyc2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuCgpOb3csIGZvciBgc3lzZnMuY2AsIEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaW5kIHRoZSBgc3lzZnNgIHNob3cvc3RvcmUgYXR0cmlidXRlcyBhbmQgYW55IHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGV4YW1pbmUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBzeW1ib2xzIGFyZSBleHBvc2VkIHRocm91Z2ggdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3xedm9pZCBkYW1vbl98XmludCBkYW1vc198XnZvaWQgZGFtb3NfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTUwPWJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xubW0vZGFtb24vY29yZS5jOjcxOmludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcbm1tL2RhbW9uL2NvcmUuYy03Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTk3LSAqL1xubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG4tLVxubW0vZGFtb24vY29yZS5jLTEyOC1cbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzLVxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NC1cbm1tL2RhbW9uL2NvcmUuYzoxNzU6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTE3Ni17XG4tLVxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbm1tL2RhbW9uL2NvcmUuYy00NzktXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NTkxPWJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02MDItXG5tbS9kYW1vbi9jb3JlLmM6NjAzOnZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtNjA0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NjE2PXN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyMC1cbm1tL2RhbW9uL2NvcmUuYzo2MjE6dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTYyMi17XG4tLVxubW0vZGFtb24vY29yZS5jPTYyNz1zdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTY0MS1cbm1tL2RhbW9uL2NvcmUuYzo2NDI6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTY0My17XG4tLVxubW0vZGFtb24vY29yZS5jPTY1Mj1zdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG4tLVxubW0vZGFtb24vY29yZS5jLTY1Ni1cbm1tL2RhbW9uL2NvcmUuYzo2NTc6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNjU4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzI0PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzM0LVxubW0vZGFtb24vY29yZS5jOjczNTp2b2lkIGRhbW9uX2FkZF9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzQ2PXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxubW0vZGFtb24vY29yZS5jOjc1MTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy03NTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03OTItXG5tbS9kYW1vbi9jb3JlLmM6NzkzOnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNzk0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODAzPXN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODA3LVxubW0vZGFtb24vY29yZS5jOjgwODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtODA5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODE2LVxubW0vZGFtb24vY29yZS5jOjgxNzp2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04MTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04NzI9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODc5LVxubW0vZGFtb24vY29yZS5jOjg4MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNDctICovXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA5NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxubW0vZGFtb24vY29yZS5jLTEwOTctXHRcdFx0c3NpemVfdCBucl9zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTM5PXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTYxLSAqL1xubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE2My17XG4tLVxubW0vZGFtb24vY29yZS5jPTE4MDk9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MzctICovXG5tbS9kYW1vbi9jb3JlLmM6MTgzODppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xODM5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxODU4OmludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZClcbm1tL2RhbW9uL2NvcmUuYy0xODU5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTk1Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXG5tbS9kYW1vbi9jb3JlLmM6MTk3NDppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAxOT1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDM4LSAqL1xubW0vZGFtb24vY29yZS5jOjIwMzk6dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA1ND1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDY5LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNzA6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0yMDcxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEwNS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTA2OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTA3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE1OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTU5OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTYwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzk2ND1zdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTk1LSAqL1xubW0vZGFtb24vY29yZS5jOjM5OTY6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jLTM5OTctXHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MDIxOnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxubW0vZGFtb24vY29yZS5jLTQwMjIte1xuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTQtICovXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjE1OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNi1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00NS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6NDY6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ3LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cCk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI0PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy00MS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0Mjp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTcyLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjczOnZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA1LVx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTQ5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MDppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MS1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTczLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3NDp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTc1LXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9OD1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtOS1cbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTE6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEyOnZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTMtYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xNC1cbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNTppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVx0XHRcdHN0cnVjdCBkYW1vcyAqcyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTc6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE4LVx0XHRcdHN0cnVjdCBkYW1vcyAqcyk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04Mi17XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0xNz1zdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9MzQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM3PWV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM5OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MC1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDMtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01Mi1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1Nzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2ODA9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjg1OnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODYte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5Mjk6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTMwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDYyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjM6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDY0LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwMC0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTAxOnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAyLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNDctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE0ODppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNDktXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODM0MgoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiA5NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gRnJhbWV3b3JrIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGV4ZWN1dGlvbiBvZiBEQU1PUyBzY2hlbWVzIHdvcmtzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBkYW1vc19hcHBseV9zY2hlbWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtkYW1vbmQgbG9vcCwgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGUgb3BlcmF0aW9ucyBmb3IgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSByZWdpc3RlcmVkIGFuZCBzZWxlY3RlZCBkeW5hbWljYWxseSwgYW5kIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgdGhlIG1vbml0b3JpbmcgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBjcnVjaWFsIHN5bWJvbHMgZm9yIGZ1enppbmcuIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NhbGxgLCBgZGFtb3Nfd2Fsa2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGxvb2sgbGlrZSBleGNlbGxlbnQgc3RhcnRpbmcgcG9pbnRzLCBnaXZlbiB0aGVpciByb2xlcyBpbiBpbml0aWFsaXppbmcsIGNvbmZpZ3VyaW5nLCBhbmQgYXBwbHlpbmcgc2NoZW1lcy4KCk5leHQsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gV2UgYWJzb2x1dGVseSBuZWVkIGBEQU1PTmAsIG5hdHVyYWxseS4gIFRoZW4gYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHZpdGFsIGZvciBlbmFibGluZyB0aGUgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLgoKVG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyByZXZpc2l0IHRoZSBLY29uZmlnIGZpbGUuICBJIHNlZSBhIGZldyBtb3JlIG9wdGlvbnMsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYCwgYWxsIGNvbmRpdGlvbmFsIG9uIGBEQU1PTl9QQUREUmAuIFdvcnRoIGtlZXBpbmcgaW4gbWluZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuCkluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHJlZ2lvbiBzcGxpdHRpbmcsIG1lbW9yeSBib3VuZCBjaGVja3MsIGFuZCBhIGNydWNpYWwgZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gdGhlIGdvYWwgY2FsY3VsYXRpb24gbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IGNvcnJlY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIGEgZnJhbWV3b3JrIHRvdWNoaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBxdW90YS4KCkluIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIHVwZGF0ZXMgdG8gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24gdXNpbmcgYFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pYCBmb3IgZm9saW9zIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgYXJlIGNyaXRpY2FsIHRvIG1haW50YWluIGFjY3VyYWN5LiBUaGlzIG1ha2VzIHNlbnNlLgoKRmluYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgIGNvcnJlY3RzIHRoZSBpdGVyYXRpb24gb3ZlciBQTUQgZW50cmllcywgZW5zdXJpbmcgY29ycmVjdCBzdHJpZGUgY2FsY3VsYXRpb25zIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLXBhZ2UgZm9saW9zIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCgpGcm9tIHRoaXMgcmV2aWV3LCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgKmFic29sdXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBmaXhlcyB0YXJnZXQgZnVuY3Rpb25hbCBidWdzIGFmZmVjdGluZyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiwgaW5jbHVkaW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGVzc2VudGlhbCBtZW1vcnkgZ29hbCBjYWxjdWxhdGlvbnMuIFRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBhbGwgaW1wb3J0YW50LgoKTXkgVmVyZGljdDoKLSBgV29ydGhGdXp6aW5nYDogdHJ1ZQotIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0RBTU9OJiMzNDssICYjMzQ7REFNT05fVkFERFImIzM0OywgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LCAmIzM0O0RBTU9OX1NZU0ZTJiMzNDtdYAotIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7ZGFtb25fc3RhcnQmIzM0OywgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywgJiMzNDtkYW1vbl9jYWxsJiMzNDssICYjMzQ7ZGFtb3Nfd2FsayYjMzQ7LCAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDtdYAotIGBSZWFzb25pbmdgOiBDb3JyZWN0cyBpbXBvcnRhbnQgZnVuY3Rpb25hbCBhbmQgbWVtb3J5LXJlbGF0ZWQgYnVncyBpbiBEQU1PTiBvcGVyYXRpb25zLCB3aGljaCBhcmUgdHJpZ2dlcmVkIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCBjb3JlIERBTU9OIGZ1bmN0aW9ucy4KCk5vdywgSSYjMzk7bGwgcGFzcyB0aGlzIGluZm9ybWF0aW9uIGFsb25nIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDssCiAgICAmIzM0O2RhbW9zX3dhbGsmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc2V2ZXJhbCBmdW5jdGlvbmFsIGJ1Z3MgaW4gREFNT04gY29yZSwgcGh5c2ljYWwgYWRkcmVzcyAocGFkZHIpLCBhbmQgdmlydHVhbCBhZGRyZXNzICh2YWRkcikgb3BlcmF0aW9uczogaGFuZGxpbmcgcmVnaW9uIHNwbGl0dGluZyBmYWlsdXJlIGluIGRhbW9zX2FwcGx5X3NjaGVtZSwgcHJldmVudGluZyBkaXZpc2lvbiBieSB6ZXJvIGFuZCBvdXQtb2YtcmFuZ2UgcXVvdGEgY2FsY3VsYXRpb25zIGluIG5vZGUvbWVtY2cgbWVtb3J5IHF1b3RhIGdvYWxzLCBmaXhpbmcgZm9saW8gYWRkcmVzcyBhZHZhbmNlbWVudCBpbiBwYWRkciBzY2hlbWUgb3BlcmF0aW9ucyAocGFnZW91dCwgZGVhY3RpdmF0ZSwgbWlncmF0ZSwgc3RhdCksIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgUE1EIGl0ZXJhdGlvbiBzdHJpZGVzIGFjcm9zcyBtdWx0aS1wYWdlIGZvbGlvcyBpbiB2YWRkciBzY2hlbWUgb3BlcmF0aW9ucyAobWlncmF0ZSwgc3RhdCkuIEFsbCB0aGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OywKICAgICYjMzQ7ZGFtb3Nfd2FsayYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyBpbiBEQU1PTiBjb3JlLCBwaHlzaWNhbCBhZGRyZXNzIChwYWRkciksIGFuZCB2aXJ0dWFsIGFkZHJlc3MgKHZhZGRyKSBvcGVyYXRpb25zOiBoYW5kbGluZyByZWdpb24gc3BsaXR0aW5nIGZhaWx1cmUgaW4gZGFtb3NfYXBwbHlfc2NoZW1lLCBwcmV2ZW50aW5nIGRpdmlzaW9uIGJ5IHplcm8gYW5kIG91dC1vZi1yYW5nZSBxdW90YSBjYWxjdWxhdGlvbnMgaW4gbm9kZS9tZW1jZyBtZW1vcnkgcXVvdGEgZ29hbHMsIGZpeGluZyBmb2xpbyBhZGRyZXNzIGFkdmFuY2VtZW50IGluIHBhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChwYWdlb3V0LCBkZWFjdGl2YXRlLCBtaWdyYXRlLCBzdGF0KSwgYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyBQTUQgaXRlcmF0aW9uIHN0cmlkZXMgYWNyb3NzIG11bHRpLXBhZ2UgZm9saW9zIGluIHZhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChtaWdyYXRlLCBzdGF0KS4gQWxsIHRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyY2U4M2ZlMjE3ZDJiNmQzMzdiYmUyYWNmMmU3NjJjMjUxOWFkMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNjozNjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJCWMtJmd0O21pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzeikKIAkJCQlnb3RvIHVwZGF0ZV9zdGF0OwotCQkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTsKJiM0MzsJCQlpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSkKJiM0MzsJCQkJZ290byB1cGRhdGVfc3RhdDsKIAkJfQogCQlpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKQogCQkJcmV0dXJuOwpAQCAtMjgxNSw2ICYjNDM7MjgxNiwxMyBAQCBzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoCiAJfQogCiAJc2lfbWVtaW5mb19ub2RlKCZhbXA7aSwgZ29hbC0mZ3Q7bmlkKTsKJiM0MzsJaWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gJmx0OyBpLmZyZWVyYW0pIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKJiM0MzsJCQlyZXR1cm4gMTAwMDA7CiYjNDM7CQllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KQEAgLTI4NTUsNiAmIzQzOzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKIAlzaV9tZW1pbmZvX25vZGUoJmFtcDtpLCBnb2FsLSZndDtuaWQpOwomIzQzOwlpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSAmbHQ7IHVzZWRfcGFnZXMpIHsKJiM0MzsJCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKQomIzQzOwkJCXJldHVybiAxMDAwMDsKJiM0MzsJCWVsc2UJLyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KIAlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gdXNlZF9wYWdlczsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqLwpAQCAtMzAwMSw3ICYjNDM7MzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pCiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0FDVElWRV9GSUxFKTsKIAlpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0FOT04pICYjNDM7CiAJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgJiM0MzsgTFJVX0lOQUNUSVZFX0ZJTEUpOwotCXRvdGFsID0gYWN0aXZlICYjNDM7IGluYWN0aXZlOwomIzQzOwl0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpOwogCWlmIChhY3RpdmVfcmF0aW8pCiAJCXJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpOwogCXJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQllbHNlCiAJCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9fbGlzdCk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpCkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZSgKIAkJCWZvbGlvX2RlYWN0aXZhdGUoZm9saW8pOwogCQlhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiBwdXRfZm9saW86Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKQEAgLTM1MCw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7CiAJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtmb2xpb19saXN0KTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCWFwcGxpZWQgPSBkYW1vbl9taWdyYXRlX3BhZ2VzKCZhbXA7Zm9saW9fbGlzdCwgcy0mZ3Q7dGFyZ2V0X25pZCk7CkBAIC0zNzksNyAmIzQzOzM3OSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAogCQlpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0OwotCQlhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKJiM0MzsJCWFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAl9CiAJcy0mZ3Q7bGFzdF9hcHBsaWVkID0gZm9saW87CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCAwNjQ4NDAwYjJkNjViLi5jOGMzMmIyYWUwNDAyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAwOwogCiAJZm9yICg7IGFkZHIgJmx0OyBuZXh0OyBwdGUgJiM0Mzs9IG5yLCBhZGRyICYjNDM7PSBuciAqIFBBR0VfU0laRSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKJiM0MzsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiAKQEAgLTY4MSw3ICYjNDM7NjgzLDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAkJZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstJmd0O3ZtYSwgYWRkciwgZGVzdHMsCiAJCQkJbWlncmF0aW9uX2xpc3RzKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQlwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpOwomIzQzOwkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CiAJcmV0dXJuIDA7CkBAIC04MzEsNiAmIzQzOzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gMDsKIAogCWZvciAoOyBhZGRyICZsdDsgbmV4dDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiYjNDM7CiAJCW5yID0gMTsKIAkJcHRlbnQgPSBwdGVwX2dldChwdGUpOwogCkBAIC04NDQsNyAmIzQzOzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJCWlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKQogCQkJKnN6X2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwotCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCXBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7CiYjNDM7CQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4OwogCQlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gYnJpbmcgb3V0IEtNU0FOLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGFueXRoaW5nIHRoYXQgY291bGQgbGVhayBkYXRhLiBHaXZlbiB0aGUgY2hhbmdlcyBhcmUgaW4gYG1tL2RhbW9uL2AsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLCBJIG5lZWQgdG8gZm9jdXMgb24gcG90ZW50aWFsIGFyZWFzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBiZSByZWFkIG9yIHBhc3NlZCB0byB1c2Vyc3BhY2UuCgpGaXJzdCwgSSBzZWUgc2V2ZXJhbCBjaGFuZ2VzIGluIGBtbS9kYW1vbi9jb3JlLmNgIHRoYXQgbG9vayBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gb3IgdW5kZXJmbG93IGlzc3VlcyB3aXRoIGNoZWNrcyBmb3IgemVybyBvciBuZWdhdGl2ZSB2YWx1ZXMuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzY3JlYW0gJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjaGVja3MgYXJlIGV4aGF1c3RpdmUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IHN0YXRpc3RpY3MuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nLCB3aGljaCBjb3VsZCBiZSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcywgYW5kIHRoZXNlIHR5cGVzIG9mIGNhbGN1bGF0aW9ucy4gSSBzZWUgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAgcmV0dXJuIHZhbHVlcyBjaGVja2VkIHdoaWNoIGlzIGZpbmUuIFRoZSBvdGhlciBjaGFuZ2VzIGRvbiYjMzk7dCBzZWVtIGxpa2UgbWVtb3J5IGlzc3Vlcy4KClRoZSBgbW0vZGFtb24vcGFkZHIuY2AgY2hhbmdlcyBsb29rIGxpa2UgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBob3cgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSBjYWxjdWxhdGVkLCBwYXJ0aWN1bGFybHkgd2hlbiB3b3JraW5nIHdpdGggYGZvbGlvYCBzdHJ1Y3R1cmVzLiBBZGp1c3RpbmcgdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24gaW4gdGhlIGRpZmZlcmVudCBgZGFtb25fcGFfKmAgZnVuY3Rpb25zIG1ha2VzIHNlbnNlIHRvIGF2b2lkIG1pc2FsaWduZWQgYWNjZXNzZXMsIHN0ZXBwaW5nIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb2xpbyBpZiBuZWNlc3NhcnkuIFdoaWxlIG5lY2Vzc2FyeSwgdGhpcyBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzdWdnZXN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLiBIb3dldmVyLCBhbnkgdGltZSB5b3UmIzM5O3JlIHdvcmtpbmcgd2l0aCBsb3ctbGV2ZWwgbWVtb3J5IGFkZHJlc3NpbmcsIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggZW5zdXJpbmcgYWxsIG1lbW9yeSBpcyBjb3JyZWN0bHkgYWxpZ25lZCBhbmQgYWNjb3VudGVkIGZvci4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGdvIGJhY2sgYW5kIGluc3BlY3QgdGhlIGNvZGUgZm9yIGFueSBpbXBsaWNpdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgcG90ZW50aWFsIHJpc2tzLgoKRmluYWxseSwgdGhlIGBtbS9kYW1vbi92YWRkci5jYCBjaGFuZ2VzIGxvb2sgYXQgaGFuZGxpbmcgUFRFIGVudHJpZXMgYW5kIHBvdGVudGlhbGx5IGZvbGlvIHNwYW5uaW5nLiBDb3JyZWN0aW5nIGhvdyB0aGUgcmFuZ2UgaXMgaGFuZGxlZCB3aXRoaW4gYSBmb2xpbywgYXZvaWRpbmcgb3V0LW9mLWJvdW5kcyBQVEUgYWNjZXNzZXMsIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQuIFRoZSBgZm9saW9fcGFnZV9pZHhgLCBgZm9saW9fbnJfcGFnZXNgLCBhbmQgdGhlIGNhbGN1bGF0ZWQgb2Zmc2V0cyBhcmUgYXJlYXMgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2suIEkgbXVzdCBiZSBjYXJlZnVsIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2dpYyBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIHBhcnRpYWwgZm9saW9zLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aGVyZSB0aGUgUFRFIGRvZXNuJiMzOTt0IG1hcCBhIGZ1bGwgZm9saW8uIFRoaXMgaXMgdGhlIGxpa2VsaWVzdCBhcmVhIHRvIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBlc3BlY2lhbGx5IGlmIHdlIGhhdmUgcGFydGlhbCBtYXBwaW5ncywgYW5kIHRoZSBwYWdlIGlzbiYjMzk7dCBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuCgpUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoaXMgcGF0Y2ggd2l0aCBgcmVhZC1maWxlYCBhbmQgYSBxdWljayBgZ3JlcHBlcmAgcGFzcyB0byBzZWFyY2ggZm9yIG1lbW9yeSBjb3B5IG9yIGFzc2lnbm1lbnQgcGF0dGVybnMgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF9ub2RlX21lbV9icCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yODAwPXN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgwNC1cbm1tL2RhbW9uL2NvcmUuYzoyODA1OnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0yODA2LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjk4MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjk4Ni0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xubW0vZGFtb24vY29yZS5jOjI5ODc6c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxubW0vZGFtb24vY29yZS5jLTI5ODgtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDI0PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAzOS1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDQwOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzA0MS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgZXhhbWluYXRpb24sIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBNZW1vcnkgTWV0cmljcyoqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGlzIHRyYWNraW5nIG1lbW9yeSB1c2FnZSBhdCB0aGUgbm9kZSBhbmQgbWVtY2cgbGV2ZWxzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSBmdW5jdGlvbnMgYGRhbW9zX2dldF9ub2RlX21lbV9icGAgYW5kIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYC4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHByb3ZpZGluZyB0aGUgbWVtb3J5IHVzYWdlIGRhdGEgdGhhdCBEQU1PTiBsZXZlcmFnZXMgZm9yIGl0cyBhbmFseXNpcywgcHJvYmFibHkgZm9yIGJsb2NrIHByb2ZpbGluZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBnZXQgdGhlIGluZm9ybWF0aW9uLCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgdGhleSBhY2Nlc3MsIGFuZCBob3cgdGhlIHJlc3VsdHMgYXJlIGZvcm1hdHRlZC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG1ldGhvZG9sb2d5IGFuZCBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgREFNT04gZ2V0cyB0aGUgZGF0YSBpdCBuZWVkcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGhvdyBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRoZSBjb2RlIGlzLCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluYWNjdXJhY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MDU6XHRzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG4yODA2Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuMjgwNzpcdHtcbjI4MDg6XHRcdHN0cnVjdCBzeXNpbmZvIGk7XG4yODA5Olx0XHRfX2tlcm5lbF91bG9uZ190IG51bWVyYXRvcjtcbjI4MTA6XHRcbjI4MTE6XHRcdGlmIChpbnZhbGlkX21lbV9ub2RlKGdvYWwtXHUwMDNlbmlkKSkge1xuMjgxMjpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcbjI4MTM6XHRcdFx0XHRyZXR1cm4gMDtcbjI4MTQ6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuMjgxNTpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4MTY6XHRcdH1cbjI4MTc6XHRcbjI4MTg6XHRcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4yODE5Olx0XHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgaS5mcmVlcmFtKSB7XG4yODIwOlx0XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuMjgyMTpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4MjI6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuMjgyMzpcdFx0XHRcdHJldHVybiAwO1xuMjgyNDpcdFx0fVxuMjgyNTpcdFxuMjgyNjpcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4yODI3Olx0XHRcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XG4yODI4Olx0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXG4yODI5Olx0XHRcdG51bWVyYXRvciA9IGkuZnJlZXJhbTtcbjI4MzA6XHRcdHJldHVybiBtdWx0X2ZyYWMobnVtZXJhdG9yLCAxMDAwMCwgaS50b3RhbHJhbSk7XG4yODMxOlx0fVxuMjgzMjpcdFxuMjgzMzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4yODM0Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuMjgzNTpcdHtcbjI4MzY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjI4Mzc6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbjI4Mzg6XHRcdHVuc2lnbmVkIGxvbmcgdXNlZF9wYWdlcywgbnVtZXJhdG9yO1xuMjgzOTpcdFx0c3RydWN0IHN5c2luZm8gaTtcbjI4NDA6XHRcbjI4NDE6XHRcdGlmIChpbnZhbGlkX21lbV9ub2RlKGdvYWwtXHUwMDNlbmlkKSkge1xuMjg0MjpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg0MzpcdFx0XHRcdHJldHVybiAwO1xuMjg0NDpcdFx0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbjI4NDU6XHRcdFx0XHRyZXR1cm4gMTAwMDA7XG4yODQ2Olx0XHR9XG4yODQ3Olx0XG4yODQ4Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoZ29hbC1cdTAwM2VtZW1jZ19pZCk7XG4yODQ5Olx0XHRpZiAoIW1lbWNnKSB7XG4yODUwOlx0XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXG4yODUxOlx0XHRcdFx0cmV0dXJuIDA7XG4yODUyOlx0XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuMjg1MzpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4NTQ6XHRcdH1cbjI4NTU6XHRcbjI4NTY6XHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpO1xuMjg1NzpcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShnb2FsLVx1MDAzZW5pZCkpO1xuMjg1ODpcdFx0dXNlZF9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuMjg1OTpcdFx0dXNlZF9wYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKTtcbjI4NjA6XHRcdHVzZWRfcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuMjg2MTpcdFx0dXNlZF9wYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKTtcbjI4NjI6XHRcbjI4NjM6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjI4NjQ6XHRcbjI4NjU6XHRcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4yODY2Olx0XHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgdXNlZF9wYWdlcykge1xuMjg2NzpcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg2ODpcdFx0XHRcdHJldHVybiAxMDAwMDtcbjI4Njk6XHRcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4yODcwOlx0XHRcdFx0cmV0dXJuIDA7XG4yODcxOlx0XHR9XG4yODcyOlx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuMjg3MzpcdFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuMjg3NDpcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IEluZm9ybWF0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gbWVtb3J5IGluZm9ybWF0aW9uIGlzIGJlaW5nIHBvcHVsYXRlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHNpX21lbWluZm9fbm9kZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBjb250cmlidXRlcyB0byBmaWxsaW5nIHVwIHRoYXQgYHN0cnVjdCBzeXNpbmZvIGlgLiBJdCBsb29rcyBsaWtlIGBzaV9tZW1pbmZvX25vZGVgIGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcsIGluaXRpYWxpemluZyBgaWAg4oCTIHNwZWNpZmljYWxseSwgSSBzdXNwZWN0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIGZpZWxkcyBsaWtlIGB0b3RhbHJhbWAsIGBmcmVlcmFtYCwgYW5kIHNvIG9uLiBMaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBgbWVtc2V0YCBhbmQgZGlyZWN0IGZpZWxkIGFzc2lnbm1lbnRzIGFyZSBpbnZvbHZlZC4gQmVzdCB0byBqdW1wIHJpZ2h0IGludG8gZXhhbWluaW5nIHRoZSBjb2RlIG9mIGBzaV9tZW1pbmZvX25vZGVgLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNpX21lbWluZm9fbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDE1Mj1leHRlcm4gdm9pZCBzaV9tZW1pbmZvKHN0cnVjdCBzeXNpbmZvICogdmFsKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0MTUzOmV4dGVybiB2b2lkIHNpX21lbWluZm9fbm9kZShzdHJ1Y3Qgc3lzaW5mbyAqdmFsLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW0uaC00MTU0LVxuLS1cbm1tL3Nob3dfbWVtLmM9ODc9RVhQT1JUX1NZTUJPTChzaV9tZW1pbmZvKTtcbi0tXG5tbS9zaG93X21lbS5jLTg5LSNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2hvd19tZW0uYzo5MDp2b2lkIHNpX21lbWluZm9fbm9kZShzdHJ1Y3Qgc3lzaW5mbyAqdmFsLCBpbnQgbmlkKVxubW0vc2hvd19tZW0uYy05MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgbW0vc2hvd19tZW0uYzo5MGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGxpbmUgOTAgaW4gYG1tL3Nob3dfbWVtLmNgLiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgdXNhZ2UuIEtub3dpbmcgdGhlIGZpbGUgcGF0aCwgYW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBsb2NhdGlvbiwgSSBleHBlY3QgdGhpcyB0byBiZSBhIGNvcmUgcGllY2Ugb2YgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBob3cgbWVtb3J5IHN0YXRpc3RpY3MgYXJlIGdhdGhlcmVkIGFuZCBwcmVzZW50ZWQuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNhbGN1bGF0aW9ucyBoYXBwZW5pbmcg4oCTIGFyZSB0aGV5IGFjY3VyYXRlLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cywgZXRjPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgcG90ZW50aWFsIGlzc3VlcykgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG93X21lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpXG4gIDkxOlx0e1xuICA5MjpcdFx0aW50IHpvbmVfdHlwZTtcdFx0LyogbmVlZHMgdG8gYmUgc2lnbmVkICovXG4gIDkzOlx0XHR1bnNpZ25lZCBsb25nIG1hbmFnZWRfcGFnZXMgPSAwO1xuICA5NDpcdFx0dW5zaWduZWQgbG9uZyBtYW5hZ2VkX2hpZ2hwYWdlcyA9IDA7XG4gIDk1Olx0XHR1bnNpZ25lZCBsb25nIGZyZWVfaGlnaHBhZ2VzID0gMDtcbiAgOTY6XHRcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbiAgOTc6XHRcbiAgOTg6XHRcdGZvciAoem9uZV90eXBlID0gMDsgem9uZV90eXBlIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmVfdHlwZSYjNDM7JiM0MzspIHtcbiAgOTk6XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBcdTAwMjZwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzW3pvbmVfdHlwZV07XG4gMTAwOlx0XHRcdG1hbmFnZWRfcGFnZXMgJiM0Mzs9IHpvbmVfbWFuYWdlZF9wYWdlcyh6b25lKTtcbiAxMDE6XHRcdFx0aWYgKGlzX2hpZ2htZW0oem9uZSkpIHtcbiAxMDI6XHRcdFx0XHRtYW5hZ2VkX2hpZ2hwYWdlcyAmIzQzOz0gem9uZV9tYW5hZ2VkX3BhZ2VzKHpvbmUpO1xuIDEwMzpcdFx0XHRcdGZyZWVfaGlnaHBhZ2VzICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4gMTA0Olx0XHRcdH1cbiAxMDU6XHRcdH1cbiAxMDY6XHRcbiAxMDc6XHRcdHZhbC1cdTAwM2V0b3RhbHJhbSA9IG1hbmFnZWRfcGFnZXM7XG4gMTA4Olx0XHR2YWwtXHUwMDNlc2hhcmVkcmFtID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TSE1FTSk7XG4gMTA5Olx0XHR2YWwtXHUwMDNlZnJlZXJhbSA9IHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0ZSRUVfUEFHRVMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc5CgkJCQkJCQlvdXRwdXQ6IDIwOQoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzLCBhcyBhbHdheXMsIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aXRoIHRoZXNlIGtpbmRzIG9mIGtlcm5lbCBwYXRjaGVzLiBgc2lfbWVtaW5mb19ub2RlYCBzZXRzIHRoZSBgdG90YWxyYW1gIGFuZCBgZnJlZXJhbWAgdmFsdWVzLCB3aGljaCBhcmUgbm93IGJlaW5nIHZhbGlkYXRlZCBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiAgVGhlIGNoZWNrcyBgIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSAmbHQ7IGkuZnJlZXJhbWAgYW5kIGAhaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtICZsdDsgdXNlZF9wYWdlc2AgbG9vayBzb2xpZC4gSXQmIzM5O3MgYSBjbGFzc2ljIGRlZmVuc2UgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvIGFuZCB0aG9zZSBuYXN0eSB1bmRlcmZsb3cgZXJyb3JzIHRoYXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zLiBHb29kIGNhdGNoIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgb3RoZXIgY29tcG9uZW50cyBvZiB0aGlzIHBhdGNoOgoKKiAgIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opYCBoYXMgcmV0dXJuIHZhbHVlIGNoZWNrcywgd2hpY2ggaXMgZXNzZW50aWFsIHRvIGhhbmRsZSBhbnkgZXJyb3JzIGR1cmluZyBtZW1vcnkgcmVnaW9uIHNwbGl0dGluZy4KKiAgIEluIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGAsIGB0b3RhbCA9IG1heChhY3RpdmUgJiM0MzsgaW5hY3RpdmUsIDEpO2AgcHJldmVudHMgZGl2aXNpb24gYnkgemVyby4gR29vZCBkZWZlbnNpdmUgY29kaW5nLgoqICAgYGRhbW9uL3BhZGRyLmNgIGlzIGNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgbmV4dCBhZGRyZXNzIGJhc2VkIG9uIHRoZSBhY3R1YWwgZm9saW8gUEZOIHJhdGhlciB0aGFuIGFuIGFzc3VtZWQgYWxpZ25tZW50LCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgYnVncy4gIGBhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7YCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IGFkZHJlc3MgbWlzY2FsY3VsYXRpb25zLgoqICAgYGRhbW9uL3ZhZGRyLmNgIGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmluZyBwYWdlcyBpbiB0aGUgZm9saW8gZnJvbSB0aGUgY3VycmVudCBQVEUgdXNpbmcgYHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7YCBUaGlzIHByZXZlbnRzIHNraXBwaW5nIFBURXMgd2hlbiB0aGUgc3RhcnRpbmcgYWRkcmVzcyBmYWxscyB3aXRoaW4gYSBsYXJnZSBmb2xpbywgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMuCgpCYXNlZCBvbiBteSBhbmFseXNpcywgKm5vbmUqIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHVzZSBvZiBmdW5jdGlvbnMgc3VjaCBhcyBgcHV0X3VzZXJgLCBgY29weV90b191c2VyYCwgZXRjLiwgYXMgYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgY2FsY3VsYXRpb25zIGFyZSBpbnRlcm5hbCBEQU1PTiBxdW90YSBjYWxjdWxhdGlvbnMgYW5kIGZvbGlvIHRyYXZlcnNhbCwgd2hpY2ggaXMgZ29vZC4gVGhlcmUgYXJlIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG5vciBpcyB0aGVyZSBhbnkgYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcy4gTW9yZW92ZXIsIEkgc2VlIG5vIGFsdGVyYXRpb24gb2YgZXhpc3RpbmcgYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgYWxsIHNvbGlkIGJ1ZyBmaXhlczogYXJpdGhtZXRpYyB1bmRlcmZsb3cvZGl2aWRlLWJ5LXplcm8gcHJvdGVjdGlvbnMsIHJldHVybiBjb2RlIGNoZWNrcywgYW5kIGZvbGlvIGFkZHJlc3Mvb2Zmc2V0IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgaGVyZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTi4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gcGF0Y2gsIHdoaWNoIGhhcyBhZGRyZXNzZWQgdGhlIG1haW4gcG9pbnRzIHRoYXQgSSB3b3VsZCBleHBlY3QgdG8gaGF2ZSBiZWVuIGFkZHJlc3NlZC4KCk9rYXksIGxldCYjMzk7cyBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBsb2dpYyBhbmQgYXJpdGhtZXRpYyBpc3N1ZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06XG4xLiBJbiBgbW0vZGFtb24vY29yZS5jYCwgaXQgYWRkcyBlcnJvciBjaGVja2luZyBmb3IgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCgpYCBhbmQgZ3VhcmRzIGFnYWluc3QgZGl2aXNpb24tYnktemVybyBhbmQgdW5kZXJmbG93IGluIGBkYW1vc19nZXRfbm9kZV9tZW1fYnAoKWAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKClgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKClgLlxuMi4gSW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0IGZpeGVzIGFkZHJlc3MgYWR2YW5jZW1lbnQgYW5kIHN0ZXAtc2l6ZSBjYWxjdWxhdGlvbnMgd2hlbiBpdGVyYXRpbmcgb3ZlciBmb2xpb3MuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgaW50ZXJhY3Qgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6MzY6MjEuNjU3ODA5Njk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MzAzMDQzNjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiLFxuICAgIFwiZGFtb3Nfd2Fsa1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGxvZ2ljIGFuZCBhcml0aG1ldGljIGlzc3VlcyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbTpcXG4xLiBJbiBgbW0vZGFtb24vY29yZS5jYCwgaXQgYWRkcyBlcnJvciBjaGVja2luZyBmb3IgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCgpYCBhbmQgZ3VhcmRzIGFnYWluc3QgZGl2aXNpb24tYnktemVybyBhbmQgdW5kZXJmbG93IGluIGBkYW1vc19nZXRfbm9kZV9tZW1fYnAoKWAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKClgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKClgLlxcbjIuIEluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLCBpdCBmaXhlcyBhZGRyZXNzIGFkdmFuY2VtZW50IGFuZCBzdGVwLXNpemUgY2FsY3VsYXRpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgZm9saW9zLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgaW50ZXJhY3Qgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyBpbiBEQU1PTiBjb3JlLCBwaHlzaWNhbCBhZGRyZXNzIChwYWRkciksIGFuZCB2aXJ0dWFsIGFkZHJlc3MgKHZhZGRyKSBvcGVyYXRpb25zOiBoYW5kbGluZyByZWdpb24gc3BsaXR0aW5nIGZhaWx1cmUgaW4gZGFtb3NfYXBwbHlfc2NoZW1lLCBwcmV2ZW50aW5nIGRpdmlzaW9uIGJ5IHplcm8gYW5kIG91dC1vZi1yYW5nZSBxdW90YSBjYWxjdWxhdGlvbnMgaW4gbm9kZS9tZW1jZyBtZW1vcnkgcXVvdGEgZ29hbHMsIGZpeGluZyBmb2xpbyBhZGRyZXNzIGFkdmFuY2VtZW50IGluIHBhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChwYWdlb3V0LCBkZWFjdGl2YXRlLCBtaWdyYXRlLCBzdGF0KSwgYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyBQTUQgaXRlcmF0aW9uIHN0cmlkZXMgYWNyb3NzIG11bHRpLXBhZ2UgZm9saW9zIGluIHZhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChtaWdyYXRlLCBzdGF0KS4gQWxsIHRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjozNjoyMS42NTc4MTYzNDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzQwMTEwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MmNlODNmZTIxN2QyYjZkMzM3YmJlMmFjZjJlNzYyYzI1MTlhZDJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDE2OjM2OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLmY4ZGRkYmZmNzRhNzcgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTI2MTMsNyArMjYxMyw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRcXHRcXHRcXHRjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4gXFx0XFx0XFx0aWYgKCFzeilcXG4gXFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4tXFx0XFx0XFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcXG4rXFx0XFx0XFx0aWYgKGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzeikpXFxuK1xcdFxcdFxcdFxcdGdvdG8gdXBkYXRlX3N0YXQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbkBAIC0yODE1LDYgKzI4MTYsMTMgQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbiBcXHR9XFxuIFxcbiBcXHRzaV9tZW1pbmZvX25vZGUoXFx1MDAyNmksIGdvYWwtXFx1MDAzZW5pZCk7XFxuK1xcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFxcdTAwM2MgaS5mcmVlcmFtKSB7XFxuK1xcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcXG4rXFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbitcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxcbiBcXHRcXHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xcbiBcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbkBAIC0yODU1LDYgKzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXG4gXFx0c2lfbWVtaW5mb19ub2RlKFxcdTAwMjZpLCBnb2FsLVxcdTAwM2VuaWQpO1xcbitcXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcXHUwMDNjIHVzZWRfcGFnZXMpIHtcXG4rXFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxuK1xcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4rXFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4gXFx0XFx0bnVtZXJhdG9yID0gdXNlZF9wYWdlcztcXG4gXFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbkBAIC0zMDAxLDcgKzMwMTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxcbiBcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9GSUxFKTtcXG4gXFx0aW5hY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0FOT04pICtcXG4gXFx0XFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9GSUxFKTtcXG4tXFx0dG90YWwgPSBhY3RpdmUgKyBpbmFjdGl2ZTtcXG4rXFx0dG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO1xcbiBcXHRpZiAoYWN0aXZlX3JhdGlvKVxcbiBcXHRcXHRyZXR1cm4gbXVsdF9mcmFjKGFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcXG4gXFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXFxuQEAgLTI2NCw3ICsyNjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4gcHV0X2ZvbGlvOlxcbi1cXHRcXHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbitcXHRcXHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRpZiAoaW5zdGFsbF95b3VuZ19maWx0ZXIpXFxuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVfYWN0aXZhdGUoXFxuIFxcdFxcdFxcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xcbiBcXHRcXHRhcHBsaWVkICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gcHV0X2ZvbGlvOlxcbi1cXHRcXHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbitcXHRcXHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5AQCAtMzUwLDcgKzM1MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0XFx0XFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4gcHV0X2ZvbGlvOlxcbi1cXHRcXHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbitcXHRcXHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCwgcy1cXHUwMDNldGFyZ2V0X25pZCk7XFxuQEAgLTM3OSw3ICszNzksNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcbiBcXHRcXHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxcbiBcXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKSAvIGFkZHJfdW5pdDtcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXFxuaW5kZXggMDY0ODQwMGIyZDY1Yi4uYzhjMzJiMmFlMDQwMiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC02NjksNiArNjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0Zm9yICg7IGFkZHIgXFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcXG4rXFxuIFxcdFxcdG5yID0gMTtcXG4gXFx0XFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xcbiBcXG5AQCAtNjgxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstXFx1MDAzZXZtYSwgYWRkciwgZGVzdHMsXFxuIFxcdFxcdFxcdFxcdG1pZ3JhdGlvbl9saXN0cyk7XFxuLVxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRcXHRwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpO1xcbitcXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xcbiBcXHR9XFxuIFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuK1xcbiBcXHRcXHRuciA9IDE7XFxuIFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gXFxuQEAgLTg0NCw3ICs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxcbiBcXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tXFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XFxuK1xcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XFxuIFxcdFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbiBcXHR9XFxuIFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjozNjoyMy4zOTI3OTY2NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MTY1MzI2MDU1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2NhbGxcIixcbiAgICBcImRhbW9zX3dhbGtcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc2V2ZXJhbCBmdW5jdGlvbmFsIGJ1Z3MgaW4gREFNT04gY29yZSwgcGh5c2ljYWwgYWRkcmVzcyAocGFkZHIpLCBhbmQgdmlydHVhbCBhZGRyZXNzICh2YWRkcikgb3BlcmF0aW9uczogaGFuZGxpbmcgcmVnaW9uIHNwbGl0dGluZyBmYWlsdXJlIGluIGRhbW9zX2FwcGx5X3NjaGVtZSwgcHJldmVudGluZyBkaXZpc2lvbiBieSB6ZXJvIGFuZCBvdXQtb2YtcmFuZ2UgcXVvdGEgY2FsY3VsYXRpb25zIGluIG5vZGUvbWVtY2cgbWVtb3J5IHF1b3RhIGdvYWxzLCBmaXhpbmcgZm9saW8gYWRkcmVzcyBhZHZhbmNlbWVudCBpbiBwYWRkciBzY2hlbWUgb3BlcmF0aW9ucyAocGFnZW91dCwgZGVhY3RpdmF0ZSwgbWlncmF0ZSwgc3RhdCksIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgUE1EIGl0ZXJhdGlvbiBzdHJpZGVzIGFjcm9zcyBtdWx0aS1wYWdlIGZvbGlvcyBpbiB2YWRkciBzY2hlbWUgb3BlcmF0aW9ucyAobWlncmF0ZSwgc3RhdCkuIEFsbCB0aGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODJjZTgzZmUyMTdkMmI2ZDMzN2JiZTJhY2YyZTc2MmMyNTE5YWQyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE2OjM2OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5mOGRkZGJmZjc0YTc3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgKzI2MTMsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdFx0Yy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6KVxuIFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbi1cdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opO1xuK1x0XHRcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxuK1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgKzI4MTYsMTMgQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuIFx0fVxuIFxuIFx0c2lfbWVtaW5mb19ub2RlKFx1MDAyNmksIGdvYWwtXHUwMDNlbmlkKTtcbitcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFx1MDAzYyBpLmZyZWVyYW0pIHtcbitcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4rXHRcdFx0cmV0dXJuIDEwMDAwO1xuK1x0XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcbiBcdFx0bnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTtcbiBcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi9cbkBAIC0yODU1LDYgKzI4NjMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4rXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgdXNlZF9wYWdlcykge1xuK1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuK1x0XHRcdHJldHVybiAxMDAwMDtcbitcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG5AQCAtMzAwMSw3ICszMDE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9BQ1RJVkVfRklMRSk7XG4gXHRpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfSU5BQ1RJVkVfQU5PTikgK1xuIFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0ZJTEUpO1xuLVx0dG90YWwgPSBhY3RpdmUgKyBpbmFjdGl2ZTtcbitcdHRvdGFsID0gbWF4KGFjdGl2ZSArIGluYWN0aXZlLCAxKTtcbiBcdGlmIChhY3RpdmVfcmF0aW8pXG4gXHRcdHJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuIFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWM2YzNhNTk3ZmQwYi4uOWRkZDFlYzgyMDJiNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRlbHNlXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVfYWN0aXZhdGUoXG4gXHRcdFx0Zm9saW9fZGVhY3RpdmF0ZShmb2xpbyk7XG4gXHRcdGFwcGxpZWQgKz0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcbitcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuQEAgLTM1MCw3ICszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcbitcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcdTAwMjZmb2xpb19saXN0LCBzLVx1MDAzZXRhcmdldF9uaWQpO1xuQEAgLTM3OSw3ICszNzksNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXG4gXHRcdGlmICghZGFtb3NfcGFfZmlsdGVyX291dChzLCBmb2xpbykpXG4gXHRcdFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbykgLyBhZGRyX3VuaXQ7XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggMDY0ODQwMGIyZDY1Yi4uYzhjMzJiMmFlMDQwMiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC02NjksNiArNjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSArPSBuciwgYWRkciArPSBuciAqIFBBR0VfU0laRSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuK1xuIFx0XHRuciA9IDE7XG4gXHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiBcbkBAIC02ODEsNyArNjgzLDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgZGVzdHMsXG4gXHRcdFx0XHRtaWdyYXRpb25fbGlzdHMpO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UocHRlbnQpKTtcbitcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtODQ0LDcgKzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiBcdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XG4rXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XG4gXHRcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG4gXHR9XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjM2OjIzLjM5Mjc5OTQ5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDMyNjM2MDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBmdXp6aW5nIGVmZm9ydCBiYXNlZCBvbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGl0IGludHJvZHVjZXMuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgZnJhbWV3b3JrKSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgcHJvbWlzaW5nOyBEQU1PTiBpcyBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC5cblxuRmlyc3QsIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBJIHNlZSBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBjaGFuZ2VzLiBgZGFtb3NfYXBwbHlfc2NoZW1lKClgIG5vdyBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fc3BsaXRfcmVnaW9uX2F0KClgLCB3aXRoIGEgYGdvdG8gdXBkYXRlX3N0YXRgIG9uIGZhaWx1cmUuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgYW5kIHBvdGVudGlhbGx5IGZ1enotYWJsZSBpZiB3ZSBjYW4gdHJpZ2dlciBmYWlsdXJlcyBpbiB0aGF0IHNwbGl0dGluZyBmdW5jdGlvbi4gU2ltaWxhcmx5LCB0aGVyZSBhcmUgbnVsbCBjaGVja3MgaW4gYGRhbW9zX2dldF9ub2RlX21lbV9icCgpYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoKWAuIFRoZSBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoKWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIGEgZGl2LWJ5LXplcm8gZml4LCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBzaWduIGZvciBmdXp6aW5nLCBzaW5jZSB0aG9zZSBhcmUgdHlwaWNhbGx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBleHBsb2l0LlxuXG5Nb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgY2hhbmdlcyBpbiBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YCBhbGwgbG9vayByZWxhdGVkIHRvIGZvbGlvIGFsaWdubWVudCBpc3N1ZXMsIHNwZWNpZmljYWxseSBjYWxjdWxhdGluZyB0aGUgYWRkcmVzcyB3aGVuIGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSBhZGRpdGlvbiBvZiBgZm9saW9fc2l6ZShmb2xpbylgIG1ha2VzIG1lIHRoaW5rIHdlIG1pZ2h0IGJlIGFibGUgdG8gY3JhZnQgc29tZSBpbnRlcmVzdGluZywgZWRnZS1jYXNlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgYW5kIHRyaWdnZXIgc29tZSBtb3JlIGludGVyZXN0aW5nIGJlaGF2aW9yLlxuXG5GaW5hbGx5LCBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAgYXJlIGZpeGVkIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbGFyZ2UgZm9saW9zL1BNRCBlbnRyaWVzLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB3aGVyZSBib3VuZGFyeSBjb25kaXRpb25zIGFyZSBjcml0aWNhbCBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuT3ZlcmFsbCwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgZnVuY3Rpb25hbCBidWcgZml4ZXMgd2l0aGluIHRoZSBEQU1PTiBjb3JlLCBwYWRkciwgYW5kIHZhZGRyIG9wZXJhdGlvbnMuIFRoZXNlIHR5cGVzIG9mIGZpeGVzIGFyZSBvZnRlbiBncmVhdCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhcyB0aGV5IHN1Z2dlc3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MsIGVkZ2UgY2FzZXMsIGFuZCBwb3RlbnRpYWxseSwgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIERBTU9OIGFjY2Vzc2libGUgdGhyb3VnaCBhIGZ1enphYmxlIGludGVyZmFjZT8gWWVzLCBpdCdzIGEgY29yZSBNTSBmZWF0dXJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzIChzcGVjaWZpY2FsbHkgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmApLiBFeGNlbGxlbnQhIFRoYXQgbWVhbnMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCBpdCwgY29uZmlndXJlIGl0LCBhbmQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGVzZSBjb2RlIHBhdGhzIGV2ZW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQgaXMgZ3JlYXQgYmVjYXVzZSB0aGF0IG1ha2VzIGl0IGZhciBzaW1wbGVyIHRvIHRhcmdldCB3aXRoIG91ciBlZmZvcnRzLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgREFNT04sIHRvIHNlZSB3aGF0IGtub2JzIHdlIGhhdmUgdG8gY29uZmlndXJlIGRpZmZlcmVudCBvcGVyYXRpb25hbCBzdGF0ZXMgb2YgdGhlIGZlYXR1cmUuIFdlJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgbWF5YmUganVzdCBhIHNpbXBsZSBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NDQ6NTMuNzE5MTY0MjI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzA0NzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NDQ6NTMuODU2MjE2NDYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxOTI0ODE2NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNYWtlZmlsZSBJbnZlc3RpZ2F0aW9uIC0gYG1tL2RhbW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBvYmplY3QgZmlsZSBjb25zdHJ1Y3Rpb24gZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUsIGBtbS9kYW1vbmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBkaWN0YXRlcyB0aGUgY29tcGlsYXRpb24gc3RlcHMsIGRlcGVuZGVuY2llcywgYW5kIGxpbmtlciBmbGFncyBmb3IgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkIHRvIHNlZSBob3cgaXQgZml0cyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSBidWlsZCBhbmQgZm9yd2FyZHMgdG8gaG93IEknZCBjaGFuZ2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo0OTozNS43ODEwMzcwNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NDk6MzUuNzgxMTU0NjA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA5MzY3NjY0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgcmVjZW50IGNoYW5nZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgcGlucG9pbnQgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIG9yIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZmZlY3RlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMuIFRvIHN0YXJ0LCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb3JlIGZpbGVzIGZvciBEQU1PTiDigJMgc3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBEQU1PTidzIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMsIGFuZCBhIGNsb3NlciBsb29rIGF0IHRob3NlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MDozNi43MTc5MjQ1MDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODkyNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3NjaGVtZXxkYW1vbl9wYV98ZGFtb3NfdmFfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTU4PXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNTcxLVxcbm1tL2RhbW9uL2NvcmUuYzoyNTcyOnN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yNTczLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjQzPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjY5LVxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxubW0vZGFtb24vY29yZS5jOjI2NzA6XFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yNjcxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xOC1cXG5tbS9kYW1vbi9wYWRkci5jOjE5OnN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy0yMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNC1cXG5tbS9kYW1vbi9wYWRkci5jOjI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcXG5tbS9kYW1vbi9wYWRkci5jLTI2LVxcdFxcdHBoeXNfYWRkcl90IHBhLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzctXFxubW0vZGFtb24vcGFkZHIuYzozODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDgtXFxubW0vZGFtb24vcGFkZHIuYzo0OTpzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy01MC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTUzLVxcbm1tL2RhbW9uL3BhZGRyLmM6NTQ6XFx0ZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsIGN0eC1cXHUwMDNlYWRkcl91bml0KSk7XFxubW0vZGFtb24vcGFkZHIuYy01NS19XFxubW0vZGFtb24vcGFkZHIuYy01Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjU3OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy01OC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTYzLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxcbm1tL2RhbW9uL3BhZGRyLmM6NjQ6XFx0XFx0XFx0X19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhyLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNjUtXFx0fVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy02Ny1cXG5tbS9kYW1vbi9wYWRkci5jOjY4OnN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy04MC1cXG5tbS9kYW1vbi9wYWRkci5jOjgxOnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy04Mi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtODQtXFx0Ym9vbCBhY2Nlc3NlZDtcXG5tbS9kYW1vbi9wYWRkci5jOjg1OlxcdHBoeXNfYWRkcl90IHNhbXBsaW5nX2FkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy04Ni1cXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODctXFxubW0vZGFtb24vcGFkZHIuYzo4ODpcXHRhY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODktXFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBhY2Nlc3NlZCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTkxLVxcbm1tL2RhbW9uL3BhZGRyLmM6OTI6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy05My17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTk5LVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxMDA6XFx0XFx0XFx0X19kYW1vbl9wYV9jaGVja19hY2Nlc3MociwgY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTAxLVxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTA4OnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxubW0vZGFtb24vcGFkZHIuYy0xMDktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQwLVxcbm1tL2RhbW9uL3BhZGRyLmM6MTQxOnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQ3LVxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cXHRcXHRcXHRwYXNzID0gZi1cXHUwMDNlYWxsb3c7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE1Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjE1NzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0xNTgtXFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3My1cXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTc0OlxcdFxcdFxcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzctXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxubW0vZGFtb24vcGFkZHIuYy0xNzktXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjE5LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTIyMS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNDQtXFxubW0vZGFtb24vcGFkZHIuYzoyNDU6XFx0YWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jOjI0NjpcXHR3aGlsZSAoYWRkciBcXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI0Ny1cXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYzoyNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yNDktXFx0XFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3NC1cXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi9wYWRkci5jOjI3NTpcXHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYy0yNzYtfVxcbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jLTI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg1LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjg2OlxcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYzoyODc6XFx0d2hpbGUgKGFkZHIgXFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yODgtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg5OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjkwLVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMDgtXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxubW0vZGFtb24vcGFkZHIuYzozMDk6XFx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzEwLX1cXG5tbS9kYW1vbi9wYWRkci5jLTMxMS1cXG5tbS9kYW1vbi9wYWRkci5jOjMxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzEzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XFxubW0vZGFtb24vcGFkZHIuYzozMTY6XFx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zMTctfVxcbm1tL2RhbW9uL3BhZGRyLmMtMzE4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MzE5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTMyMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlxcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XFxubW0vZGFtb24vcGFkZHIuYy0zMjUtXFxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMzMy1cXG5tbS9kYW1vbi9wYWRkci5jOjMzNDpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM1OlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU4LVxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzU5OlxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTM2MC19XFxubW0vZGFtb24vcGFkZHIuYy0zNjEtXFxubW0vZGFtb24vcGFkZHIuYzozNjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM3MS1cXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjM3NTpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTM3Ni1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzg4LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mzg5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0zOTAtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzk2LVxcdGNhc2UgREFNT1NfUEFHRU9VVDpcXG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcXHRcXHRyZXR1cm4gZGFtb25fcGFfcGFnZW91dChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cXHRjYXNlIERBTU9TX0xSVV9QUklPOlxcbm1tL2RhbW9uL3BhZGRyLmM6Mzk5OlxcdFxcdHJldHVybiBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAwLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDAxLVxcdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcXG5tbS9kYW1vbi9wYWRkci5jOjQwMjpcXHRcXHRyZXR1cm4gZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAzLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MDUtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxubW0vZGFtb24vcGFkZHIuYzo0MDY6XFx0XFx0cmV0dXJuIGRhbW9uX3BhX21pZ3JhdGUociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy00MDctXFx0Y2FzZSBEQU1PU19TVEFUOlxcbm1tL2RhbW9uL3BhZGRyLmM6NDA4OlxcdFxcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDA5LVxcdGRlZmF1bHQ6XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQxNS1cXG5tbS9kYW1vbi9wYWRkci5jOjQxNjpzdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbm1tL2RhbW9uL3BhZGRyLmMtNDE3LVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MzYtXFxubW0vZGFtb24vcGFkZHIuYzo0Mzc6c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG5tbS9kYW1vbi9wYWRkci5jLTQzOC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ0Mi1cXHRcXHQudXBkYXRlID0gTlVMTCxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0MzpcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0OlxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NDYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxubW0vZGFtb24vcGFkZHIuYzo0NDc6XFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0ODpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3BhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi9wYWRkci5jLTQ0OS1cXHR9O1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NTMtXFxubW0vZGFtb24vcGFkZHIuYzo0NTQ6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3BhX2luaXRjYWxsKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01MjItXFxubW0vZGFtb24vdmFkZHIuYzo1MjM6c3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcXG5tbS9kYW1vbi92YWRkci5jLTUyNC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTQ0LVxcbm1tL2RhbW9uL3ZhZGRyLmM6NTQ1OnN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vZGFtb24vdmFkZHIuYy01NDYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTYyLVxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfWU9VTkcpXFxubW0vZGFtb24vdmFkZHIuYzo1NjM6XFx0XFx0XFx0bWF0Y2hlZCA9IGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChmaWx0ZXIsIGZvbGlvLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNTY0LVxcdFxcdFxcdFxcdHZtYSwgYWRkciwgcHRlcCwgcG1kcCk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTU3My1cXG5tbS9kYW1vbi92YWRkci5jOjU3NDpzdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlIHtcXG5tbS9kYW1vbi92YWRkci5jLTU3NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkICptaWdyYXRpb25fbGlzdHM7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTU4NC0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjU4NTpzdGF0aWMgdm9pZCBkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNTg2LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTYzNC1cXG5tbS9kYW1vbi92YWRkci5jOjYzNTpzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9kYW1vbi92YWRkci5jLTYzNi1cXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjM3LXtcXG5tbS9kYW1vbi92YWRkci5jOjYzODpcXHRzdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlICpwcml2ID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5tbS9kYW1vbi92YWRkci5jLTYzOS1cXHRzdHJ1Y3QgbGlzdF9oZWFkICptaWdyYXRpb25fbGlzdHMgPSBwcml2LVxcdTAwM2VtaWdyYXRpb25fbGlzdHM7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY1Ni1cXHRcXHRcXHRnb3RvIGh1Z2Vfb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6NjU3OlxcdFxcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIE5VTEwsIHBtZCkpXFxubW0vZGFtb24vdmFkZHIuYy02NTgtXFx0XFx0XFx0Z290byBodWdlX291dDtcXG5tbS9kYW1vbi92YWRkci5jOjY1OTpcXHRcXHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcXG5tbS9kYW1vbi92YWRkci5jLTY2MC1cXHRcXHRcXHRcXHRtaWdyYXRpb25fbGlzdHMpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02ODEtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vdmFkZHIuYzo2ODI6XFx0XFx0aWYgKGRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHdhbGstXFx1MDAzZXZtYSwgYWRkciwgcHRlLCBOVUxMKSlcXG5tbS9kYW1vbi92YWRkci5jLTY4My1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jOjY4NDpcXHRcXHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcXG5tbS9kYW1vbi92YWRkci5jLTY4NS1cXHRcXHRcXHRcXHRtaWdyYXRpb25fbGlzdHMpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03MjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc0MC1cXG5tbS9kYW1vbi92YWRkci5jOjc0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG5tbS9kYW1vbi92YWRkci5jLTc0Mi1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc0NS1cXHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XFxubW0vZGFtb24vdmFkZHIuYzo3NDY6XFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSBwcml2O1xcbm1tL2RhbW9uL3ZhZGRyLmMtNzQ3LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03NTMtXFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6NzU0OlxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcXG5tbS9kYW1vbi92YWRkci5jLTc1NS1cXHRcXHQucHRlX2VudHJ5ID0gTlVMTCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzg2LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Nzg3OnN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUge1xcbm1tL2RhbW9uL3ZhZGRyLmMtNzg4LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03OTEtXFxubW0vZGFtb24vdmFkZHIuYzo3OTI6c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi92YWRkci5jLTc5My1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc5Ny1cXG5tbS9kYW1vbi92YWRkci5jOjc5ODpzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9kYW1vbi92YWRkci5jLTc5OS1cXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbm1tL2RhbW9uL3ZhZGRyLmMtODAwLXtcXG5tbS9kYW1vbi92YWRkci5jOjgwMTpcXHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlICpwcml2ID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5tbS9kYW1vbi92YWRkci5jLTgwMi1cXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVxcdTAwM2VzY2hlbWU7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgxOS1cXG5tbS9kYW1vbi92YWRkci5jOjgyMDpcXHRcXHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXFxubW0vZGFtb24vdmFkZHIuYy04MjEtXFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9kYW1vbi92YWRkci5jLTgyMi1cXG5tbS9kYW1vbi92YWRkci5jOjgyMzpcXHRcXHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgTlVMTCwgcG1kKSlcXG5tbS9kYW1vbi92YWRkci5jLTgyNC1cXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODQ2LVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODQ3OlxcdFxcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcXG5tbS9kYW1vbi92YWRkci5jLTg0OC1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jLTg0OS1cXG5tbS9kYW1vbi92YWRkci5jOjg1MDpcXHRcXHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcXG5tbS9kYW1vbi92YWRkci5jLTg1MS1cXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODU5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODYwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbm1tL2RhbW9uL3ZhZGRyLmMtODYxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODYzLXtcXG5tbS9kYW1vbi92YWRkci5jOjg2NDpcXHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlIHByaXY7XFxubW0vZGFtb24vdmFkZHIuYy04NjUtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxubW0vZGFtb24vdmFkZHIuYy04NjYtXFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3OlxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9zdGF0X3BtZF9lbnRyeSxcXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cXHR9O1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz04ODU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fdmFfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTExLVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbm1tL2RhbW9uL3ZhZGRyLmM6OTEyOlxcdFxcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vdmFkZHIuYy05MTMtXFx0Y2FzZSBEQU1PU19TVEFUOlxcbm1tL2RhbW9uL3ZhZGRyLmM6OTE0OlxcdFxcdHJldHVybiBkYW1vc192YV9zdGF0KHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vdmFkZHIuYy05MTUtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NTA6MzYuODU1ODI0MTM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0MzAzMjY2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIENvcmUgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIERBTU9OIGNvcmUgYmV0dGVyLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpZGVudGlmeSB3aGljaCBzeW1ib2xzIHdpdGhpbiB0aGUgREFNT04gY29yZSBjb21wb25lbnRzIChgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBgbW0vZGFtb24vdmFkZHIuY2AsIGFuZCBgbW0vZGFtb24vc3lzZnMuY2ApIGFyZSAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbW9kdWxlJ3MgZXhwb3NlZCBpbnRlcmZhY2VzIGFuZCBob3cgdGhlc2UgdmFyaW91cyBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgd2l0aCBvdGhlciBEQU1PTiBjb21wb25lbnRzIGFzIHdlbGwuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBvZiBlYWNoIGNvbXBvbmVudCBhbmQgcGlucG9pbnQgdGhlIG5vbi1zdGF0aWMgc3ltYm9scyByZWxhdGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyAocGFkZHIpLCB2aXJ0dWFsIGFkZHJlc3NlcyAodmFkZHIpLCBhbmQgdGhlIHN5c2ZzL2t1bml0IGludGVyZmFjZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIGVpdGhlciBkZWJ1Z2dpbmcgdGhlIG1vZHVsZSwgdW5kZXJzdGFuZGluZyB0aGUgZXhwb3NlZCBjYXBhYmlsaXRpZXMsIG9yIGludGVncmF0aW5nL2V4dGVuZGluZyB0aGUgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MTowMS4yODYxNTYxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDYyNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25ffF52b2lkIGRhbW9uX3xkYW1vc19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyNjc5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxcbm1tL2RhbW9uL2NvcmUuYy03Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXFxubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTk5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI4LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTMwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDMtXFxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTE0NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc0LVxcbm1tL2RhbW9uL2NvcmUuYzoxNzU6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzctICovXFxubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01NjgtXFxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtNTcwLVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxubW0vZGFtb24vY29yZS5jLTU3MS17XFxubW0vZGFtb24vY29yZS5jOjU3MjpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxubW0vZGFtb24vY29yZS5jLTU3My1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01ODQtLyoqXFxubW0vZGFtb24vY29yZS5jOjU4NTogKiBkYW1vc19maWx0ZXJfZm9yX29wcygpIC0gUmV0dXJuIGlmIHRoZSBmaWx0ZXIgaXMgb3BzLWhhbmRsZWQgb25lLlxcbm1tL2RhbW9uL2NvcmUuYy01ODYtICogQHR5cGU6XFx0dHlwZSBvZiB0aGUgZmlsdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTU5MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTkxOmJvb2wgZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlKVxcbm1tL2RhbW9uL2NvcmUuYy01OTIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYwMi1cXG5tbS9kYW1vbi9jb3JlLmM6NjAzOnZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTYwNC17XFxubW0vZGFtb24vY29yZS5jOjYwNTpcXHRpZiAoZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZi1cXHUwMDNldHlwZSkpXFxubW0vZGFtb24vY29yZS5jLTYwNi1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZmLVxcdTAwM2VsaXN0LCBcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYxMC1cXG5tbS9kYW1vbi9jb3JlLmM6NjExOnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtNjEyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MTUtXFxubW0vZGFtb24vY29yZS5jOjYxNjpzdGF0aWMgdm9pZCBkYW1vc19mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02MTcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyMC1cXG5tbS9kYW1vbi9jb3JlLmM6NjIxOnZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtNjIyLXtcXG5tbS9kYW1vbi9jb3JlLmM6NjIzOlxcdGRhbW9zX2RlbF9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jOjYyNDpcXHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcXG5tbS9kYW1vbi9jb3JlLmMtNjI1LX1cXG5tbS9kYW1vbi9jb3JlLmMtNjI2LVxcbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYzo2Mjg6XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxubW0vZGFtb24vY29yZS5jLTYyOS1cXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcXG5tbS9kYW1vbi9jb3JlLmMtNjMwLXtcXG5tbS9kYW1vbi9jb3JlLmM6NjMxOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy02MzItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjQxLVxcbm1tL2RhbW9uL2NvcmUuYzo2NDI6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy02NDMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTY0Ni1cXG5tbS9kYW1vbi9jb3JlLmM6NjQ3OnN0YXRpYyB2b2lkIGRhbW9zX2RlbF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy02NDgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTY1MS1cXG5tbS9kYW1vbi9jb3JlLmM6NjUyOnN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNjUzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02NTYtXFxubW0vZGFtb24vY29yZS5jOjY1Nzp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNjU4LXtcXG5tbS9kYW1vbi9jb3JlLmM6NjU5OlxcdGRhbW9zX2RlbF9xdW90YV9nb2FsKGcpO1xcbm1tL2RhbW9uL2NvcmUuYzo2NjA6XFx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKGcpO1xcbm1tL2RhbW9uL2NvcmUuYy02NjEtfVxcbm1tL2RhbW9uL2NvcmUuYy02NjItXFxubW0vZGFtb24vY29yZS5jOjY2MzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9nb2Fsc19lbXB0eShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEpXFxubW0vZGFtb24vY29yZS5jLTY2NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjY4LS8qIGluaXRpYWxpemUgZmllbGRzIG9mIEBxdW90YSB0aGF0IG5vcm1hbGx5IEFQSSB1c2VycyB3b3VsZG4ndCBzZXQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6NjY5OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG5tbS9kYW1vbi9jb3JlLmMtNjcwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODEtXFxubW0vZGFtb24vY29yZS5jOjY4MjpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYzo2ODM6XFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbm1tL2RhbW9uL2NvcmUuYy02ODQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcXG5tbS9kYW1vbi9jb3JlLmM6Njg1OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxubW0vZGFtb24vY29yZS5jOjY4NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbm1tL2RhbW9uL2NvcmUuYy02ODctXFx0XFx0XFx0aW50IHRhcmdldF9uaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzA1LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZW9wc19maWx0ZXJzKTtcXG5tbS9kYW1vbi9jb3JlLmM6NzA2OlxcdHNjaGVtZS1cXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcXG5tbS9kYW1vbi9jb3JlLmMtNzA3LVxcdHNjaGVtZS1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzEwLVxcbm1tL2RhbW9uL2NvcmUuYzo3MTE6XFx0c2NoZW1lLVxcdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO1xcbm1tL2RhbW9uL2NvcmUuYy03MTItXFx0LyogcXVvdGEuZ29hbHMgc2hvdWxkIGJlIHNlcGFyYXRlbHkgc2V0IGJ5IGNhbGxlciAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTcxNy1cXG5tbS9kYW1vbi9jb3JlLmM6NzE4OlxcdHNjaGVtZS1cXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcXG5tbS9kYW1vbi9jb3JlLmMtNzE5LVxcdHNjaGVtZS1cXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzIzLVxcbm1tL2RhbW9uL2NvcmUuYzo3MjQ6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy03MjUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTczNC1cXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcXG5tbS9kYW1vbi9jb3JlLmMtNzM3LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnMtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXNjaGVtZXMpO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzg6XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTczOS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NzQ2PXN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NTAtXFxubW0vZGFtb24vY29yZS5jOjc1MTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzUyLXtcXG5tbS9kYW1vbi9jb3JlLmM6NzUzOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbm1tL2RhbW9uL2NvcmUuYzo3NTQ6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZiwgKm5leHQ7XFxubW0vZGFtb24vY29yZS5jLTc1NS1cXG5tbS9kYW1vbi9jb3JlLmM6NzU2OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZzLVxcdTAwM2VxdW90YSlcXG5tbS9kYW1vbi9jb3JlLmM6NzU3OlxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChnKTtcXG5tbS9kYW1vbi9jb3JlLmMtNzU4LVxcbm1tL2RhbW9uL2NvcmUuYzo3NTk6XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShmLCBuZXh0LCBzKVxcbm1tL2RhbW9uL2NvcmUuYzo3NjA6XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jLTc2MS1cXG5tbS9kYW1vbi9jb3JlLmM6NzYyOlxcdGRhbW9zX2Zvcl9lYWNoX29wc19maWx0ZXJfc2FmZShmLCBuZXh0LCBzKVxcbm1tL2RhbW9uL2NvcmUuYzo3NjM6XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZik7XFxubW0vZGFtb24vY29yZS5jLTc2NC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6NzkzOnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTc5NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODAzPXN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDctXFxubW0vZGFtb24vY29yZS5jOjgwODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTgwOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODE2LVxcbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTgxOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODcyPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODc5LVxcbm1tL2RhbW9uL2NvcmUuYzo4ODA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTg4MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNDctICovXFxubW0vZGFtb24vY29yZS5jOjEwNDg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxubW0vZGFtb24vY29yZS5jLTEwNDkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwODEtXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGN0eClcXG5tbS9kYW1vbi9jb3JlLmM6MTA4MjpcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTA4My1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVxcdFxcdFxcdHNzaXplX3QgbnJfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjExMDk6XFx0XFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcXG5tbS9kYW1vbi9jb3JlLmMtMTExMC17XFxubW0vZGFtb24vY29yZS5jOjExMTE6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTExMTItXFx0aW50IGkgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTEzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTE0OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcSkge1xcbm1tL2RhbW9uL2NvcmUuYy0xMTE1LVxcdFxcdGlmIChpKysgPT0gbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTIwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYzoxMTIyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExMjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMzgtXFxubW0vZGFtb24vY29yZS5jOjExMzk6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjExNDA6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTE0MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTQ3OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE0OC19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTE1MTogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTUyLSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTYyOmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTE2NDpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcXG5tbS9kYW1vbi9jb3JlLmMtMTE2NS1cXHRpbnQgaSA9IDAsIGogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTY2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTY3OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7XFxubW0vZGFtb24vY29yZS5jOjExNjg6XFx0XFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpKyssIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExNjktXFx0XFx0aWYgKHNyY19nb2FsKVxcbm1tL2RhbW9uL2NvcmUuYzoxMTcwOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExNzEtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMTcyOlxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExNzMtXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoxMTc0OlxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jLTExNzUtXFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxubW0vZGFtb24vY29yZS5jLTExNzYtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjExNzc6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE3OC1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTgwLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jOjExODI6XFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExODMtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODYtXFxubW0vZGFtb24vY29yZS5jOjExODc6c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTg4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTkzLVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMTk0OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExOTUtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjA1LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjA2OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfY29yZV9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMTIwNy17XFxubW0vZGFtb24vY29yZS5jOjEyMDg6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjA5LVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTIxMC1cXG5tbS9kYW1vbi9jb3JlLmM6MTIxMTpcXHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTIxMi1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIxNy1cXG5tbS9kYW1vbi9jb3JlLmM6MTIxODpzdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX29wc19maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMTIxOS17XFxubW0vZGFtb24vY29yZS5jOjEyMjA6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjIxLVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTIyMi1cXG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcXHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyKGZpbHRlciwgcykge1xcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVxcdFxcdGlmIChpKysgPT0gbilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjI5LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjMwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxcbm1tL2RhbW9uL2NvcmUuYzoxMjMxOlxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjMyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjUwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjUxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXIoXFxubW0vZGFtb24vY29yZS5jOjEyNTI6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyNTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNTYtXFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxubW0vZGFtb24vY29yZS5jOjEyNTc6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjU4LX1cXG5tbS9kYW1vbi9jb3JlLmMtMTI1OS1cXG5tbS9kYW1vbi9jb3JlLmM6MTI2MDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTI2MjpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkc3RfZmlsdGVyLCAqbmV4dCwgKnNyY19maWx0ZXIsICpuZXdfZmlsdGVyO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjYzLVxcdGludCBpID0gMCwgaiA9IDA7XFxubW0vZGFtb24vY29yZS5jLTEyNjQtXFxubW0vZGFtb24vY29yZS5jOjEyNjU6XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShkc3RfZmlsdGVyLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI2NjpcXHRcXHRzcmNfZmlsdGVyID0gZGFtb3NfbnRoX2NvcmVfZmlsdGVyKGkrKywgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI2Ny1cXHRcXHRpZiAoc3JjX2ZpbHRlcilcXG5tbS9kYW1vbi9jb3JlLmM6MTI2ODpcXHRcXHRcXHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjY5LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MTI3MDpcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihkc3RfZmlsdGVyKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3MS1cXHR9XFxubW0vZGFtb24vY29yZS5jLTEyNzItXFxubW0vZGFtb24vY29yZS5jOjEyNzM6XFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXJfc2FmZShzcmNfZmlsdGVyLCBuZXh0LCBzcmMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3NC1cXHRcXHRpZiAoaisrIFxcdTAwM2MgaSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjc2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjc3OlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMjc4LVxcdFxcdFxcdFxcdHNyY19maWx0ZXItXFx1MDAzZXR5cGUsIHNyY19maWx0ZXItXFx1MDAzZW1hdGNoaW5nLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyODEtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEyODI6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jOjEyODM6XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjg0LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjg3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjg4OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTI4OS17XFxubW0vZGFtb24vY29yZS5jOjEyOTA6XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0X2ZpbHRlciwgKm5leHQsICpzcmNfZmlsdGVyLCAqbmV3X2ZpbHRlcjtcXG5tbS9kYW1vbi9jb3JlLmMtMTI5MS1cXHRpbnQgaSA9IDAsIGogPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjkyLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjkzOlxcdGRhbW9zX2Zvcl9lYWNoX29wc19maWx0ZXJfc2FmZShkc3RfZmlsdGVyLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI5NDpcXHRcXHRzcmNfZmlsdGVyID0gZGFtb3NfbnRoX29wc19maWx0ZXIoaSsrLCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjk1LVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk2OlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEyOTctXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk4OlxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGRzdF9maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjk5LVxcdH1cXG5tbS9kYW1vbi9jb3JlLmMtMTMwMC1cXG5tbS9kYW1vbi9jb3JlLmM6MTMwMTpcXHRkYW1vc19mb3JfZWFjaF9vcHNfZmlsdGVyX3NhZmUoc3JjX2ZpbHRlciwgbmV4dCwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jLTEzMDItXFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTMwNTpcXHRcXHRuZXdfZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihcXG5tbS9kYW1vbi9jb3JlLmMtMTMwNi1cXHRcXHRcXHRcXHRzcmNfZmlsdGVyLVxcdTAwM2V0eXBlLCBzcmNfZmlsdGVyLVxcdTAwM2VtYXRjaGluZyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzA5LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzEwOlxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKG5ld19maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYzoxMzExOlxcdFxcdGRhbW9zX2FkZF9maWx0ZXIoZHN0LCBuZXdfZmlsdGVyKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTMxMi1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMxNi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTMxNzogKiBkYW1vc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KCkgLSBkZWNpZGUgd2hldGhlciB0byByZWplY3QgbWVtb3J5IHRoYXQgZGlkbid0XFxubW0vZGFtb24vY29yZS5jLTEzMTgtICpcXHRcXHRcXHRcXHQgICAgbWF0Y2ggd2l0aCBhbnkgZ2l2ZW4gZmlsdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMjAtICovXFxubW0vZGFtb24vY29yZS5jOjEzMjE6c3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgbGlzdF9oZWFkICpmaWx0ZXJzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzIyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTMyMzpcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpsYXN0X2ZpbHRlcjtcXG5tbS9kYW1vbi9jb3JlLmMtMTMyNC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzI2LVxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTMyNzpcXHRsYXN0X2ZpbHRlciA9IGxpc3RfbGFzdF9lbnRyeShmaWx0ZXJzLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyLCBsaXN0KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTMyOC1cXHRyZXR1cm4gbGFzdF9maWx0ZXItXFx1MDAzZWFsbG93O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMzAtXFxubW0vZGFtb24vY29yZS5jOjEzMzE6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzMyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzM2LVxcdFxcdHMtXFx1MDAzZWNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCA9XFxubW0vZGFtb24vY29yZS5jOjEzMzc6XFx0XFx0XFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcXHUwMDI2cy1cXHUwMDNlY29yZV9maWx0ZXJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTMzOC1cXHRzLVxcdTAwM2VvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCA9XFxubW0vZGFtb24vY29yZS5jOjEzMzk6XFx0XFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzQwLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzQyPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTM3MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoxMzcxOiAqIGRhbW9zX2NvbW1pdF9kZXN0cygpIC0gQ29weSBtaWdyYXRpb24gZGVzdGluYXRpb25zIGZyb20gQHNyYyB0byBAZHN0Llxcbm1tL2RhbW9uL2NvcmUuYy0xMzcyLSAqIEBkc3Q6XFx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzg2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMzg3OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2Rlc3RzKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkc3QsXFxubW0vZGFtb24vY29yZS5jOjEzODg6XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTM4OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQxNy1cXG5tbS9kYW1vbi9jb3JlLmM6MTQxODpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTQxOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQyMS1cXG5tbS9kYW1vbi9jb3JlLmM6MTQyMjpcXHRlcnIgPSBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQyMy1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDI0LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE0MjU6XFx0ZXJyID0gZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQyNi1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDI3LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE0Mjg6XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoZHN0KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQyOS1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDQzLVxcbm1tL2RhbW9uL2NvcmUuYzoxNDQ0OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTQ0NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ1MjpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdC1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmMtXFx1MDAzZXF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1My1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NTgtXFxubW0vZGFtb24vY29yZS5jOjE0NTk6XFx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFxcdTAwMjZkc3QtXFx1MDAzZW1pZ3JhdGVfZGVzdHMsIFxcdTAwMjZzcmMtXFx1MDAzZW1pZ3JhdGVfZGVzdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDYwLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ2Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ2MzpcXHRlcnIgPSBkYW1vc19jb21taXRfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE0NjQtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDcxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ3OC1cXHRcXHRpZiAoc3JjX3NjaGVtZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNDc5OlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdChkc3Rfc2NoZW1lLCBzcmNfc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ4MC1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0OTYtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE0OTc6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0KG5ld19zY2hlbWUsIHNyY19zY2hlbWUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDk4LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzUxPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTQtXFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxubW0vZGFtb24vY29yZS5jOjE3NTU6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTE3NTYtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc2My1cXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBzcmMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTc2NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jLTE3NjUtXFxubW0vZGFtb24vY29yZS5jOjE3NjY6XFx0XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xcbm1tL2RhbW9uL2NvcmUuYy0xNzY3LVxcdFxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MzctICovXFxubW0vZGFtb24vY29yZS5jOjE4Mzg6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4Mzkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NTctICovXFxubW0vZGFtb24vY29yZS5jOjE4NTg6aW50IGRhbW9uX25yX3J1bm5pbmdfY3R4cyh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0xODU5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTU3PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB2b2lkIF9fZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjAzOTp2b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDU0PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2OS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA3MDppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0yMDcxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTA1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTA2OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjEwNy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjEzNC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjEzNTogKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxcbm1tL2RhbW9uL2NvcmUuYy0yMTM2LSAqIEBjdHg6XFx0REFNT04gY29udGV4dCB0byBjYWxsIHRoZSBmdW5jdGlvbnMgZm9yLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNDQtICoganVzdCBhZnRlciBpdCBhcHBsaWVkIGFueSBEQU1PUyBhY3Rpb25zIG9mIEBjdHggdG8gaXQuICBUaGUgaW52b2NhdGlvbiBpc1xcbm1tL2RhbW9uL2NvcmUuYzoyMTQ1OiAqIG1hZGUgb25seSB3aXRoaW4gb25lIFxcdTAwMjZkYW1vcy1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgc2luY2UgZGFtb3Nfd2FsaygpXFxubW0vZGFtb24vY29yZS5jLTIxNDYtICogaW52b2NhdGlvbiwgZm9yIGVhY2ggc2NoZW1lLiAgVGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBoZW5jZSBzYWZlbHlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTUwLSAqIHBhc3NlZCBhdCBsZWFzdCBvbmUgXFx1MDAyNmRhbW9zLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywga2RhbW9uZCBtYXJrcyB0aGUgcmVxdWVzdCBhc1xcbm1tL2RhbW9uL2NvcmUuYzoyMTUxOiAqIGNvbXBsZXRlZCBzbyB0aGF0IGRhbW9zX3dhbGsoKSBjYW4gd2FrZXVwIGFuZCByZXR1cm4uXFxubW0vZGFtb24vY29yZS5jLTIxNTItICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTU5OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjI1ND1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNzUtXFxubW0vZGFtb24vY29yZS5jOjIyNzY6c3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbm1tL2RhbW9uL2NvcmUuYy0yMjc3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI5MS0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMjkyOiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXFxubW0vZGFtb24vY29yZS5jLTIyOTMtICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMjk3OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk4LXtcXG5tbS9kYW1vbi9jb3JlLmMtMjI5OS1cXHRyZXR1cm4gcXVvdGEtXFx1MDAzZWVzeiB8fCBxdW90YS1cXHUwMDNlc3ogfHwgcXVvdGEtXFx1MDAzZW1zIHx8XFxubW0vZGFtb24vY29yZS5jOjIzMDA6XFx0XFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjMwMS19XFxubW0vZGFtb24vY29yZS5jLTIzMDItXFxubW0vZGFtb24vY29yZS5jOjIzMDM6c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTIzMDQtXFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzA1LXtcXG5tbS9kYW1vbi9jb3JlLmM6MjMwNjpcXHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzA3LVxcbm1tL2RhbW9uL2NvcmUuYzoyMzA4OlxcdGlmICghcmV0IHx8ICFkYW1vc19xdW90YV9pc19zZXQoXFx1MDAyNnMtXFx1MDAzZXF1b3RhKSB8fCAhYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTIzMDktXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzE0LS8qXFxubW0vZGFtb24vY29yZS5jOjIzMTU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxubW0vZGFtb24vY29yZS5jLTIzMTYtICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMzOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjMzOTpzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTIzNDAtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MTowMS4zNTY2MjM2MjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU4OTgyOTQ0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBTeXNmcyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gYSB1c2VyIGludGVyYWN0cyB3aXRoIERBTU9OIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGltZSB0byBkaWcgaW4hIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgaGFuZGxlcyB0aG9zZSBzeXNmcyBpbnRlcmFjdGlvbnMsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBtbS9kYW1vbi9zeXNmcy5jYC4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgREFNT04ncyBmdW5jdGlvbmFsaXR5IGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdXNlciBjb21tYW5kcyBhcmUgaW50ZXJwcmV0ZWQgYW5kIGV4ZWN1dGVkIHdpdGhpbiB0aGUgREFNT04gZnJhbWV3b3JrLiBTaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgam91cm5leSwgaG9wZWZ1bGx5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE5OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjUyOjE3LjI1NDkyMDgzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTg0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNTA5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MjA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGttYWxsb2Nfb2JqKCpyYW5nZSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0zMT1zdGF0aWMgc3NpemVfdCBtaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMzMte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM0OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTM2LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NDA9c3RhdGljIHNzaXplX3QgbWluX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NDM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNDUtXFx0dW5zaWduZWQgbG9uZyBtaW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz01Nj1zdGF0aWMgc3NpemVfdCBtYXhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02Ny17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpyYW5nZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXFx0dW5zaWduZWQgbG9uZyBtYXg7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MTp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODIte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04NC19XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODctXFx0XFx0X19BVFRSX1JXX01PREUobWluLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MC1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkxLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9taW5fYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0OlxcdFxcdTAwMjZkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTYtfTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05OC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5OTpjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAxLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTAyOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDMtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDY6c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA3LVxcdFxcdGNoYXIgKm1lbWNnX3BhdGhfYnVmLCBjaGFyICpwYXRoKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzQtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM1OlxcdFxcdGlmIChkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKG1lbWNnLCBwYXRoLCBtZW1jZ19wYXRoKSkge1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNi1cXHRcXHRcXHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6OTpleHRlcm4gc3RydWN0IG11dGV4IGRhbW9uX3N5c2ZzX2xvY2s7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTE6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xMi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOC1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xOS1cXHRcXHR1bnNpZ25lZCBsb25nIG1heCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MjA6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjI4OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yOS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjMwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2FycjtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQwOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTI6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDI9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcmVnaW9uX3JtX2RpcnMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwOT1zdGF0aWMgc3NpemVfdCBzdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEyOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjE0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjc9c3RhdGljIHNzaXplX3QgbnJfYWNjZXNzZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjM2PXN0YXRpYyBzc2l6ZV90IGFnZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjM5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQ3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjU4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjYyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN0YXJ0LCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2VuZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY2LVxcdFxcdF9fQVRUUl9ST19NT0RFKGVuZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY5LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVxcdFxcdF9fQVRUUl9ST19NT0RFKGFnZSwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc0OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zel9maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzUtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfZmlsdGVyX3Bhc3NlZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3OTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODA6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODE6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODMtXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODg6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MS19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk3OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDU6ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA3OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucyA9IGttYWxsb2Nfb2JqKCpyZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxOT1zdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzIzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyODpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnIsICpuZXh0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQzLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ0OlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ1LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ4LVxcdFxcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUzLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzU1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1OC1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTk6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjAtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM2NjpzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4MS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODUte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM5Mj1zdGF0aWMgc3NpemVfdCBzel90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzk0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzk2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5Ny1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MDE9c3RhdGljIHNzaXplX3QgbnJfYXBwbGllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MDYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MTIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBzel9vcHNfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQyMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDI4PXN0YXRpYyBzc2l6ZV90IHF0X2V4Y2VlZHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDMzLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Mzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ0Nj1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQ4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQ5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ1MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NTU9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDYwLVxcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cywgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDY5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDcwOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcxLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDcyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc0LVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X3RyaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Nzk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODAtXFx0XFx0X19BVFRSX1JPX01PREUobnJfYXBwbGllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgzLVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXFx0XFx0X19BVFRSX1JPX01PREUoc3pfb3BzX2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShxdF9leGNlZWRzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5Mi1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cXHRcXHRfX0FUVFJfUldfTU9ERShtYXhfbnJfc25hcHNob3RzLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTc6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5ODpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfdHJpZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTk6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X3RyaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9hcHBsaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTAyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMzpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA1OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA2LVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNy19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDg6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3N0YXRzX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTE6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MTItXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTEzOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3N0YXRzX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTIzPWVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1Mjk6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0MTpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Mi1cXHRcXHRlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0My17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcXHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cXHRpZiAoZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU5Mz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTk3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTk4LVxcdGludCBpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTYyNz1zdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYyOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjYzMTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYzMi1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjUyPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU0LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjU2OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjU3LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY2MT1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjYtXFx0Ym9vbCBtYXRjaGluZztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NzY9c3RhdGljIHNzaXplX3QgYWxsb3dfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2Nzk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cXHRib29sIGFsbG93O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzAyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVxcdGludCBsZW47XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcxMC1cXHRcXHRcXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPyBmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggOiBcXFwiXFxcIik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXFx0cmV0dXJuIGxlbjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXFx0Y2hhciAqcGF0aCA9IGttYWxsb2NfYXJyYXkoc2l6ZV9hZGQoY291bnQsIDEpLCBzaXplb2YoKnBhdGgpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cXHRzdHJzY3B5KHBhdGgsIGJ1ZiwgY291bnQgKyAxKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzI3OlxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzI4LVxcdFxcdGtmcmVlKHBhdGgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczMi1cXHRmaWx0ZXItXFx1MDAzZW1lbWNnX3BhdGggPSBwYXRoO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MzM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM0LVxcdHJldHVybiBjb3VudDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03Mzc9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczOS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0MTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0Mi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NDY9c3RhdGljIHNzaXplX3QgYWRkcl9zdGFydF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDk6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NTEtXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmZpbHRlci1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzU4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzYwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc2NT1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Njcte1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1MjoxNy4zNTU1MDkxMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1Mjg5NDg3NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgREFNT04ncyBTeXNmcyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBrZXJuZWwgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBrZGFtb25kc2Agc3RhdGUgY29udHJvbC4gSSdtIGN1cmlvdXMgd2hhdCBoYXBwZW5zIHVuZGVyIHRoZSBob29kIHdoZW4gSSB3cml0ZSBcIm9uXCIgb3IgXCJjb21taXRcIiB0byB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLi9zdGF0ZWAgZmlsZS4gVGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcgLSB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhvc2Ugc3lzZnMgd3JpdGVzIGFuZCB0cmFuc2xhdGVzIHRoZW0gaW50byBEQU1PTidzIG9wZXJhdGlvbmFsIHN0YXRlIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBcIm9uXCIgYWN0aXZhdGVzIGEgbW9uaXRvciwgYW5kIHdoYXQgXCJjb21taXRcIiB0cnVseSBzaWduaWZpZXMgaW4gdGVybXMgb2YgY2hhbmdlcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIzMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU2OjAyLjY0NDk5OTQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIzNjQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwMy1cXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDUtXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU2OjAyLjY5MTU1NTE4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjcyNDcxODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzdGF0ZV9zdG9yZWAgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgREFNT04ncyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhdGVfc3RvcmVgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvcmUgb2YgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHJlbGF0ZWQgdG8gY2hhbmdpbmcgdGhlIG1vbml0b3IncyBvcGVyYXRpb25hbCBzdGF0ZSBpcyBpbXBsZW1lbnRlZC4gSSdtIHRoaW5raW5nIEknbGwgZmluZCB0aGUgbG9naWMgZm9yIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMgbGlrZSAncnVubmluZycsICdzdG9wcGVkJywgYW5kIGFueSBjdXN0b20gc3RhdGVzIERBTU9OIG1pZ2h0IHN1cHBvcnQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgYXR0cmlidXRlcyBjb25uZWN0IHRvIHRoZSBpbnRlcm5hbCBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZWNoYW5pc21zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyIGRpZmZlcmVudCBvcGVyYXRpb25hbCBiZWhhdmlvcnMgd2l0aGluIHRoZSBtb25pdG9yaW5nIGFuZCByZWNsYW1hdGlvbiBsb29wcy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgZXJyb3IgaGFuZGxpbmcgaGVyZTsgSSdsbCB3YW50IHRvIHNlZSBob3cgaW52YWxpZCBzdGF0ZSByZXF1ZXN0cyBvciBvdGhlciBpc3N1ZXMgYXJlIGRlYWx0IHdpdGguIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcm9idXN0IHRoZSBpbnRlcmZhY2UgaXMuIEZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIHN0YXRlIHZhcmlhYmxlIGFuZCBlbnN1cmUgYXRvbWljIHRyYW5zaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU2OjI4Ljk2NDAyOTQ5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzkwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzkwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuMjM5MTpcXHRcXHRcXHRcXHRrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzKTtcXG4yMzkyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxuMjM5MzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk0OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuMjM5NTpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzk2OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxuMjM5NzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk4OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcbjIzOTk6XFx0XFx0ZGVmYXVsdDpcXG4yNDAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0MDE6XFx0XFx0fVxcbjI0MDI6XFx0fVxcbjI0MDM6XFx0XFxuMjQwNDpcXHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjI0MDU6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMjQwNjpcXHR7XFxuMjQwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbjI0MDg6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xcbjI0MDk6XFx0XFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xcbjI0MTA6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbjI0MTE6XFx0XFxuMjQxMjpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjI0MTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNDE0OlxcdFxcdGZvciAoY21kID0gMDsgY21kIFxcdTAwM2MgTlJfREFNT05fU1lTRlNfQ01EUzsgY21kKyspIHtcXG4yNDE1OlxcdFxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XFxuMjQxNjpcXHRcXHRcXHRcXHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XFxuMjQxNzpcXHRcXHRcXHRcXHRicmVhaztcXG4yNDE4OlxcdFxcdFxcdH1cXG4yNDE5OlxcdFxcdH1cXG4yNDIwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XFxuMjQyMTpcXHRcXHRpZiAoIXJldClcXG4yNDIyOlxcdFxcdFxcdHJldCA9IGNvdW50O1xcbjI0MjM6XFx0XFx0cmV0dXJuIHJldDtcXG4yNDI0OlxcdH1cXG4yNDI1OlxcdFxcbjI0MjY6XFx0c3RhdGljIHNzaXplX3QgcGlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMjQyNzpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4yNDI4OlxcdHtcXG4yNDI5OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gY29udGFpbmVyX29mKGtvYmosXFxuMjQzMDpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCwga29iaik7XFxuMjQzMTpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMjQzMjpcXHRcXHRpbnQgcGlkID0gLTE7XFxuMjQzMzpcXHRcXG4yNDM0OlxcdFxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXFxuMjQzNTpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjI0MzY6XFx0XFx0Y3R4ID0ga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4O1xcbjI0Mzc6XFx0XFx0aWYgKCFjdHgpXFxuMjQzODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNDM5OlxcdFxcbjI0NDA6XFx0XFx0cGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcXG4yNDQxOlxcdFxcdGlmIChwaWQgXFx1MDAzYyAwKVxcbjI0NDI6XFx0XFx0XFx0cGlkID0gLTE7XFxuMjQ0MzpcXHRvdXQ6XFxuMjQ0NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjI0NDU6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHBpZCk7XFxuMjQ0NjpcXHR9XFxuMjQ0NzpcXHRcXG4yNDQ4OlxcdHN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4yNDQ5OlxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1NjoyOC45NjQyMTE3MDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQzODA4NTgxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhcyB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBcmUgdGhlc2UgZnVuY3Rpb25zIGFuZCBmZWF0dXJlcyByZWFjaGFibGUgYW5kIHRodXMsIHdvcnRoIGZ1enppbmc/XCIgWWVzLCBhYnNvbHV0ZWx5LiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbW9uaXRvcmluZyBhbmQgbWFuYWdlbWVudCBjb21wb25lbnRzIHdpdGhpbiBEQU1PTi4gR2l2ZW4gREFNT04ncyBhY2Nlc3NpYmlsaXR5IHZpYSBzeXNmcyBhbmQga2VybmVsIG1vZHVsZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZyb20gdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlLCBgY29yZS5jYCByZXF1aXJlcyBgQ09ORklHX0RBTU9OPXlgLCB3aGljaCBpcyBleHBlY3RlZC4gYHZhZGRyLmNgIHJlcXVpcmVzIGBDT05GSUdfREFNT05fVkFERFI9eWAsIHdoaWNoIGRlcGVuZHMgb24gYERBTU9OYCBhbmQgYE1NVWAuIFNpbWlsYXJseSwgYHBhZGRyLmNgIG5lZWRzIGBDT05GSUdfREFNT05fUEFERFI9eWAsIGFsc28gZGVwZW5kaW5nIG9uIGBEQU1PTmAgYW5kIGBNTVVgLiBGaW5hbGx5LCB0aGUgc3lzZnMgaW50ZXJmYWNlIG5lZWRzIGBDT05GSUdfREFNT05fU1lTRlM9eWAsIG5hdHVyYWxseSBkZXBlbmRpbmcgb24gYERBTU9OYCBhbmQgYFNZU0ZTYC4gVGhpcyBnaXZlcyB1cyBhIGdvb2QgcGljdHVyZSBvZiB0aGUgcHJlLXJlcXVpc2l0ZXMgZm9yIHRoZSBjb2RlIHRvIGJlIGNvbXBpbGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gREFNT04ncyBxdW90YSwgbWlncmF0aW9uLCBvciBtZW1jZyBmZWF0dXJlcywgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBmdW5jdGlvbnMgbGlrZSBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBhbnkgYERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUGAgb3IgYE1FTUNHYCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9ucyBiZWluZyBjaGFuZ2VkIGFuZCB0byBpZGVudGlmeSBwb3RlbnRpYWwgZWRnZSBjYXNlcyB0aGF0IGEgZnV6emVyIHNob3VsZCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6NTc6MzMuMzQ1MDcyMjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ0ODAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yODA1PXN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODMyLVxcbm1tL2RhbW9uL2NvcmUuYzoyODMzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jLTI4MzQtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjk4Nz1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjk5Mi1cXG5tbS9kYW1vbi9jb3JlLmM6Mjk5MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbm1tL2RhbW9uL2NvcmUuYy0yOTk0LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwMjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwNDMtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxubW0vZGFtb24vY29yZS5jOjMwNDQ6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwNDUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjU3OjMzLjM4OTUyMzg4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkxNzEwOTM1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgY29kZSwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgcmVmbGVjdGlvbjpcblxuKipEQU1PTidzIE1lbW9yeSBBY2Nlc3MgUG9pbnQgRnVuY3Rpb25zKipcblxuT2theSwgZGl2aW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AsIEknbSBob21pbmcgaW4gb24gdGhlIGAjaWZkZWZgIGJsb2NrcyBzdXJyb3VuZGluZyBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IGhhdmUgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5LCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhleSdyZSBjb25kaXRpb25hbCBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIGFuZCB3aGF0IGNvbXBpbGUtdGltZSBvcHRpb25zIHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBsb2dpYy4gSSBrbm93IHRoZXNlIGFyZSBsaWtlbHkgdGhlIGJ1aWxkaW5nIGJsb2Nrcywgb3IgYWNjZXNzIHBvaW50cyBmb3IgbWVtb3J5IGFjY2VzcywgdXNlZCBpbiB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGZyYW1ld29yaywgYW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbmRpY2F0ZXMgc29tZSBkZWdyZWUgb2YgY29uZmlndXJhdGlvbiBmbGV4aWJpbGl0eS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlmZmVyZW50IG1lbW9yeSBub2RlIGNvbmZpZ3VyYXRpb25zLCBtZW1vcnkgY2dyb3VwIHN1cHBvcnQsIG9yIHBvc3NpYmx5IGV2ZW4gdGFyZ2V0IGFyY2hpdGVjdHVyZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGVmaW5lcyB0aGUgYnVpbGQgY29uZGl0aW9uLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHkgd2hlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgd2hlbiB0aGV5IGFyZW4ndC4gVGltZSB0byB0cmFjZSB0aG9zZSBwcmVwcm9jZXNzb3Igc3ltYm9scyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1OToyMi41NjA2MTk5NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODAwOlxcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcXG4yODAxOlxcdHtcXG4yODAyOlxcdFxcdHJldHVybiBuaWQgXFx1MDAzYyAwIHx8IG5pZCBcXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSk7XFxuMjgwMzpcXHR9XFxuMjgwNDpcXHRcXG4yODA1OlxcdHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4yODA2OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MDc6XFx0e1xcbjI4MDg6XFx0XFx0c3RydWN0IHN5c2luZm8gaTtcXG4yODA5OlxcdFxcdF9fa2VybmVsX3Vsb25nX3QgbnVtZXJhdG9yO1xcbjI4MTA6XFx0XFxuMjgxMTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjgxMjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgxMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODE0OlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXFxuMjgxNTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgxNjpcXHRcXHR9XFxuMjgxNzpcXHRcXG4yODE4OlxcdFxcdHNpX21lbWluZm9fbm9kZShcXHUwMDI2aSwgZ29hbC1cXHUwMDNlbmlkKTtcXG4yODE5OlxcdFxcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFxcdTAwM2MgaS5mcmVlcmFtKSB7XFxuMjgyMDpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgyMTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgyMjpcXHRcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4MjM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgyNDpcXHRcXHR9XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcXG4yODI3OlxcdFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XFxuMjgyODpcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4Mjk6XFx0XFx0XFx0bnVtZXJhdG9yID0gaS5mcmVlcmFtO1xcbjI4MzA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyhudW1lcmF0b3IsIDEwMDAwLCBpLnRvdGFscmFtKTtcXG4yODMxOlxcdH1cXG4yODMyOlxcdFxcbjI4MzM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4yODM0OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MzU6XFx0e1xcbjI4MzY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjI4Mzc6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjI4Mzg6XFx0XFx0dW5zaWduZWQgbG9uZyB1c2VkX3BhZ2VzLCBudW1lcmF0b3I7XFxuMjgzOTpcXHRcXHRzdHJ1Y3Qgc3lzaW5mbyBpO1xcbjI4NDA6XFx0XFxuMjg0MTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjg0MjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4yODQzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjI4NDQ6XFx0XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbjI4NDU6XFx0XFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbjI4NDY6XFx0XFx0fVxcbjI4NDc6XFx0XFxuMjg0ODpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoZ29hbC1cXHUwMDNlbWVtY2dfaWQpO1xcbjI4NDk6XFx0XFx0aWYgKCFtZW1jZykge1xcbjI4NTA6XFx0XFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxuMjg1MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODUyOlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG4yODUzOlxcdFxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4yODU0OlxcdFxcdH1cXG4yODU1OlxcdFxcbjI4NTY6XFx0XFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuMjg1NzpcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKGdvYWwtXFx1MDAzZW5pZCkpO1xcbjI4NTg6XFx0XFx0dXNlZF9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xcbjI4NTk6XFx0XFx0dXNlZF9wYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjo1OToyMi41NjA3OTE1MDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwNjE3NzQ2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgdGhvc2UgYGRhbW9zX2dldF9ub2RlX21lbV9icGAgYW5kIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCBmdW5jdGlvbnMuIExvb2tpbmcgYXQgbGluZXMgMjc4MC0yODA1IGFuZCAyOTgwLTMwMDAsIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgdGhhdCBjb250cm9sIHRoZWlyIGluY2x1c2lvbi4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBidWlsZCB0YXJnZXQsIG1heWJlIHNvbWV0aGluZyB0byBkbyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGdyYW51bGFyaXR5LCBvciBwZXJoYXBzIGV2ZW4gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHRoZW4gY29ycmVsYXRlIHRoYXQgd2l0aCB0aGUgcHJvamVjdCdzIGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb25zLCBhbmQgYnVpbGQgc2NyaXB0cy4gVW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4gb3B0aW1pemluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGlzIGNvZGUuIEl0IGNvdWxkIHBvaW50IHRvIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgcGF0aHMsIGRlYnVnIGZsYWdzLCBvciBldmVuIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHByZXByb2Nlc3NvciBpcyB1cCB0byFcblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjAwOjI1LjYyMjU2ODY3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0I2lmZGVmIENPTkZJR19QU0lcXG4yNzgxOlxcdFxcbjI3ODI6XFx0c3RhdGljIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxuMjc4MzpcXHR7XFxuMjc4NDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnBzaV9kaXNhYmxlZCkpXFxuMjc4NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNzg2OlxcdFxcdHJldHVybiBkaXZfdTY0KHBzaV9zeXN0ZW0udG90YWxbUFNJX0FWR1NdW1BTSV9NRU0gKiAyXSxcXG4yNzg3OlxcdFxcdFxcdFxcdE5TRUNfUEVSX1VTRUMpO1xcbjI3ODg6XFx0fVxcbjI3ODk6XFx0XFxuMjc5MDpcXHQjZWxzZVxcdC8qIENPTkZJR19QU0kgKi9cXG4yNzkxOlxcdFxcbjI3OTI6XFx0c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxcbjI3OTM6XFx0e1xcbjI3OTQ6XFx0XFx0cmV0dXJuIDA7XFxuMjc5NTpcXHR9XFxuMjc5NjpcXHRcXG4yNzk3OlxcdCNlbmRpZlxcdC8qIENPTkZJR19QU0kgKi9cXG4yNzk4OlxcdFxcbjI3OTk6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMjgwMDpcXHRzdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXFxuMjgwMTpcXHR7XFxuMjgwMjpcXHRcXHRyZXR1cm4gbmlkIFxcdTAwM2MgMCB8fCBuaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpO1xcbjI4MDM6XFx0fVxcbjI4MDQ6XFx0XFxuMjgwNTpcXHRzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxuMjgwNjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4yODA3OlxcdHtcXG4yODA4OlxcdFxcdHN0cnVjdCBzeXNpbmZvIGk7XFxuMjgwOTpcXHRcXHRfX2tlcm5lbF91bG9uZ190IG51bWVyYXRvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDA6MjUuNjIyNzI0OTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2MzAzMTA1MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gREFNT04sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjk4MC0zMDIwIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBMZXQncyBhc3N1bWUgSSdtIGRpZ2dpbmcgaW50byBhIHBlcmZvcm1hbmNlIGlzc3VlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc29tZSBhc3BlY3Qgb2YgdGhlIERBTU9OIG1vbml0b3Jpbmcvb3B0aW1pc2F0aW9uLiBGaXJzdCwgSSdtIGV4cGVjdGluZyB0byBzZWUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGEgYmxvY2sgb2YgY29kZSB3aXRoaW4gYSBmdW5jdGlvbi4gR2l2ZW4gdGhlIGZpbGUgYW5kIGxpa2VseSBzY29wZSBvZiBEQU1PTiwgSSBhbnRpY2lwYXRlIHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIG1vbml0b3JpbmcgYSByZWdpb24sIHBvdGVudGlhbGx5IHVwZGF0aW5nIHN0YXRzLCBvciBtYXliZSBldmVuIHRyaWdnZXJpbmcgc29tZSBhY3Rpb24gYmFzZWQgb24gREFNT04ncyBmZWVkYmFjay5cblxuSSdsbCBiZSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9yczogZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMsIGNhbGxzIHRvIG90aGVyIERBTU9OIGZ1bmN0aW9ucyAobGlrZSB0aGUgdXBkYXRlIG9yIGFjdGlvbiBmdW5jdGlvbnMpLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhlIHN1c3BlY3RlZCBwZXJmb3JtYW5jZSBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaWFibGVzIGJlaW5nIHVzZWQgYW5kIGhvdyB0aGV5J3JlIGJlaW5nIG1vZGlmaWVkLiBBcmUgdGhlcmUgYW55IGxvY2tzIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3k/IEknbGwgcHJvYmFibHkgYmUgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBsb29wcyBvciBicmFuY2hlcy5cblxuVGhpcyBjb3VsZCBiZSB3aGVyZSBEQU1PTiBkZWNpZGVzIHRvIGluaXRpYXRlIHNvbWUga2luZCBvZiBhY3Rpb24gYmFzZWQgb24gdGhlIGlkZW50aWZpZWQgaG90IHJlZ2lvbnMuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgaWYgbm90LCBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgdXAgYW5kIGRvd24gdGhlIGNhbGwgc3RhY2sgdG8gcmVjb25zdHJ1Y3QgdGhlIHN0b3J5LiBJJ2xsIGFsc28gYmUgY2hlY2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtLiBJZiBpdCdzIGEgcGVyZm9ybWFuY2UgaXNzdWUsIEknbGwgYmUgbG9va2luZyBmb3IgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbnQgYWxnb3JpdGhtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjAxOjQxLjkyNTgzMjQ3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5ODA6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMjk4MTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIGludCBuaWQpXFxuMjk4MjpcXHR7XFxuMjk4MzpcXHRcXHRyZXR1cm4gMDtcXG4yOTg0OlxcdH1cXG4yOTg1OlxcdCNlbmRpZiAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cXG4yOTg2OlxcdCNlbHNlIC8qIENPTkZJR19OVU1BICovXFxuMjk4NzpcXHRzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxuMjk4ODpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4yOTg5OlxcdHtcXG4yOTkwOlxcdFxcdHJldHVybiAwO1xcbjI5OTE6XFx0fVxcbjI5OTI6XFx0XFxuMjk5MzpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbjI5OTQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuMjk5NTpcXHR7XFxuMjk5NjpcXHRcXHRyZXR1cm4gMDtcXG4yOTk3OlxcdH1cXG4yOTk4OlxcdFxcbjI5OTk6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMzAwMDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIGludCBuaWQpXFxuMzAwMTpcXHR7XFxuMzAwMjpcXHRcXHRyZXR1cm4gMDtcXG4zMDAzOlxcdH1cXG4zMDA0OlxcdCNlbmRpZiAvKiBDT05GSUdfTlVNQSAqL1xcbjMwMDU6XFx0XFxuMzAwNjpcXHQvKlxcbjMwMDc6XFx0ICogUmV0dXJucyBMUlUtYWN0aXZlIG9yIGluYWN0aXZlIG1lbW9yeSB0byB0b3RhbCBMUlUgbWVtb3J5IHNpemUgcmF0aW8uXFxuMzAwODpcXHQgKi9cXG4zMDA5OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxuMzAxMDpcXHR7XFxuMzAxMTpcXHRcXHR1bnNpZ25lZCBsb25nIGFjdGl2ZSwgaW5hY3RpdmUsIHRvdGFsO1xcbjMwMTI6XFx0XFxuMzAxMzpcXHRcXHQvKiBUaGlzIHNob3VsZCBhbGlnbiB3aXRoIC9wcm9jL21lbWluZm8gb3V0cHV0ICovXFxuMzAxNDpcXHRcXHRhY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9BTk9OKSArXFxuMzAxNTpcXHRcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9GSUxFKTtcXG4zMDE2OlxcdFxcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9BTk9OKSArXFxuMzAxNzpcXHRcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0ZJTEUpO1xcbjMwMTg6XFx0XFx0dG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO1xcbjMwMTk6XFx0XFx0aWYgKGFjdGl2ZV9yYXRpbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDE6NDEuOTI2MDY0OTg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzAzMDUxMDcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEFQSSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLCBvYnZpb3VzbHkuIEFsc28sIGNvbnNpZGVyaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbXBsaWNhdGlvbnMsIEknbGwgbmVlZCB0byBjaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggTlVNQSwgc28gYE5VTUFgIGFuZCBtZW1vcnkgcXVvdGFzIGNvbWUgaW50byBwbGF5LCBhcyB3ZWxsIGFzIGBNRU1DR2AgZm9yIHF1b3RhIGdvYWxzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgYmFzZSBjb25maWd1cmF0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVzc2VudGlhbCBzeW1ib2xzIGFuZCBob3cgdGhleSdyZSBleHBvc2VkLiBNeSBwcmVmZXJlbmNlIGlzIGFsd2F5cyB0b3dhcmRzIHRoZSBtb3JlIGFjY2Vzc2libGUsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGFueSBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb3JlIGZ1bmN0aW9uIHBhdGhzLiBJbiBgY29yZS5jYCwgSSdsbCBzcGVjaWZpY2FsbHkgbG9vayBhdDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fY2FsbGAsIGBkYW1vc193YWxrYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9zZXRfYXR0cnNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LlxuXG5Ob3csIGZvciBgc3lzZnMuY2AsIEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaW5kIHRoZSBgc3lzZnNgIHNob3cvc3RvcmUgYXR0cmlidXRlcyBhbmQgYW55IHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEknbGwgZXhhbWluZSBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgd2hhdCBvdGhlciBub24tc3RhdGljIHN5bWJvbHMgYXJlIGV4cG9zZWQgdGhyb3VnaCB0aGUgYG1tL2RhbW9uYCBkaXJlY3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzQ0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDQ6MjguOTU2NTc4Mjg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYwNjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGRhbW9uX3xedm9pZCBkYW1vbl98XmludCBkYW1vc198XnZvaWQgZGFtb3NfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjgtXFxubW0vZGFtb24vY29yZS5jOjEyOTp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzOT1zdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0My1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzQtXFxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDc4OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy00NzktXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTU5MT1ib29sIGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MDItXFxubW0vZGFtb24vY29yZS5jOjYwMzp2b2lkIGRhbW9zX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy02MDQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTYxNj1zdGF0aWMgdm9pZCBkYW1vc19mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyMC1cXG5tbS9kYW1vbi9jb3JlLmM6NjIxOnZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtNjIyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02Mjc9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY0MS1cXG5tbS9kYW1vbi9jb3JlLmM6NjQyOnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG5tbS9kYW1vbi9jb3JlLmMtNjQzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02NTI9c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTY1Ni1cXG5tbS9kYW1vbi9jb3JlLmM6NjU3OnZvaWQgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy02NTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTcyND1zdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzM0LVxcbm1tL2RhbW9uL2NvcmUuYzo3MzU6dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy03MzYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc0Nj1zdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxcbm1tL2RhbW9uL2NvcmUuYzo3NTE6dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTc1Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzc2PXN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTItXFxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgwMz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA3LVxcbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04MDkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNi1cXG5tbS9kYW1vbi9jb3JlLmM6ODE3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04MTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTg3Mj1zdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTg3OS1cXG5tbS9kYW1vbi9jb3JlLmM6ODgwOnZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDQ4OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVxcdFxcdFxcdHNzaXplX3QgbnJfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTM5PXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjEtICovXFxubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MDk9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzNy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTgzODppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTE4NTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXFxubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxubW0vZGFtb24vY29yZS5jLTE5NzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXFxubW0vZGFtb24vY29yZS5jLTIwNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDY5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNzEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXFxubW0vZGFtb24vY29yZS5jOjIxMDY6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMTA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTU5OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzk2ND1zdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5OTUtICovXFxubW0vZGFtb24vY29yZS5jOjM5OTY6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTk3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAyMTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcXG5tbS9kYW1vbi9jb3JlLmMtNDAyMi17XFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE0LSAqL1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MTU6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNi1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cClcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDo0NjppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0yND1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00MS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDI6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQzLXtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Mi1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzM6dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTQ5LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNTA6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTk9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTczLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNzQ6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzUte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjExOnZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTMtYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTY1PXN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODE6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwNj1zdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTc6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZClcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9MTc9c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4KTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTIxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9MzQ9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM3PWV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzk6aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00My1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQ2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUyLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU3OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTgtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC02MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNjgwPXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4NTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4Ni17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTI5OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzAtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ1LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjM6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2NC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAwLSAqL1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTAxOnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE0ODppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ5LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowNDoyOS4wMDQxODc1MjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MzkyNTk5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gRnJhbWV3b3JrIFBhdGNoIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIERBTU9OIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEkgbmVlZCB0byBzZWUgaG93IHRoZSBleGVjdXRpb24gb2YgREFNT1Mgc2NoZW1lcyB3b3Jrcy4gSXQncyBjbGVhciB0aGF0IGBkYW1vc19hcHBseV9zY2hlbWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtkYW1vbmQgbG9vcCwgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGUgb3BlcmF0aW9ucyBmb3IgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSByZWdpc3RlcmVkIGFuZCBzZWxlY3RlZCBkeW5hbWljYWxseSwgYW5kIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgdGhlIG1vbml0b3JpbmcgYW5kIHNjaGVtZSBhcHBsaWNhdGlvbi5cblxuTm93LCBsZXQncyBwaW5wb2ludCB0aGUgY3J1Y2lhbCBzeW1ib2xzIGZvciBmdXp6aW5nLiBgZGFtb25fc3RhcnRgLCBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jYWxsYCwgYGRhbW9zX3dhbGtgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBsb29rIGxpa2UgZXhjZWxsZW50IHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlaXIgcm9sZXMgaW4gaW5pdGlhbGl6aW5nLCBjb25maWd1cmluZywgYW5kIGFwcGx5aW5nIHNjaGVtZXMuXG5cbk5leHQsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gV2UgYWJzb2x1dGVseSBuZWVkIGBEQU1PTmAsIG5hdHVyYWxseS4gIFRoZW4gYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHZpdGFsIGZvciBlbmFibGluZyB0aGUgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLlxuXG5UbyBiZSB0aG9yb3VnaCwgbGV0J3MgcmV2aXNpdCB0aGUgS2NvbmZpZyBmaWxlLiAgSSBzZWUgYSBmZXcgbW9yZSBvcHRpb25zLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAsIGFsbCBjb25kaXRpb25hbCBvbiBgREFNT05fUEFERFJgLiBXb3J0aCBrZWVwaW5nIGluIG1pbmQgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy5cbkluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHJlZ2lvbiBzcGxpdHRpbmcsIG1lbW9yeSBib3VuZCBjaGVja3MsIGFuZCBhIGNydWNpYWwgZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gdGhlIGdvYWwgY2FsY3VsYXRpb24gbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IGNvcnJlY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIGEgZnJhbWV3b3JrIHRvdWNoaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBxdW90YS5cblxuSW4gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgdXBkYXRlcyB0byB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbiB1c2luZyBgUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKWAgZm9yIGZvbGlvcyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBjcml0aWNhbCB0byBtYWludGFpbiBhY2N1cmFjeS4gVGhpcyBtYWtlcyBzZW5zZS5cblxuRmluYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgIGNvcnJlY3RzIHRoZSBpdGVyYXRpb24gb3ZlciBQTUQgZW50cmllcywgZW5zdXJpbmcgY29ycmVjdCBzdHJpZGUgY2FsY3VsYXRpb25zIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLXBhZ2UgZm9saW9zIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuXG5cbkZyb20gdGhpcyByZXZpZXcsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gVGhlIGZpeGVzIHRhcmdldCBmdW5jdGlvbmFsIGJ1Z3MgYWZmZWN0aW5nIHRoZSBjb3JlIGxvZ2ljIG9mIERBTU9OLCBpbmNsdWRpbmcgdGhlIHN5c2ZzIGludGVyZmFjZSBhbmQgZXNzZW50aWFsIG1lbW9yeSBnb2FsIGNhbGN1bGF0aW9ucy4gVGhlIGxpc3RlZCBmdW5jdGlvbnMgYXJlIGFsbCBpbXBvcnRhbnQuXG5cbk15IFZlcmRpY3Q6XG4tIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4tIGBFbmFibGVDb25maWdzYDogYFtcIkRBTU9OXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9QQUREUlwiLCBcIkRBTU9OX1NZU0ZTXCJdYFxuLSBgRm9jdXNTeW1ib2xzYDogYFtcImRhbW9uX3N0YXJ0XCIsIFwiZGFtb25fY29tbWl0X2N0eFwiLCBcImRhbW9uX3NldF9zY2hlbWVzXCIsIFwiZGFtb25fY2FsbFwiLCBcImRhbW9zX3dhbGtcIiwgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXWBcbi0gYFJlYXNvbmluZ2A6IENvcnJlY3RzIGltcG9ydGFudCBmdW5jdGlvbmFsIGFuZCBtZW1vcnktcmVsYXRlZCBidWdzIGluIERBTU9OIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGNvcmUgREFNT04gZnVuY3Rpb25zLlxuXG5Ob3csIEknbGwgcGFzcyB0aGlzIGluZm9ybWF0aW9uIGFsb25nIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNDIsIk91dHB1dFRva2VucyI6MjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA0OjU5Ljg0MzQ1MDI1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTQ4ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiLFxuICAgIFwiZGFtb3Nfd2Fsa1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyBpbiBEQU1PTiBjb3JlLCBwaHlzaWNhbCBhZGRyZXNzIChwYWRkciksIGFuZCB2aXJ0dWFsIGFkZHJlc3MgKHZhZGRyKSBvcGVyYXRpb25zOiBoYW5kbGluZyByZWdpb24gc3BsaXR0aW5nIGZhaWx1cmUgaW4gZGFtb3NfYXBwbHlfc2NoZW1lLCBwcmV2ZW50aW5nIGRpdmlzaW9uIGJ5IHplcm8gYW5kIG91dC1vZi1yYW5nZSBxdW90YSBjYWxjdWxhdGlvbnMgaW4gbm9kZS9tZW1jZyBtZW1vcnkgcXVvdGEgZ29hbHMsIGZpeGluZyBmb2xpbyBhZGRyZXNzIGFkdmFuY2VtZW50IGluIHBhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChwYWdlb3V0LCBkZWFjdGl2YXRlLCBtaWdyYXRlLCBzdGF0KSwgYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyBQTUQgaXRlcmF0aW9uIHN0cmlkZXMgYWNyb3NzIG11bHRpLXBhZ2UgZm9saW9zIGluIHZhZGRyIHNjaGVtZSBvcGVyYXRpb25zIChtaWdyYXRlLCBzdGF0KS4gQWxsIHRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9jYWxsXCIsXG4gICAgXCJkYW1vc193YWxrXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNldmVyYWwgZnVuY3Rpb25hbCBidWdzIGluIERBTU9OIGNvcmUsIHBoeXNpY2FsIGFkZHJlc3MgKHBhZGRyKSwgYW5kIHZpcnR1YWwgYWRkcmVzcyAodmFkZHIpIG9wZXJhdGlvbnM6IGhhbmRsaW5nIHJlZ2lvbiBzcGxpdHRpbmcgZmFpbHVyZSBpbiBkYW1vc19hcHBseV9zY2hlbWUsIHByZXZlbnRpbmcgZGl2aXNpb24gYnkgemVybyBhbmQgb3V0LW9mLXJhbmdlIHF1b3RhIGNhbGN1bGF0aW9ucyBpbiBub2RlL21lbWNnIG1lbW9yeSBxdW90YSBnb2FscywgZml4aW5nIGZvbGlvIGFkZHJlc3MgYWR2YW5jZW1lbnQgaW4gcGFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKHBhZ2VvdXQsIGRlYWN0aXZhdGUsIG1pZ3JhdGUsIHN0YXQpLCBhbmQgY29ycmVjdGx5IGNhbGN1bGF0aW5nIFBNRCBpdGVyYXRpb24gc3RyaWRlcyBhY3Jvc3MgbXVsdGktcGFnZSBmb2xpb3MgaW4gdmFkZHIgc2NoZW1lIG9wZXJhdGlvbnMgKG1pZ3JhdGUsIHN0YXQpLiBBbGwgdGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA0OjU5LjkyNTQwNjMzWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ3NjI4MzEyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowNDo1OS45MjU4Nzk3N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzNDc2MjM1Mzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxcbjEuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBpdCBhZGRzIGVycm9yIGNoZWNraW5nIGZvciBgZGFtb25fc3BsaXRfcmVnaW9uX2F0KClgIGFuZCBndWFyZHMgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvIGFuZCB1bmRlcmZsb3cgaW4gYGRhbW9zX2dldF9ub2RlX21lbV9icCgpYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoKWAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoKWAuXFxuMi4gSW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0IGZpeGVzIGFkZHJlc3MgYWR2YW5jZW1lbnQgYW5kIHN0ZXAtc2l6ZSBjYWxjdWxhdGlvbnMgd2hlbiBpdGVyYXRpbmcgb3ZlciBmb2xpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBpbnRlcmFjdCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgyY2U4M2ZlMjE3ZDJiNmQzMzdiYmUyYWNmMmU3NjJjMjUxOWFkMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNjozNjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uZjhkZGRiZmY3NGE3NyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjYxMyw3ICsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzeilcbiBcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4tXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcbitcdFx0XHRpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSlcbitcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4gXHRcdH1cbiBcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbiBcdFx0XHRyZXR1cm47XG5AQCAtMjgxNSw2ICsyODE2LDEzIEBAIHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbiBcdH1cbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4rXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgaS5mcmVlcmFtKSB7XG4rXHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuK1x0XHRcdHJldHVybiAxMDAwMDtcbitcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXG4gXHRcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XG4gXHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXG5AQCAtMjg1NSw2ICsyODYzLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG4gXHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuK1x0aWYgKCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXMpIHtcbitcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbitcdFx0XHRyZXR1cm4gMTAwMDA7XG4rXHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuIFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbiBcdFx0bnVtZXJhdG9yID0gdXNlZF9wYWdlcztcbiBcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuQEAgLTMwMDEsNyArMzAxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4gXHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfQUNUSVZFX0ZJTEUpO1xuIFx0aW5hY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0FOT04pICtcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9GSUxFKTtcbi1cdHRvdGFsID0gYWN0aXZlICsgaW5hY3RpdmU7XG4rXHR0b3RhbCA9IG1heChhY3RpdmUgKyBpbmFjdGl2ZSwgMSk7XG4gXHRpZiAoYWN0aXZlX3JhdGlvKVxuIFx0XHRyZXR1cm4gbXVsdF9mcmFjKGFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbiBcdHJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLjlkZGQxZWM4MjAyYjcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjY0LDcgKzI2NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0ZWxzZVxuIFx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9fbGlzdCk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcilcbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbkBAIC0zNTAsNyArMzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXHUwMDI2Zm9saW9fbGlzdCwgcy1cdTAwM2V0YXJnZXRfbmlkKTtcbkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0O1xuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDA2NDg0MDBiMmQ2NWIuLmM4YzMyYjJhZTA0MDIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNjY5LDYgKzY2OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxuIFx0XHRcdFx0bWlncmF0aW9uX2xpc3RzKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKHB0ZW50KSk7XG4rXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XG4gXHR9XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcbiBcdHJldHVybiAwO1xuQEAgLTgzMSw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRmb3IgKDsgYWRkciBcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4rXG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuIFxuQEAgLTg0NCw3ICs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0aWYgKCFkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB2bWEsIGFkZHIsIHB0ZSwgTlVMTCkpXG4gXHRcdFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0XHRwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpO1xuK1x0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xuIFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuIFx0fVxuIFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowNDo1OS45MjU4ODA3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDk5MzMyNjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBvdXQgS01TQU4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFrIGRhdGEuIEdpdmVuIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vZGFtb24vYCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcsIEkgbmVlZCB0byBmb2N1cyBvbiBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGNvdWxkIGJlIHJlYWQgb3IgcGFzc2VkIHRvIHVzZXJzcGFjZS5cblxuRmlyc3QsIEkgc2VlIHNldmVyYWwgY2hhbmdlcyBpbiBgbW0vZGFtb24vY29yZS5jYCB0aGF0IGxvb2sgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gb3IgdW5kZXJmbG93IGlzc3VlcyB3aXRoIGNoZWNrcyBmb3IgemVybyBvciBuZWdhdGl2ZSB2YWx1ZXMuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY2hlY2tzIGFyZSBleGhhdXN0aXZlLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBzdGF0aXN0aWNzLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nLCB3aGljaCBjb3VsZCBiZSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcywgYW5kIHRoZXNlIHR5cGVzIG9mIGNhbGN1bGF0aW9ucy4gSSBzZWUgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAgcmV0dXJuIHZhbHVlcyBjaGVja2VkIHdoaWNoIGlzIGZpbmUuIFRoZSBvdGhlciBjaGFuZ2VzIGRvbid0IHNlZW0gbGlrZSBtZW1vcnkgaXNzdWVzLlxuXG5UaGUgYG1tL2RhbW9uL3BhZGRyLmNgIGNoYW5nZXMgbG9vayBsaWtlIHRoZXkncmUgYWRkcmVzc2luZyBob3cgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSBjYWxjdWxhdGVkLCBwYXJ0aWN1bGFybHkgd2hlbiB3b3JraW5nIHdpdGggYGZvbGlvYCBzdHJ1Y3R1cmVzLiBBZGp1c3RpbmcgdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24gaW4gdGhlIGRpZmZlcmVudCBgZGFtb25fcGFfKmAgZnVuY3Rpb25zIG1ha2VzIHNlbnNlIHRvIGF2b2lkIG1pc2FsaWduZWQgYWNjZXNzZXMsIHN0ZXBwaW5nIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb2xpbyBpZiBuZWNlc3NhcnkuIFdoaWxlIG5lY2Vzc2FyeSwgdGhpcyBkb2Vzbid0IGltbWVkaWF0ZWx5IHN1Z2dlc3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuIEhvd2V2ZXIsIGFueSB0aW1lIHlvdSdyZSB3b3JraW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBhZGRyZXNzaW5nLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGVuc3VyaW5nIGFsbCBtZW1vcnkgaXMgY29ycmVjdGx5IGFsaWduZWQgYW5kIGFjY291bnRlZCBmb3IuIFRoaXMgaXMgd2hlcmUgSSdkIGdvIGJhY2sgYW5kIGluc3BlY3QgdGhlIGNvZGUgZm9yIGFueSBpbXBsaWNpdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgcG90ZW50aWFsIHJpc2tzLlxuXG5GaW5hbGx5LCB0aGUgYG1tL2RhbW9uL3ZhZGRyLmNgIGNoYW5nZXMgbG9vayBhdCBoYW5kbGluZyBQVEUgZW50cmllcyBhbmQgcG90ZW50aWFsbHkgZm9saW8gc3Bhbm5pbmcuIENvcnJlY3RpbmcgaG93IHRoZSByYW5nZSBpcyBoYW5kbGVkIHdpdGhpbiBhIGZvbGlvLCBhdm9pZGluZyBvdXQtb2YtYm91bmRzIFBURSBhY2Nlc3NlcywgaXMgYSBjbGVhciBpbXByb3ZlbWVudC4gVGhlIGBmb2xpb19wYWdlX2lkeGAsIGBmb2xpb19ucl9wYWdlc2AsIGFuZCB0aGUgY2FsY3VsYXRlZCBvZmZzZXRzIGFyZSBhcmVhcyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJIG11c3QgYmUgY2FyZWZ1bCB0byBlbnN1cmUgdGhhdCB0aGUgbG9naWMgY29ycmVjdGx5IGFjY291bnRzIGZvciBwYXJ0aWFsIGZvbGlvcywgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3Mgd2hlcmUgdGhlIFBURSBkb2Vzbid0IG1hcCBhIGZ1bGwgZm9saW8uIFRoaXMgaXMgdGhlIGxpa2VsaWVzdCBhcmVhIHRvIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBlc3BlY2lhbGx5IGlmIHdlIGhhdmUgcGFydGlhbCBtYXBwaW5ncywgYW5kIHRoZSBwYWdlIGlzbid0IGNvcnJlY3RseSBpbml0aWFsaXplZC5cblxuVG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBzY2FuIHRoaXMgcGF0Y2ggd2l0aCBgcmVhZC1maWxlYCBhbmQgYSBxdWljayBgZ3JlcHBlcmAgcGFzcyB0byBzZWFyY2ggZm9yIG1lbW9yeSBjb3B5IG9yIGFzc2lnbm1lbnQgcGF0dGVybnMgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA4OjM0LjkxOTIwOTI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyNTQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19nZXRfbm9kZV9tZW1fYnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI4MDA9c3RhdGljIGJvb2wgaW52YWxpZF9tZW1fbm9kZShpbnQgbmlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MDQtXFxubW0vZGFtb24vY29yZS5jOjI4MDU6c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxcbm1tL2RhbW9uL2NvcmUuYy0yODA2LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjk4Ni0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyOTg3OnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMjk4OC1cXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDI0PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDM5LVxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzA0MDpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtX2JwKGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMDQxLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowODozNC45NjM5NDAzMzlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI2Njk1MDc5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGV4YW1pbmF0aW9uLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIE1lbW9yeSBNZXRyaWNzKipcblxuUmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBEQU1PTiBpcyB0cmFja2luZyBtZW1vcnkgdXNhZ2UgYXQgdGhlIG5vZGUgYW5kIG1lbWNnIGxldmVscy4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSBmdW5jdGlvbnMgYGRhbW9zX2dldF9ub2RlX21lbV9icGAgYW5kIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgcHJvdmlkaW5nIHRoZSBtZW1vcnkgdXNhZ2UgZGF0YSB0aGF0IERBTU9OIGxldmVyYWdlcyBmb3IgaXRzIGFuYWx5c2lzLCBwcm9iYWJseSBmb3IgYmxvY2sgcHJvZmlsaW5nLiBMZXQncyBzZWUgaG93IHRoZXkgZ2V0IHRoZSBpbmZvcm1hdGlvbiwgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgYWNjZXNzLCBhbmQgaG93IHRoZSByZXN1bHRzIGFyZSBmb3JtYXR0ZWQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBtZXRob2RvbG9neSBhbmQgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGdldHMgdGhlIGRhdGEgaXQgbmVlZHMuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBob3cgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0aGUgY29kZSBpcywgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmFjY3VyYWNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowOTo1Ny42MzM0NTE0MzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODA1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODA1OlxcdHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4yODA2OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MDc6XFx0e1xcbjI4MDg6XFx0XFx0c3RydWN0IHN5c2luZm8gaTtcXG4yODA5OlxcdFxcdF9fa2VybmVsX3Vsb25nX3QgbnVtZXJhdG9yO1xcbjI4MTA6XFx0XFxuMjgxMTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjgxMjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgxMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODE0OlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXFxuMjgxNTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgxNjpcXHRcXHR9XFxuMjgxNzpcXHRcXG4yODE4OlxcdFxcdHNpX21lbWluZm9fbm9kZShcXHUwMDI2aSwgZ29hbC1cXHUwMDNlbmlkKTtcXG4yODE5OlxcdFxcdGlmICghaS50b3RhbHJhbSB8fCBpLnRvdGFscmFtIFxcdTAwM2MgaS5mcmVlcmFtKSB7XFxuMjgyMDpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuMjgyMTpcXHRcXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuMjgyMjpcXHRcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4MjM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgyNDpcXHRcXHR9XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUClcXG4yODI3OlxcdFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XFxuMjgyODpcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xcbjI4Mjk6XFx0XFx0XFx0bnVtZXJhdG9yID0gaS5mcmVlcmFtO1xcbjI4MzA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyhudW1lcmF0b3IsIDEwMDAwLCBpLnRvdGFscmFtKTtcXG4yODMxOlxcdH1cXG4yODMyOlxcdFxcbjI4MzM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4yODM0OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjI4MzU6XFx0e1xcbjI4MzY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjI4Mzc6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjI4Mzg6XFx0XFx0dW5zaWduZWQgbG9uZyB1c2VkX3BhZ2VzLCBudW1lcmF0b3I7XFxuMjgzOTpcXHRcXHRzdHJ1Y3Qgc3lzaW5mbyBpO1xcbjI4NDA6XFx0XFxuMjg0MTpcXHRcXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVxcdTAwM2VuaWQpKSB7XFxuMjg0MjpcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4yODQzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjI4NDQ6XFx0XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbjI4NDU6XFx0XFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbjI4NDY6XFx0XFx0fVxcbjI4NDc6XFx0XFxuMjg0ODpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoZ29hbC1cXHUwMDNlbWVtY2dfaWQpO1xcbjI4NDk6XFx0XFx0aWYgKCFtZW1jZykge1xcbjI4NTA6XFx0XFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxuMjg1MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODUyOlxcdFxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG4yODUzOlxcdFxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4yODU0OlxcdFxcdH1cXG4yODU1OlxcdFxcbjI4NTY6XFx0XFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuMjg1NzpcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKGdvYWwtXFx1MDAzZW5pZCkpO1xcbjI4NTg6XFx0XFx0dXNlZF9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xcbjI4NTk6XFx0XFx0dXNlZF9wYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pO1xcbjI4NjA6XFx0XFx0dXNlZF9wYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcXG4yODYxOlxcdFxcdHVzZWRfcGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKTtcXG4yODYyOlxcdFxcbjI4NjM6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjI4NjQ6XFx0XFxuMjg2NTpcXHRcXHRzaV9tZW1pbmZvX25vZGUoXFx1MDAyNmksIGdvYWwtXFx1MDAzZW5pZCk7XFxuMjg2NjpcXHRcXHRpZiAoIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcXHUwMDNjIHVzZWRfcGFnZXMpIHtcXG4yODY3OlxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxcbjI4Njg6XFx0XFx0XFx0XFx0cmV0dXJuIDEwMDAwO1xcbjI4Njk6XFx0XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbjI4NzA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjg3MTpcXHRcXHR9XFxuMjg3MjpcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4yODczOlxcdFxcdFxcdG51bWVyYXRvciA9IHVzZWRfcGFnZXM7XFxuMjg3NDpcXHRcXHRlbHNlXFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA5OjU3LjYzMzYxNTMzNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDAzNTA4NDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEluZm9ybWF0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBtZW1vcnkgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgc2lfbWVtaW5mb19ub2RlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIGZpbGxpbmcgdXAgdGhhdCBgc3RydWN0IHN5c2luZm8gaWAuIEl0IGxvb2tzIGxpa2UgYHNpX21lbWluZm9fbm9kZWAgZG9lcyB0aGUgaGVhdnkgbGlmdGluZywgaW5pdGlhbGl6aW5nIGBpYCDigJMgc3BlY2lmaWNhbGx5LCBJIHN1c3BlY3QgaXQncyByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyBmaWVsZHMgbGlrZSBgdG90YWxyYW1gLCBgZnJlZXJhbWAsIGFuZCBzbyBvbi4gTGlrZWx5IGEgY29tYmluYXRpb24gb2YgYG1lbXNldGAgYW5kIGRpcmVjdCBmaWVsZCBhc3NpZ25tZW50cyBhcmUgaW52b2x2ZWQuIEJlc3QgdG8ganVtcCByaWdodCBpbnRvIGV4YW1pbmluZyB0aGUgY29kZSBvZiBgc2lfbWVtaW5mb19ub2RlYC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDozMS42Njg3MDE2NjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODk4ODk1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBzaV9tZW1pbmZvX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTQxNTI9ZXh0ZXJuIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjQxNTM6ZXh0ZXJuIHZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC00MTU0LVxcbi0tXFxubW0vc2hvd19tZW0uYz04Nz1FWFBPUlRfU1lNQk9MKHNpX21lbWluZm8pO1xcbi0tXFxubW0vc2hvd19tZW0uYy04OS0jaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zaG93X21lbS5jOjkwOnZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpXFxubW0vc2hvd19tZW0uYy05MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjEwOjMzLjI1ODU5NTgzOVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjI0Mzg3NDI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgbW0vc2hvd19tZW0uYzo5MGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBsaW5lIDkwIGluIGBtbS9zaG93X21lbS5jYC4gSSdtIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbSdzIG1lbW9yeSB1c2FnZS4gS25vd2luZyB0aGUgZmlsZSBwYXRoLCBhbmQgdGhlIGZ1bmN0aW9uJ3MgbG9jYXRpb24sIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBjb3JlIHBpZWNlIG9mIGNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBob3cgbWVtb3J5IHN0YXRpc3RpY3MgYXJlIGdhdGhlcmVkIGFuZCBwcmVzZW50ZWQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2FsY3VsYXRpb25zIGhhcHBlbmluZyDigJMgYXJlIHRoZXkgYWNjdXJhdGUsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzLCBldGM/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBwb3RlbnRpYWwgaXNzdWVzKSBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTA6NTUuNTAyNDczMTA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Nob3dfbWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0dm9pZCBzaV9tZW1pbmZvX25vZGUoc3RydWN0IHN5c2luZm8gKnZhbCwgaW50IG5pZClcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdGludCB6b25lX3R5cGU7XFx0XFx0LyogbmVlZHMgdG8gYmUgc2lnbmVkICovXFxuICA5MzpcXHRcXHR1bnNpZ25lZCBsb25nIG1hbmFnZWRfcGFnZXMgPSAwO1xcbiAgOTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBtYW5hZ2VkX2hpZ2hwYWdlcyA9IDA7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVfaGlnaHBhZ2VzID0gMDtcXG4gIDk2OlxcdFxcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0Zm9yICh6b25lX3R5cGUgPSAwOyB6b25lX3R5cGUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmVfdHlwZSsrKSB7XFxuICA5OTpcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lc1t6b25lX3R5cGVdO1xcbiAxMDA6XFx0XFx0XFx0bWFuYWdlZF9wYWdlcyArPSB6b25lX21hbmFnZWRfcGFnZXMoem9uZSk7XFxuIDEwMTpcXHRcXHRcXHRpZiAoaXNfaGlnaG1lbSh6b25lKSkge1xcbiAxMDI6XFx0XFx0XFx0XFx0bWFuYWdlZF9oaWdocGFnZXMgKz0gem9uZV9tYW5hZ2VkX3BhZ2VzKHpvbmUpO1xcbiAxMDM6XFx0XFx0XFx0XFx0ZnJlZV9oaWdocGFnZXMgKz0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbiAxMDQ6XFx0XFx0XFx0fVxcbiAxMDU6XFx0XFx0fVxcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHR2YWwtXFx1MDAzZXRvdGFscmFtID0gbWFuYWdlZF9wYWdlcztcXG4gMTA4OlxcdFxcdHZhbC1cXHUwMDNlc2hhcmVkcmFtID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TSE1FTSk7XFxuIDEwOTpcXHRcXHR2YWwtXFx1MDAzZWZyZWVyYW0gPSBzdW1fem9uZV9ub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9GUkVFX1BBR0VTKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTA6NTUuNTAyNTQ4ODA0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MTg1NjY2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzLCBhcyBhbHdheXMsIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aXRoIHRoZXNlIGtpbmRzIG9mIGtlcm5lbCBwYXRjaGVzLiBgc2lfbWVtaW5mb19ub2RlYCBzZXRzIHRoZSBgdG90YWxyYW1gIGFuZCBgZnJlZXJhbWAgdmFsdWVzLCB3aGljaCBhcmUgbm93IGJlaW5nIHZhbGlkYXRlZCBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLiAgVGhlIGNoZWNrcyBgIWkudG90YWxyYW0gfHwgaS50b3RhbHJhbSBcdTAwM2MgaS5mcmVlcmFtYCBhbmQgYCFpLnRvdGFscmFtIHx8IGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXNgIGxvb2sgc29saWQuIEl0J3MgYSBjbGFzc2ljIGRlZmVuc2UgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvIGFuZCB0aG9zZSBuYXN0eSB1bmRlcmZsb3cgZXJyb3JzIHRoYXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zLiBHb29kIGNhdGNoIHRoZXJlLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG90aGVyIGNvbXBvbmVudHMgb2YgdGhpcyBwYXRjaDpcblxuKiAgIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opYCBoYXMgcmV0dXJuIHZhbHVlIGNoZWNrcywgd2hpY2ggaXMgZXNzZW50aWFsIHRvIGhhbmRsZSBhbnkgZXJyb3JzIGR1cmluZyBtZW1vcnkgcmVnaW9uIHNwbGl0dGluZy5cbiogICBJbiBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLCBgdG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO2AgcHJldmVudHMgZGl2aXNpb24gYnkgemVyby4gR29vZCBkZWZlbnNpdmUgY29kaW5nLlxuKiAgIGBkYW1vbi9wYWRkci5jYCBpcyBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgdGhlIG5leHQgYWRkcmVzcyBiYXNlZCBvbiB0aGUgYWN0dWFsIGZvbGlvIFBGTiByYXRoZXIgdGhhbiBhbiBhc3N1bWVkIGFsaWdubWVudCwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIGJ1Z3MuICBgYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7YCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IGFkZHJlc3MgbWlzY2FsY3VsYXRpb25zLlxuKiAgIGBkYW1vbi92YWRkci5jYCBjYWxjdWxhdGVzIHRoZSByZW1haW5pbmcgcGFnZXMgaW4gdGhlIGZvbGlvIGZyb20gdGhlIGN1cnJlbnQgUFRFIHVzaW5nIGBwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpOyBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O2AgVGhpcyBwcmV2ZW50cyBza2lwcGluZyBQVEVzIHdoZW4gdGhlIHN0YXJ0aW5nIGFkZHJlc3MgZmFsbHMgd2l0aGluIGEgbGFyZ2UgZm9saW8sIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBvZmYtYnktb25lIGVycm9ycyBhbmQgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb25zLlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcywgKm5vbmUqIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm8gdXNlIG9mIGZ1bmN0aW9ucyBzdWNoIGFzIGBwdXRfdXNlcmAsIGBjb3B5X3RvX3VzZXJgLCBldGMuLCBhcyBhbGwgdGhlc2UgZnVuY3Rpb25zIGFuZCBjYWxjdWxhdGlvbnMgYXJlIGludGVybmFsIERBTU9OIHF1b3RhIGNhbGN1bGF0aW9ucyBhbmQgZm9saW8gdHJhdmVyc2FsLCB3aGljaCBpcyBnb29kLiBUaGVyZSBhcmUgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGlzIHRoZXJlIGFueSBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBNb3Jlb3ZlciwgSSBzZWUgbm8gYWx0ZXJhdGlvbiBvZiBleGlzdGluZyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgYXJlIGFsbCBzb2xpZCBidWcgZml4ZXM6IGFyaXRobWV0aWMgdW5kZXJmbG93L2RpdmlkZS1ieS16ZXJvIHByb3RlY3Rpb25zLCByZXR1cm4gY29kZSBjaGVja3MsIGFuZCBmb2xpbyBhZGRyZXNzL29mZnNldCBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIEkgZG9uJ3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTi4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gcGF0Y2gsIHdoaWNoIGhhcyBhZGRyZXNzZWQgdGhlIG1haW4gcG9pbnRzIHRoYXQgSSB3b3VsZCBleHBlY3QgdG8gaGF2ZSBiZWVuIGFkZHJlc3NlZC5cblxuT2theSwgbGV0J3MgcHJlcGFyZSB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzksIk91dHB1dFRva2VucyI6MjA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTI6MTQuNjg4MjE4MTU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBsb2dpYyBhbmQgYXJpdGhtZXRpYyBpc3N1ZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06XFxuMS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0IGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBkYW1vbl9zcGxpdF9yZWdpb25fYXQoKWAgYW5kIGd1YXJkcyBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gYW5kIHVuZGVyZmxvdyBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKClgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icCgpYCwgYW5kIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icCgpYC5cXG4yLiBJbiBgbW0vZGFtb24vcGFkZHIuY2AgYW5kIGBtbS9kYW1vbi92YWRkci5jYCwgaXQgZml4ZXMgYWRkcmVzcyBhZHZhbmNlbWVudCBhbmQgc3RlcC1zaXplIGNhbGN1bGF0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIGZvbGlvcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgbG9naWMgYW5kIGFyaXRobWV0aWMgaXNzdWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOlxcbjEuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBpdCBhZGRzIGVycm9yIGNoZWNraW5nIGZvciBgZGFtb25fc3BsaXRfcmVnaW9uX2F0KClgIGFuZCBndWFyZHMgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvIGFuZCB1bmRlcmZsb3cgaW4gYGRhbW9zX2dldF9ub2RlX21lbV9icCgpYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoKWAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoKWAuXFxuMi4gSW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0IGZpeGVzIGFkZHJlc3MgYWR2YW5jZW1lbnQgYW5kIHN0ZXAtc2l6ZSBjYWxjdWxhdGlvbnMgd2hlbiBpdGVyYXRpbmcgb3ZlciBmb2xpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBpbnRlcmFjdCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[1] Phase: Succeeded StartedAt: 2026-08-31 17:12:25 +0000 UTC FinishedAt: 2026-08-31 17:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 17:12:25 +0000 UTC FinishedAt: 2026-08-31 17:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2] Phase: Succeeded StartedAt: 2026-08-31 17:12:25 +0000 UTC FinishedAt: 2026-08-31 20:57:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:12:25 +0000 UTC FinishedAt: 2026-08-31 20:57:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:12:25 +0000 UTC FinishedAt: 2026-08-31 17:12:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:12:25 +0000 UTC FinishedAt: 2026-08-31 17:12:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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-workflow9z8lw/series-workflow9z8lw-convert-artifact-1995749785/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:12:35 +0000 UTC FinishedAt: 2026-08-31 17:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:12:35 +0000 UTC FinishedAt: 2026-08-31 17:29:41 +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:*38ccce7e-4cdd-443d-a4f5-ceebc9d04113,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-workflow9z8lw/series-workflow9z8lw-convert-artifact-1995749785/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": "14350a84-b5c9-4e31-9ca5-c4e8f503c0b3", "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-workflow9z8lw/series-workflow9z8lw-build-action-1877859639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:12:35 +0000 UTC FinishedAt: 2026-08-31 17:29:31 +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:*38ccce7e-4cdd-443d-a4f5-ceebc9d04113,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-workflow9z8lw/series-workflow9z8lw-convert-artifact-1995749785/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": "14350a84-b5c9-4e31-9ca5-c4e8f503c0b3", "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-workflow9z8lw/series-workflow9z8lw-build-action-1877859639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:29:41 +0000 UTC FinishedAt: 2026-08-31 17:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:29:41 +0000 UTC FinishedAt: 2026-08-31 17:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:29:41 +0000 UTC FinishedAt: 2026-08-31 17:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:29:41 +0000 UTC FinishedAt: 2026-08-31 17:29:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-workflow9z8lw/series-workflow9z8lw-convert-artifact-4163948140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:29:52 +0000 UTC FinishedAt: 2026-08-31 17:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:29:52 +0000 UTC FinishedAt: 2026-08-31 17:31:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14350a84-b5c9-4e31-9ca5-c4e8f503c0b3,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-workflow9z8lw/series-workflow9z8lw-build-action-1877859639/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-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:32:09 +0000 UTC FinishedAt: 2026-08-31 17:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:32:09 +0000 UTC FinishedAt: 2026-08-31 17:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:32:09 +0000 UTC FinishedAt: 2026-08-31 17:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:32:09 +0000 UTC FinishedAt: 2026-08-31 17:50:26 +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:*38ccce7e-4cdd-443d-a4f5-ceebc9d04113,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-workflow9z8lw/series-workflow9z8lw-convert-artifact-4163948140/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": "f4ea4b67-947b-4d0f-aa1a-9d78c2908d2a", "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-workflow9z8lw/series-workflow9z8lw-build-action-112698632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:32:09 +0000 UTC FinishedAt: 2026-08-31 17:50:16 +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:*38ccce7e-4cdd-443d-a4f5-ceebc9d04113,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-workflow9z8lw/series-workflow9z8lw-convert-artifact-4163948140/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": "f4ea4b67-947b-4d0f-aa1a-9d78c2908d2a", "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-workflow9z8lw/series-workflow9z8lw-build-action-112698632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:50:26 +0000 UTC FinishedAt: 2026-08-31 17:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:50:26 +0000 UTC FinishedAt: 2026-08-31 17:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:50:26 +0000 UTC FinishedAt: 2026-08-31 17:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:50:26 +0000 UTC FinishedAt: 2026-08-31 17:52:12 +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:*f4ea4b67-947b-4d0f-aa1a-9d78c2908d2a,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-workflow9z8lw/series-workflow9z8lw-build-action-112698632/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-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:22 +0000 UTC FinishedAt: 2026-08-31 20:57:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:22 +0000 UTC FinishedAt: 2026-08-31 20:57:23 +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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"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:*14350a84-b5c9-4e31-9ca5-c4e8f503c0b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4ea4b67-947b-4d0f-aa1a-9d78c2908d2a,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-workflow9z8lw/series-workflow9z8lw-build-action-1877859639/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-workflow9z8lw/series-workflow9z8lw-build-action-112698632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:22 +0000 UTC FinishedAt: 2026-08-31 17:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:22 +0000 UTC FinishedAt: 2026-08-31 17:52:30 +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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"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-workflow9z8lw/series-workflow9z8lw-convert-artifact-1119549781/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:22 +0000 UTC FinishedAt: 2026-08-31 17:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:22 +0000 UTC FinishedAt: 2026-08-31 17:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:22 +0000 UTC FinishedAt: 2026-08-31 17:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:32 +0000 UTC FinishedAt: 2026-08-31 20:57:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9z8lw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_commit_ctx","damon_set_schemes","damon_call","damos_walk","damon_sysfs_add_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"36b26662-5d6c-4ca1-8d77-89e5d026a8a8","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-08-31 17:52:32 +0000 UTC FinishedAt: 2026-08-31 20:57:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14350a84-b5c9-4e31-9ca5-c4e8f503c0b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4ea4b67-947b-4d0f-aa1a-9d78c2908d2a,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-workflow9z8lw/series-workflow9z8lw-build-action-1877859639/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-workflow9z8lw/series-workflow9z8lw-build-action-112698632/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-workflow9z8lw/series-workflow9z8lw-convert-artifact-1119549781/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,}