Name: series-workflowmfp4w Phase: Succeeded StartedAt: 2026-09-01 19:45:23 +0000 UTC FinishedAt: 2026-09-01 23:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[0] Phase: Succeeded StartedAt: 2026-09-01 19:45:23 +0000 UTC FinishedAt: 2026-09-01 19:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 19:45:23 +0000 UTC FinishedAt: 2026-09-01 19:49:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "d90000e9-e5fa-4ca4-9193-4861db2501dc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_from_private_id", "mem_cgroup_private_id_get_online", "__mem_cgroup_try_charge_swap", "__mem_cgroup_uncharge_swap", "list_lru_walk_node", "workingset_test_recent" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1vcnkgY2dyb3VwIHByaXZhdGUgSUQgdHJhY2tpbmcgbWVjaGFuaXNtIHNvIHRoYXQgdGhlIHByaXZhdGUgSUQgcGlucyB0aGUgY29ycmVzcG9uZGluZyBvYmpfY2dyb3VwIHJhdGhlciB0aGFuIHRoZSBtZW1fY2dyb3VwIENTUyBkaXJlY3RseS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XG4tIEFsbCBtb2RpZmllZCBzdHJ1Y3R1cmVzIChgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgKSBhcmUgemVyby1hbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBga21lbV9jYWNoZV96YWxsb2MoKWAsIGFuZCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyAoYG1lbWNnaWRfcmVmYCwgYGlkX29iamNnYCwgYGlkYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gLyBvbmxpbmUgc3RhdGUuXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBmaWVsZHMgYXJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChyZWZjb3VudF90LCBwZXJjcHVfcmVmLCBSQ1UsIFhBcnJheSkuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCByZWZjb3VudCBkZWJ1Z2dpbmcsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1Zjg2NTM2MDBhMjI3ZGI3OTlkNmYzODE5MjE2ZGJiNTk1ZWNhYzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAxOTo0Njo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBmMjI3MzQ4YTNmMjRhLi5lYWZjODE3ZmYyNDRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYsMTEgJiM0Mzs2Niw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHtcbiBcbiAjZGVmaW5lIE1FTV9DR1JPVVBfSURfU0hJRlRcdDE2XG4gXG4tc3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCB7XG4tXHRpbnQgaWQ7XG4tXHRyZWZjb3VudF90IHJlZjtcbi19O1xuLVxuIHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdTtcbiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHU7XG4gc3RydWN0IG1lbWNnX3Ztc3RhdHM7XG5AQCAtMTczLDYgJiM0MzsxNjgsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRhdG9taWNfdCBucl9jaGFyZ2VkX2J5dGVzO1xuJiM0MztcdHJlZmNvdW50X3QgbWVtY2dpZF9yZWY7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogcHJvdGVjdGVkIGJ5IG9iamNnX2xvY2sgKi9cbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbkBAIC0xODksOCAmIzQzOzE4NSw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7XG4gXG4tXHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XG4mIzQzO1x0LyogVGhlIG9iamNnIGhvbGRpbmcgcHJpdmF0ZSBtZW1jZyBJRC4gKi9cbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7XG4gXG4gXHQvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovXG4gXHRzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTtcdFx0LyogQm90aCB2MSBcdTAwMjYgdjIgKi9cbkBAIC0yNTUsNiAmIzQzOzI1MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjZW5kaWZcbiBcdGludCBrbWVtY2dfaWQ7XG4gXG4mIzQzO1x0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0O1xuICNlbmRpZlxuQEAgLTgxMCw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4mIzQzO1x0cmV0dXJuIG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuY1xuQEAgLTQyOCw3ICYjNDM7NDI4LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gXHRcdHhhX2Zvcl9lYWNoKFx1MDAyNmxydS1cdTAwM2V4YSwgaW5kZXgsIG1scnUpIHtcbiBcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7XG4tXHRcdFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcbiYjNDM7XHRcdFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4gXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDI1NmI2OGZmY2E3MGUuLjg0ZGNhYjNhY2I4YTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM3NzMsNyAmIzQzOzM3NzMsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4mIzQzO1x0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5AQCAtNDAzMiwyNSAmIzQzOzQwMzIsNjUgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbiYjNDM7XHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkKTtcbiYjNDM7XHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbiYjNDM7XHRcdHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcbiB7XG4tXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZikpIHtcbi1cdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XG4gXG4tXHRcdC8qIE1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbiYjNDM7XHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuJiM0MztcdFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTWVtY2cgSUQgcGlucyB0aGUgb2JqY2cgKi9cbiYjNDM7XHRcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiBcdH1cbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0IC0gcHV0IG1lbWNnaWQgYW5kIGdldCB0aGUgbmVhcmVzdCBvbmxpbmUgbWVtY2dcbiYjNDM7ICogQGlkOiB0aGUgbWVtY2cgcHJpdmF0ZSBpZCBnb3QgZnJvbSBtZW1fY2dyb3VwX2lkX2dldF9vbmxpbmVcbiYjNDM7ICogQG46IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcHV0XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghb2JqY2cpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4mIzQzO1x0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuJiM0MztcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4mIzQzO1xuJiM0MztcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLVx1MDAzZWlkX29iamNnLCBtZW1jZy1cdTAwM2VpZCwgMSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG9iamNnID0gbWVtY2ctXHUwMDNlaWRfb2JqY2c7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQmIzM5O3MgcmVmY291bnQgbXVzdFxuIFx0XHQgKiBhbHdheXMgYmUgXHUwMDNlPSAxLlxuQEAgLTQwNjAsNyAmIzQzOzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiYjNDM7XHRcdG9iamNnID0gbWVtY2ctXHUwMDNlaWRfb2JqY2c7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbkBAIC00MDY5LDExICYjNDM7NDExMiwyNCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1blxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbi1cdHJldHVybiB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XG4mIzQzO1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXG5AQCAtNDE3NCw3ICYjNDM7NDIzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0aWYgKCFtZW1jZylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4tXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLmlkLCBOVUxMLFxuJiM0MztcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQsIE5VTEwsXG4gXHRcdFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC00MzE5LDkgJiM0Mzs0Mzc1LDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRcdFx0XHQgICBGTFVTSF9USU1FKTtcbiBcdGxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTtcbiBcbi1cdC8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZiwgMSk7XG4tXHRjc3NfZ2V0KGNzcyk7XG4mIzQzO1x0LyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqL1xuJiM0MztcdG1lbWNnLVx1MDAzZWlkX29iamNnID0gb2JqY2c7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZW1lbWNnaWRfcmVmLCAxKTtcbiYjNDM7XHRvYmpfY2dyb3VwX2dldChtZW1jZy1cdTAwM2VpZF9vYmpjZyk7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSYjMzk7cmUgZnVsbHkgb25saW5lLlxuQEAgLTQzMzMsNyAmIzQzOzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiBcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cbiBcdCAqL1xuLVx0eGFfc3RvcmUoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCwgbWVtY2ctXHUwMDNlaWRfb2JqY2csIEdGUF9LRVJORUwpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZnJlZV9vYmpjZzpcbkBAIC00Mzg1LDcgJiM0Mzs0NDQyLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbiBcbi1cdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKG1lbWNnKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbkBAIC01NzUwLDYgJiM0Mzs1ODA3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgbWVtY2dpZDtcbiBcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTU3NjcsMjIgJiM0Mzs1ODI1LDI0IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpO1xuLVx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuJiM0MztcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gXG4gXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbiBcbiYjNDM7XHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG4mIzQzO1x0bWVtY2dpZCA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbi1cdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxuLVx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4mIzQzO1x0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cdTAwM2Vzd2FwKSwgbnJfcGFnZXMsIG1lbWNnaWQpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01Nzk4LDE4ICYjNDM7NTg1OCwyMyBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbiYjNDM7XHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoaWQsIG5yX3BhZ2VzKTtcbiBcdGlmIChtZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgbWVtY2cgd2FzIG9mZmxpbmUgYW5kIHJlcGFyZW50ZWQgdG8gcm9vdCwgc3dhcCBuZWVkc1xuJiM0MztcdFx0ICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIHx8IGlkICE9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpIHtcbiBcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdFx0fVxuIFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gfVxuIFxuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li40ZTliN2IxNjNjMDFlIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC00NzAsNyAmIzQzOzQ3MCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiYjNDM7XHRpZiAoZXZpY3Rpb25fbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4gXHRcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1Zjg2NTM2MDBhMjI3ZGI3OTlkNmYzODE5MjE2ZGJiNTk1ZWNhYzYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAxOTo0Njo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZjIyNzM0OGEzZjI0YS4uZWFmYzgxN2ZmMjQ0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTY2LDExICYjNDM7NjYsNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7CiAKICNkZWZpbmUgTUVNX0NHUk9VUF9JRF9TSElGVAkxNgogCi1zdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIHsKLQlpbnQgaWQ7Ci0JcmVmY291bnRfdCByZWY7Ci19OwotCiBzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHU7CiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHU7CiBzdHJ1Y3QgbWVtY2dfdm1zdGF0czsKQEAgLTE3Myw2ICYjNDM7MTY4LDcgQEAgc3RydWN0IG9ial9jZ3JvdXAgewogCXN0cnVjdCBwZXJjcHVfcmVmIHJlZmNudDsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJYXRvbWljX3QgbnJfY2hhcmdlZF9ieXRlczsKJiM0MzsJcmVmY291bnRfdCBtZW1jZ2lkX3JlZjsKIAl1bmlvbiB7CiAJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogcHJvdGVjdGVkIGJ5IG9iamNnX2xvY2sgKi8KIAkJc3RydWN0IHJjdV9oZWFkIHJjdTsKQEAgLTE4OSw4ICYjNDM7MTg1LDggQEAgc3RydWN0IG9ial9jZ3JvdXAgewogc3RydWN0IG1lbV9jZ3JvdXAgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKIAotCS8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqLwotCXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7CiYjNDM7CS8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovCiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZzsKIAogCS8qIEFjY291bnRlZCByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTsJCS8qIEJvdGggdjEgJmFtcDsgdjIgKi8KQEAgLTI1NSw2ICYjNDM7MjUxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2VuZGlmCiAJaW50IGttZW1jZ19pZDsKIAomIzQzOwkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KJiM0MzsJaW50IGlkOwomIzQzOwogI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLCiAJc3RydWN0IGxpc3RfaGVhZCBjZ3diX2xpc3Q7CiAjZW5kaWYKQEAgLTgxMCw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1lbWNnLSZndDtpZC5pZDsKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDtpZDsKIH0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNDI4LDcgJiM0Mzs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwKIAkJeGFfZm9yX2VhY2goJmFtcDtscnUtJmd0O3hhLCBpbmRleCwgbWxydSkgewogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7Ci0JCQlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewomIzQzOwkJCWlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDI1NmI2OGZmY2E3MGUuLjg0ZGNhYjNhY2I4YTIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM3NzMsNyAmIzQzOzM3NzMsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7CiAKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwomIzQzOwltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkOwogfQogCiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpAQCAtNDAzMiwyNSAmIzQzOzQwMzIsNjUgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpOwogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobWVtY2ctJmd0O2lkLmlkICZndDsgMCkgewotCQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZC5pZCk7Ci0JCW1lbWNnLSZndDtpZC5pZCA9IDA7CiYjNDM7CWlmIChtZW1jZy0mZ3Q7aWQgJmd0OyAwKSB7CiYjNDM7CQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZCk7CiYjNDM7CQltZW1jZy0mZ3Q7aWQgPSAwOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0MztzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAomIzQzOwkJdW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQogewotCWlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgJmFtcDttZW1jZy0mZ3Q7aWQucmVmKSkgewotCQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7CiAKLQkJLyogTWVtY2cgSUQgcGlucyBDU1MgKi8KLQkJY3NzX3B1dCgmYW1wO21lbWNnLSZndDtjc3MpOwomIzQzOwlpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sICZhbXA7b2JqY2ctJmd0O21lbWNnaWRfcmVmKSkgewomIzQzOwkJb2JqY2dfZnJlZSA9IHhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwkJVk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTsKJiM0MzsKJiM0MzsJCS8qIE1lbWNnIElEIHBpbnMgdGhlIG9iamNnICovCiYjNDM7CQlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiAJfQogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dCAtIHB1dCBtZW1jZ2lkIGFuZCBnZXQgdGhlIG5lYXJlc3Qgb25saW5lIG1lbWNnCiYjNDM7ICogQGlkOiB0aGUgbWVtY2cgcHJpdmF0ZSBpZCBnb3QgZnJvbSBtZW1fY2dyb3VwX2lkX2dldF9vbmxpbmUKJiM0MzsgKiBAbjogY291bnQgb2YgcmVmZXJlbmNlcyB0byBwdXQKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFvYmpjZykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKJiM0MzsJd2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKQomIzQzOwkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7CiYjNDM7CiYjNDM7CV9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pOwomIzQzOwomIzQzO291dDoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLSZndDtpZF9vYmpjZywgbWVtY2ctJmd0O2lkLCAxKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKIHsKLQl3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCAmYW1wO21lbWNnLSZndDtpZC5yZWYpKSB7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlvYmpjZyA9IG1lbWNnLSZndDtpZF9vYmpjZzsKJiM0MzsKJiM0MzsJd2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgJmFtcDtvYmpjZy0mZ3Q7bWVtY2dpZF9yZWYpKSB7CiAJCS8qCiAJCSAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCYjMzk7cyByZWZjb3VudCBtdXN0CiAJCSAqIGFsd2F5cyBiZSAmZ3Q7PSAxLgpAQCAtNDA2MCw3ICYjNDM7NDEwMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bgogCQkJYnJlYWs7CiAJCX0KIAkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7CiYjNDM7CQlvYmpjZyA9IG1lbWNnLSZndDtpZF9vYmpjZzsKIAl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBtZW1jZzsKIH0KIApAQCAtNDA2OSwxMSAmIzQzOzQxMTIsMjQgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW4KICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXAKICAqCiAgKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9yZWFkX2xvY2soKS4KJiM0MzsgKgomIzQzOyAqIEByZXR1cm46IHRoZSBtZW1jZywgb3IgTlVMTCBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSByZXBhcmVudGVkLgogICovCiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpCiB7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCVdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpOwotCXJldHVybiB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwomIzQzOwlvYmpjZyA9IHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1lbWNnOwogfQogCiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpCkBAIC00MTc0LDcgJiM0Mzs0MjMwLDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJaWYgKCFtZW1jZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQllcnJvciA9IHhhX2FsbG9jKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgJmFtcDttZW1jZy0mZ3Q7aWQuaWQsIE5VTEwsCiYjNDM7CWVycm9yID0geGFfYWxsb2MoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCAmYW1wO21lbWNnLSZndDtpZCwgTlVMTCwKIAkJCSBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtNDMxOSw5ICYjNDM7NDM3NSwxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCQkJCSAgIEZMVVNIX1RJTUUpOwogCWxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTsKIAotCS8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqLwotCXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZC5yZWYsIDEpOwotCWNzc19nZXQoY3NzKTsKJiM0MzsJLyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqLwomIzQzOwltZW1jZy0mZ3Q7aWRfb2JqY2cgPSBvYmpjZzsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7bWVtY2ctJmd0O2lkX29iamNnLSZndDttZW1jZ2lkX3JlZiwgMSk7CiYjNDM7CW9ial9jZ3JvdXBfZ2V0KG1lbWNnLSZndDtpZF9vYmpjZyk7CiAKIAkvKgogCSAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UmIzM5O3JlIGZ1bGx5IG9ubGluZS4KQEAgLTQzMzMsNyAmIzQzOzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCSAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlCiAJICogcmVndWxhciBJRCBkZXN0cnVjdGlvbiBkdXJpbmcgb2ZmbGluaW5nLgogCSAqLwotCXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLCBtZW1jZy0mZ3Q7aWRfb2JqY2csIEdGUF9LRVJORUwpOwogCiAJcmV0dXJuIDA7CiBmcmVlX29iamNnOgpAQCAtNDM4NSw3ICYjNDM7NDQ0Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAogCWRyYWluX2FsbF9zdG9jayhtZW1jZyk7CiAKLQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTsKJiM0MzsJbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwobWVtY2cpOwogfQogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQpAQCAtNTc1MCw2ICYjNDM7NTgwNyw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwl1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkOwogCiAJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKIAkJcmV0dXJuIDA7CkBAIC01NzY3LDIyICYjNDM7NTgyNSwyNCBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm4gMDsKIAl9CiAKLQltZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7Ci0JLyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpCiYjNDM7CQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKIAogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSAmYW1wOyZhbXA7CiAJICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgmYW1wO21lbWNnLSZndDtzd2FwLCBucl9wYWdlcywgJmFtcDtjb3VudGVyKSkgewogCQltZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpOwotCQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfcGFnZXMpOwogCiYjNDM7CW1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsJbWVtY2dpZCA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCWNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7Ci0JX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX3BhZ2VzLAotCQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTsKJiM0MzsJX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX3BhZ2VzLCBtZW1jZ2lkKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAogCXJldHVybiAwOwpAQCAtNTc5OCwxOCAmIzQzOzU4NTgsMjMgQEAgdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTsKJiM0MzsJbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KGlkLCBucl9wYWdlcyk7CiAJaWYgKG1lbWNnKSB7Ci0JCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSBtZW1jZyB3YXMgb2ZmbGluZSBhbmQgcmVwYXJlbnRlZCB0byByb290LCBzd2FwIG5lZWRzCiYjNDM7CQkgKiB1bmNoYXJnaW5nIGFzIHdlbGwuIFdlIGNoZWNrIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBtZW1jZ2lkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgfHwgaWQgIT0gbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSkgewogCQkJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKIAkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKIAkJCWVsc2UKIAkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMpOwogCQl9CiAJCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogfQogCiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDdhYzJiODhjODBhZTUuLjRlOWI3YjE2M2MwMWUgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTQ3MCw3ICYjNDM7NDcwLDcgQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LAogCSAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuCiAJICovCiAJZXZpY3Rpb25fbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ2lkKTsKLQlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSkKJiM0MzsJaWYgKGV2aWN0aW9uX21lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSkKIAkJZXZpY3Rpb25fbWVtY2cgPSBOVUxMOwogCXJjdV9yZWFkX3VubG9jaygpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQsIGlmIHNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uLiBGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBub3RoaW5nIG1hbGljaW91cyBoZXJlLiBUaGlzIGlzIGEgc3RhbmRhcmQgUUEvZGVmZW5zaXZlIGFuYWx5c2lzIG9mIGEga2VybmVsIHBhdGNoIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSBrZXJuZWwmIzM5O3Mgcm9idXN0bmVzcy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IG5vdCBhc2tpbmcgbWUgdG8gZG8gYW55dGhpbmcgZXhwbG9pdGF0aXZlLiBHb29kLgoKTm93LCB0aGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgc29tZSBpbnRlcmVzdGluZyBmaWxlczogYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYG1tL2xpc3RfbHJ1LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBUaGF0IHJpZ2h0IHRoZXJlIGdldHMgbXkgYXR0ZW50aW9uLiBUaGVzZSBmaWxlcyBhcmUgYWxsIGluIHRoZSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBjZ3JvdXBzLgoKVGhlIGNvbW1pdCByZWZhY3RvcnMgaG93IG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRHMgYXJlIGhhbmRsZWQuIFRoZSBvbGQgd2F5IGludm9sdmVkIGEgYHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRgIHdpdGggYSByZWZlcmVuY2UgY291bnQgZGlyZWN0bHkgd2l0aGluIGBtZW1fY2dyb3VwYC4gVGhlIG5ldyB3YXkgbW92ZXMgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBgb2JqX2Nncm91cGAgYW5kIHVzZXMgYW4gYHhhcnJheWAgdG8gbWFuYWdlIGBvYmpfY2dyb3VwYCBwb2ludGVycyBmb3IgcHJpdmF0ZSBJRHMuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyB0byBjcml0aWNhbCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYW5kIGFsc28gc29tZSBzd2FwIGFuZCBscnUgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4KClRoaXMgaXMgYSAqKm1ham9yKiogYXJlYSwgd2hpY2ggbWVhbnMgdGhpcyAqaXMqIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtIGNoYW5nZS4gSXQgdG91Y2hlcyBtZW1vcnkgY29udHJvbCwgc3dhcCBhY2NvdW50aW5nLCBhbmQgd29ya2luZ3NldCByZWZhdWx0aW5nIGxvZ2ljLiBUaGlzIGtpbmQgb2YgcmVmYWN0b3JpbmcgaXMgcmlwZSBmb3IgaW50cm9kdWNpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MsIGVzcGVjaWFsbHkgd2l0aCB0aGVzZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIGNoYW5nZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjaGFuZ2VzIHRvIHN3YXAgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgYmVjYXVzZSB0aG9zZSBhcmVhcyBjYW4gYmUgdHJpY2t5LiBSZXBhcmVudGluZyBhbmQgbGlzdF9scnUgb3BlcmF0aW9ucyBhcmUgb3RoZXIgZ29vZCB0YXJnZXRzLgoKTm93LCBsZXQmIzM5O3MgZmlyZSB1cCBncmVwIGFuZCBvdXIgY29kZSBzZWFyY2ggdG9vbHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCByZWxldmFudCBrZXJuZWwgc3ltYm9scyB0byBuYXJyb3cgZG93biBvdXIgZnV6emluZyB0YXJnZXRzIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTQ5MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0xMjU9X19icGZfa2Z1bmMgdW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9tZW1vcnlfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jLTEyNy17XG5tbS9icGZfbWVtY29udHJvbC5jOjEyODpcdGlmICh1bmxpa2VseShldmVudCBcdTAwM2U9IE1FTUNHX05SX01FTU9SWV9FVkVOVFMpKVxubW0vYnBmX21lbWNvbnRyb2wuYy0xMjktXHRcdHJldHVybiAodW5zaWduZWQgbG9uZyktMTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTEyOD1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEzNS1cdFx0YnJlYWs7XG5tbS9kYW1vbi9jb3JlLmM6MTEzNjpcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxubW0vZGFtb24vY29yZS5jOjExMzc6XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYy0xMTM4LVx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIzNz1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC1cdHN3aXRjaCAoZHN0LVx1MDAzZXR5cGUpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMjQxOlx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL2NvcmUuYy0xMjQyLVx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTE2NzY9c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE2ODItXHRzd2l0Y2ggKGRzdC1cdTAwM2V0eXBlKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTY4MzpcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmMtMTY4NC1cdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjkxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MTMtXHRcdHN3aXRjaCAoc3JjX2ZpbHRlci1cdTAwM2V0eXBlKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcxNDpcdFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL2NvcmUuYy0xNzE1LVx0XHRcdG5ld19maWx0ZXItXHUwMDNlbWVtY2dfaWQgPSBzcmNfZmlsdGVyLVx1MDAzZW1lbWNnX2lkO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODE2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI4MjQtXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVx1MDAzZW5pZCkpIHtcbm1tL2RhbW9uL2NvcmUuYzoyODI1Olx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxubW0vZGFtb24vY29yZS5jLTI4MjYtXHRcdFx0cmV0dXJuIDA7XG5tbS9kYW1vbi9jb3JlLmM6MjgyNzpcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG5tbS9kYW1vbi9jb3JlLmMtMjgyOC1cdFx0XHRyZXR1cm4gMTAwMDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTI4MzItXHRpZiAoIW1lbWNnKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjgzMzpcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbm1tL2RhbW9uL2NvcmUuYy0yODM0LVx0XHRcdHJldHVybiAwO1xubW0vZGFtb24vY29yZS5jOjI4MzU6XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xubW0vZGFtb24vY29yZS5jLTI4MzYtXHRcdFx0cmV0dXJuIDEwMDAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODQ4LVx0c2lfbWVtaW5mb19ub2RlKFx1MDAyNmksIGdvYWwtXHUwMDNlbmlkKTtcbm1tL2RhbW9uL2NvcmUuYzoyODQ5Olx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbm1tL2RhbW9uL2NvcmUuYy0yODUwLVx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xubW0vZGFtb24vY29yZS5jOjI4NTE6XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbm1tL2RhbW9uL2NvcmUuYy0yODUyLVx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gdXNlZF9wYWdlcztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzAxNz1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMzQtXHRcdGJyZWFrO1xubW0vZGFtb24vY29yZS5jOjMwMzU6XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDM2Olx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG5tbS9kYW1vbi9jb3JlLmMtMzAzNy1cdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjYxPWJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjczLVx0XHRicmVhaztcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNzQ6XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI3NS1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMjEtXHRcdGJyZWFrO1xubW0vZGFtb24vcGFkZHIuYzoxMjI6XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vcGFkZHIuYy0xMjMtXHRcdGlmICghZm9saW8pIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01NTg9ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTY3LVx0e1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU2ODpcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NjktXHRcdC5uYW1lID0gXCYjMzQ7bWVtY2dcJiMzNDssXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzU9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjUyLVx0e1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyNTM6XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI1NC1cdFx0Lm5hbWUgPSBcJiMzNDtub2RlX21lbWNnX3VzZWRfYnBcJiMzNDssXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNTYtXHR7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI1NzpcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjU4LVx0XHQubmFtZSA9IFwmIzM0O25vZGVfbWVtY2dfZnJlZV9icFwmIzM0Oyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgxOS1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODIwOlx0XHRpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfTUVNQ0cpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODIxLVx0XHRcdGVyciA9IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NzYtXHRcdFx0YnJlYWs7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3NzpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlA6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3ODpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cdFx0XHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9Nzc1PWRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03ODAtXHR7XG5tbS9kYW1vbi9zeXNmcy5jOjc4MTpcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbm1tL2RhbW9uL3N5c2ZzLmMtNzgyLVx0XHQubmFtZSA9IFwmIzM0O21lbWNnXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTkzNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xOTQ5LVx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3lzZnMuYzoxOTUwOlx0XHRpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0cpIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTk1MS1cdFx0XHRpbnQgZXJyO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NzYtXHRcdGJyZWFrO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc3NzpcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc3ODpcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc3OS1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03ODc9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNi1cdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxNzpcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxOC1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gNDU2LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjQtXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MjU6XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjYtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDg5MCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA2Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTA3My1cdHN3aXRjaCAoc3JjLVx1MDAzZXR5cGUpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDc0Olx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDc1LVx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMDk1PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMTAtXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19maWx0ZXIpe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExMTE6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTEyLVx0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtOTYtXG5tbS9kZWJ1Zy5jOjk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtOTgtXHRpZiAoZm9saW8tXHUwMDNlbWVtY2dfZGF0YSlcbi0tXG5tbS9kZWJ1Zy5jPTE3MT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xODQtI2VuZGlmXG5tbS9kZWJ1Zy5jOjE4NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTE4Ni1cdFx0XCYjMzQ7b3duZXIgJXB4IFwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjEzLSNlbmRpZlxubW0vZGVidWcuYzoyMTQ6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy0yMTUtXHRcdG1tLVx1MDAzZW93bmVyLFxuLS1cbm1tL2ZvbGlvLmM9MTExMD12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMTIxLVxubW0vZm9saW8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmMtMTEyMy1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNjYtXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxubW0vaHVnZV9tZW1vcnkuYzoxMDY3Olx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OC1cdFx0XHRcdFx0XHQgXCYjMzQ7dGhwLWRlZmVycmVkX3NwbGl0XCYjMzQ7KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODk9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc5MS1cdFx0XHRmb2xpb19zZXRfaWRsZShuZXdfZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzozNzkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h1Z2VfbWVtb3J5LmMtMzc5My1cdFx0bmV3X2ZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jPTQ1PXN0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX2ZsYWdzKHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xubW0vaHdwb2lzb24taW5qZWN0LmM6Njc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHdwb2lzb24taW5qZWN0LmMtNjgtc3RhdGljIHU2NCBod3BvaXNvbl9maWx0ZXJfbWVtY2c7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IHBmbl9pbmplY3RfaW5pdCh2b2lkKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cbm1tL2h3cG9pc29uLWluamVjdC5jOjE5MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTMtXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXCYjMzQ7Y29ycnVwdC1maWx0ZXItbWVtY2dcJiMzNDssIDA2MDAsIGh3cG9pc29uX2Rpcixcbi0tXG5tbS9pbnRlcm5hbC5oPTY1PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4tLVxubW0vaW50ZXJuYWwuaC02Ny1cbm1tL2ludGVybmFsLmg6Njg6I2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxIFx1MDAzY1x1MDAzYyAxKVxubW0vaW50ZXJuYWwuaDo2OTojZGVmaW5lIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFICgxIFx1MDAzY1x1MDAzYyAyKVxubW0vaW50ZXJuYWwuaC03MC0jZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbi0tXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMzktXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy0xNTAtfVxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vbGlzdF9scnUuYy0xNTItXG4tLVxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy00MjEtXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTQyMy1cdGlmICgqbnJfdG9fd2FsayBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xuLS1cbm1tL2xpc3RfbHJ1LmM9NDUxPXN0YXRpYyB2b2lkIGluaXRfb25lX2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbClcbi0tXG5tbS9saXN0X2xydS5jLTQ2MS1cbm1tL2xpc3RfbHJ1LmM6NDYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDYzLXN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG4tLVxubW0vbGlzdF9scnUuYz02NTk9c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTY2MS19XG5tbS9saXN0X2xydS5jOjY2MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9saXN0X2xydS5jLTY2My1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NjctXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTY2OS1cdGlmIChzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jPTY5Mj12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MDMtXG5tbS9saXN0X2xydS5jOjcwNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTcwNS1cdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI5OS1cdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG5tbS9tZW1jb250cm9sLXYxLmM6MzAwOlx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xubW0vbWVtY29udHJvbC12MS5jLTMwMS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTExMzAtICogY2dyb3VwIHYxIHVzZXJzcGFjZSB2bXByZXNzdXJlIGludGVyZmFjZSAobWVtb3J5LnByZXNzdXJlX2xldmVsIC9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNDIyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ2Ny1cdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxubW0vbWVtY29udHJvbC12MS5jOjE0Njg6XHRcdFx0XHRtZW1zdyA/IDAgOiBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSkge1xubW0vbWVtY29udHJvbC12MS5jLTE0NjktXHRcdFx0cmV0ID0gLUVCVVNZO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNDg1PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE1MDMtXHRcdGlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTA0Olx0XHRcdFx0XHRcdCAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpXG5tbS9tZW1jb250cm9sLXYxLmMtMTUwNS1cdFx0XHRucl9yZXRyaWVzLS07XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MjY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzOC0jaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wtdjEuYzoxODM5Olx0TUVNQ0dfU1dBUCxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVx0TlJfU1dBUENBQ0hFLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xOTg2PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9vb21fY29udHJvbF9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE5OTItXHRzZXFfcHJpbnRmKHNmLCBcJiMzNDtvb21fa2lsbCAlbHVcXG5cJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MTk5MzpcdFx0ICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX09PTV9LSUxMXSkpO1xubW0vbWVtY29udHJvbC12MS5jLTE5OTQtXHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MjU9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xubW0vbWVtY29udHJvbC12MS5oOjI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wtdjEuaC0zMC1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9ODY9ZXh0ZXJuIHN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXTtcbm1tL21lbWNvbnRyb2wtdjEuaC04Ny1cbm1tL21lbWNvbnRyb2wtdjEuaDo4ODojZWxzZVx0LyogQ09ORklHX01FTUNHX1YxICovXG5tbS9tZW1jb250cm9sLXYxLmgtODktXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTExOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX3NrbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7fVxubW0vbWVtY29udHJvbC12MS5oLTExOS1cbm1tL21lbWNvbnRyb2wtdjEuaDoxMjA6I2VuZGlmXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbm1tL21lbWNvbnRyb2wtdjEuaC0xMjEtXG4tLVxubW0vbWVtY29udHJvbC5jPTE0MT1zdGF0aWMgdm9pZCBtZW1jZ191bmNoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTE0Mi17XG5tbS9tZW1jb250cm9sLmM6MTQzOlx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19LTUVNLCAtbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTE0NC1cdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTIxNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzNC1cbm1tL21lbWNvbnRyb2wuYzoyMzU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTIzNi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfc3RhdF9pdGVtc1tdID0ge1xubW0vbWVtY29udHJvbC5jOjQzODpcdE1FTUNHX1NXQVAsXG5tbS9tZW1jb250cm9sLmM6NDM5Olx0TUVNQ0dfU09DSyxcbm1tL21lbWNvbnRyb2wuYzo0NDA6XHRNRU1DR19QRVJDUFVfQixcbm1tL21lbWNvbnRyb2wuYzo0NDE6XHRNRU1DR19LTUVNLFxubW0vbWVtY29udHJvbC5jOjQ0MjpcdE1FTUNHX1pTV0FQX0IsXG5tbS9tZW1jb250cm9sLmM6NDQzOlx0TUVNQ0dfWlNXQVBQRUQsXG5tbS9tZW1jb250cm9sLmM6NDQ0Olx0TUVNQ0dfWlNXQVBfSU5DT01QLFxubW0vbWVtY29udHJvbC5jLTQ0NS19O1xubW0vbWVtY29udHJvbC5jLTQ0Ni1cbm1tL21lbWNvbnRyb2wuYzo0NDc6I2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpXG5tbS9tZW1jb250cm9sLmM6NDQ4OiNkZWZpbmUgTUVNQ0dfVk1TVEFUX1NJWkUgKE5SX01FTUNHX05PREVfU1RBVF9JVEVNUyAmIzQzOyBcXFxubW0vbWVtY29udHJvbC5jLTQ0OS1cdFx0XHQgICBBUlJBWV9TSVpFKG1lbWNnX3N0YXRfaXRlbXMpKVxubW0vbWVtY29udHJvbC5jLTQ1MC0jZGVmaW5lIEJBRF9TVEFUX0lEWChpbmRleCkgKCh1MzIpKGluZGV4KSBcdTAwM2U9IFU4X01BWClcbm1tL21lbWNvbnRyb2wuYzo0NTE6c3RhdGljIHU4IG1lbV9jZ3JvdXBfc3RhdHNfaW5kZXhbTUVNQ0dfTlJfU1RBVF0gX19yZWFkX21vc3RseTtcbm1tL21lbWNvbnRyb2wuYy00NTItXG5tbS9tZW1jb250cm9sLmM9NDUzPXN0YXRpYyB2b2lkIGluaXRfbWVtY2dfc3RhdHModm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU2LVxubW0vbWVtY29udHJvbC5jOjQ1NzpcdEJVSUxEX0JVR19PTihNRU1DR19OUl9TVEFUIFx1MDAzZT0gVThfTUFYKTtcbm1tL21lbWNvbnRyb2wuYy00NTgtXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MC1cbm1tL21lbWNvbnRyb2wuYzo0NjE6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVM7ICYjNDM7JiM0MztpLCAmIzQzOyYjNDM7ailcbm1tL21lbWNvbnRyb2wuYy00NjItXHRcdG1lbV9jZ3JvdXBfc3RhdHNfaW5kZXhbbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW2ldXSA9IGo7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ3Mz1zdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSB7XG5tbS9tZW1jb250cm9sLmMtNDc0LVx0LyogTG9jYWwgKENQVSBhbmQgY2dyb3VwKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ3NTpcdGxvbmcgc3RhdGVbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00NzYtXG5tbS9tZW1jb250cm9sLmMtNDc3LVx0LyogRGVsdGEgY2FsY3VsYXRpb24gZm9yIGxvY2tsZXNzIHVwd2FyZCBwcm9wYWdhdGlvbiAqL1xubW0vbWVtY29udHJvbC5jOjQ3ODpcdGxvbmcgc3RhdGVfcHJldltOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xubW0vbWVtY29udHJvbC5jLTQ3OS19O1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XG5tbS9tZW1jb250cm9sLmMtNDgyLVx0LyogQWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ4MzpcdGxvbmcgc3RhdGVbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00ODQtXG5tbS9tZW1jb250cm9sLmMtNDg1LVx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHN0YXRlICovXG5tbS9tZW1jb250cm9sLmM6NDg2Olx0bG9uZyBzdGF0ZV9sb2NhbFtOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xubW0vbWVtY29udHJvbC5jLTQ4Ny1cbm1tL21lbWNvbnRyb2wuYy00ODgtXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xubW0vbWVtY29udHJvbC5jOjQ4OTpcdGxvbmcgc3RhdGVfcGVuZGluZ1tOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xubW0vbWVtY29udHJvbC5jLTQ5MC19O1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Mi1cbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jLTYzMi1cbm1tL21lbWNvbnRyb2wuYzo2MzM6I2RlZmluZSBOUl9NRU1DR19FVkVOVFMgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KVxubW0vbWVtY29udHJvbC5jLTYzNC1zdGF0aWMgdTggbWVtX2Nncm91cF9ldmVudHNfaW5kZXhbTlJfVk1fRVZFTlRfSVRFTVNdIF9fcmVhZF9tb3N0bHk7XG4tLVxubW0vbWVtY29udHJvbC5jPTYzNj1zdGF0aWMgdm9pZCBpbml0X21lbWNnX2V2ZW50cyh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02NDQtXG5tbS9tZW1jb250cm9sLmM6NjQ1Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNQ0dfRVZFTlRTOyAmIzQzOyYjNDM7aSlcbm1tL21lbWNvbnRyb2wuYy02NDYtXHRcdG1lbV9jZ3JvdXBfZXZlbnRzX2luZGV4W21lbWNnX3ZtX2V2ZW50X3N0YXRbaV1dID0gaTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjU0PXN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTY2NC1cdC8qIExvY2FsIChDUFUgYW5kIGNncm91cCkgcGFnZSBzdGF0ZSBcdTAwMjYgZXZlbnRzICovXG5tbS9tZW1jb250cm9sLmM6NjY1Olx0bG9uZ1x0XHRcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcbm1tL21lbWNvbnRyb2wuYzo2NjY6XHR1bnNpZ25lZCBsb25nXHRcdGV2ZW50c1tOUl9NRU1DR19FVkVOVFNdO1xubW0vbWVtY29udHJvbC5jLTY2Ny1cbm1tL21lbWNvbnRyb2wuYy02NjgtXHQvKiBEZWx0YSBjYWxjdWxhdGlvbiBmb3IgbG9ja2xlc3MgdXB3YXJkIHByb3BhZ2F0aW9uICovXG5tbS9tZW1jb250cm9sLmM6NjY5Olx0bG9uZ1x0XHRcdHN0YXRlX3ByZXZbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY3MDpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX3ByZXZbTlJfTUVNQ0dfRVZFTlRTXTtcbm1tL21lbWNvbnRyb2wuYy02NzEtfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4tLVxubW0vbWVtY29udHJvbC5jPTY3Mz1zdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XG5tbS9tZW1jb250cm9sLmMtNjc0LVx0LyogQWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlKSBwYWdlIHN0YXRlIFx1MDAyNiBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzo2NzU6XHRsb25nXHRcdFx0c3RhdGVbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY3NjpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XG5tbS9tZW1jb250cm9sLmMtNjc3LVxubW0vbWVtY29udHJvbC5jLTY3OC1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBwYWdlIHN0YXRlIFx1MDAyNiBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzo2Nzk6XHRsb25nXHRcdFx0c3RhdGVfbG9jYWxbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY4MDpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG5tbS9tZW1jb250cm9sLmMtNjgxLVxubW0vbWVtY29udHJvbC5jLTY4Mi1cdC8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXG5tbS9tZW1jb250cm9sLmM6NjgzOlx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY4NDpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX3BlbmRpbmdbTlJfTUVNQ0dfRVZFTlRTXTtcbm1tL21lbWNvbnRyb2wuYy02ODUtXG4tLVxubW0vbWVtY29udHJvbC5jLTcwMC0gKiAyKSBGbHVzaCB0aGUgc3RhdHMgc3luY2hyb25vdXNseSBvbiByZWFkZXIgc2lkZSBvbmx5IHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhblxubW0vbWVtY29udHJvbC5jOjcwMTogKiAgICAoTUVNQ0dfQ0hBUkdFX0JBVENIICogbnJfY3B1cykgdXBkYXRlIGV2ZW50cy4gVGhvdWdoIHRoaXMgb3B0aW1pemF0aW9uXG5tbS9tZW1jb250cm9sLmM6NzAyOiAqICAgIHdpbGwgbGV0IHN0YXRzIGJlIG91dCBvZiBzeW5jIGJ5IGF0bW9zdCAoTUVNQ0dfQ0hBUkdFX0JBVENIICogbnJfY3B1cykgYnV0XG5tbS9tZW1jb250cm9sLmMtNzAzLSAqICAgIG9ubHkgZm9yIDIgc2Vjb25kcyBkdWUgdG8gKDEpLlxuLS1cbm1tL21lbWNvbnRyb2wuYz03MTE9c3RhdGljIGJvb2wgbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaChzdHJ1Y3QgbWVtY2dfdm1zdGF0cyAqdm1zdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzEzLVx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzKSBcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYzo3MTQ6XHRcdE1FTUNHX0NIQVJHRV9CQVRDSCAqIG51bV9vbmxpbmVfY3B1cygpO1xubW0vbWVtY29udHJvbC5jLTcxNS19XG4tLVxubW0vbWVtY29udHJvbC5jPTcxNz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxuLS1cbm1tL21lbWNvbnRyb2wuYy03NDAtXHRcdFx0XHRcdFx0ICAgIGFicyh2YWwpKTtcbm1tL21lbWNvbnRyb2wuYzo3NDE6XHRcdGlmIChzdGF0c191cGRhdGVzIFx1MDAzYyBNRU1DR19DSEFSR0VfQkFUQ0gpXG5tbS9tZW1jb250cm9sLmMtNzQyLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04MTg9Ym9vbCBtZW1jZ19zdGF0X2l0ZW1fdmFsaWQoaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy04MTkte1xubW0vbWVtY29udHJvbC5jOjgyMDpcdGlmICgodTMyKWlkeCBcdTAwM2U9IE1FTUNHX05SX1NUQVQpXG5tbS9tZW1jb250cm9sLmMtODIxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtY29udHJvbC5jPTgzMj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg0Ny1cbm1tL21lbWNvbnRyb2wuYzo4NDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyOC1cbm1tL21lbWNvbnRyb2wuYzo5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXG4tLVxubW0vbWVtY29udHJvbC5jPTExMDQ9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMTEtXG5tbS9tZW1jb250cm9sLmM6MTExMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTc3LVx0eyBcJiMzNDtmaWxlXCYjMzQ7LFx0XHRcdE5SX0ZJTEVfUEFHRVNcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1Nzg6XHR7IFwmIzM0O2tlcm5lbFwmIzM0OyxcdFx0XHRNRU1DR19LTUVNXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTc5LVx0eyBcJiMzNDtrZXJuZWxfc3RhY2tcJiMzNDssXHRcdE5SX0tFUk5FTF9TVEFDS19LQlx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTgxLVx0eyBcJiMzNDtzZWNfcGFnZXRhYmxlc1wmIzM0OyxcdFx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRVx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1ODI6XHR7IFwmIzM0O3BlcmNwdVwmIzM0OyxcdFx0XHRNRU1DR19QRVJDUFVfQlx0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU4MzpcdHsgXCYjMzQ7c29ja1wmIzM0OyxcdFx0XHRNRU1DR19TT0NLXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTg0LVx0eyBcJiMzNDt2bWFsbG9jXCYjMzQ7LFx0XHRcdE5SX1ZNQUxMT0NcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTg2LSNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYzoxNTg3Olx0eyBcJiMzNDt6c3dhcFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUF9CXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTg4Olx0eyBcJiMzNDt6c3dhcHBlZFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUFBFRFx0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU4OTpcdHsgXCYjMzQ7enN3YXBfaW5jb21wXCYjMzQ7LFx0XHRNRU1DR19aU1dBUF9JTkNPTVBcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTkwLSNlbmRpZlxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjQxPXN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV91bml0KGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjQzLVx0c3dpdGNoIChpdGVtKSB7XG5tbS9tZW1jb250cm9sLmM6MTY0NDpcdGNhc2UgTUVNQ0dfUEVSQ1BVX0I6XG5tbS9tZW1jb250cm9sLmM6MTY0NTpcdGNhc2UgTUVNQ0dfWlNXQVBfQjpcbm1tL21lbWNvbnRyb2wuYy0xNjQ2LVx0Y2FzZSBOUl9TTEFCX1JFQ0xBSU1BQkxFX0I6XG4tLVxubW0vbWVtY29udHJvbC5jPTE2OTY9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzAxLVxubW0vbWVtY29udHJvbC5jOjE3MDI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTE3MDMtdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzIyPXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3NjgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpOyBpJiM0MzsmIzQzOykge1xubW0vbWVtY29udHJvbC5jOjE3Njk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTE3NzAtXHRcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xODIwPXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTE4MjktXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYzoxODMwOlx0XHRtZW1vcnlfZmFpbGNudCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19NQVhdKTtcbm1tL21lbWNvbnRyb2wuYy0xODMxLVx0ZWxzZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODQwLVx0XHRcdEsoKHU2NClSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpKSxcbm1tL21lbWNvbnRyb2wuYzoxODQxOlx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODQyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODQzLVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTE4ODM9dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTE4ODUte1xubW0vbWVtY29udHJvbC5jOjE4ODY6XHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcbm1tL21lbWNvbnRyb2wuYzoxODg3Olx0XHRcdCAgZXZlbnQgPT0gTUVNQ0dfU1dBUF9GQUlMO1xubW0vbWVtY29udHJvbC5jLTE4ODgtXG5tbS9tZW1jb250cm9sLmM6MTg4OTpcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xubW0vbWVtY29udHJvbC5jOjE4OTA6XHRWTV9XQVJOX09OX09OQ0UoIWFsbG93X3NwaW5uaW5nIFx1MDAyNlx1MDAyNiBldmVudCAhPSBNRU1DR19NQVgpO1xubW0vbWVtY29udHJvbC5jLTE4OTEtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk4MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19NRU1DR2AuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGxvb2sgZm9yIHRob3NlIGRlZmluaXRpb25zIGlzIHByb2JhYmx5IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZWl0aGVyIGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCB3aGljaCBvZnRlbiBjb250YWlucyBjb3JlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBvcHRpb25zLCBvciBwZXJoYXBzIGBtbS9LY29uZmlnYCwgc2luY2UgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYSBjb3JlIGFzcGVjdC4gU28sIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIHR3byBmaWxlcyDigJMgYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCDigJMgdG8gdW5jb3ZlciB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgY2FuIGV2ZW4gYmUgZW5hYmxlZCBpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgaXQgdG8gd29yayBjb3JyZWN0bHksIG9yIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBuZWVkZWQsIGFuZCBhbHNvIHdoZXJlIGl0IGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLkkgdGhpbmsgSSByZW1lbWJlciBzb21ldGhpbmcgaW1wb3J0YW50IGFyb3VuZCB0aGUgS2NvbmZpZyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGFyb3VuZCBsaW5lIDEwODUsIGFzIHRoYXQgbG9jYXRpb24gaXMgZnJlcXVlbnRseSByZWxldmFudCB0byB0aGUgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmUgaXMgZGVmaW5lZCBhcm91bmQgdGhlcmUgYW5kIHdoYXQgaXRzIGludGVyYWN0aW9ucyBhcmUgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbjExMDA6XHRcbjExMDE6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjExMDI6XHRcdGJvb2xcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjExMDU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjExMDY6XHRcdGRlZmF1bHQgeVxuMTEwNzpcdFxuMTEwODpcdGNvbmZpZyBNRU1DR19WMVxuMTEwOTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTEwOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTExOlx0XHRkZWZhdWx0IG5cbjExMTI6XHRcdGhlbHBcbjExMTM6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTE0Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTE1Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTExNjpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMTc6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTE4Olx0XG4xMTE5Olx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgQ0dyb3VwcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgQ09ORklHX1NXQVBgIGFuZCBzZWUgaWYgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgZmxhZ3Mgb3IgcGFyYW1ldGVycyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gc3dhcCBiZWhhdmlvciB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBkbyBhIHF1aWNrIGF1ZGl0IGZvciBzd2FwIHJlbGF0ZWQgc2V0dGluZ3Mgd2l0aGluIHRoZSBnZW5lcmFsIGNvbmZpZy4KClRoZW4sIEkmIzM5O2xsIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiB0aGUgY29yZSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGV5JiMzOTtyZSBzdWJqZWN0IHRvIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiBzd2FwIHNwYWNlIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGZyYW1ld29yay4gQXJlIHRoZXkgYWx3YXlzIGNvbXBpbGVkIGluLCBvciBhcmUgdGhlcmUgY2lyY3Vtc3RhbmNlcywgY29uZmlndXJhdGlvbnMsIG9yIGJ1aWxkIG9wdGlvbnMgdGhhdCB3b3VsZCBjYXVzZSB0aGVtIHRvIGJlIG9taXR0ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTc1OD1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Nzk1LS8qKlxubW0vbWVtY29udHJvbC5jOjU3OTY6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTc5Ny0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTgwMi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1ODAzOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTgwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCB0aGUgYCNpZmRlZmBzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzd2FwIHVzYWdlLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gaXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcHJvYmFibHkgcmVsYXRlZCB0byBkaWZmZXJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIG1heWJlIGV2ZW4gZmVhdHVyZSBmbGFncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgYWN0dWFsbHkgY29udHJvbGxpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGZ1bmN0aW9uIGlzICpub3QqIHByZXNlbnQgYW5kIHdoeSwgYmVjYXVzZSB0aGF0IGRpcmVjdGx5IGltcGFjdHMgaG93IHN3YXAgY2hhcmdlcyBhcmUgaGFuZGxlZCBpbiBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdGhlcmUgYW5kIG5vdCBiZWluZyB0aGVyZSBmb3Igd2hhdGV2ZXIgdGhlIHVzZSBjYXNlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTc4NTpcdFx0bWVtY2dfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7bWVtX2Nncm91cFwmIzM0OywgbWVtY2dfc2l6ZSwgMCxcbjU3ODY6XHRcdFx0XHRcdFx0IFNMQUJfUEFOSUMgfCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpO1xuNTc4NzpcdFxuNTc4ODpcdFx0bWVtY2dfcG5fY2FjaGVwID0gS01FTV9DQUNIRShtZW1fY2dyb3VwX3Blcl9ub2RlLFxuNTc4OTpcdFx0XHRcdFx0ICAgICBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbjU3OTA6XHRcbjU3OTE6XHRcdHJldHVybiAwO1xuNTc5MjpcdH1cbjU3OTM6XHRcbjU3OTQ6XHQjaWZkZWYgQ09ORklHX1NXQVBcbjU3OTU6XHQvKipcbjU3OTY6XHQgKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cbjU3OTc6XHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbjU3OTg6XHQgKlxuNTc5OTpcdCAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJiMzOTtzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cdTAwM2Vzd2FwLlxuNTgwMDpcdCAqXG41ODAxOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cbjU4MDI6XHQgKi9cbjU4MDM6XHRpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNTgwNDpcdHtcbjU4MDU6XHRcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjU4MDY6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG41ODA3Olx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuNTgwODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTgwOTpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuNTgxMDpcdFx0dW5zaWduZWQgc2hvcnQgbWVtY2dpZDtcbjU4MTE6XHRcbjU4MTI6XHRcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG41ODEzOlx0XHRcdHJldHVybiAwO1xuNTgxNDpcdFxuNTgxNTpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG41ODE2Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG41ODE3Olx0XHRpZiAoIW9iamNnKVxuNTgxODpcdFx0XHRyZXR1cm4gMDtcbjU4MTk6XHRcbjU4MjA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjU4MjE6XHRcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG41ODIyOlx0XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuNTgyMzpcdFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG41ODI0Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGx5OiBgQ09ORklHX1NXQVBgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGJlY2F1c2Ugb2YgdGhvc2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGZ1bmN0aW9ucyDigJMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gQW5kIG9idmlvdXNseSwgYENPTkZJR19NRU1DR2AgaXMgYSByZXF1aXJlbWVudCwgc2luY2UgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gYG1lbWNvbnRyb2wub2AgYW5kIGFsbCB0aGUgcHJpdmF0ZSBJRCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBtZW1jZ3MuCgpCdXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLCBzbyBJJiMzOTttIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgYWJvdXQgYENPTkZJR19NRU1DR19WMWAuIFJpZ2h0LCBsb29raW5nIGF0IGBtbS9tZW1jb250cm9sLXYxLmNgLCBJIHNlZSBgbWVtY2cxX3N3YXBvdXRgIGlzIGNhbGxpbmcgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYC4gT2theSwgdGhhdCBhZGRzIGFub3RoZXIgcGllY2UgdG8gdGhlIHB1enpsZS4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcywgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQuIEkgc2VlIGEgZGVjZW50IG51bWJlciBvZiB0aGVtLgpUaGUgbGlzdCBpczoKMS4gIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYAoyLiAgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYAozLiAgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYAo0LiAgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYAo1LiAgYGxpc3RfbHJ1X3dhbGtfbm9kZWAKNi4gIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YAo3LiAgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgLyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgKENTUyBjYWxsYmFja3MpCjguICBgbWVtX2Nncm91cF9hbGxvY2AgLyBgbWVtX2Nncm91cF9mcmVlYCAvIGBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXRgIC8gYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXRgIC8gYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsYAoKSXQgbG9va3MgbGlrZSB0aGUgZmlyc3Qgc2l4IGFyZSBub24tc3RhdGljLCBzbywgZXhwb3J0ZWQsIGFuZCB0aGUgbGFzdCBmaXZlLCBzdGF0aWMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGJldHRlciwgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGl0cyBkZWZpbml0aW9uIGFuZCBjYWxsZXJzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAgYW5kIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODA3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTMtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODE0OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTUtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTI5Mz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTI5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyOTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjk5LXtcbi0tXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTQyOS1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9saXN0X2xydS5jOjQzMDpcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTtcbm1tL2xpc3RfbHJ1LmMtNDMxLVx0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MDg2PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTEwLS8qKlxubW0vbWVtY29udHJvbC5jOjQxMTE6ICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGEgbWVtY2cgZnJvbSBhIG1lbWNnIGlkXG5tbS9tZW1jb250cm9sLmMtNDExMi0gKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4tLVxubW0vbWVtY29udHJvbC5jLTQxMTctICovXG5tbS9tZW1jb250cm9sLmM6NDExODpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG5tbS9tZW1jb250cm9sLmMtNDExOS17XG4tLVxubW0vbWVtY29udHJvbC5jPTQzNDM9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM4My1cdC8qXG5tbS9tZW1jb250cm9sLmM6NDM4NDpcdCAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UmIzM5O3JlIGZ1bGx5IG9ubGluZS5cbm1tL21lbWNvbnRyb2wuYy00Mzg1LVx0ICpcbi0tXG5tbS9tZW1jb250cm9sLmM9NTM1Mj1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzYxLVx0cmN1X3JlYWRfbG9jaygpO1xubW0vbWVtY29udHJvbC5jOjUzNjI6XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbm1tL21lbWNvbnRyb2wuYy01MzYzLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbi0tXG5tbS93b3JraW5nc2V0LmM9MjczPXN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yODItXG5tbS93b3JraW5nc2V0LmM6MjgzOlx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7XG5tbS93b3JraW5nc2V0LmMtMjg0LVx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTQ3MS1cdCAqL1xubW0vd29ya2luZ3NldC5jOjQ3MjpcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG5tbS93b3JraW5nc2V0LmMtNDczLVx0aWYgKGV2aWN0aW9uX21lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVgIENhbGxlcnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UsIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgaXRzIGNhbGxlcnMuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNvcmUsIHNvIEkgZXhwZWN0IGEgZGVjZW50IG51bWJlciBvZiB0aGVtLCBsaWtlbHkgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgKndoeSogYmVoaW5kIHRob3NlIGNhbGxzLiBJcyBpdCBmb3IgaWRlbnRpZmljYXRpb24gd2l0aGluIGNncm91cHM/IFBlcmhhcHMgcmVzb3VyY2UgYWNjb3VudGluZz8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb250ZXh0IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgZXZlbiBkZXNpZ24gaW1wcm92ZW1lbnRzLiBBIHRhcmdldGVkIGFuYWx5c2lzIG9mIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MjY5PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yOTgtXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xubW0vbWVtY29udHJvbC12MS5jOjI5OTpcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG5tbS9tZW1jb250cm9sLXYxLmMtMzAwLVx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yMz1pbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xubW0vbWVtY29udHJvbC12MS5oLTI0LVxubW0vbWVtY29udHJvbC12MS5oOjI1OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLXYxLmgtMjYtXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDA4MT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTQwODUtXG5tbS9tZW1jb250cm9sLmM6NDA4NjpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbm1tL21lbWNvbnRyb2wuYy00MDg3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTgwMz1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODM5LVxubW0vbWVtY29udHJvbC5jOjU4NDA6XHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtNTg0MS1cdG1lbWNnaWQgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBGdW5jdGlvbiBTZWxlY3Rpb24gYW5kIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgbW9zdCBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGdvdCBhIGxpc3QgYWxyZWFkeTogYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3M6IGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgYWxsIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBhY2Nlc3NpYmxlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZWlyIGRlZmluaXRpb25zLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbGlzdF9scnUuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gQWgsIHllcy4gQ29uZmlybWVkOgoKKiAgIEluIGBtbS9tZW1jb250cm9sLmNgLCB3ZSBoYXZlIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZWAsIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgYXJlIGFsbCBub24tc3RhdGljLgoqICAgSW4gYG1tL2xpc3RfbHJ1LmNgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCBpcyBub24tc3RhdGljLgoqICAgQW5kIGZpbmFsbHksIGluIGBtbS93b3JraW5nc2V0LmNgLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgaXMgYWxzbyBub24tc3RhdGljLgoKRXhjZWxsZW50LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIGBNRU1DR2Ag4oCTIHRoZSBjb3JlIGNvbmZpZyBmb3IgbWVtb3J5IGNncm91cCBzdXBwb3J0LCBlbmFibGluZyBgbW0vbWVtY29udHJvbC5jYCDigJMgYW5kIGBTV0FQYCB0byBlbmFibGUgc3dhcCBzdXBwb3J0IGFuZCwgaW1wb3J0YW50bHksIHRoZSBzd2FwIGFjY291bnRpbmcgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYENPTkZJR19NRU1DR2AgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLCBkZXBlbmRpbmcgb24gbm90aGluZyBkaXJlY3RseS4gSXQgZG9lcywgaG93ZXZlciwgaW5kaXJlY3RseSBkZXBlbmQgb24gb3RoZXIgY29uZmlncy4gYENPTkZJR19TV0FQYCBhbHNvIGhhcyBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGl0cyBkZWZpbml0aW9uIGluIGBtbS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSYjMzk7dmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0ODMKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBkZWNpZGUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgd29ydGggaW5jbHVkaW5nIG9yIHRlc3RpbmcgYWxvbmdzaWRlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBsaXN0ZWQgYXMgb3B0aW9uYWwsIGJ1dCBnaXZlbiB0aGUgY3JpdGljYWwgcm9sZSBvZiBgTUVNQ0dgIGFuZCBgU1dBUGAgaW4gdGhpcyBhcmVhLCBpdCBtaWdodCBiZSByZWxldmFudC4gQmVzdCB0byBpbmNsdWRlIGl0IGZvciBub3cgdG8ga2VlcCB0aGluZ3MgdGhvcm91Z2guIFJpZ2h0LCB0aW1lIHRvIGdlbmVyYXRlIHRoZSBvdXRwdXRzIHdpdGggYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGBtZW1jZ2lkYCwgYG9iamNnYCwgYG1lbWNnYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkIGluIGJyYW5jaGluZyBvciBhc3NpZ25tZW50cy5cbi0gTm8gdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGZpZWxkcyBhcmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIFRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHJlZmNvdW50X3QsIHBlcmNwdV9yZWYsIFJDVSwgWEFycmF5KS5cbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWY4NjUzNjAwYTIyN2RiNzk5ZDZmMzgxOTIxNmRiYjU5NWVjYWM2MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMTk6NDY6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IGYyMjczNDhhM2YyNGEuLmVhZmM4MTdmZjI0NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC02NiwxMSAmIzQzOzY2LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUgewogCiAjZGVmaW5lIE1FTV9DR1JPVVBfSURfU0hJRlQJMTYKIAotc3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCB7Ci0JaW50IGlkOwotCXJlZmNvdW50X3QgcmVmOwotfTsKLQogc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1Owogc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1Owogc3RydWN0IG1lbWNnX3Ztc3RhdHM7CkBAIC0xNzMsNiAmIzQzOzE2OCw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHsKIAlzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWF0b21pY190IG5yX2NoYXJnZWRfYnl0ZXM7CiYjNDM7CXJlZmNvdW50X3QgbWVtY2dpZF9yZWY7CiAJdW5pb24gewogCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIHByb3RlY3RlZCBieSBvYmpjZ19sb2NrICovCiAJCXN0cnVjdCByY3VfaGVhZCByY3U7CkBAIC0xODksOCAmIzQzOzE4NSw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHsKIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CiAKLQkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KLQlzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkOwomIzQzOwkvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqLwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7CiAKIAkvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovCiAJc3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7CQkvKiBCb3RoIHYxICZhbXA7IHYyICovCkBAIC0yNTUsNiAmIzQzOzI1MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKICNlbmRpZgogCWludCBrbWVtY2dfaWQ7CiAKJiM0MzsJLyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovCiYjNDM7CWludCBpZDsKJiM0MzsKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwogCXN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0OwogI2VuZGlmCkBAIC04MTAsNyAmIzQzOzgwOSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBtZW1jZy0mZ3Q7aWQuaWQ7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7aWQ7CiB9CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpOwogCmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuYwppbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NAotLS0gYS9tbS9saXN0X2xydS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmMKQEAgLTQyOCw3ICYjNDM7NDI4LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsCiAJCXhhX2Zvcl9lYWNoKCZhbXA7bHJ1LSZndDt4YSwgaW5kZXgsIG1scnUpIHsKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCW1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpOwotCQkJaWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHsKJiM0MzsJCQlpZiAoIW1lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHsKIAkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAyNTZiNjhmZmNhNzBlLi44NGRjYWIzYWNiOGEyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0zNzczLDcgJiM0MzszNzczLDcgQEAgc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCiAJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDttZW1jZ19rbWVtX29ubGluZV9rZXkpOwogCi0JbWVtY2ctJmd0O2ttZW1jZ19pZCA9IG1lbWNnLSZndDtpZC5pZDsKJiM0MzsJbWVtY2ctJmd0O2ttZW1jZ19pZCA9IG1lbWNnLSZndDtpZDsKIH0KIAogc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKQEAgLTQwMzIsMjUgJiM0Mzs0MDMyLDY1IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTsKIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7Ci0JaWYgKG1lbWNnLSZndDtpZC5pZCAmZ3Q7IDApIHsKLQkJeGFfZXJhc2UoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQuaWQpOwotCQltZW1jZy0mZ3Q7aWQuaWQgPSAwOwomIzQzOwlpZiAobWVtY2ctJmd0O2lkICZndDsgMCkgewomIzQzOwkJeGFfZXJhc2UoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQpOwomIzQzOwkJbWVtY2ctJmd0O2lkID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiYjNDM7c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywKJiM0MzsJCXVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbikKIHsKLQlpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sICZhbXA7bWVtY2ctJmd0O2lkLnJlZikpIHsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlOwogCi0JCS8qIE1lbWNnIElEIHBpbnMgQ1NTICovCi0JCWNzc19wdXQoJmFtcDttZW1jZy0mZ3Q7Y3NzKTsKJiM0MzsJaWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCAmYW1wO29iamNnLSZndDttZW1jZ2lkX3JlZikpIHsKJiM0MzsJCW9iamNnX2ZyZWUgPSB4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJCVZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7CiYjNDM7CiYjNDM7CQkvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqLwomIzQzOwkJb2JqX2Nncm91cF9wdXQob2JqY2cpOwogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQgLSBwdXQgbWVtY2dpZCBhbmQgZ2V0IHRoZSBuZWFyZXN0IG9ubGluZSBtZW1jZwomIzQzOyAqIEBpZDogdGhlIG1lbWNnIHByaXZhdGUgaWQgZ290IGZyb20gbWVtX2Nncm91cF9pZF9nZXRfb25saW5lCiYjNDM7ICogQG46IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcHV0CiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlvYmpjZyA9IHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CWlmICh1bmxpa2VseSghb2JqY2cpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CXdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkKJiM0MzsJCW1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwomIzQzOwomIzQzOwlfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gbWVtY2c7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7CV9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy0mZ3Q7aWRfb2JqY2csIG1lbWNnLSZndDtpZCwgMSk7CiYjNDM7fQomIzQzOwogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiB7Ci0Jd2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgJmFtcDttZW1jZy0mZ3Q7aWQucmVmKSkgewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJb2JqY2cgPSBtZW1jZy0mZ3Q7aWRfb2JqY2c7CiYjNDM7CiYjNDM7CXdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sICZhbXA7b2JqY2ctJmd0O21lbWNnaWRfcmVmKSkgewogCQkvKgogCQkgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQmIzM5O3MgcmVmY291bnQgbXVzdAogCQkgKiBhbHdheXMgYmUgJmd0Oz0gMS4KQEAgLTQwNjAsNyAmIzQzOzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW4KIAkJCWJyZWFrOwogCQl9CiAJCW1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwomIzQzOwkJb2JqY2cgPSBtZW1jZy0mZ3Q7aWRfb2JqY2c7CiAJfQomIzQzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gbWVtY2c7CiB9CiAKQEAgLTQwNjksMTEgJiM0Mzs0MTEyLDI0IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuCiAgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwCiAgKgogICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuCiYjNDM7ICoKJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC4KICAqLwogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKQogewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTsKLQlyZXR1cm4geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsKJiM0MzsJb2JqY2cgPSB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CWlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKIH0KIAogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKQpAQCAtNDE3NCw3ICYjNDM7NDIzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCWlmICghbWVtY2cpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZXJyb3IgPSB4YV9hbGxvYygmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsICZhbXA7bWVtY2ctJmd0O2lkLmlkLCBOVUxMLAomIzQzOwllcnJvciA9IHhhX2FsbG9jKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgJmFtcDttZW1jZy0mZ3Q7aWQsIE5VTEwsCiAJCQkgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKQEAgLTQzMTksOSAmIzQzOzQzNzUsMTAgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkJCQkgICBGTFVTSF9USU1FKTsKIAlscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7CiAKLQkvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi8KLQlyZWZjb3VudF9zZXQoJmFtcDttZW1jZy0mZ3Q7aWQucmVmLCAxKTsKLQljc3NfZ2V0KGNzcyk7CiYjNDM7CS8qIENTUyBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIG9iaiBjZ3JvdXAgKi8KJiM0MzsJbWVtY2ctJmd0O2lkX29iamNnID0gb2JqY2c7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZF9vYmpjZy0mZ3Q7bWVtY2dpZF9yZWYsIDEpOwomIzQzOwlvYmpfY2dyb3VwX2dldChtZW1jZy0mZ3Q7aWRfb2JqY2cpOwogCiAJLyoKIAkgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJiMzOTtyZSBmdWxseSBvbmxpbmUuCkBAIC00MzMzLDcgJiM0Mzs0MzkwLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZQogCSAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy4KIAkgKi8KLQl4YV9zdG9yZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZC5pZCwgbWVtY2csIEdGUF9LRVJORUwpOwomIzQzOwl4YV9zdG9yZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZCwgbWVtY2ctJmd0O2lkX29iamNnLCBHRlBfS0VSTkVMKTsKIAogCXJldHVybiAwOwogZnJlZV9vYmpjZzoKQEAgLTQzODUsNyAmIzQzOzQ0NDIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAKIAlkcmFpbl9hbGxfc3RvY2sobWVtY2cpOwogCi0JbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7CiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKG1lbWNnKTsKIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKQEAgLTU3NTAsNiAmIzQzOzU4MDcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJdW5zaWduZWQgc2hvcnQgbWVtY2dpZDsKIAogCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCXJldHVybiAwOwpAQCAtNTc2NywyMiAmIzQzOzU4MjUsMjQgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuIDA7CiAJfQogCi0JbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpOwotCS8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqLwotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKQomIzQzOwkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgJmFtcDsmYW1wOwogCSAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMsICZhbXA7Y291bnRlcikpIHsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTsKIAomIzQzOwltZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7CiYjNDM7CW1lbWNnaWQgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwotCV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9wYWdlcywKLQkJCSAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7CiYjNDM7CV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9wYWdlcywgbWVtY2dpZCk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU3OTgsMTggJiM0Mzs1ODU4LDIzIEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7CiYjNDM7CW1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChpZCwgbnJfcGFnZXMpOwogCWlmIChtZW1jZykgewotCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgbWVtY2cgd2FzIG9mZmxpbmUgYW5kIHJlcGFyZW50ZWQgdG8gcm9vdCwgc3dhcCBuZWVkcwomIzQzOwkJICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIHx8IGlkICE9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpIHsKIAkJCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbXN3LCBucl9wYWdlcyk7CiAJCQllbHNlCiAJCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O3N3YXAsIG5yX3BhZ2VzKTsKIAkJfQogCQltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIH0KIAogbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li40ZTliN2IxNjNjMDFlIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC00NzAsNyAmIzQzOzQ3MCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCwKIAkgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLgogCSAqLwogCWV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7Ci0JaWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiYjNDM7CWlmIChldmljdGlvbl9tZW1jZyAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiAJCWV2aWN0aW9uX21lbWNnID0gTlVMTDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vbGlzdF9scnUuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpUaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkYCBpcyBnb25lLiBJbnN0ZWFkLCBgc3RydWN0IG9ial9jZ3JvdXBgIGdldHMgYSBgcmVmY291bnRfdCBtZW1jZ2lkX3JlZmAsIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIGdldHRpbmcgYSBgc3RydWN0IG9ial9jZ3JvdXAgKmlkX29iamNnO2AgYW5kIGFuIGBpbnQgaWQ7YC4gVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2YgbnVsbCBjaGVja3MgaW4gYG1tL2xpc3RfbHJ1LmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gV2UmIzM5O3JlIGdldHRpbmcgc29tZSBuZXcgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgIGZvciBtYW5hZ2luZyB0aGUgcHJpdmF0ZSBJRHMgYW5kIHRoZWlyIHJlZmNvdW50aW5nLCBhbmQgbW9kaWZpY2F0aW9ucyBpbiByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBtZW1fY2dyb3VwX2FsbG9jYCwgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgZXRjLiBQbHVzLCBpdCB0b3VjaGVzIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYC4gVGhhdCYjMzk7cyBhIGdvb2QgYW1vdW50IG9mIGNodXJuIQoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBOb3BlLCBubyBkaXJlY3QgY29weWluZyBvZiBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHZpYSB0aGluZ3MgbGlrZSBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGxzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY29tZXMgdG8gbWluZC4gVGhhdCYjMzk7cyBhIHJlbGllZi4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE9rYXksIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2l0aCBhbGwgdGhpcyBzdHJ1Y3QgbWFuaXB1bGF0aW9uLCBJIG5lZWQgdG8gZm9jdXMgb24gc3RydWN0dXJlIGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgaG93IHRoZXNlIG5ldyBzdHJ1Y3R1cmVzIGludGVyYWN0IHdpdGggZXhpc3RpbmcgY29kZSwgZXNwZWNpYWxseSB0aGUgbmV3IGBvYmpfY2dyb3VwYC4gSXQmIzM5O3MgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZCBpbiBhIGNvbmRpdGlvbmFsLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgaG93IGBzdHJ1Y3Qgb2JqX2Nncm91cGAgaXMgYWxsb2NhdGVkLiBMZXQmIzM5O3MgZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGtlcm5lbCB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xNDk9c3RhdGljIHZvaWQgb2JqX2Nncm91cF9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxubW0vbWVtY29udHJvbC5jLTE5NS1cbm1tL21lbWNvbnRyb2wuYzoxOTY6c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG5tbS9tZW1jb250cm9sLmMtMTk3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM0Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MzU5LVx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbm1tL21lbWNvbnRyb2wuYzo0MzYwOlx0XHRvYmpjZyA9IG9ial9jZ3JvdXBfYWxsb2MoKTtcbm1tL21lbWNvbnRyb2wuYy00MzYxLVx0XHRpZiAoIW9iamNnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBvYmpfY2dyb3VwX2FsbG9jKioKCk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzIG9mIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyBkaXNzZWN0IGBvYmpfY2dyb3VwX2FsbG9jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IHRoZXNlIG9iamVjdCBjZ3JvdXBzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHNpbmNlIHdlJiMzOTt2ZSBiZWVuIHNlZWluZyBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yIHJlY2VudGx5LiBJJiMzOTttIGFzc3VtaW5nLCBhcyB1c3VhbCwgaXQmIzM5O3Mgbm90IGEgdHJpdmlhbCBhbGxvY2F0aW9uLCBhbmQgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCBhbnkgc3VidGxlIGluZWZmaWNpZW5jaWVzIGluIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGl0c2VsZiwgb3IgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcy4gS25vd2luZyBteSBsdWNrLCB0aGVyZeKAmWxsIGJlIHNvbWUgdHJpY2t5IHBvaW50ZXIgYXJpdGhtZXRpYyBpbiB0aGVyZSB0b28uLi4gbG9va2luZyBmb3J3YXJkIHRvIGl0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZvYmpjZ19sb2NrLCBmbGFncyk7XG4gMTkxOlx0XG4gMTkyOlx0XHRwZXJjcHVfcmVmX2V4aXQocmVmKTtcbiAxOTM6XHRcdGtmcmVlX3JjdShvYmpjZywgcmN1KTtcbiAxOTQ6XHR9XG4gMTk1Olx0XG4gMTk2Olx0c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG4gMTk3Olx0e1xuIDE5ODpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDE5OTpcdFx0aW50IHJldDtcbiAyMDA6XHRcbiAyMDE6XHRcdG9iamNnID0ga3phbGxvY19vYmooc3RydWN0IG9ial9jZ3JvdXApO1xuIDIwMjpcdFx0aWYgKCFvYmpjZylcbiAyMDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjA0Olx0XG4gMjA1Olx0XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2b2JqY2ctXHUwMDNlcmVmY250LCBvYmpfY2dyb3VwX3JlbGVhc2UsIDAsXG4gMjA2Olx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4gMjA3Olx0XHRpZiAocmV0KSB7XG4gMjA4Olx0XHRcdGtmcmVlKG9iamNnKTtcbiAyMDk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjEwOlx0XHR9XG4gMjExOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZvYmpjZy1cdTAwM2VsaXN0KTtcbiAyMTI6XHRcdHJldHVybiBvYmpjZztcbiAyMTM6XHR9XG4gMjE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFjY291bnRpbmcgaW4gQ29udHJvbCBHcm91cHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMsIG9yIGBtZW1jZ2BzLCBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBzZWVtcyBsaWtlIGBvYmpjZ2AgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBhbmQgemVyby1pbml0aWFsaXplcyBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBtZW1vcnkgcmVnaW9uLiBUaGVuLCB0aGUgY3JpdGljYWwgcGFydCBqdW1wcyBvdXQgYXQgbWUgaW4gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWA6IHdlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbWVtY2dpZF9yZWZgIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIHNldCBpdCB0byAxLiBUaGlzIGlzIGEgZGVsaWJlcmF0ZSBpbml0aWFsaXphdGlvbiwgcmF0aGVyIHRoYW4gYSByZWxpYW5jZSBvbiBga3phbGxvY2AuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2h5IGlzIHRoYXQgcmVxdWlyZWQ/IFRvIGFuc3dlciB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gd29ya3MuIEkgc2hvdWxkIGNoZWNrIGBtZW1fY2dyb3VwX2FsbG9jYCB0byBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW1wb3J0YW50IGhhcHBlbmluZyBpbiB0aGVyZSB0aGF0IEnigJltIG1pc3NpbmcgdGhhdCBpcyByZWxhdGVkIHRvIHRoZSByZWZlcmVuY2UgY291bnRlci4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBlYXJsaWVyIGludGVyYWN0aW9uIHRoYXQgSSBuZWVkIHRvIGtub3cgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjE1Olx0XHRscnVfZ2VuX2V4aXRfbWVtY2cobWVtY2cpO1xuNDIxNjpcdFx0bWVtY2dfd2JfZG9tYWluX2V4aXQobWVtY2cpO1xuNDIxNzpcdFx0X19tZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xuNDIxODpcdH1cbjQyMTk6XHRcbjQyMjA6XHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQyMjE6XHR7XG40MjIyOlx0XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xuNDIyMzpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcbjQyMjQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQyMjU6XHRcdGludCBub2RlLCBjcHU7XG40MjI2Olx0XHRpbnQgX19tYXliZV91bnVzZWQgaTtcbjQyMjc6XHRcdGxvbmcgZXJyb3I7XG40MjI4Olx0XG40MjI5Olx0XHRtZW1jZyA9IGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG40MjMwOlx0XHRpZiAoIW1lbWNnKVxuNDIzMTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjQyMzI6XHRcbjQyMzM6XHRcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQsIE5VTEwsXG40MjM0Olx0XHRcdFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XG40MjM1Olx0XHRpZiAoZXJyb3IpXG40MjM2Olx0XHRcdGdvdG8gZmFpbDtcbjQyMzc6XHRcdGVycm9yID0gLUVOT01FTTtcbjQyMzg6XHRcbjQyMzk6XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbWVtY2dfdm1zdGF0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjQyNDA6XHRcdGlmICghbWVtY2ctXHUwMDNldm1zdGF0cylcbjQyNDE6XHRcdFx0Z290byBmYWlsO1xuNDI0MjpcdFxuNDI0MzpcdFx0bWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcbjQyNDQ6XHRcdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjQyNDU6XHRcdGlmICghbWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUpXG40MjQ2Olx0XHRcdGdvdG8gZmFpbDtcbjQyNDc6XHRcbjQyNDg6XHRcdGlmICghbWVtY2cxX2FsbG9jX2V2ZW50cyhtZW1jZykpXG40MjQ5Olx0XHRcdGdvdG8gZmFpbDtcbjQyNTA6XHRcbjQyNTE6XHRcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcbjQyNTI6XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbjQyNTM6XHRcdFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSwgY3B1KTtcbjQyNTQ6XHRcdFx0c3RhdGMtXHUwMDNlcGFyZW50X3BjcHUgPSBwc3RhdGNfcGNwdTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxNgoJCQkJCQkJb3V0cHV0OiAyOTUKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgRGV0ZWN0ZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIHN0cm9uZ2x5IHN1Z2dlc3RzIEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGNvcmUgYWxsb2NhdGlvbiwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIGFuZCBkYXRhIGZsb3cgYW5kLCBhcyBJIHN1c3BlY3RlZCwgZXZlcnl0aGluZyBsb29rcyBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBgbWVtY2dgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbi4gQWxsIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgd2l0aGluIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhcmUgbG9jYWxseSBkZWNsYXJlZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhlcmUgYXJlbiYjMzk7dCBhbnkga2VybmVsLXRvLXVzZXIgc3BhY2UgY29waWVzIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBsZWFrIGRhdGEuCgpUaGUgZW50aXJlIHNjb3BlIG9mIHRoZSBwYXRjaCBzZWVtcyBsaW1pdGVkIHRvIGludGVybmFsIGBtZW1jZ2AgcmVmY291bnRpbmcsIElEIG1hbmFnZW1lbnQgdXNpbmcgWEFycmF5LCBsaWZlY3ljbGUgdHJhY2tpbmcgZm9yIGBvYmpfY2dyb3VwYCBhbmQgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZXMsIGFuZCBzd2FwL0xSVSBjaGFyZ2luZy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJldm9sdmUgYXJvdW5kIGNvcnJlY3RseSBtYW5hZ2luZyB0aGUgcmVmZXJlbmNlIGNvdW50cyBhbmQgSURzIGFuZCBwaW5uaW5nIHRoZSBgb2JqX2Nncm91cGAuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBsaWtlbHkgc3RlbSBmcm9tIHJlZmVyZW5jZSBjb3VudGluZyBlcnJvcnMgKFVBRnMsIGRvdWJsZSBmcmVlcywgbGVha3MpLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGJ1Z3MuIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIHRoaW5ncyB0aGF0IHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbHMg4oCTIEtBU0FOLCBMT0NLREVQLCBhbmQgYHJlZmNvdW50X3RgIGNoZWNrcyDigJMgYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjYXRjaC4gSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCBhZGQgdmFsdWUgdG8uCgpJJiMzOTt2ZSBhbHNvIGRvbmUgYSBkZWVwIGRpdmUgb24gdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlczoKCiogICBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGludm9sdmUgYHN0cnVjdCBvYmpfY2dyb3VwYCAoYWRkaW5nIGByZWZjb3VudF90IG1lbWNnaWRfcmVmYCksIGBzdHJ1Y3QgbWVtX2Nncm91cGAgKGFkZGluZyBgaWRfb2JqY2dgLCByZXBsYWNpbmcgc3RydWN0IHdpdGggYGludCBpZGApLCBhbmQgdGhlIGlubGluZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9wcml2YXRlX2lkYC4KKiAgIEEgYCFtZW1jZyB8fGAgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gYG1tL2xpc3RfbHJ1LmNgLgoqICAgU2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgbWVtY2cgcHJpdmF0ZSBJRCBhbGxvY2F0aW9uIGFuZCByZWZjb3VudGluZyBsb2dpYyB0byBwaW4gYG9ial9jZ3JvdXBgIGluc3RlYWQgb2YgYG1lbWNnLSZndDtjc3NgIGhhcyBiZWVuIGRvbmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuCiogICBBIGBudWxsYCBjaGVjayBgZXZpY3Rpb25fbWVtY2cgJmFtcDsmYW1wO2AgaGFzIGJlZW4gYWRkZWQgdG8gYG1tL3dvcmtpbmdzZXQuY2AuCgpBIHF1aWNrIGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgbW9kaWZpY2F0aW9ucyBjb25maXJtIHRoZSBjb2RlIGlzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpXaXRoIHRoYXQgaW4gbWluZCwgSSYjMzk7bSBjb21mb3J0YWJsZSBwcmVwYXJpbmcgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1vcnkgY2dyb3VwIHByaXZhdGUgSUQgdHJhY2tpbmcgbWVjaGFuaXNtIHNvIHRoYXQgdGhlIHByaXZhdGUgSUQgcGlucyB0aGUgY29ycmVzcG9uZGluZyBvYmpfY2dyb3VwIHJhdGhlciB0aGFuIHRoZSBtZW1fY2dyb3VwIENTUyBkaXJlY3RseS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XG4tIEFsbCBtb2RpZmllZCBzdHJ1Y3R1cmVzIChgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgKSBhcmUgemVyby1hbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBga21lbV9jYWNoZV96YWxsb2MoKWAsIGFuZCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyAoYG1lbWNnaWRfcmVmYCwgYGlkX29iamNnYCwgYGlkYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gLyBvbmxpbmUgc3RhdGUuXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBmaWVsZHMgYXJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChyZWZjb3VudF90LCBwZXJjcHVfcmVmLCBSQ1UsIFhBcnJheSkuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCByZWZjb3VudCBkZWJ1Z2dpbmcsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGBtZW1jZ2lkYCwgYG9iamNnYCwgYG1lbWNnYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkIGluIGJyYW5jaGluZyBvciBhc3NpZ25tZW50cy5cbi0gTm8gdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGZpZWxkcyBhcmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIFRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHJlZmNvdW50X3QsIHBlcmNwdV9yZWYsIFJDVSwgWEFycmF5KS5cbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDc6MDEuODA2NDI2Njk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MTkxMzQyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibGlzdF9scnVfd2Fsa19ub2RlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3Rlc3RfcmVjZW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgZmllbGRzIGFyZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocmVmY291bnRfdCwgcGVyY3B1X3JlZiwgUkNVLCBYQXJyYXkpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRCBtYW5hZ2VtZW50LCBjaGFuZ2luZyBvd25lcnNoaXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBmcm9tIG1lbV9jZ3JvdXAgZGlyZWN0bHkgdG8gb2JqX2Nncm91cCAobWVtY2dpZF9yZWYpIHNvIHRoYXQgcHJpdmF0ZSBJRHMgcmVmZXJlbmNlIG9ial9jZ3JvdXAgYW5kIGFsbG93IHByb3BlciBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIGFuZCBzd2FwIGFjY291bnRpbmcuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhbmdlcyB0aGF0IGFmZmVjdCBzd2FwIGNoYXJnaW5nL3VuY2hhcmdpbmcsIGxpc3RfbHJ1IHRyYXZlcnNhbCwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDc6MDEuODA2NDMxMDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc0NTYxMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWY4NjUzNjAwYTIyN2RiNzk5ZDZmMzgxOTIxNmRiYjU5NWVjYWM2M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjQ2OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBmMjI3MzQ4YTNmMjRhLi5lYWZjODE3ZmYyNDRjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtNjYsMTEgKzY2LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUge1xcbiBcXG4gI2RlZmluZSBNRU1fQ0dST1VQX0lEX1NISUZUXFx0MTZcXG4gXFxuLXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQge1xcbi1cXHRpbnQgaWQ7XFxuLVxcdHJlZmNvdW50X3QgcmVmO1xcbi19O1xcbi1cXG4gc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1O1xcbiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHU7XFxuIHN0cnVjdCBtZW1jZ192bXN0YXRzO1xcbkBAIC0xNzMsNiArMTY4LDcgQEAgc3RydWN0IG9ial9jZ3JvdXAge1xcbiBcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0YXRvbWljX3QgbnJfY2hhcmdlZF9ieXRlcztcXG4rXFx0cmVmY291bnRfdCBtZW1jZ2lkX3JlZjtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIHByb3RlY3RlZCBieSBvYmpjZ19sb2NrICovXFxuIFxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuQEAgLTE4OSw4ICsxODUsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XFxuIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xcbiBcXG4tXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XFxuK1xcdC8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovXFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcXG4gXFxuIFxcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cXG4gXFx0c3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7XFx0XFx0LyogQm90aCB2MSBcXHUwMDI2IHYyICovXFxuQEAgLTI1NSw2ICsyNTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XFxuICNlbmRpZlxcbiBcXHRpbnQga21lbWNnX2lkO1xcbiBcXG4rXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuK1xcdGludCBpZDtcXG4rXFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDtcXG4gI2VuZGlmXFxuQEAgLTgxMCw3ICs4MDksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4rXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZDtcXG4gfVxcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxcbi0tLSBhL21tL2xpc3RfbHJ1LmNcXG4rKysgYi9tbS9saXN0X2xydS5jXFxuQEAgLTQyOCw3ICs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4gXFx0XFx0eGFfZm9yX2VhY2goXFx1MDAyNmxydS1cXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XFxuIFxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7XFxuLVxcdFxcdFxcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxuK1xcdFxcdFxcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xcbiBcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMjU2YjY4ZmZjYTcwZS4uODRkY2FiM2FjYjhhMiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMzc3Myw3ICszNzczLDcgQEAgc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXG4gXFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIFxcbi1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXFx1MDAzZWlkLmlkO1xcbitcXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXFx1MDAzZWlkO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbkBAIC00MDMyLDI1ICs0MDMyLDY1IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTtcXG4gXFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuLVxcdGlmIChtZW1jZy1cXHUwMDNlaWQuaWQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHhhX2VyYXNlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cXHUwMDNlaWQuaWQpO1xcbi1cXHRcXHRtZW1jZy1cXHUwMDNlaWQuaWQgPSAwO1xcbitcXHRpZiAobWVtY2ctXFx1MDAzZWlkIFxcdTAwM2UgMCkge1xcbitcXHRcXHR4YV9lcmFzZShcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXFx1MDAzZWlkKTtcXG4rXFx0XFx0bWVtY2ctXFx1MDAzZWlkID0gMDtcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxcbitzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbitcXHRcXHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4tXFx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLnJlZikpIHtcXG4tXFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xcbiBcXG4tXFx0XFx0LyogTWVtY2cgSUQgcGlucyBDU1MgKi9cXG4tXFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuK1xcdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXFx1MDAyNm9iamNnLVxcdTAwM2VtZW1jZ2lkX3JlZikpIHtcXG4rXFx0XFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XFxuK1xcdFxcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XFxuK1xcbitcXHRcXHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xcbitcXHRcXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XFxuIFxcdH1cXG4gfVxcbiBcXG4rLyoqXFxuKyAqIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQgLSBwdXQgbWVtY2dpZCBhbmQgZ2V0IHRoZSBuZWFyZXN0IG9ubGluZSBtZW1jZ1xcbisgKiBAaWQ6IHRoZSBtZW1jZyBwcml2YXRlIGlkIGdvdCBmcm9tIG1lbV9jZ3JvdXBfaWRfZ2V0X29ubGluZVxcbisgKiBAbjogY291bnQgb2YgcmVmZXJlbmNlcyB0byBwdXRcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRvYmpjZyA9IHhhX2xvYWQoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcXG4rXFx0aWYgKHVubGlrZWx5KCFvYmpjZykpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFx0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxcbitcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4rXFxuK1xcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xcbitcXG4rb3V0OlxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3tcXG4rXFx0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLVxcdTAwM2VpZF9vYmpjZywgbWVtY2ctXFx1MDAzZWlkLCAxKTtcXG4rfVxcbitcXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4tXFx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXFx1MDAyNm1lbWNnLVxcdTAwM2VpZC5yZWYpKSB7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0b2JqY2cgPSBtZW1jZy1cXHUwMDNlaWRfb2JqY2c7XFxuK1xcbitcXHR3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcXHUwMDI2b2JqY2ctXFx1MDAzZW1lbWNnaWRfcmVmKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQncyByZWZjb3VudCBtdXN0XFxuIFxcdFxcdCAqIGFsd2F5cyBiZSBcXHUwMDNlPSAxLlxcbkBAIC00MDYwLDcgKzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuK1xcdFxcdG9iamNnID0gbWVtY2ctXFx1MDAzZWlkX29iamNnO1xcbiBcXHR9XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIG1lbWNnO1xcbiB9XFxuIFxcbkBAIC00MDY5LDExICs0MTEyLDI0IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXFxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcXG4gICpcXG4gICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuXFxuKyAqXFxuKyAqIEByZXR1cm46IHRoZSBtZW1jZywgb3IgTlVMTCBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSByZXBhcmVudGVkLlxcbiAgKi9cXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxcbiB7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcXG4tXFx0cmV0dXJuIHhhX2xvYWQoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcXG4rXFxuK1xcdG9iamNnID0geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuK1xcdGlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBtZW1jZztcXG4gfVxcbiBcXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKVxcbkBAIC00MTc0LDcgKzQyMzAsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0aWYgKCFtZW1jZylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbi1cXHRlcnJvciA9IHhhX2FsbG9jKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLmlkLCBOVUxMLFxcbitcXHRlcnJvciA9IHhhX2FsbG9jKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLCBOVUxMLFxcbiBcXHRcXHRcXHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuQEAgLTQzMTksOSArNDM3NSwxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXHRcXHRcXHRcXHQgICBGTFVTSF9USU1FKTtcXG4gXFx0bHJ1X2dlbl9vbmxpbmVfbWVtY2cobWVtY2cpO1xcbiBcXG4tXFx0LyogT25saW5lIHN0YXRlIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgQ1NTICovXFxuLVxcdHJlZmNvdW50X3NldChcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLnJlZiwgMSk7XFxuLVxcdGNzc19nZXQoY3NzKTtcXG4rXFx0LyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqL1xcbitcXHRtZW1jZy1cXHUwMDNlaWRfb2JqY2cgPSBvYmpjZztcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlaWRfb2JqY2ctXFx1MDAzZW1lbWNnaWRfcmVmLCAxKTtcXG4rXFx0b2JqX2Nncm91cF9nZXQobWVtY2ctXFx1MDAzZWlkX29iamNnKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UncmUgZnVsbHkgb25saW5lLlxcbkBAIC00MzMzLDcgKzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXHQgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZVxcbiBcXHQgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuXFxuIFxcdCAqL1xcbi1cXHR4YV9zdG9yZShcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXFx1MDAzZWlkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7XFxuK1xcdHhhX3N0b3JlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cXHUwMDNlaWQsIG1lbWNnLVxcdTAwM2VpZF9vYmpjZywgR0ZQX0tFUk5FTCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gZnJlZV9vYmpjZzpcXG5AQCAtNDM4NSw3ICs0NDQyLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXG4gXFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFxuLVxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xcbitcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChtZW1jZyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuQEAgLTU3NTAsNiArNTgwNyw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXHR1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkO1xcbiBcXG4gXFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTU3NjcsMjIgKzU4MjUsMjQgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG4tXFx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxcbitcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gXFxuIFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbiBcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG4gXFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xcbi1cXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcXG4gXFxuK1xcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG4rXFx0bWVtY2dpZCA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcXG4tXFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxcbi1cXHRcXHRcXHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xcbitcXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVxcdTAwM2Vzd2FwKSwgbnJfcGFnZXMsIG1lbWNnaWQpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01Nzk4LDE4ICs1ODU4LDIzIEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcXG4rXFx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KGlkLCBucl9wYWdlcyk7XFxuIFxcdGlmIChtZW1jZykge1xcbi1cXHRcXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIG1lbWNnIHdhcyBvZmZsaW5lIGFuZCByZXBhcmVudGVkIHRvIHJvb3QsIHN3YXAgbmVlZHNcXG4rXFx0XFx0ICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fCBpZCAhPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKSB7XFxuIFxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuIFxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTtcXG4tXFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiB9XFxuIFxcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCA3YWMyYjg4YzgwYWU1Li40ZTliN2IxNjNjMDFlIDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC00NzAsNyArNDcwLDcgQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbiBcXHQgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLlxcbiBcXHQgKi9cXG4gXFx0ZXZpY3Rpb25fbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ2lkKTtcXG4tXFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXFxuK1xcdGlmIChldmljdGlvbl9tZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxcbiBcXHRcXHRldmljdGlvbl9tZW1jZyA9IE5VTEw7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDc6MDMuNDgyMDUxMDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTAwMTU4NjIwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiLFxuICAgIFwibWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtX2Nncm91cCBwcml2YXRlIElEIG1hbmFnZW1lbnQsIGNoYW5naW5nIG93bmVyc2hpcCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGZyb20gbWVtX2Nncm91cCBkaXJlY3RseSB0byBvYmpfY2dyb3VwIChtZW1jZ2lkX3JlZikgc28gdGhhdCBwcml2YXRlIElEcyByZWZlcmVuY2Ugb2JqX2Nncm91cCBhbmQgYWxsb3cgcHJvcGVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHJlcGFyZW50aW5nIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gYW5kIHN3YXAgYWNjb3VudGluZy4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHN3YXAgY2hhcmdpbmcvdW5jaGFyZ2luZywgbGlzdF9scnUgdHJhdmVyc2FsLCBhbmQgd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Zjg2NTM2MDBhMjI3ZGI3OTlkNmYzODE5MjE2ZGJiNTk1ZWNhYzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAxOTo0Njo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGYyMjczNDhhM2YyNGEuLmVhZmM4MTdmZjI0NGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC02NiwxMSArNjYsNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7XG4gXG4gI2RlZmluZSBNRU1fQ0dST1VQX0lEX1NISUZUXHQxNlxuIFxuLXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQge1xuLVx0aW50IGlkO1xuLVx0cmVmY291bnRfdCByZWY7XG4tfTtcbi1cbiBzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHU7XG4gc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1O1xuIHN0cnVjdCBtZW1jZ192bXN0YXRzO1xuQEAgLTE3Myw2ICsxNjgsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRhdG9taWNfdCBucl9jaGFyZ2VkX2J5dGVzO1xuK1x0cmVmY291bnRfdCBtZW1jZ2lkX3JlZjtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiBwcm90ZWN0ZWQgYnkgb2JqY2dfbG9jayAqL1xuIFx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuQEAgLTE4OSw4ICsxODUsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gc3RydWN0IG1lbV9jZ3JvdXAge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xuIFxuLVx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkO1xuK1x0LyogVGhlIG9iamNnIGhvbGRpbmcgcHJpdmF0ZSBtZW1jZyBJRC4gKi9cbitcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcbiBcbiBcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgbWVtb3J5O1x0XHQvKiBCb3RoIHYxIFx1MDAyNiB2MiAqL1xuQEAgLTI1NSw2ICsyNTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gI2VuZGlmXG4gXHRpbnQga21lbWNnX2lkO1xuIFxuK1x0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4rXHRpbnQgaWQ7XG4rXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDtcbiAjZW5kaWZcbkBAIC04MTAsNyArODA5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4rKysgYi9tbS9saXN0X2xydS5jXG5AQCAtNDI4LDcgKzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHR4YV9mb3JfZWFjaChcdTAwMjZscnUtXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XG4gXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xuLVx0XHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4rXHRcdFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4gXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDI1NmI2OGZmY2E3MGUuLjg0ZGNhYjNhY2I4YTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM3NzMsNyArMzc3Myw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiBcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZC5pZDtcbitcdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTQwMzIsMjUgKzQwMzIsNjUgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbitcdGlmIChtZW1jZy1cdTAwM2VpZCBcdTAwM2UgMCkge1xuK1x0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCk7XG4rXHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbitzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuK1x0XHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XG4gXG4tXHRcdC8qIE1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbitcdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2b2JqY2ctXHUwMDNlbWVtY2dpZF9yZWYpKSB7XG4rXHRcdG9iamNnX2ZyZWUgPSB4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXHRcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XG4rXG4rXHRcdC8qIE1lbWNnIElEIHBpbnMgdGhlIG9iamNnICovXG4rXHRcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiBcdH1cbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dCAtIHB1dCBtZW1jZ2lkIGFuZCBnZXQgdGhlIG5lYXJlc3Qgb25saW5lIG1lbWNnXG4rICogQGlkOiB0aGUgbWVtY2cgcHJpdmF0ZSBpZCBnb3QgZnJvbSBtZW1fY2dyb3VwX2lkX2dldF9vbmxpbmVcbisgKiBAbjogY291bnQgb2YgcmVmZXJlbmNlcyB0byBwdXRcbisgKi9cbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKHVubGlrZWx5KCFvYmpjZykpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbitcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbitcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4rXG4rXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTtcbitcbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiBtZW1jZztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy1cdTAwM2VpZF9vYmpjZywgbWVtY2ctXHUwMDNlaWQsIDEpO1xuK31cbitcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiB7XG4tXHR3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRvYmpjZyA9IG1lbWNnLVx1MDAzZWlkX29iamNnO1xuK1xuK1x0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2b2JqY2ctXHUwMDNlbWVtY2dpZF9yZWYpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCdzIHJlZmNvdW50IG11c3RcbiBcdFx0ICogYWx3YXlzIGJlIFx1MDAzZT0gMS5cbkBAIC00MDYwLDcgKzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbitcdFx0b2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbiBcdH1cbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbkBAIC00MDY5LDExICs0MTEyLDI0IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXG4gICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cFxuICAqXG4gICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuXG4rICpcbisgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0V0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7XG4tXHRyZXR1cm4geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuK1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXG5AQCAtNDE3NCw3ICs0MjMwLDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRpZiAoIW1lbWNnKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQuaWQsIE5VTEwsXG4rXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuIFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNDMxOSw5ICs0Mzc1LDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRcdFx0XHQgICBGTFVTSF9USU1FKTtcbiBcdGxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTtcbiBcbi1cdC8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZiwgMSk7XG4tXHRjc3NfZ2V0KGNzcyk7XG4rXHQvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovXG4rXHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IG9iamNnO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZW1lbWNnaWRfcmVmLCAxKTtcbitcdG9ial9jZ3JvdXBfZ2V0KG1lbWNnLVx1MDAzZWlkX29iamNnKTtcbiBcbiBcdC8qXG4gXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJ3JlIGZ1bGx5IG9ubGluZS5cbkBAIC00MzMzLDcgKzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiBcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cbiBcdCAqL1xuLVx0eGFfc3RvcmUoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcbitcdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLCBtZW1jZy1cdTAwM2VpZF9vYmpjZywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBmcmVlX29iamNnOlxuQEAgLTQzODUsNyArNDQ0Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG4gXG4tXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcbitcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKG1lbWNnKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbkBAIC01NzUwLDYgKzU4MDcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcdHVuc2lnbmVkIHNob3J0IG1lbWNnaWQ7XG4gXG4gXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01NzY3LDIyICs1ODI1LDI0IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpO1xuLVx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4rXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuIFxuIFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcywgXHUwMDI2Y291bnRlcikpIHtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbi1cdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbiBcbitcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbitcdG1lbWNnaWQgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuLVx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cdTAwM2Vzd2FwKSwgbnJfcGFnZXMsXG4tXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcbitcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLCBtZW1jZ2lkKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTc5OCwxOCArNTg1OCwyMyBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbitcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChpZCwgbnJfcGFnZXMpO1xuIFx0aWYgKG1lbWNnKSB7XG4tXHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgbWVtY2cgd2FzIG9mZmxpbmUgYW5kIHJlcGFyZW50ZWQgdG8gcm9vdCwgc3dhcCBuZWVkc1xuK1x0XHQgKiB1bmNoYXJnaW5nIGFzIHdlbGwuIFdlIGNoZWNrIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBtZW1jZ2lkLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIHx8IGlkICE9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpIHtcbiBcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdFx0fVxuIFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggN2FjMmI4OGM4MGFlNS4uNGU5YjdiMTYzYzAxZSAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNDcwLDcgKzQ3MCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbitcdGlmIChldmljdGlvbl9tZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiBcdFx0ZXZpY3Rpb25fbWVtY2cgPSBOVUxMO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0NzowMy40ODIwNTM2MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTk1MDg4MzIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQsIGlmIHNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uLiBGaXJzdCwgbGV0J3MgbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBtYWxpY2lvdXMgaGVyZS4gVGhpcyBpcyBhIHN0YW5kYXJkIFFBL2RlZmVuc2l2ZSBhbmFseXNpcyBvZiBhIGtlcm5lbCBwYXRjaCDigJMgaXQncyBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSBrZXJuZWwncyByb2J1c3RuZXNzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgbm90IGFza2luZyBtZSB0byBkbyBhbnl0aGluZyBleHBsb2l0YXRpdmUuIEdvb2QuXG5cbk5vdywgdGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIHNvbWUgaW50ZXJlc3RpbmcgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBtbS9saXN0X2xydS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCByaWdodCB0aGVyZSBnZXRzIG15IGF0dGVudGlvbi4gVGhlc2UgZmlsZXMgYXJlIGFsbCBpbiB0aGUgaGVhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wsIHNwZWNpZmljYWxseSBhcm91bmQgY2dyb3Vwcy5cblxuVGhlIGNvbW1pdCByZWZhY3RvcnMgaG93IG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRHMgYXJlIGhhbmRsZWQuIFRoZSBvbGQgd2F5IGludm9sdmVkIGEgYHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRgIHdpdGggYSByZWZlcmVuY2UgY291bnQgZGlyZWN0bHkgd2l0aGluIGBtZW1fY2dyb3VwYC4gVGhlIG5ldyB3YXkgbW92ZXMgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBgb2JqX2Nncm91cGAgYW5kIHVzZXMgYW4gYHhhcnJheWAgdG8gbWFuYWdlIGBvYmpfY2dyb3VwYCBwb2ludGVycyBmb3IgcHJpdmF0ZSBJRHMuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyB0byBjcml0aWNhbCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYW5kIGFsc28gc29tZSBzd2FwIGFuZCBscnUgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC5cblxuVGhpcyBpcyBhICoqbWFqb3IqKiBhcmVhLCB3aGljaCBtZWFucyB0aGlzICppcyogYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHN1YnN5c3RlbSBjaGFuZ2UuIEl0IHRvdWNoZXMgbWVtb3J5IGNvbnRyb2wsIHN3YXAgYWNjb3VudGluZywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdGluZyBsb2dpYy4gVGhpcyBraW5kIG9mIHJlZmFjdG9yaW5nIGlzIHJpcGUgZm9yIGludHJvZHVjaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLCBlc3BlY2lhbGx5IHdpdGggdGhlc2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBjaGFuZ2VzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjaGFuZ2VzIHRvIHN3YXAgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgYmVjYXVzZSB0aG9zZSBhcmVhcyBjYW4gYmUgdHJpY2t5LiBSZXBhcmVudGluZyBhbmQgbGlzdF9scnUgb3BlcmF0aW9ucyBhcmUgb3RoZXIgZ29vZCB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGZpcmUgdXAgZ3JlcCBhbmQgb3VyIGNvZGUgc2VhcmNoIHRvb2xzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgcmVsZXZhbnQga2VybmVsIHN5bWJvbHMgdG8gbmFycm93IGRvd24gb3VyIGZ1enppbmcgdGFyZ2V0cyBhbmQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODowNS40MzI5NDA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg5NDcxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTQ5MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xMjU9X19icGZfa2Z1bmMgdW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9tZW1vcnlfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTI3LXtcXG5tbS9icGZfbWVtY29udHJvbC5jOjEyODpcXHRpZiAodW5saWtlbHkoZXZlbnQgXFx1MDAzZT0gTUVNQ0dfTlJfTUVNT1JZX0VWRU5UUykpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xMjktXFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKS0xO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExMjg9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEzNS1cXHRcXHRicmVhaztcXG5tbS9kYW1vbi9jb3JlLmM6MTEzNjpcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MTEzNzpcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmMtMTEzOC1cXHRcXHRkc3QtXFx1MDAzZW5pZCA9IHNyYy1cXHUwMDNlbmlkO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMzc9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMjQxOlxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jLTEyNDItXFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTY3Nj1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjgyLVxcdHN3aXRjaCAoZHN0LVxcdTAwM2V0eXBlKSB7XFxubW0vZGFtb24vY29yZS5jOjE2ODM6XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9jb3JlLmMtMTY4NC1cXHRcXHRkc3QtXFx1MDAzZW1lbWNnX2lkID0gc3JjLVxcdTAwM2VtZW1jZ19pZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjkxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcxMy1cXHRcXHRzd2l0Y2ggKHNyY19maWx0ZXItXFx1MDAzZXR5cGUpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcxNDpcXHRcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbm1tL2RhbW9uL2NvcmUuYy0xNzE1LVxcdFxcdFxcdG5ld19maWx0ZXItXFx1MDAzZW1lbWNnX2lkID0gc3JjX2ZpbHRlci1cXHUwMDNlbWVtY2dfaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgxNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MjQtXFx0aWYgKGludmFsaWRfbWVtX25vZGUoZ29hbC1cXHUwMDNlbmlkKSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyODI1OlxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxcbm1tL2RhbW9uL2NvcmUuYy0yODI2LVxcdFxcdFxcdHJldHVybiAwO1xcbm1tL2RhbW9uL2NvcmUuYzoyODI3OlxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjgyOC1cXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjgzMi1cXHRpZiAoIW1lbWNnKSB7XFxubW0vZGFtb24vY29yZS5jOjI4MzM6XFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxubW0vZGFtb24vY29yZS5jLTI4MzQtXFx0XFx0XFx0cmV0dXJuIDA7XFxubW0vZGFtb24vY29yZS5jOjI4MzU6XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yODM2LVxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODQ4LVxcdHNpX21lbWluZm9fbm9kZShcXHUwMDI2aSwgZ29hbC1cXHUwMDNlbmlkKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mjg0OTpcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG5tbS9kYW1vbi9jb3JlLmMtMjg1MC1cXHRcXHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xcbm1tL2RhbW9uL2NvcmUuYzoyODUxOlxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjg1Mi1cXHRcXHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gdXNlZF9wYWdlcztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDE3PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDM0LVxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL2NvcmUuYzozMDM1OlxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDM2OlxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxcbm1tL2RhbW9uL2NvcmUuYy0zMDM3LVxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2MT1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjczLVxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNzQ6XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjc1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyMS1cXHRcXHRicmVhaztcXG5tbS9kYW1vbi9wYWRkci5jOjEyMjpcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbm1tL2RhbW9uL3BhZGRyLmMtMTIzLVxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwNj1zdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwOC17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXFx0Y2dyb3VwX3BhdGgobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIG1lbWNnX3BhdGhfYnVmLCBQQVRIX01BWCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTItXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTEzOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTQtXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU1OD1kYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU2Ny1cXHR7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU2ODpcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NjktXFx0XFx0Lm5hbWUgPSBcXFwibWVtY2dcXFwiLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzU9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNTItXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjUzOlxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNTQtXFx0XFx0Lm5hbWUgPSBcXFwibm9kZV9tZW1jZ191c2VkX2JwXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjU2LVxcdHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI1NzpcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjU4LVxcdFxcdC5uYW1lID0gXFxcIm5vZGVfbWVtY2dfZnJlZV9icFxcXCIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODIwOlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfTUVNQ0cpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgyMS1cXHRcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3Ni1cXHRcXHRcXHRicmVhaztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3NzpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3ODpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cXHRcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NzU9ZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNzgwLVxcdHtcXG5tbS9kYW1vbi9zeXNmcy5jOjc4MTpcXHRcXHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNzgyLVxcdFxcdC5uYW1lID0gXFxcIm1lbWNnXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTkzNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5NDktXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3lzZnMuYzoxOTUwOlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0cpIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5NTEtXFx0XFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc3Ni1cXHRcXHRicmVhaztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzc3OlxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3Nzg6XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc3OS1cXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03ODc9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE2LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTc6XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE4LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA0NTYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI0LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MjU6XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI2LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA4OTAsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA2Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDczLVxcdHN3aXRjaCAoc3JjLVxcdTAwM2V0eXBlKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwNzQ6XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTA3NS1cXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtZW1jZ19pZCwgc3JjLVxcdTAwM2VtZW1jZ19pZCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA5NT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMTAtXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfZmlsdGVyKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTExMTpcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTEyLVxcdFxcdFxcdC5tYXRjaGluZyA9IGZhbHNlLFxcbi0tXFxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9kZWJ1Zy5jLTk2LVxcbm1tL2RlYnVnLmM6OTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtOTgtXFx0aWYgKGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhKVxcbi0tXFxubW0vZGVidWcuYz0xNzE9dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vZGVidWcuYy0xODQtI2VuZGlmXFxubW0vZGVidWcuYzoxODU6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMTg2LVxcdFxcdFxcXCJvd25lciAlcHggXFxcIlxcbi0tXFxubW0vZGVidWcuYy0yMTMtI2VuZGlmXFxubW0vZGVidWcuYzoyMTQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMjE1LVxcdFxcdG1tLVxcdTAwM2Vvd25lcixcXG4tLVxcbm1tL2ZvbGlvLmM9MTExMD12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTExMjEtXFxubW0vZm9saW8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9mb2xpby5jLTExMjMtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ni1cXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA2NzpcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY4LVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwidGhwLWRlZmVycmVkX3NwbGl0XFxcIik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2ODk9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzkxLVxcdFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzozNzkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9odWdlX21lbW9yeS5jLTM3OTMtXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gZm9saW8tXFx1MDAzZW1lbWNnX2RhdGE7XFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz00NT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl9mbGFncyhzdHJ1Y3QgcGFnZSAqcClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xcbm1tL2h3cG9pc29uLWluamVjdC5jOjY3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBwZm5faW5qZWN0X2luaXQodm9pZClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYzoxOTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXFxcImNvcnJ1cHQtZmlsdGVyLW1lbWNnXFxcIiwgMDYwMCwgaHdwb2lzb25fZGlyLFxcbi0tXFxubW0vaW50ZXJuYWwuaD02NT11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vaW50ZXJuYWwuaC02Ny1cXG5tbS9pbnRlcm5hbC5oOjY4OiNkZWZpbmUgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCAoMSBcXHUwMDNjXFx1MDAzYyAxKVxcbm1tL2ludGVybmFsLmg6Njk6I2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcXHUwMDNjXFx1MDAzYyAyKVxcbm1tL2ludGVybmFsLmgtNzAtI2RlZmluZSBNSU5fU1dBUFBJTkVTUyAwXFxuLS1cXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxcbi0tXFxubW0vbGlzdF9scnUuYy0zOS1cXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jLTQxLXN0YXRpYyBMSVNUX0hFQUQobWVtY2dfbGlzdF9scnVzKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1MC19XFxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtMTUyLVxcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyMS1cXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MjMtXFx0aWYgKCpucl90b193YWxrIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XFxuLS1cXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQ2MS1cXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjU5PXN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2MS19XFxubW0vbGlzdF9scnUuYzo2NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtNjYzLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2Ny1cXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy02NjktXFx0aWYgKHNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYz02OTI9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy03MDMtXFxubW0vbGlzdF9scnUuYzo3MDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNzA1LVxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjk5LVxcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XFxubW0vbWVtY29udHJvbC12MS5jOjMwMDpcXHRtb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XFxubW0vbWVtY29udHJvbC12MS5jLTMwMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMTIzPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMTMwLSAqIGNncm91cCB2MSB1c2Vyc3BhY2Ugdm1wcmVzc3VyZSBpbnRlcmZhY2UgKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCAvXFxubW0vbWVtY29udHJvbC12MS5jOjExMzE6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE0MjI9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE0NjctXFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNDY4OlxcdFxcdFxcdFxcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XFxubW0vbWVtY29udHJvbC12MS5jLTE0NjktXFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE0ODU9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTAzLVxcdFxcdGlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCxcXG5tbS9tZW1jb250cm9sLXYxLmM6MTUwNDpcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTA1LVxcdFxcdFxcdG5yX3JldHJpZXMtLTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODI2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzOC0jaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmM6MTgzOTpcXHRNRU1DR19TV0FQLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVxcdE5SX1NXQVBDQUNIRSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xOTg2PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9vb21fY29udHJvbF9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTk5Mi1cXHRzZXFfcHJpbnRmKHNmLCBcXFwib29tX2tpbGwgJWx1XFxcXG5cXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTkzOlxcdFxcdCAgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX09PTV9LSUxMXSkpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTk0LVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC12MS5oLTMwLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTg2PWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XFxubW0vbWVtY29udHJvbC12MS5oLTg3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo4ODojZWxzZVxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMjA6I2VuZGlmXFx0LyogQ09ORklHX01FTUNHX1YxICovXFxubW0vbWVtY29udHJvbC12MS5oLTEyMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNDE9c3RhdGljIHZvaWQgbWVtY2dfdW5jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtMTQyLXtcXG5tbS9tZW1jb250cm9sLmM6MTQzOlxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfS01FTSwgLW5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMTQ0LVxcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMzQtXFxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTIzNi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00Mzc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19zdGF0X2l0ZW1zW10gPSB7XFxubW0vbWVtY29udHJvbC5jOjQzODpcXHRNRU1DR19TV0FQLFxcbm1tL21lbWNvbnRyb2wuYzo0Mzk6XFx0TUVNQ0dfU09DSyxcXG5tbS9tZW1jb250cm9sLmM6NDQwOlxcdE1FTUNHX1BFUkNQVV9CLFxcbm1tL21lbWNvbnRyb2wuYzo0NDE6XFx0TUVNQ0dfS01FTSxcXG5tbS9tZW1jb250cm9sLmM6NDQyOlxcdE1FTUNHX1pTV0FQX0IsXFxubW0vbWVtY29udHJvbC5jOjQ0MzpcXHRNRU1DR19aU1dBUFBFRCxcXG5tbS9tZW1jb250cm9sLmM6NDQ0OlxcdE1FTUNHX1pTV0FQX0lOQ09NUCxcXG5tbS9tZW1jb250cm9sLmMtNDQ1LX07XFxubW0vbWVtY29udHJvbC5jLTQ0Ni1cXG5tbS9tZW1jb250cm9sLmM6NDQ3OiNkZWZpbmUgTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TIEFSUkFZX1NJWkUobWVtY2dfbm9kZV9zdGF0X2l0ZW1zKVxcbm1tL21lbWNvbnRyb2wuYzo0NDg6I2RlZmluZSBNRU1DR19WTVNUQVRfU0laRSAoTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TICsgXFxcXFxcbm1tL21lbWNvbnRyb2wuYy00NDktXFx0XFx0XFx0ICAgQVJSQVlfU0laRShtZW1jZ19zdGF0X2l0ZW1zKSlcXG5tbS9tZW1jb250cm9sLmMtNDUwLSNkZWZpbmUgQkFEX1NUQVRfSURYKGluZGV4KSAoKHUzMikoaW5kZXgpIFxcdTAwM2U9IFU4X01BWClcXG5tbS9tZW1jb250cm9sLmM6NDUxOnN0YXRpYyB1OCBtZW1fY2dyb3VwX3N0YXRzX2luZGV4W01FTUNHX05SX1NUQVRdIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtY29udHJvbC5jLTQ1Mi1cXG5tbS9tZW1jb250cm9sLmM9NDUzPXN0YXRpYyB2b2lkIGluaXRfbWVtY2dfc3RhdHModm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTYtXFxubW0vbWVtY29udHJvbC5jOjQ1NzpcXHRCVUlMRF9CVUdfT04oTUVNQ0dfTlJfU1RBVCBcXHUwMDNlPSBVOF9NQVgpO1xcbm1tL21lbWNvbnRyb2wuYy00NTgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYwLVxcbm1tL21lbWNvbnRyb2wuYzo0NjE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX05PREVfU1RBVF9JVEVNUzsgKytpLCArK2opXFxubW0vbWVtY29udHJvbC5jLTQ2Mi1cXHRcXHRtZW1fY2dyb3VwX3N0YXRzX2luZGV4W21lbWNnX25vZGVfc3RhdF9pdGVtc1tpXV0gPSBqO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ3Mz1zdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSB7XFxubW0vbWVtY29udHJvbC5jLTQ3NC1cXHQvKiBMb2NhbCAoQ1BVIGFuZCBjZ3JvdXApIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ3NTpcXHRsb25nIHN0YXRlW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ3Ni1cXG5tbS9tZW1jb250cm9sLmMtNDc3LVxcdC8qIERlbHRhIGNhbGN1bGF0aW9uIGZvciBsb2NrbGVzcyB1cHdhcmQgcHJvcGFnYXRpb24gKi9cXG5tbS9tZW1jb250cm9sLmM6NDc4OlxcdGxvbmcgc3RhdGVfcHJldltOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xcbm1tL21lbWNvbnRyb2wuYy00NzktfTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XFxubW0vbWVtY29udHJvbC5jLTQ4Mi1cXHQvKiBBZ2dyZWdhdGVkIChDUFUgYW5kIHN1YnRyZWUpIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ4MzpcXHRsb25nIHN0YXRlW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ4NC1cXG5tbS9tZW1jb250cm9sLmMtNDg1LVxcdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBzdGF0ZSAqL1xcbm1tL21lbWNvbnRyb2wuYzo0ODY6XFx0bG9uZyBzdGF0ZV9sb2NhbFtOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xcbm1tL21lbWNvbnRyb2wuYy00ODctXFxubW0vbWVtY29udHJvbC5jLTQ4OC1cXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xcbm1tL21lbWNvbnRyb2wuYzo0ODk6XFx0bG9uZyBzdGF0ZV9wZW5kaW5nW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ5MC19O1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzItXFxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjAwLVxcdFBHUEdJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MzItXFxubW0vbWVtY29udHJvbC5jOjYzMzojZGVmaW5lIE5SX01FTUNHX0VWRU5UUyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpXFxubW0vbWVtY29udHJvbC5jLTYzNC1zdGF0aWMgdTggbWVtX2Nncm91cF9ldmVudHNfaW5kZXhbTlJfVk1fRVZFTlRfSVRFTVNdIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjM2PXN0YXRpYyB2b2lkIGluaXRfbWVtY2dfZXZlbnRzKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjQ0LVxcbm1tL21lbWNvbnRyb2wuYzo2NDU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgKytpKVxcbm1tL21lbWNvbnRyb2wuYy02NDYtXFx0XFx0bWVtX2Nncm91cF9ldmVudHNfaW5kZXhbbWVtY2dfdm1fZXZlbnRfc3RhdFtpXV0gPSBpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTY1ND1zdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY2NC1cXHQvKiBMb2NhbCAoQ1BVIGFuZCBjZ3JvdXApIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6NjY1OlxcdGxvbmdcXHRcXHRcXHRzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY2NjpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY2Ny1cXG5tbS9tZW1jb250cm9sLmMtNjY4LVxcdC8qIERlbHRhIGNhbGN1bGF0aW9uIGZvciBsb2NrbGVzcyB1cHdhcmQgcHJvcGFnYXRpb24gKi9cXG5tbS9tZW1jb250cm9sLmM6NjY5OlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9wcmV2W01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5tbS9tZW1jb250cm9sLmM6NjcwOlxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNfcHJldltOUl9NRU1DR19FVkVOVFNdO1xcbm1tL21lbWNvbnRyb2wuYy02NzEtfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG5tbS9tZW1jb250cm9sLmMtNjc0LVxcdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzo2NzU6XFx0bG9uZ1xcdFxcdFxcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5tbS9tZW1jb250cm9sLmM6Njc2OlxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNbTlJfTUVNQ0dfRVZFTlRTXTtcXG5tbS9tZW1jb250cm9sLmMtNjc3LVxcbm1tL21lbWNvbnRyb2wuYy02NzgtXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6Njc5OlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4MDpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY4MS1cXG5tbS9tZW1jb250cm9sLmMtNjgyLVxcdC8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXFxubW0vbWVtY29udHJvbC5jOjY4MzpcXHRsb25nXFx0XFx0XFx0c3RhdGVfcGVuZGluZ1tNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4NDpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX3BlbmRpbmdbTlJfTUVNQ0dfRVZFTlRTXTtcXG5tbS9tZW1jb250cm9sLmMtNjg1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwMC0gKiAyKSBGbHVzaCB0aGUgc3RhdHMgc3luY2hyb25vdXNseSBvbiByZWFkZXIgc2lkZSBvbmx5IHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhblxcbm1tL21lbWNvbnRyb2wuYzo3MDE6ICogICAgKE1FTUNHX0NIQVJHRV9CQVRDSCAqIG5yX2NwdXMpIHVwZGF0ZSBldmVudHMuIFRob3VnaCB0aGlzIG9wdGltaXphdGlvblxcbm1tL21lbWNvbnRyb2wuYzo3MDI6ICogICAgd2lsbCBsZXQgc3RhdHMgYmUgb3V0IG9mIHN5bmMgYnkgYXRtb3N0IChNRU1DR19DSEFSR0VfQkFUQ0ggKiBucl9jcHVzKSBidXRcXG5tbS9tZW1jb250cm9sLmMtNzAzLSAqICAgIG9ubHkgZm9yIDIgc2Vjb25kcyBkdWUgdG8gKDEpLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTcxMT1zdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcxMy1cXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcykgXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wuYzo3MTQ6XFx0XFx0TUVNQ0dfQ0hBUkdFX0JBVENIICogbnVtX29ubGluZV9jcHVzKCk7XFxubW0vbWVtY29udHJvbC5jLTcxNS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NzE3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19yc3RhdF91cGRhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgbG9uZyB2YWwsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBhYnModmFsKSk7XFxubW0vbWVtY29udHJvbC5jOjc0MTpcXHRcXHRpZiAoc3RhdHNfdXBkYXRlcyBcXHUwMDNjIE1FTUNHX0NIQVJHRV9CQVRDSClcXG5tbS9tZW1jb250cm9sLmMtNzQyLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTgxOD1ib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KVxcbm1tL21lbWNvbnRyb2wuYy04MTkte1xcbm1tL21lbWNvbnRyb2wuYzo4MjA6XFx0aWYgKCh1MzIpaWR4IFxcdTAwM2U9IE1FTUNHX05SX1NUQVQpXFxubW0vbWVtY29udHJvbC5jLTgyMS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NDctXFxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjgtXFxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTExLVxcbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU3Ny1cXHR7IFxcXCJmaWxlXFxcIixcXHRcXHRcXHROUl9GSUxFX1BBR0VTXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU3ODpcXHR7IFxcXCJrZXJuZWxcXFwiLFxcdFxcdFxcdE1FTUNHX0tNRU1cXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYy0xNTc5LVxcdHsgXFxcImtlcm5lbF9zdGFja1xcXCIsXFx0XFx0TlJfS0VSTkVMX1NUQUNLX0tCXFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTgxLVxcdHsgXFxcInNlY19wYWdldGFibGVzXFxcIixcXHRcXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFXFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU4MjpcXHR7IFxcXCJwZXJjcHVcXFwiLFxcdFxcdFxcdE1FTUNHX1BFUkNQVV9CXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU4MzpcXHR7IFxcXCJzb2NrXFxcIixcXHRcXHRcXHRNRU1DR19TT0NLXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmMtMTU4NC1cXHR7IFxcXCJ2bWFsbG9jXFxcIixcXHRcXHRcXHROUl9WTUFMTE9DXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTg2LSNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmM6MTU4NzpcXHR7IFxcXCJ6c3dhcFxcXCIsXFx0XFx0XFx0TUVNQ0dfWlNXQVBfQlxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODg6XFx0eyBcXFwienN3YXBwZWRcXFwiLFxcdFxcdFxcdE1FTUNHX1pTV0FQUEVEXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU4OTpcXHR7IFxcXCJ6c3dhcF9pbmNvbXBcXFwiLFxcdFxcdE1FTUNHX1pTV0FQX0lOQ09NUFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jLTE1OTAtI2VuZGlmXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTY0MT1zdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfdW5pdChpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjQzLVxcdHN3aXRjaCAoaXRlbSkge1xcbm1tL21lbWNvbnRyb2wuYzoxNjQ0OlxcdGNhc2UgTUVNQ0dfUEVSQ1BVX0I6XFxubW0vbWVtY29udHJvbC5jOjE2NDU6XFx0Y2FzZSBNRU1DR19aU1dBUF9COlxcbm1tL21lbWNvbnRyb2wuYy0xNjQ2LVxcdGNhc2UgTlJfU0xBQl9SRUNMQUlNQUJMRV9COlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2OTY9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MDEtXFxubW0vbWVtY29udHJvbC5jOjE3MDI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzAzLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzIyPXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc2OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSsrKSB7XFxubW0vbWVtY29udHJvbC5jOjE3Njk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzcwLVxcdFxcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MjA9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODI5LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYzoxODMwOlxcdFxcdG1lbW9yeV9mYWlsY250ID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfTUFYXSk7XFxubW0vbWVtY29udHJvbC5jLTE4MzEtXFx0ZWxzZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4NDAtXFx0XFx0XFx0SygodTY0KVJFQURfT05DRShtZW1jZy1cXHUwMDNlc3dhcC5tYXgpKSxcXG5tbS9tZW1jb250cm9sLmM6MTg0MTpcXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTg0MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4NDMtXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTg4Mz12b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODg1LXtcXG5tbS9tZW1jb250cm9sLmM6MTg4NjpcXHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcXG5tbS9tZW1jb250cm9sLmM6MTg4NzpcXHRcXHRcXHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcXG5tbS9tZW1jb250cm9sLmMtMTg4OC1cXG5tbS9tZW1jb250cm9sLmM6MTg4OTpcXHQvKiBGb3Igbm93IG9ubHkgTUVNQ0dfTUFYIGNhbiBoYXBwZW4gd2l0aCAhYWxsb3dfc3Bpbm5pbmcgY29udGV4dC4gKi9cXG5tbS9tZW1jb250cm9sLmM6MTg5MDpcXHRWTV9XQVJOX09OX09OQ0UoIWFsbG93X3NwaW5uaW5nIFxcdTAwMjZcXHUwMDI2IGV2ZW50ICE9IE1FTUNHX01BWCk7XFxubW0vbWVtY29udHJvbC5jLTE4OTEtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjA1LjgwMTg5MjA1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTIwNjcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX01FTUNHYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIGZvciB0aG9zZSBkZWZpbml0aW9ucyBpcyBwcm9iYWJseSB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGVpdGhlciBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgd2hpY2ggb2Z0ZW4gY29udGFpbnMgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gb3B0aW9ucywgb3IgcGVyaGFwcyBgbW0vS2NvbmZpZ2AsIHNpbmNlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGEgY29yZSBhc3BlY3QuIFNvLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIHR3byBmaWxlcyDigJMgYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCDigJMgdG8gdW5jb3ZlciB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgY2FuIGV2ZW4gYmUgZW5hYmxlZCBpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBpdCB0byB3b3JrIGNvcnJlY3RseSwgb3Igd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIG5lZWRlZCwgYW5kIGFsc28gd2hlcmUgaXQgaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODowOC4xMTM5NjIzMzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0Njk0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjA4LjE5NjQzNzA0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1OTAyMDQ1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi5JIHRoaW5rIEkgcmVtZW1iZXIgc29tZXRoaW5nIGltcG9ydGFudCBhcm91bmQgdGhlIEtjb25maWcgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYXJvdW5kIGxpbmUgMTA4NSwgYXMgdGhhdCBsb2NhdGlvbiBpcyBmcmVxdWVudGx5IHJlbGV2YW50IHRvIHRoZSBjb3JlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmZWF0dXJlIGlzIGRlZmluZWQgYXJvdW5kIHRoZXJlIGFuZCB3aGF0IGl0cyBpbnRlcmFjdGlvbnMgYXJlIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoxMy43ODY2NDM0NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTEwOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTExOlxcdFxcdGRlZmF1bHQgblxcbjExMTI6XFx0XFx0aGVscFxcbjExMTM6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTE0OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG4xMTE1OlxcdFxcdCAgd2hpY2ggaGF2ZW4ndCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcXG4xMTE2OlxcdFxcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXFxuMTExNzpcXHRcXHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbjExMTg6XFx0XFxuMTExOTpcXHRcXHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MTMuNzg2NzY5NjM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwNTYxNjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBhbmQgTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IGBDT05GSUdfU1dBUGAgYW5kIHNlZSBpZiBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gQXJlIHRoZXJlIGFueSBmbGFncyBvciBwYXJhbWV0ZXJzIHRoYXQgYXJlIHNwZWNpZmljYWxseSByZWxldmFudCB0byBzd2FwIGJlaGF2aW9yIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJ2xsIHByb2JhYmx5IGFsc28gZG8gYSBxdWljayBhdWRpdCBmb3Igc3dhcCByZWxhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUgZ2VuZXJhbCBjb25maWcuXG5cblRoZW4sIEknbGwgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGlmIHRoZXkncmUgc3ViamVjdCB0byBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaGF2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb2Ygc3dhcCBzcGFjZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBmcmFtZXdvcmsuIEFyZSB0aGV5IGFsd2F5cyBjb21waWxlZCBpbiwgb3IgYXJlIHRoZXJlIGNpcmN1bXN0YW5jZXMsIGNvbmZpZ3VyYXRpb25zLCBvciBidWlsZCBvcHRpb25zIHRoYXQgd291bGQgY2F1c2UgdGhlbSB0byBiZSBvbWl0dGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBsb2dpYyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoxNy42OTIzODc0MDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NjI3NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01NzU4PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5NS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTc5NjogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTc5Ny0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODAyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODAzOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTU4MDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoxNy43OTEwMTk2MjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIzNDc1ODE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRoZSBgI2lmZGVmYHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSB0YWxraW5nIGFib3V0IHN3YXAgdXNhZ2UuIEknbSBndWVzc2luZyB0aGVyZSdzIGEgZ29vZCByZWFzb24gaXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcHJvYmFibHkgcmVsYXRlZCB0byBkaWZmZXJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIG1heWJlIGV2ZW4gZmVhdHVyZSBmbGFncy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSBhY3R1YWxseSBjb250cm9sbGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb24gaXMgKm5vdCogcHJlc2VudCBhbmQgd2h5LCBiZWNhdXNlIHRoYXQgZGlyZWN0bHkgaW1wYWN0cyBob3cgc3dhcCBjaGFyZ2VzIGFyZSBoYW5kbGVkIGluIGRpZmZlcmVudCBkZXBsb3ltZW50IHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyB0aGVyZSBhbmQgbm90IGJlaW5nIHRoZXJlIGZvciB3aGF0ZXZlciB0aGUgdXNlIGNhc2UgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MjUuMDI1NzgyMDE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTc4NTpcXHRcXHRtZW1jZ19jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShcXFwibWVtX2Nncm91cFxcXCIsIG1lbWNnX3NpemUsIDAsXFxuNTc4NjpcXHRcXHRcXHRcXHRcXHRcXHQgU0xBQl9QQU5JQyB8IFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XFxuNTc4NzpcXHRcXG41Nzg4OlxcdFxcdG1lbWNnX3BuX2NhY2hlcCA9IEtNRU1fQ0FDSEUobWVtX2Nncm91cF9wZXJfbm9kZSxcXG41Nzg5OlxcdFxcdFxcdFxcdFxcdCAgICAgU0xBQl9QQU5JQyB8IFNMQUJfSFdDQUNIRV9BTElHTik7XFxuNTc5MDpcXHRcXG41NzkxOlxcdFxcdHJldHVybiAwO1xcbjU3OTI6XFx0fVxcbjU3OTM6XFx0XFxuNTc5NDpcXHQjaWZkZWYgQ09ORklHX1NXQVBcXG41Nzk1OlxcdC8qKlxcbjU3OTY6XFx0ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXFxuNTc5NzpcXHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG41Nzk4OlxcdCAqXFxuNTc5OTpcXHQgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbydzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cXHUwMDNlc3dhcC5cXG41ODAwOlxcdCAqXFxuNTgwMTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxcbjU4MDI6XFx0ICovXFxuNTgwMzpcXHRpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjU4MDQ6XFx0e1xcbjU4MDU6XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjU4MDY6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG41ODA3OlxcdFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XFxuNTgwODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTgwOTpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuNTgxMDpcXHRcXHR1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkO1xcbjU4MTE6XFx0XFxuNTgxMjpcXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbjU4MTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTgxNDpcXHRcXG41ODE1OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbjU4MTY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbjU4MTc6XFx0XFx0aWYgKCFvYmpjZylcXG41ODE4OlxcdFxcdFxcdHJldHVybiAwO1xcbjU4MTk6XFx0XFxuNTgyMDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNTgyMTpcXHRcXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbjU4MjI6XFx0XFx0aWYgKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG41ODIzOlxcdFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcXG41ODI0OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoyNS4wMjYxMTYyNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY0MjIyODk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxseTogYENPTkZJR19TV0FQYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBiZWNhdXNlIG9mIHRob3NlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBmdW5jdGlvbnMg4oCTIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEFuZCBvYnZpb3VzbHksIGBDT05GSUdfTUVNQ0dgIGlzIGEgcmVxdWlyZW1lbnQsIHNpbmNlIGl0J3MgZnVuZGFtZW50YWwgdG8gYG1lbWNvbnRyb2wub2AgYW5kIGFsbCB0aGUgcHJpdmF0ZSBJRCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBtZW1jZ3MuXG5cbkJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIEknbSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgYWJvdXQgYENPTkZJR19NRU1DR19WMWAuIFJpZ2h0LCBsb29raW5nIGF0IGBtbS9tZW1jb250cm9sLXYxLmNgLCBJIHNlZSBgbWVtY2cxX3N3YXBvdXRgIGlzIGNhbGxpbmcgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYC4gT2theSwgdGhhdCBhZGRzIGFub3RoZXIgcGllY2UgdG8gdGhlIHB1enpsZS5cblxuTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHNlZSBhIGRlY2VudCBudW1iZXIgb2YgdGhlbS5cblRoZSBsaXN0IGlzOlxuMS4gIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYFxuMi4gIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGBcbjMuICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgXG40LiAgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYFxuNS4gIGBsaXN0X2xydV93YWxrX25vZGVgXG42LiAgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgXG43LiAgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgLyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgKENTUyBjYWxsYmFja3MpXG44LiAgYG1lbV9jZ3JvdXBfYWxsb2NgIC8gYG1lbV9jZ3JvdXBfZnJlZWAgLyBgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCAvIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCAvIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbGBcblxuSXQgbG9va3MgbGlrZSB0aGUgZmlyc3Qgc2l4IGFyZSBub24tc3RhdGljLCBzbywgZXhwb3J0ZWQsIGFuZCB0aGUgbGFzdCBmaXZlLCBzdGF0aWMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAgYmV0dGVyLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgY2FsbGVycyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFuZCBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjEwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MzIuNjY4MzQ4NDI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3MDc3OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTMtfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgxNDpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxNS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEyOTM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTI5Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk4OnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTkte1xcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyOS1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vbGlzdF9scnUuYzo0MzA6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7XFxubW0vbGlzdF9scnUuYy00MzEtXFx0XFx0XFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDA4Nj1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTEwLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo0MTExOiAqIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkIC0gbG9vayB1cCBhIG1lbWNnIGZyb20gYSBtZW1jZyBpZFxcbm1tL21lbWNvbnRyb2wuYy00MTEyLSAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTE3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MTE4OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcXG5tbS9tZW1jb250cm9sLmMtNDExOS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM0Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzODMtXFx0LypcXG5tbS9tZW1jb250cm9sLmM6NDM4NDpcXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJ3JlIGZ1bGx5IG9ubGluZS5cXG5tbS9tZW1jb250cm9sLmMtNDM4NS1cXHQgKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzNTI9aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzYxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9tZW1jb250cm9sLmM6NTM2MjpcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcXG5tbS9tZW1jb250cm9sLmMtNTM2My1cXHRpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZShcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcykpXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjczPXN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTI4Mi1cXG5tbS93b3JraW5nc2V0LmM6MjgzOlxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xcbm1tL3dvcmtpbmdzZXQuYy0yODQtXFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy00NzEtXFx0ICovXFxubW0vd29ya2luZ3NldC5jOjQ3MjpcXHRldmljdGlvbl9tZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnaWQpO1xcbm1tL3dvcmtpbmdzZXQuYy00NzMtXFx0aWYgKGV2aWN0aW9uX21lbWNnIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjM1LjA4NTQzNTIwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjYzNjc4OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCBDYWxsZXJzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UsIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgaXRzIGNhbGxlcnMuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNvcmUsIHNvIEkgZXhwZWN0IGEgZGVjZW50IG51bWJlciBvZiB0aGVtLCBsaWtlbHkgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtcy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSAqd2h5KiBiZWhpbmQgdGhvc2UgY2FsbHMuIElzIGl0IGZvciBpZGVudGlmaWNhdGlvbiB3aXRoaW4gY2dyb3Vwcz8gUGVyaGFwcyByZXNvdXJjZSBhY2NvdW50aW5nPyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGNvbnRleHQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBldmVuIGRlc2lnbiBpbXByb3ZlbWVudHMuIEEgdGFyZ2V0ZWQgYW5hbHlzaXMgb2YgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MzkuMzQ5MTE2ODk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU2ODU1OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjk4LVxcdG5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxubW0vbWVtY29udHJvbC12MS5jOjI5OTpcXHRzd2FwX21lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX2VudHJpZXMpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0zMDAtXFx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTIzPWludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XFxubW0vbWVtY29udHJvbC12MS5oLTI0LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoyNTpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wtdjEuaC0yNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG4pO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQwODE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQwODUtXFxubW0vbWVtY29udHJvbC5jOjQwODY6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxubW0vbWVtY29udHJvbC5jLTQwODcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4MDM9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODM5LVxcbm1tL21lbWNvbnRyb2wuYzo1ODQwOlxcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtNTg0MS1cXHRtZW1jZ2lkID0gbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6NDEuNjA1OTc3MTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NTEzMjgzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogRnVuY3Rpb24gU2VsZWN0aW9uIGFuZCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYXJlIG1vc3QgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3QgYWxyZWFkeTogYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3M6IGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgYWxsIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBhY2Nlc3NpYmxlIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGVpciBkZWZpbml0aW9ucy4gSSdsbCBxdWlja2x5IGNoZWNrIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbGlzdF9scnUuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gQWgsIHllcy4gQ29uZmlybWVkOlxuXG4qICAgSW4gYG1tL21lbWNvbnRyb2wuY2AsIHdlIGhhdmUgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBhcmUgYWxsIG5vbi1zdGF0aWMuXG4qICAgSW4gYG1tL2xpc3RfbHJ1LmNgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCBpcyBub24tc3RhdGljLlxuKiAgIEFuZCBmaW5hbGx5LCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgIGlzIGFsc28gbm9uLXN0YXRpYy5cblxuRXhjZWxsZW50LiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCBgTUVNQ0dgIOKAkyB0aGUgY29yZSBjb25maWcgZm9yIG1lbW9yeSBjZ3JvdXAgc3VwcG9ydCwgZW5hYmxpbmcgYG1tL21lbWNvbnRyb2wuY2Ag4oCTIGFuZCBgU1dBUGAgdG8gZW5hYmxlIHN3YXAgc3VwcG9ydCBhbmQsIGltcG9ydGFudGx5LCB0aGUgc3dhcCBhY2NvdW50aW5nIGZ1bmN0aW9ucyBsaWtlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYC5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgQ09ORklHX01FTUNHYCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGRlcGVuZGluZyBvbiBub3RoaW5nIGRpcmVjdGx5LiBJdCBkb2VzLCBob3dldmVyLCBpbmRpcmVjdGx5IGRlcGVuZCBvbiBvdGhlciBjb25maWdzLiBgQ09ORklHX1NXQVBgIGFsc28gaGFzIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjQ3LjU1NzMwODIyOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5OTUzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjQ3LjYxNTMxMTAyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzU5NTI2MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGRlY2lkZSBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyB3b3J0aCBpbmNsdWRpbmcgb3IgdGVzdGluZyBhbG9uZ3NpZGUgdGhlIG1haW4gY29uZmlndXJhdGlvbnMuIEl0J3MgbGlzdGVkIGFzIG9wdGlvbmFsLCBidXQgZ2l2ZW4gdGhlIGNyaXRpY2FsIHJvbGUgb2YgYE1FTUNHYCBhbmQgYFNXQVBgIGluIHRoaXMgYXJlYSwgaXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc3QgdG8gaW5jbHVkZSBpdCBmb3Igbm93IHRvIGtlZXAgdGhpbmdzIHRob3JvdWdoLiBSaWdodCwgdGltZSB0byBnZW5lcmF0ZSB0aGUgb3V0cHV0cyB3aXRoIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDgzLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjUzLjM3NDg0MTEyNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzA2ODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiLFxuICAgIFwibWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtX2Nncm91cCBwcml2YXRlIElEIG1hbmFnZW1lbnQsIGNoYW5naW5nIG93bmVyc2hpcCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGZyb20gbWVtX2Nncm91cCBkaXJlY3RseSB0byBvYmpfY2dyb3VwIChtZW1jZ2lkX3JlZikgc28gdGhhdCBwcml2YXRlIElEcyByZWZlcmVuY2Ugb2JqX2Nncm91cCBhbmQgYWxsb3cgcHJvcGVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHJlcGFyZW50aW5nIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gYW5kIHN3YXAgYWNjb3VudGluZy4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHN3YXAgY2hhcmdpbmcvdW5jaGFyZ2luZywgbGlzdF9scnUgdHJhdmVyc2FsLCBhbmQgd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibGlzdF9scnVfd2Fsa19ub2RlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3Rlc3RfcmVjZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRCBtYW5hZ2VtZW50LCBjaGFuZ2luZyBvd25lcnNoaXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBmcm9tIG1lbV9jZ3JvdXAgZGlyZWN0bHkgdG8gb2JqX2Nncm91cCAobWVtY2dpZF9yZWYpIHNvIHRoYXQgcHJpdmF0ZSBJRHMgcmVmZXJlbmNlIG9ial9jZ3JvdXAgYW5kIGFsbG93IHByb3BlciBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIGFuZCBzd2FwIGFjY291bnRpbmcuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhbmdlcyB0aGF0IGFmZmVjdCBzd2FwIGNoYXJnaW5nL3VuY2hhcmdpbmcsIGxpc3RfbHJ1IHRyYXZlcnNhbCwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6NTMuNDk3OTE2Nzg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ5OTg0NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjUzLjQ5ODM5MjExNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2NDk5MzY0Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgZmllbGRzIGFyZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocmVmY291bnRfdCwgcGVyY3B1X3JlZiwgUkNVLCBYQXJyYXkpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWY4NjUzNjAwYTIyN2RiNzk5ZDZmMzgxOTIxNmRiYjU5NWVjYWM2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMTk6NDY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBmMjI3MzQ4YTNmMjRhLi5lYWZjODE3ZmYyNDRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYsMTEgKzY2LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUge1xuIFxuICNkZWZpbmUgTUVNX0NHUk9VUF9JRF9TSElGVFx0MTZcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIHtcbi1cdGludCBpZDtcbi1cdHJlZmNvdW50X3QgcmVmO1xuLX07XG4tXG4gc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1O1xuIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdTtcbiBzdHJ1Y3QgbWVtY2dfdm1zdGF0cztcbkBAIC0xNzMsNiArMTY4LDcgQEAgc3RydWN0IG9ial9jZ3JvdXAge1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmY250O1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0YXRvbWljX3QgbnJfY2hhcmdlZF9ieXRlcztcbitcdHJlZmNvdW50X3QgbWVtY2dpZF9yZWY7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogcHJvdGVjdGVkIGJ5IG9iamNnX2xvY2sgKi9cbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbkBAIC0xODksOCArMTg1LDggQEAgc3RydWN0IG9ial9jZ3JvdXAge1xuIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzcztcbiBcbi1cdC8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqL1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCBpZDtcbitcdC8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovXG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7XG4gXG4gXHQvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovXG4gXHRzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTtcdFx0LyogQm90aCB2MSBcdTAwMjYgdjIgKi9cbkBAIC0yNTUsNiArMjUxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNlbmRpZlxuIFx0aW50IGttZW1jZ19pZDtcbiBcbitcdC8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqL1xuK1x0aW50IGlkO1xuK1xuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjZ3diX2xpc3Q7XG4gI2VuZGlmXG5AQCAtODEwLDcgKzgwOSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIG1lbWNnLVx1MDAzZWlkLmlkO1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTQyOCw3ICs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcdFx0eGFfZm9yX2VhY2goXHUwMDI2bHJ1LVx1MDAzZXhhLCBpbmRleCwgbWxydSkge1xuIFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTtcbi1cdFx0XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuK1x0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuIFx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAyNTZiNjhmZmNhNzBlLi44NGRjYWIzYWNiOGEyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNzczLDcgKzM3NzMsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbkBAIC00MDMyLDI1ICs0MDMyLDY1IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTtcbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4tXHRpZiAobWVtY2ctXHUwMDNlaWQuaWQgXHUwMDNlIDApIHtcbi1cdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQpO1xuLVx0XHRtZW1jZy1cdTAwM2VpZC5pZCA9IDA7XG4rXHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbitcdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQpO1xuK1x0XHRtZW1jZy1cdTAwM2VpZCA9IDA7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4rc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbitcdFx0dW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuIHtcbi1cdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xuIFxuLVx0XHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4rXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuK1x0XHRvYmpjZ19mcmVlID0geGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0XHRWTV9XQVJOX09OKG9iamNnX2ZyZWUgIT0gb2JqY2cpO1xuK1xuK1x0XHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xuK1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gXHR9XG4gfVxuIFxuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQgLSBwdXQgbWVtY2dpZCBhbmQgZ2V0IHRoZSBuZWFyZXN0IG9ubGluZSBtZW1jZ1xuKyAqIEBpZDogdGhlIG1lbWNnIHByaXZhdGUgaWQgZ290IGZyb20gbWVtX2Nncm91cF9pZF9nZXRfb25saW5lXG4rICogQG46IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcHV0XG4rICovXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdGlmICh1bmxpa2VseSghb2JqY2cpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpIHx8ICFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpXG4rXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuK1xuK1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG9iamNnLCBpZCwgbik7XG4rXG4rb3V0OlxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4gbWVtY2c7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2ctXHUwMDNlaWRfb2JqY2csIG1lbWNnLVx1MDAzZWlkLCAxKTtcbit9XG4rXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0b2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbitcbitcdHdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQncyByZWZjb3VudCBtdXN0XG4gXHRcdCAqIGFsd2F5cyBiZSBcdTAwM2U9IDEuXG5AQCAtNDA2MCw3ICs0MTAwLDEwIEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4rXHRcdG9iamNnID0gbWVtY2ctXHUwMDNlaWRfb2JqY2c7XG4gXHR9XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBtZW1jZztcbiB9XG4gXG5AQCAtNDA2OSwxMSArNDExMiwyNCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1blxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLlxuKyAqXG4rICogQHJldHVybjogdGhlIG1lbWNnLCBvciBOVUxMIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IHJlcGFyZW50ZWQuXG4gICovXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxuIHtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdFdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpO1xuLVx0cmV0dXJuIHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1xuK1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbitcdGlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBtZW1jZztcbiB9XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKVxuQEAgLTQxNzQsNyArNDIzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0aWYgKCFtZW1jZylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4tXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLmlkLCBOVUxMLFxuK1x0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZCwgTlVMTCxcbiBcdFx0XHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBmYWlsO1xuQEAgLTQzMTksOSArNDM3NSwxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0XHRcdFx0ICAgRkxVU0hfVElNRSk7XG4gXHRscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7XG4gXG4tXHQvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi9cbi1cdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYsIDEpO1xuLVx0Y3NzX2dldChjc3MpO1xuK1x0LyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqL1xuK1x0bWVtY2ctXHUwMDNlaWRfb2JqY2cgPSBvYmpjZztcbitcdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZF9vYmpjZy1cdTAwM2VtZW1jZ2lkX3JlZiwgMSk7XG4rXHRvYmpfY2dyb3VwX2dldChtZW1jZy1cdTAwM2VpZF9vYmpjZyk7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSdyZSBmdWxseSBvbmxpbmUuXG5AQCAtNDMzMyw3ICs0MzkwLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gXHQgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuXG4gXHQgKi9cbi1cdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7XG4rXHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCwgbWVtY2ctXHUwMDNlaWRfb2JqY2csIEdGUF9LRVJORUwpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZnJlZV9vYmpjZzpcbkBAIC00Mzg1LDcgKzQ0NDIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXG4gXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFxuLVx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XG4rXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChtZW1jZyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5AQCAtNTc1MCw2ICs1ODA3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHR1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkO1xuIFxuIFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTc2NywyMiArNTgyNSwyNCBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbi1cdC8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqL1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiBcbiBcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7XG4gXG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG4rXHRtZW1jZ2lkID0gbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbi1cdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxuLVx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4rXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9wYWdlcywgbWVtY2dpZCk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU3OTgsMTggKzU4NTgsMjMgQEAgdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoaWQsIG5yX3BhZ2VzKTtcbiBcdGlmIChtZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbitcdFx0LypcbitcdFx0ICogSWYgdGhlIG1lbWNnIHdhcyBvZmZsaW5lIGFuZCByZXBhcmVudGVkIHRvIHJvb3QsIHN3YXAgbmVlZHNcbitcdFx0ICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC5cbitcdFx0ICovXG4rXHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fCBpZCAhPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKSB7XG4gXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbiBcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcyk7XG4gXHRcdH1cbiBcdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiB9XG4gXG4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjRlOWI3YjE2M2MwMWUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTQ3MCw3ICs0NzAsNyBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHQgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLlxuIFx0ICovXG4gXHRldmljdGlvbl9tZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnaWQpO1xuLVx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4rXHRpZiAoZXZpY3Rpb25fbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4gXHRcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6NTMuNDk4MzkyOTY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1MTIyNTk4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHNwZWNpZmljYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuRmlyc3QsIGxldCdzIG5haWwgZG93biB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJdCdzIG1lc3Npbmcgd2l0aCB0aGUgbWVtb3J5IGNncm91cCBwcml2YXRlIElEIHRyYWNraW5nIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBtbS9saXN0X2xydS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gU28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LlxuXG5UaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkYCBpcyBnb25lLiBJbnN0ZWFkLCBgc3RydWN0IG9ial9jZ3JvdXBgIGdldHMgYSBgcmVmY291bnRfdCBtZW1jZ2lkX3JlZmAsIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIGdldHRpbmcgYSBgc3RydWN0IG9ial9jZ3JvdXAgKmlkX29iamNnO2AgYW5kIGFuIGBpbnQgaWQ7YC4gVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2YgbnVsbCBjaGVja3MgaW4gYG1tL2xpc3RfbHJ1LmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gV2UncmUgZ2V0dGluZyBzb21lIG5ldyBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgZm9yIG1hbmFnaW5nIHRoZSBwcml2YXRlIElEcyBhbmQgdGhlaXIgcmVmY291bnRpbmcsIGFuZCBtb2RpZmljYXRpb25zIGluIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfYWxsb2NgLCBgbWVtX2Nncm91cF9jc3Nfb25saW5lYCwgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBldGMuIFBsdXMsIGl0IHRvdWNoZXMgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLiBUaGF0J3MgYSBnb29kIGFtb3VudCBvZiBjaHVybiFcblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cbjEuICAqKlVzZXItc3BhY2UgZXhwb3N1cmU6KiogTm9wZSwgbm8gZGlyZWN0IGNvcHlpbmcgb2Yga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB2aWEgdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIGlvY3Rscywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IGNvbWVzIHRvIG1pbmQuIFRoYXQncyBhIHJlbGllZi5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBPa2F5LCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdpdGggYWxsIHRoaXMgc3RydWN0IG1hbmlwdWxhdGlvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHN0cnVjdHVyZSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgYW5kIGhvdyB0aGVzZSBuZXcgc3RydWN0dXJlcyBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIG5ldyBgb2JqX2Nncm91cGAuIEl0J3MgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZCBpbiBhIGNvbmRpdGlvbmFsLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgaG93IGBzdHJ1Y3Qgb2JqX2Nncm91cGAgaXMgYWxsb2NhdGVkLiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0OTowMy4wMTA2NTUwMjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE1OTkzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2Nncm91cF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTQ5PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5NS1cXG5tbS9tZW1jb250cm9sLmM6MTk2OnN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2Nncm91cF9hbGxvYyh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xOTcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQzNDM9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzU5LVxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxubW0vbWVtY29udHJvbC5jOjQzNjA6XFx0XFx0b2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7XFxubW0vbWVtY29udHJvbC5jLTQzNjEtXFx0XFx0aWYgKCFvYmpjZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDk6MDUuMjYyMjYxNjY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTM1MDYyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gb2JqX2Nncm91cF9hbGxvYyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzIG9mIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHksIGxldCdzIGRpc3NlY3QgYG9ial9jZ3JvdXBfYWxsb2NgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhlc2Ugb2JqZWN0IGNncm91cHMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UndmUgYmVlbiBzZWVpbmcgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciByZWNlbnRseS4gSSdtIGFzc3VtaW5nLCBhcyB1c3VhbCwgaXQncyBub3QgYSB0cml2aWFsIGFsbG9jYXRpb24sIGFuZCB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cywgYW55IHN1YnRsZSBpbmVmZmljaWVuY2llcyBpbiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpdHNlbGYsIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgbGVhZCB0byB1bmV4cGVjdGVkIG1lbW9yeSBwcmVzc3VyZSBzY2VuYXJpb3MuIEtub3dpbmcgbXkgbHVjaywgdGhlcmXigJlsbCBiZSBzb21lIHRyaWNreSBwb2ludGVyIGFyaXRobWV0aWMgaW4gdGhlcmUgdG9vLi4uIGxvb2tpbmcgZm9yd2FyZCB0byBpdC4gSXQncyB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ5OjA3LjUxNTc3MDU2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZvYmpjZ19sb2NrLCBmbGFncyk7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHBlcmNwdV9yZWZfZXhpdChyZWYpO1xcbiAxOTM6XFx0XFx0a2ZyZWVfcmN1KG9iamNnLCByY3UpO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHRzdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKm9ial9jZ3JvdXBfYWxsb2Modm9pZClcXG4gMTk3OlxcdHtcXG4gMTk4OlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gMTk5OlxcdFxcdGludCByZXQ7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdG9iamNnID0ga3phbGxvY19vYmooc3RydWN0IG9ial9jZ3JvdXApO1xcbiAyMDI6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjAzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNm9iamNnLVxcdTAwM2VyZWZjbnQsIG9ial9jZ3JvdXBfcmVsZWFzZSwgMCxcXG4gMjA2OlxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbiAyMDc6XFx0XFx0aWYgKHJldCkge1xcbiAyMDg6XFx0XFx0XFx0a2ZyZWUob2JqY2cpO1xcbiAyMDk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIxMDpcXHRcXHR9XFxuIDIxMTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2b2JqY2ctXFx1MDAzZWxpc3QpO1xcbiAyMTI6XFx0XFx0cmV0dXJuIG9iamNnO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ5OjA3LjUxNjE0ODg0MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDY3MjU3ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZyBpbiBDb250cm9sIEdyb3VwcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMsIG9yIGBtZW1jZ2BzLCBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBzZWVtcyBsaWtlIGBvYmpjZ2AgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBhbmQgemVyby1pbml0aWFsaXplcyBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBtZW1vcnkgcmVnaW9uLiBUaGVuLCB0aGUgY3JpdGljYWwgcGFydCBqdW1wcyBvdXQgYXQgbWUgaW4gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWA6IHdlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbWVtY2dpZF9yZWZgIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIHNldCBpdCB0byAxLiBUaGlzIGlzIGEgZGVsaWJlcmF0ZSBpbml0aWFsaXphdGlvbiwgcmF0aGVyIHRoYW4gYSByZWxpYW5jZSBvbiBga3phbGxvY2AuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aHkgaXMgdGhhdCByZXF1aXJlZD8gVG8gYW5zd2VyIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3Jrcy4gSSBzaG91bGQgY2hlY2sgYG1lbV9jZ3JvdXBfYWxsb2NgIHRvIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5pbmcgdGhlcmUuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbXBvcnRhbnQgaGFwcGVuaW5nIGluIHRoZXJlIHRoYXQgSeKAmW0gbWlzc2luZyB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBjb3VudGVyLiBQZXJoYXBzIHRoZXJlJ3MgYW4gZWFybGllciBpbnRlcmFjdGlvbiB0aGF0IEkgbmVlZCB0byBrbm93IGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0OToxMC45ODM0MDk5NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjE1OlxcdFxcdGxydV9nZW5fZXhpdF9tZW1jZyhtZW1jZyk7XFxuNDIxNjpcXHRcXHRtZW1jZ193Yl9kb21haW5fZXhpdChtZW1jZyk7XFxuNDIxNzpcXHRcXHRfX21lbV9jZ3JvdXBfZnJlZShtZW1jZyk7XFxuNDIxODpcXHR9XFxuNDIxOTpcXHRcXG40MjIwOlxcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbjQyMjE6XFx0e1xcbjQyMjI6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcXG40MjIzOlxcdFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XFxuNDIyNDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNDIyNTpcXHRcXHRpbnQgbm9kZSwgY3B1O1xcbjQyMjY6XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XFxuNDIyNzpcXHRcXHRsb25nIGVycm9yO1xcbjQyMjg6XFx0XFxuNDIyOTpcXHRcXHRtZW1jZyA9IGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuNDIzMDpcXHRcXHRpZiAoIW1lbWNnKVxcbjQyMzE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNDIzMjpcXHRcXG40MjMzOlxcdFxcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQsIE5VTEwsXFxuNDIzNDpcXHRcXHRcXHRcXHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG40MjM1OlxcdFxcdGlmIChlcnJvcilcXG40MjM2OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MjM3OlxcdFxcdGVycm9yID0gLUVOT01FTTtcXG40MjM4OlxcdFxcbjQyMzk6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbWVtY2dfdm1zdGF0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40MjQwOlxcdFxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxuNDI0MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI0MjpcXHRcXG40MjQzOlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxcbjQyNDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNDI0NTpcXHRcXHRpZiAoIW1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSlcXG40MjQ2OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MjQ3OlxcdFxcbjQyNDg6XFx0XFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcXG40MjQ5OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MjUwOlxcdFxcbjQyNTE6XFx0XFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXFx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcXG40MjUyOlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG40MjUzOlxcdFxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbjQyNTQ6XFx0XFx0XFx0c3RhdGMtXFx1MDAzZXBhcmVudF9wY3B1ID0gcHN0YXRjX3BjcHU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ5OjEwLjk4Mzg3MzY3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDEzODU5NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNvZGUgc3Ryb25nbHkgc3VnZ2VzdHMgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmUuIEkndmUgcmV2aWV3ZWQgdGhlIGNvcmUgYWxsb2NhdGlvbiwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIGFuZCBkYXRhIGZsb3cgYW5kLCBhcyBJIHN1c3BlY3RlZCwgZXZlcnl0aGluZyBsb29rcyBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIGBtZW1jZ2AgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uLiBBbGwgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyB3aXRoaW4gdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgbGlrZSBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGFyZSBsb2NhbGx5IGRlY2xhcmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBJJ3ZlIGFsc28gY29uZmlybWVkIHRoZXJlIGFyZW4ndCBhbnkga2VybmVsLXRvLXVzZXIgc3BhY2UgY29waWVzIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBsZWFrIGRhdGEuXG5cblRoZSBlbnRpcmUgc2NvcGUgb2YgdGhlIHBhdGNoIHNlZW1zIGxpbWl0ZWQgdG8gaW50ZXJuYWwgYG1lbWNnYCByZWZjb3VudGluZywgSUQgbWFuYWdlbWVudCB1c2luZyBYQXJyYXksIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgYG9ial9jZ3JvdXBgIGFuZCBgbWVtX2Nncm91cGAgc3RydWN0dXJlcywgYW5kIHN3YXAvTFJVIGNoYXJnaW5nLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgcmV2b2x2ZSBhcm91bmQgY29ycmVjdGx5IG1hbmFnaW5nIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBJRHMgYW5kIHBpbm5pbmcgdGhlIGBvYmpfY2dyb3VwYC5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgYW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbGlrZWx5IHN0ZW0gZnJvbSByZWZlcmVuY2UgY291bnRpbmcgZXJyb3JzIChVQUZzLCBkb3VibGUgZnJlZXMsIGxlYWtzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBidWdzLiBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiB0aGluZ3MgdGhhdCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzIOKAkyBLQVNBTiwgTE9DS0RFUCwgYW5kIGByZWZjb3VudF90YCBjaGVja3Mg4oCTIGFyZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCBhZGQgdmFsdWUgdG8uXG5cbkkndmUgYWxzbyBkb25lIGEgZGVlcCBkaXZlIG9uIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXM6XG5cbiogICBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGludm9sdmUgYHN0cnVjdCBvYmpfY2dyb3VwYCAoYWRkaW5nIGByZWZjb3VudF90IG1lbWNnaWRfcmVmYCksIGBzdHJ1Y3QgbWVtX2Nncm91cGAgKGFkZGluZyBgaWRfb2JqY2dgLCByZXBsYWNpbmcgc3RydWN0IHdpdGggYGludCBpZGApLCBhbmQgdGhlIGlubGluZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9wcml2YXRlX2lkYC5cbiogICBBIGAhbWVtY2cgfHxgIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGBtbS9saXN0X2xydS5jYC5cbiogICBTaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBtZW1jZyBwcml2YXRlIElEIGFsbG9jYXRpb24gYW5kIHJlZmNvdW50aW5nIGxvZ2ljIHRvIHBpbiBgb2JqX2Nncm91cGAgaW5zdGVhZCBvZiBgbWVtY2ctXHUwMDNlY3NzYCBoYXMgYmVlbiBkb25lIGluIGBtbS9tZW1jb250cm9sLmNgLlxuKiAgIEEgYG51bGxgIGNoZWNrIGBldmljdGlvbl9tZW1jZyBcdTAwMjZcdTAwMjZgIGhhcyBiZWVuIGFkZGVkIHRvIGBtbS93b3JraW5nc2V0LmNgLlxuXG5BIHF1aWNrIGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgbW9kaWZpY2F0aW9ucyBjb25maXJtIHRoZSBjb2RlIGlzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXG5cbldpdGggdGhhdCBpbiBtaW5kLCBJJ20gY29tZm9ydGFibGUgcHJlcGFyaW5nIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTYsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDk6MTkuOTk3NzM1NzcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgZmllbGRzIGFyZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocmVmY291bnRfdCwgcGVyY3B1X3JlZiwgUkNVLCBYQXJyYXkpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1vcnkgY2dyb3VwIHByaXZhdGUgSUQgdHJhY2tpbmcgbWVjaGFuaXNtIHNvIHRoYXQgdGhlIHByaXZhdGUgSUQgcGlucyB0aGUgY29ycmVzcG9uZGluZyBvYmpfY2dyb3VwIHJhdGhlciB0aGFuIHRoZSBtZW1fY2dyb3VwIENTUyBkaXJlY3RseS5cXG5cXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcXG4tIEFsbCBtb2RpZmllZCBzdHJ1Y3R1cmVzIChgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgKSBhcmUgemVyby1hbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBga21lbV9jYWNoZV96YWxsb2MoKWAsIGFuZCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyAoYG1lbWNnaWRfcmVmYCwgYGlkX29iamNnYCwgYGlkYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gLyBvbmxpbmUgc3RhdGUuXFxuLSBMb2NhbCB2YXJpYWJsZXMgYWNyb3NzIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYG1lbWNnaWRgLCBgb2JqY2dgLCBgbWVtY2dgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQgaW4gYnJhbmNoaW5nIG9yIGFzc2lnbm1lbnRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGZpZWxkcyBhcmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIFRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHJlZmNvdW50X3QsIHBlcmNwdV9yZWYsIFJDVSwgWEFycmF5KS5cXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCByZWZjb3VudCBkZWJ1Z2dpbmcsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cXG4tIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmfp4w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 19:45:23 +0000 UTC FinishedAt: 2026-09-01 19:49:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "d90000e9-e5fa-4ca4-9193-4861db2501dc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_from_private_id", "mem_cgroup_private_id_get_online", "__mem_cgroup_try_charge_swap", "__mem_cgroup_uncharge_swap", "list_lru_walk_node", "workingset_test_recent" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1vcnkgY2dyb3VwIHByaXZhdGUgSUQgdHJhY2tpbmcgbWVjaGFuaXNtIHNvIHRoYXQgdGhlIHByaXZhdGUgSUQgcGlucyB0aGUgY29ycmVzcG9uZGluZyBvYmpfY2dyb3VwIHJhdGhlciB0aGFuIHRoZSBtZW1fY2dyb3VwIENTUyBkaXJlY3RseS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XG4tIEFsbCBtb2RpZmllZCBzdHJ1Y3R1cmVzIChgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgKSBhcmUgemVyby1hbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBga21lbV9jYWNoZV96YWxsb2MoKWAsIGFuZCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyAoYG1lbWNnaWRfcmVmYCwgYGlkX29iamNnYCwgYGlkYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gLyBvbmxpbmUgc3RhdGUuXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBmaWVsZHMgYXJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChyZWZjb3VudF90LCBwZXJjcHVfcmVmLCBSQ1UsIFhBcnJheSkuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCByZWZjb3VudCBkZWJ1Z2dpbmcsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1Zjg2NTM2MDBhMjI3ZGI3OTlkNmYzODE5MjE2ZGJiNTk1ZWNhYzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAxOTo0Njo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBmMjI3MzQ4YTNmMjRhLi5lYWZjODE3ZmYyNDRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYsMTEgJiM0Mzs2Niw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHtcbiBcbiAjZGVmaW5lIE1FTV9DR1JPVVBfSURfU0hJRlRcdDE2XG4gXG4tc3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCB7XG4tXHRpbnQgaWQ7XG4tXHRyZWZjb3VudF90IHJlZjtcbi19O1xuLVxuIHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdTtcbiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHU7XG4gc3RydWN0IG1lbWNnX3Ztc3RhdHM7XG5AQCAtMTczLDYgJiM0MzsxNjgsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRhdG9taWNfdCBucl9jaGFyZ2VkX2J5dGVzO1xuJiM0MztcdHJlZmNvdW50X3QgbWVtY2dpZF9yZWY7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogcHJvdGVjdGVkIGJ5IG9iamNnX2xvY2sgKi9cbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbkBAIC0xODksOCAmIzQzOzE4NSw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7XG4gXG4tXHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XG4mIzQzO1x0LyogVGhlIG9iamNnIGhvbGRpbmcgcHJpdmF0ZSBtZW1jZyBJRC4gKi9cbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7XG4gXG4gXHQvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovXG4gXHRzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTtcdFx0LyogQm90aCB2MSBcdTAwMjYgdjIgKi9cbkBAIC0yNTUsNiAmIzQzOzI1MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjZW5kaWZcbiBcdGludCBrbWVtY2dfaWQ7XG4gXG4mIzQzO1x0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0O1xuICNlbmRpZlxuQEAgLTgxMCw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4mIzQzO1x0cmV0dXJuIG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuY1xuQEAgLTQyOCw3ICYjNDM7NDI4LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gXHRcdHhhX2Zvcl9lYWNoKFx1MDAyNmxydS1cdTAwM2V4YSwgaW5kZXgsIG1scnUpIHtcbiBcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7XG4tXHRcdFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcbiYjNDM7XHRcdFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4gXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDI1NmI2OGZmY2E3MGUuLjg0ZGNhYjNhY2I4YTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM3NzMsNyAmIzQzOzM3NzMsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4mIzQzO1x0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5AQCAtNDAzMiwyNSAmIzQzOzQwMzIsNjUgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbiYjNDM7XHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkKTtcbiYjNDM7XHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbiYjNDM7XHRcdHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcbiB7XG4tXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZikpIHtcbi1cdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XG4gXG4tXHRcdC8qIE1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbiYjNDM7XHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuJiM0MztcdFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTWVtY2cgSUQgcGlucyB0aGUgb2JqY2cgKi9cbiYjNDM7XHRcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiBcdH1cbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0IC0gcHV0IG1lbWNnaWQgYW5kIGdldCB0aGUgbmVhcmVzdCBvbmxpbmUgbWVtY2dcbiYjNDM7ICogQGlkOiB0aGUgbWVtY2cgcHJpdmF0ZSBpZCBnb3QgZnJvbSBtZW1fY2dyb3VwX2lkX2dldF9vbmxpbmVcbiYjNDM7ICogQG46IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcHV0XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghb2JqY2cpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4mIzQzO1x0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuJiM0MztcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4mIzQzO1xuJiM0MztcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLVx1MDAzZWlkX29iamNnLCBtZW1jZy1cdTAwM2VpZCwgMSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG9iamNnID0gbWVtY2ctXHUwMDNlaWRfb2JqY2c7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQmIzM5O3MgcmVmY291bnQgbXVzdFxuIFx0XHQgKiBhbHdheXMgYmUgXHUwMDNlPSAxLlxuQEAgLTQwNjAsNyAmIzQzOzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiYjNDM7XHRcdG9iamNnID0gbWVtY2ctXHUwMDNlaWRfb2JqY2c7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbkBAIC00MDY5LDExICYjNDM7NDExMiwyNCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1blxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbi1cdHJldHVybiB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XG4mIzQzO1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXG5AQCAtNDE3NCw3ICYjNDM7NDIzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0aWYgKCFtZW1jZylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4tXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLmlkLCBOVUxMLFxuJiM0MztcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQsIE5VTEwsXG4gXHRcdFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC00MzE5LDkgJiM0Mzs0Mzc1LDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRcdFx0XHQgICBGTFVTSF9USU1FKTtcbiBcdGxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTtcbiBcbi1cdC8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZiwgMSk7XG4tXHRjc3NfZ2V0KGNzcyk7XG4mIzQzO1x0LyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqL1xuJiM0MztcdG1lbWNnLVx1MDAzZWlkX29iamNnID0gb2JqY2c7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZW1lbWNnaWRfcmVmLCAxKTtcbiYjNDM7XHRvYmpfY2dyb3VwX2dldChtZW1jZy1cdTAwM2VpZF9vYmpjZyk7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSYjMzk7cmUgZnVsbHkgb25saW5lLlxuQEAgLTQzMzMsNyAmIzQzOzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiBcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cbiBcdCAqL1xuLVx0eGFfc3RvcmUoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCwgbWVtY2ctXHUwMDNlaWRfb2JqY2csIEdGUF9LRVJORUwpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZnJlZV9vYmpjZzpcbkBAIC00Mzg1LDcgJiM0Mzs0NDQyLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbiBcbi1cdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKG1lbWNnKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbkBAIC01NzUwLDYgJiM0Mzs1ODA3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgbWVtY2dpZDtcbiBcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTU3NjcsMjIgJiM0Mzs1ODI1LDI0IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpO1xuLVx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuJiM0MztcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gXG4gXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbiBcbiYjNDM7XHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG4mIzQzO1x0bWVtY2dpZCA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbi1cdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxuLVx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4mIzQzO1x0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cdTAwM2Vzd2FwKSwgbnJfcGFnZXMsIG1lbWNnaWQpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01Nzk4LDE4ICYjNDM7NTg1OCwyMyBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbiYjNDM7XHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoaWQsIG5yX3BhZ2VzKTtcbiBcdGlmIChtZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgbWVtY2cgd2FzIG9mZmxpbmUgYW5kIHJlcGFyZW50ZWQgdG8gcm9vdCwgc3dhcCBuZWVkc1xuJiM0MztcdFx0ICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIHx8IGlkICE9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpIHtcbiBcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdFx0fVxuIFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gfVxuIFxuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li40ZTliN2IxNjNjMDFlIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC00NzAsNyAmIzQzOzQ3MCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiYjNDM7XHRpZiAoZXZpY3Rpb25fbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4gXHRcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1Zjg2NTM2MDBhMjI3ZGI3OTlkNmYzODE5MjE2ZGJiNTk1ZWNhYzYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAxOTo0Njo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZjIyNzM0OGEzZjI0YS4uZWFmYzgxN2ZmMjQ0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTY2LDExICYjNDM7NjYsNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7CiAKICNkZWZpbmUgTUVNX0NHUk9VUF9JRF9TSElGVAkxNgogCi1zdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIHsKLQlpbnQgaWQ7Ci0JcmVmY291bnRfdCByZWY7Ci19OwotCiBzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHU7CiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHU7CiBzdHJ1Y3QgbWVtY2dfdm1zdGF0czsKQEAgLTE3Myw2ICYjNDM7MTY4LDcgQEAgc3RydWN0IG9ial9jZ3JvdXAgewogCXN0cnVjdCBwZXJjcHVfcmVmIHJlZmNudDsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJYXRvbWljX3QgbnJfY2hhcmdlZF9ieXRlczsKJiM0MzsJcmVmY291bnRfdCBtZW1jZ2lkX3JlZjsKIAl1bmlvbiB7CiAJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogcHJvdGVjdGVkIGJ5IG9iamNnX2xvY2sgKi8KIAkJc3RydWN0IHJjdV9oZWFkIHJjdTsKQEAgLTE4OSw4ICYjNDM7MTg1LDggQEAgc3RydWN0IG9ial9jZ3JvdXAgewogc3RydWN0IG1lbV9jZ3JvdXAgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKIAotCS8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqLwotCXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7CiYjNDM7CS8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovCiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZzsKIAogCS8qIEFjY291bnRlZCByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTsJCS8qIEJvdGggdjEgJmFtcDsgdjIgKi8KQEAgLTI1NSw2ICYjNDM7MjUxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2VuZGlmCiAJaW50IGttZW1jZ19pZDsKIAomIzQzOwkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KJiM0MzsJaW50IGlkOwomIzQzOwogI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLCiAJc3RydWN0IGxpc3RfaGVhZCBjZ3diX2xpc3Q7CiAjZW5kaWYKQEAgLTgxMCw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1lbWNnLSZndDtpZC5pZDsKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDtpZDsKIH0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNDI4LDcgJiM0Mzs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwKIAkJeGFfZm9yX2VhY2goJmFtcDtscnUtJmd0O3hhLCBpbmRleCwgbWxydSkgewogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7Ci0JCQlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewomIzQzOwkJCWlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDI1NmI2OGZmY2E3MGUuLjg0ZGNhYjNhY2I4YTIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM3NzMsNyAmIzQzOzM3NzMsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7CiAKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwomIzQzOwltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkOwogfQogCiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpAQCAtNDAzMiwyNSAmIzQzOzQwMzIsNjUgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpOwogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobWVtY2ctJmd0O2lkLmlkICZndDsgMCkgewotCQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZC5pZCk7Ci0JCW1lbWNnLSZndDtpZC5pZCA9IDA7CiYjNDM7CWlmIChtZW1jZy0mZ3Q7aWQgJmd0OyAwKSB7CiYjNDM7CQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZCk7CiYjNDM7CQltZW1jZy0mZ3Q7aWQgPSAwOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0MztzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAomIzQzOwkJdW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQogewotCWlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgJmFtcDttZW1jZy0mZ3Q7aWQucmVmKSkgewotCQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7CiAKLQkJLyogTWVtY2cgSUQgcGlucyBDU1MgKi8KLQkJY3NzX3B1dCgmYW1wO21lbWNnLSZndDtjc3MpOwomIzQzOwlpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sICZhbXA7b2JqY2ctJmd0O21lbWNnaWRfcmVmKSkgewomIzQzOwkJb2JqY2dfZnJlZSA9IHhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwkJVk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTsKJiM0MzsKJiM0MzsJCS8qIE1lbWNnIElEIHBpbnMgdGhlIG9iamNnICovCiYjNDM7CQlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiAJfQogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dCAtIHB1dCBtZW1jZ2lkIGFuZCBnZXQgdGhlIG5lYXJlc3Qgb25saW5lIG1lbWNnCiYjNDM7ICogQGlkOiB0aGUgbWVtY2cgcHJpdmF0ZSBpZCBnb3QgZnJvbSBtZW1fY2dyb3VwX2lkX2dldF9vbmxpbmUKJiM0MzsgKiBAbjogY291bnQgb2YgcmVmZXJlbmNlcyB0byBwdXQKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFvYmpjZykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKJiM0MzsJd2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKQomIzQzOwkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7CiYjNDM7CiYjNDM7CV9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pOwomIzQzOwomIzQzO291dDoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLSZndDtpZF9vYmpjZywgbWVtY2ctJmd0O2lkLCAxKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKIHsKLQl3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCAmYW1wO21lbWNnLSZndDtpZC5yZWYpKSB7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlvYmpjZyA9IG1lbWNnLSZndDtpZF9vYmpjZzsKJiM0MzsKJiM0MzsJd2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgJmFtcDtvYmpjZy0mZ3Q7bWVtY2dpZF9yZWYpKSB7CiAJCS8qCiAJCSAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCYjMzk7cyByZWZjb3VudCBtdXN0CiAJCSAqIGFsd2F5cyBiZSAmZ3Q7PSAxLgpAQCAtNDA2MCw3ICYjNDM7NDEwMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bgogCQkJYnJlYWs7CiAJCX0KIAkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7CiYjNDM7CQlvYmpjZyA9IG1lbWNnLSZndDtpZF9vYmpjZzsKIAl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBtZW1jZzsKIH0KIApAQCAtNDA2OSwxMSAmIzQzOzQxMTIsMjQgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW4KICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXAKICAqCiAgKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9yZWFkX2xvY2soKS4KJiM0MzsgKgomIzQzOyAqIEByZXR1cm46IHRoZSBtZW1jZywgb3IgTlVMTCBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSByZXBhcmVudGVkLgogICovCiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpCiB7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCVdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpOwotCXJldHVybiB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwomIzQzOwlvYmpjZyA9IHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1lbWNnOwogfQogCiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpCkBAIC00MTc0LDcgJiM0Mzs0MjMwLDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJaWYgKCFtZW1jZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQllcnJvciA9IHhhX2FsbG9jKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgJmFtcDttZW1jZy0mZ3Q7aWQuaWQsIE5VTEwsCiYjNDM7CWVycm9yID0geGFfYWxsb2MoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCAmYW1wO21lbWNnLSZndDtpZCwgTlVMTCwKIAkJCSBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtNDMxOSw5ICYjNDM7NDM3NSwxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCQkJCSAgIEZMVVNIX1RJTUUpOwogCWxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTsKIAotCS8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqLwotCXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZC5yZWYsIDEpOwotCWNzc19nZXQoY3NzKTsKJiM0MzsJLyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqLwomIzQzOwltZW1jZy0mZ3Q7aWRfb2JqY2cgPSBvYmpjZzsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7bWVtY2ctJmd0O2lkX29iamNnLSZndDttZW1jZ2lkX3JlZiwgMSk7CiYjNDM7CW9ial9jZ3JvdXBfZ2V0KG1lbWNnLSZndDtpZF9vYmpjZyk7CiAKIAkvKgogCSAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UmIzM5O3JlIGZ1bGx5IG9ubGluZS4KQEAgLTQzMzMsNyAmIzQzOzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCSAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlCiAJICogcmVndWxhciBJRCBkZXN0cnVjdGlvbiBkdXJpbmcgb2ZmbGluaW5nLgogCSAqLwotCXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLCBtZW1jZy0mZ3Q7aWRfb2JqY2csIEdGUF9LRVJORUwpOwogCiAJcmV0dXJuIDA7CiBmcmVlX29iamNnOgpAQCAtNDM4NSw3ICYjNDM7NDQ0Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAogCWRyYWluX2FsbF9zdG9jayhtZW1jZyk7CiAKLQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTsKJiM0MzsJbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwobWVtY2cpOwogfQogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQpAQCAtNTc1MCw2ICYjNDM7NTgwNyw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwl1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkOwogCiAJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKIAkJcmV0dXJuIDA7CkBAIC01NzY3LDIyICYjNDM7NTgyNSwyNCBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm4gMDsKIAl9CiAKLQltZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7Ci0JLyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpCiYjNDM7CQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKIAogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSAmYW1wOyZhbXA7CiAJICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgmYW1wO21lbWNnLSZndDtzd2FwLCBucl9wYWdlcywgJmFtcDtjb3VudGVyKSkgewogCQltZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpOwotCQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfcGFnZXMpOwogCiYjNDM7CW1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsJbWVtY2dpZCA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCWNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7Ci0JX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX3BhZ2VzLAotCQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTsKJiM0MzsJX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX3BhZ2VzLCBtZW1jZ2lkKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAogCXJldHVybiAwOwpAQCAtNTc5OCwxOCAmIzQzOzU4NTgsMjMgQEAgdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTsKJiM0MzsJbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KGlkLCBucl9wYWdlcyk7CiAJaWYgKG1lbWNnKSB7Ci0JCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSBtZW1jZyB3YXMgb2ZmbGluZSBhbmQgcmVwYXJlbnRlZCB0byByb290LCBzd2FwIG5lZWRzCiYjNDM7CQkgKiB1bmNoYXJnaW5nIGFzIHdlbGwuIFdlIGNoZWNrIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBtZW1jZ2lkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgfHwgaWQgIT0gbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSkgewogCQkJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKIAkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKIAkJCWVsc2UKIAkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMpOwogCQl9CiAJCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogfQogCiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDdhYzJiODhjODBhZTUuLjRlOWI3YjE2M2MwMWUgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTQ3MCw3ICYjNDM7NDcwLDcgQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LAogCSAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuCiAJICovCiAJZXZpY3Rpb25fbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ2lkKTsKLQlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSkKJiM0MzsJaWYgKGV2aWN0aW9uX21lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSkKIAkJZXZpY3Rpb25fbWVtY2cgPSBOVUxMOwogCXJjdV9yZWFkX3VubG9jaygpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQsIGlmIHNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uLiBGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBub3RoaW5nIG1hbGljaW91cyBoZXJlLiBUaGlzIGlzIGEgc3RhbmRhcmQgUUEvZGVmZW5zaXZlIGFuYWx5c2lzIG9mIGEga2VybmVsIHBhdGNoIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSBrZXJuZWwmIzM5O3Mgcm9idXN0bmVzcy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IG5vdCBhc2tpbmcgbWUgdG8gZG8gYW55dGhpbmcgZXhwbG9pdGF0aXZlLiBHb29kLgoKTm93LCB0aGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgc29tZSBpbnRlcmVzdGluZyBmaWxlczogYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYG1tL2xpc3RfbHJ1LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBUaGF0IHJpZ2h0IHRoZXJlIGdldHMgbXkgYXR0ZW50aW9uLiBUaGVzZSBmaWxlcyBhcmUgYWxsIGluIHRoZSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBjZ3JvdXBzLgoKVGhlIGNvbW1pdCByZWZhY3RvcnMgaG93IG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRHMgYXJlIGhhbmRsZWQuIFRoZSBvbGQgd2F5IGludm9sdmVkIGEgYHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRgIHdpdGggYSByZWZlcmVuY2UgY291bnQgZGlyZWN0bHkgd2l0aGluIGBtZW1fY2dyb3VwYC4gVGhlIG5ldyB3YXkgbW92ZXMgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBgb2JqX2Nncm91cGAgYW5kIHVzZXMgYW4gYHhhcnJheWAgdG8gbWFuYWdlIGBvYmpfY2dyb3VwYCBwb2ludGVycyBmb3IgcHJpdmF0ZSBJRHMuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyB0byBjcml0aWNhbCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYW5kIGFsc28gc29tZSBzd2FwIGFuZCBscnUgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4KClRoaXMgaXMgYSAqKm1ham9yKiogYXJlYSwgd2hpY2ggbWVhbnMgdGhpcyAqaXMqIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtIGNoYW5nZS4gSXQgdG91Y2hlcyBtZW1vcnkgY29udHJvbCwgc3dhcCBhY2NvdW50aW5nLCBhbmQgd29ya2luZ3NldCByZWZhdWx0aW5nIGxvZ2ljLiBUaGlzIGtpbmQgb2YgcmVmYWN0b3JpbmcgaXMgcmlwZSBmb3IgaW50cm9kdWNpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MsIGVzcGVjaWFsbHkgd2l0aCB0aGVzZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIGNoYW5nZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjaGFuZ2VzIHRvIHN3YXAgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgYmVjYXVzZSB0aG9zZSBhcmVhcyBjYW4gYmUgdHJpY2t5LiBSZXBhcmVudGluZyBhbmQgbGlzdF9scnUgb3BlcmF0aW9ucyBhcmUgb3RoZXIgZ29vZCB0YXJnZXRzLgoKTm93LCBsZXQmIzM5O3MgZmlyZSB1cCBncmVwIGFuZCBvdXIgY29kZSBzZWFyY2ggdG9vbHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCByZWxldmFudCBrZXJuZWwgc3ltYm9scyB0byBuYXJyb3cgZG93biBvdXIgZnV6emluZyB0YXJnZXRzIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTQ5MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0xMjU9X19icGZfa2Z1bmMgdW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9tZW1vcnlfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jLTEyNy17XG5tbS9icGZfbWVtY29udHJvbC5jOjEyODpcdGlmICh1bmxpa2VseShldmVudCBcdTAwM2U9IE1FTUNHX05SX01FTU9SWV9FVkVOVFMpKVxubW0vYnBmX21lbWNvbnRyb2wuYy0xMjktXHRcdHJldHVybiAodW5zaWduZWQgbG9uZyktMTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTEyOD1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEzNS1cdFx0YnJlYWs7XG5tbS9kYW1vbi9jb3JlLmM6MTEzNjpcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxubW0vZGFtb24vY29yZS5jOjExMzc6XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYy0xMTM4LVx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIzNz1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC1cdHN3aXRjaCAoZHN0LVx1MDAzZXR5cGUpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMjQxOlx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL2NvcmUuYy0xMjQyLVx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTE2NzY9c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE2ODItXHRzd2l0Y2ggKGRzdC1cdTAwM2V0eXBlKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTY4MzpcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmMtMTY4NC1cdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjkxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MTMtXHRcdHN3aXRjaCAoc3JjX2ZpbHRlci1cdTAwM2V0eXBlKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcxNDpcdFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL2NvcmUuYy0xNzE1LVx0XHRcdG5ld19maWx0ZXItXHUwMDNlbWVtY2dfaWQgPSBzcmNfZmlsdGVyLVx1MDAzZW1lbWNnX2lkO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODE2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI4MjQtXHRpZiAoaW52YWxpZF9tZW1fbm9kZShnb2FsLVx1MDAzZW5pZCkpIHtcbm1tL2RhbW9uL2NvcmUuYzoyODI1Olx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxubW0vZGFtb24vY29yZS5jLTI4MjYtXHRcdFx0cmV0dXJuIDA7XG5tbS9kYW1vbi9jb3JlLmM6MjgyNzpcdFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG5tbS9kYW1vbi9jb3JlLmMtMjgyOC1cdFx0XHRyZXR1cm4gMTAwMDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTI4MzItXHRpZiAoIW1lbWNnKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjgzMzpcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbm1tL2RhbW9uL2NvcmUuYy0yODM0LVx0XHRcdHJldHVybiAwO1xubW0vZGFtb24vY29yZS5jOjI4MzU6XHRcdGVsc2VcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xubW0vZGFtb24vY29yZS5jLTI4MzYtXHRcdFx0cmV0dXJuIDEwMDAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODQ4LVx0c2lfbWVtaW5mb19ub2RlKFx1MDAyNmksIGdvYWwtXHUwMDNlbmlkKTtcbm1tL2RhbW9uL2NvcmUuYzoyODQ5Olx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbm1tL2RhbW9uL2NvcmUuYy0yODUwLVx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xubW0vZGFtb24vY29yZS5jOjI4NTE6XHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbm1tL2RhbW9uL2NvcmUuYy0yODUyLVx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gdXNlZF9wYWdlcztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzAxNz1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMzQtXHRcdGJyZWFrO1xubW0vZGFtb24vY29yZS5jOjMwMzU6XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDM2Olx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG5tbS9kYW1vbi9jb3JlLmMtMzAzNy1cdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjYxPWJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjczLVx0XHRicmVhaztcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNzQ6XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI3NS1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMjEtXHRcdGJyZWFrO1xubW0vZGFtb24vcGFkZHIuYzoxMjI6XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vcGFkZHIuYy0xMjMtXHRcdGlmICghZm9saW8pIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01NTg9ZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTY3LVx0e1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU2ODpcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NjktXHRcdC5uYW1lID0gXCYjMzQ7bWVtY2dcJiMzNDssXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzU9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjUyLVx0e1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyNTM6XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI1NC1cdFx0Lm5hbWUgPSBcJiMzNDtub2RlX21lbWNnX3VzZWRfYnBcJiMzNDssXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNTYtXHR7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI1NzpcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjU4LVx0XHQubmFtZSA9IFwmIzM0O25vZGVfbWVtY2dfZnJlZV9icFwmIzM0Oyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgxOS1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODIwOlx0XHRpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfTUVNQ0cpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODIxLVx0XHRcdGVyciA9IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NzYtXHRcdFx0YnJlYWs7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3NzpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlA6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3ODpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cdFx0XHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9Nzc1PWRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWVzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03ODAtXHR7XG5tbS9kYW1vbi9zeXNmcy5jOjc4MTpcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbm1tL2RhbW9uL3N5c2ZzLmMtNzgyLVx0XHQubmFtZSA9IFwmIzM0O21lbWNnXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTkzNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xOTQ5LVx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3lzZnMuYzoxOTUwOlx0XHRpZiAoZmlsdGVyLVx1MDAzZXR5cGUgPT0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0cpIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTk1MS1cdFx0XHRpbnQgZXJyO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NzYtXHRcdGJyZWFrO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc3NzpcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc3ODpcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc3OS1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03ODc9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNi1cdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxNzpcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxOC1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gNDU2LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjQtXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MjU6XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjYtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDg5MCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA2Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTA3My1cdHN3aXRjaCAoc3JjLVx1MDAzZXR5cGUpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDc0Olx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDc1LVx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMDk1PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMTAtXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19maWx0ZXIpe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExMTE6XHRcdFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTEyLVx0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtOTYtXG5tbS9kZWJ1Zy5jOjk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtOTgtXHRpZiAoZm9saW8tXHUwMDNlbWVtY2dfZGF0YSlcbi0tXG5tbS9kZWJ1Zy5jPTE3MT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xODQtI2VuZGlmXG5tbS9kZWJ1Zy5jOjE4NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTE4Ni1cdFx0XCYjMzQ7b3duZXIgJXB4IFwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjEzLSNlbmRpZlxubW0vZGVidWcuYzoyMTQ6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy0yMTUtXHRcdG1tLVx1MDAzZW93bmVyLFxuLS1cbm1tL2ZvbGlvLmM9MTExMD12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMTIxLVxubW0vZm9saW8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmMtMTEyMy1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNjYtXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxubW0vaHVnZV9tZW1vcnkuYzoxMDY3Olx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OC1cdFx0XHRcdFx0XHQgXCYjMzQ7dGhwLWRlZmVycmVkX3NwbGl0XCYjMzQ7KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODk9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc5MS1cdFx0XHRmb2xpb19zZXRfaWRsZShuZXdfZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzozNzkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h1Z2VfbWVtb3J5LmMtMzc5My1cdFx0bmV3X2ZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jPTQ1PXN0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX2ZsYWdzKHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xubW0vaHdwb2lzb24taW5qZWN0LmM6Njc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHdwb2lzb24taW5qZWN0LmMtNjgtc3RhdGljIHU2NCBod3BvaXNvbl9maWx0ZXJfbWVtY2c7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IHBmbl9pbmplY3RfaW5pdCh2b2lkKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cbm1tL2h3cG9pc29uLWluamVjdC5jOjE5MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTMtXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXCYjMzQ7Y29ycnVwdC1maWx0ZXItbWVtY2dcJiMzNDssIDA2MDAsIGh3cG9pc29uX2Rpcixcbi0tXG5tbS9pbnRlcm5hbC5oPTY1PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4tLVxubW0vaW50ZXJuYWwuaC02Ny1cbm1tL2ludGVybmFsLmg6Njg6I2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxIFx1MDAzY1x1MDAzYyAxKVxubW0vaW50ZXJuYWwuaDo2OTojZGVmaW5lIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFICgxIFx1MDAzY1x1MDAzYyAyKVxubW0vaW50ZXJuYWwuaC03MC0jZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbi0tXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMzktXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy0xNTAtfVxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vbGlzdF9scnUuYy0xNTItXG4tLVxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy00MjEtXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTQyMy1cdGlmICgqbnJfdG9fd2FsayBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xuLS1cbm1tL2xpc3RfbHJ1LmM9NDUxPXN0YXRpYyB2b2lkIGluaXRfb25lX2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbClcbi0tXG5tbS9saXN0X2xydS5jLTQ2MS1cbm1tL2xpc3RfbHJ1LmM6NDYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDYzLXN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG4tLVxubW0vbGlzdF9scnUuYz02NTk9c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTY2MS19XG5tbS9saXN0X2xydS5jOjY2MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9saXN0X2xydS5jLTY2My1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NjctXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTY2OS1cdGlmIChzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jPTY5Mj12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MDMtXG5tbS9saXN0X2xydS5jOjcwNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTcwNS1cdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI5OS1cdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG5tbS9tZW1jb250cm9sLXYxLmM6MzAwOlx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xubW0vbWVtY29udHJvbC12MS5jLTMwMS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTExMzAtICogY2dyb3VwIHYxIHVzZXJzcGFjZSB2bXByZXNzdXJlIGludGVyZmFjZSAobWVtb3J5LnByZXNzdXJlX2xldmVsIC9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNDIyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ2Ny1cdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxubW0vbWVtY29udHJvbC12MS5jOjE0Njg6XHRcdFx0XHRtZW1zdyA/IDAgOiBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSkge1xubW0vbWVtY29udHJvbC12MS5jLTE0NjktXHRcdFx0cmV0ID0gLUVCVVNZO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNDg1PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE1MDMtXHRcdGlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTA0Olx0XHRcdFx0XHRcdCAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpXG5tbS9tZW1jb250cm9sLXYxLmMtMTUwNS1cdFx0XHRucl9yZXRyaWVzLS07XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MjY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzOC0jaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wtdjEuYzoxODM5Olx0TUVNQ0dfU1dBUCxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVx0TlJfU1dBUENBQ0hFLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xOTg2PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9vb21fY29udHJvbF9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE5OTItXHRzZXFfcHJpbnRmKHNmLCBcJiMzNDtvb21fa2lsbCAlbHVcXG5cJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MTk5MzpcdFx0ICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX09PTV9LSUxMXSkpO1xubW0vbWVtY29udHJvbC12MS5jLTE5OTQtXHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MjU9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xubW0vbWVtY29udHJvbC12MS5oOjI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wtdjEuaC0zMC1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9ODY9ZXh0ZXJuIHN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXTtcbm1tL21lbWNvbnRyb2wtdjEuaC04Ny1cbm1tL21lbWNvbnRyb2wtdjEuaDo4ODojZWxzZVx0LyogQ09ORklHX01FTUNHX1YxICovXG5tbS9tZW1jb250cm9sLXYxLmgtODktXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTExOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX3NrbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7fVxubW0vbWVtY29udHJvbC12MS5oLTExOS1cbm1tL21lbWNvbnRyb2wtdjEuaDoxMjA6I2VuZGlmXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbm1tL21lbWNvbnRyb2wtdjEuaC0xMjEtXG4tLVxubW0vbWVtY29udHJvbC5jPTE0MT1zdGF0aWMgdm9pZCBtZW1jZ191bmNoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTE0Mi17XG5tbS9tZW1jb250cm9sLmM6MTQzOlx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19LTUVNLCAtbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTE0NC1cdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTIxNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzNC1cbm1tL21lbWNvbnRyb2wuYzoyMzU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTIzNi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfc3RhdF9pdGVtc1tdID0ge1xubW0vbWVtY29udHJvbC5jOjQzODpcdE1FTUNHX1NXQVAsXG5tbS9tZW1jb250cm9sLmM6NDM5Olx0TUVNQ0dfU09DSyxcbm1tL21lbWNvbnRyb2wuYzo0NDA6XHRNRU1DR19QRVJDUFVfQixcbm1tL21lbWNvbnRyb2wuYzo0NDE6XHRNRU1DR19LTUVNLFxubW0vbWVtY29udHJvbC5jOjQ0MjpcdE1FTUNHX1pTV0FQX0IsXG5tbS9tZW1jb250cm9sLmM6NDQzOlx0TUVNQ0dfWlNXQVBQRUQsXG5tbS9tZW1jb250cm9sLmM6NDQ0Olx0TUVNQ0dfWlNXQVBfSU5DT01QLFxubW0vbWVtY29udHJvbC5jLTQ0NS19O1xubW0vbWVtY29udHJvbC5jLTQ0Ni1cbm1tL21lbWNvbnRyb2wuYzo0NDc6I2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpXG5tbS9tZW1jb250cm9sLmM6NDQ4OiNkZWZpbmUgTUVNQ0dfVk1TVEFUX1NJWkUgKE5SX01FTUNHX05PREVfU1RBVF9JVEVNUyAmIzQzOyBcXFxubW0vbWVtY29udHJvbC5jLTQ0OS1cdFx0XHQgICBBUlJBWV9TSVpFKG1lbWNnX3N0YXRfaXRlbXMpKVxubW0vbWVtY29udHJvbC5jLTQ1MC0jZGVmaW5lIEJBRF9TVEFUX0lEWChpbmRleCkgKCh1MzIpKGluZGV4KSBcdTAwM2U9IFU4X01BWClcbm1tL21lbWNvbnRyb2wuYzo0NTE6c3RhdGljIHU4IG1lbV9jZ3JvdXBfc3RhdHNfaW5kZXhbTUVNQ0dfTlJfU1RBVF0gX19yZWFkX21vc3RseTtcbm1tL21lbWNvbnRyb2wuYy00NTItXG5tbS9tZW1jb250cm9sLmM9NDUzPXN0YXRpYyB2b2lkIGluaXRfbWVtY2dfc3RhdHModm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU2LVxubW0vbWVtY29udHJvbC5jOjQ1NzpcdEJVSUxEX0JVR19PTihNRU1DR19OUl9TVEFUIFx1MDAzZT0gVThfTUFYKTtcbm1tL21lbWNvbnRyb2wuYy00NTgtXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MC1cbm1tL21lbWNvbnRyb2wuYzo0NjE6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVM7ICYjNDM7JiM0MztpLCAmIzQzOyYjNDM7ailcbm1tL21lbWNvbnRyb2wuYy00NjItXHRcdG1lbV9jZ3JvdXBfc3RhdHNfaW5kZXhbbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW2ldXSA9IGo7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ3Mz1zdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSB7XG5tbS9tZW1jb250cm9sLmMtNDc0LVx0LyogTG9jYWwgKENQVSBhbmQgY2dyb3VwKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ3NTpcdGxvbmcgc3RhdGVbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00NzYtXG5tbS9tZW1jb250cm9sLmMtNDc3LVx0LyogRGVsdGEgY2FsY3VsYXRpb24gZm9yIGxvY2tsZXNzIHVwd2FyZCBwcm9wYWdhdGlvbiAqL1xubW0vbWVtY29udHJvbC5jOjQ3ODpcdGxvbmcgc3RhdGVfcHJldltOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xubW0vbWVtY29udHJvbC5jLTQ3OS19O1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XG5tbS9tZW1jb250cm9sLmMtNDgyLVx0LyogQWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ4MzpcdGxvbmcgc3RhdGVbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00ODQtXG5tbS9tZW1jb250cm9sLmMtNDg1LVx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHN0YXRlICovXG5tbS9tZW1jb250cm9sLmM6NDg2Olx0bG9uZyBzdGF0ZV9sb2NhbFtOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xubW0vbWVtY29udHJvbC5jLTQ4Ny1cbm1tL21lbWNvbnRyb2wuYy00ODgtXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xubW0vbWVtY29udHJvbC5jOjQ4OTpcdGxvbmcgc3RhdGVfcGVuZGluZ1tOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xubW0vbWVtY29udHJvbC5jLTQ5MC19O1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Mi1cbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jLTYzMi1cbm1tL21lbWNvbnRyb2wuYzo2MzM6I2RlZmluZSBOUl9NRU1DR19FVkVOVFMgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KVxubW0vbWVtY29udHJvbC5jLTYzNC1zdGF0aWMgdTggbWVtX2Nncm91cF9ldmVudHNfaW5kZXhbTlJfVk1fRVZFTlRfSVRFTVNdIF9fcmVhZF9tb3N0bHk7XG4tLVxubW0vbWVtY29udHJvbC5jPTYzNj1zdGF0aWMgdm9pZCBpbml0X21lbWNnX2V2ZW50cyh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02NDQtXG5tbS9tZW1jb250cm9sLmM6NjQ1Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNQ0dfRVZFTlRTOyAmIzQzOyYjNDM7aSlcbm1tL21lbWNvbnRyb2wuYy02NDYtXHRcdG1lbV9jZ3JvdXBfZXZlbnRzX2luZGV4W21lbWNnX3ZtX2V2ZW50X3N0YXRbaV1dID0gaTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjU0PXN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTY2NC1cdC8qIExvY2FsIChDUFUgYW5kIGNncm91cCkgcGFnZSBzdGF0ZSBcdTAwMjYgZXZlbnRzICovXG5tbS9tZW1jb250cm9sLmM6NjY1Olx0bG9uZ1x0XHRcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcbm1tL21lbWNvbnRyb2wuYzo2NjY6XHR1bnNpZ25lZCBsb25nXHRcdGV2ZW50c1tOUl9NRU1DR19FVkVOVFNdO1xubW0vbWVtY29udHJvbC5jLTY2Ny1cbm1tL21lbWNvbnRyb2wuYy02NjgtXHQvKiBEZWx0YSBjYWxjdWxhdGlvbiBmb3IgbG9ja2xlc3MgdXB3YXJkIHByb3BhZ2F0aW9uICovXG5tbS9tZW1jb250cm9sLmM6NjY5Olx0bG9uZ1x0XHRcdHN0YXRlX3ByZXZbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY3MDpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX3ByZXZbTlJfTUVNQ0dfRVZFTlRTXTtcbm1tL21lbWNvbnRyb2wuYy02NzEtfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4tLVxubW0vbWVtY29udHJvbC5jPTY3Mz1zdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XG5tbS9tZW1jb250cm9sLmMtNjc0LVx0LyogQWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlKSBwYWdlIHN0YXRlIFx1MDAyNiBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzo2NzU6XHRsb25nXHRcdFx0c3RhdGVbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY3NjpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XG5tbS9tZW1jb250cm9sLmMtNjc3LVxubW0vbWVtY29udHJvbC5jLTY3OC1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBwYWdlIHN0YXRlIFx1MDAyNiBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzo2Nzk6XHRsb25nXHRcdFx0c3RhdGVfbG9jYWxbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY4MDpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG5tbS9tZW1jb250cm9sLmMtNjgxLVxubW0vbWVtY29udHJvbC5jLTY4Mi1cdC8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXG5tbS9tZW1jb250cm9sLmM6NjgzOlx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY4NDpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX3BlbmRpbmdbTlJfTUVNQ0dfRVZFTlRTXTtcbm1tL21lbWNvbnRyb2wuYy02ODUtXG4tLVxubW0vbWVtY29udHJvbC5jLTcwMC0gKiAyKSBGbHVzaCB0aGUgc3RhdHMgc3luY2hyb25vdXNseSBvbiByZWFkZXIgc2lkZSBvbmx5IHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhblxubW0vbWVtY29udHJvbC5jOjcwMTogKiAgICAoTUVNQ0dfQ0hBUkdFX0JBVENIICogbnJfY3B1cykgdXBkYXRlIGV2ZW50cy4gVGhvdWdoIHRoaXMgb3B0aW1pemF0aW9uXG5tbS9tZW1jb250cm9sLmM6NzAyOiAqICAgIHdpbGwgbGV0IHN0YXRzIGJlIG91dCBvZiBzeW5jIGJ5IGF0bW9zdCAoTUVNQ0dfQ0hBUkdFX0JBVENIICogbnJfY3B1cykgYnV0XG5tbS9tZW1jb250cm9sLmMtNzAzLSAqICAgIG9ubHkgZm9yIDIgc2Vjb25kcyBkdWUgdG8gKDEpLlxuLS1cbm1tL21lbWNvbnRyb2wuYz03MTE9c3RhdGljIGJvb2wgbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaChzdHJ1Y3QgbWVtY2dfdm1zdGF0cyAqdm1zdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzEzLVx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzKSBcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYzo3MTQ6XHRcdE1FTUNHX0NIQVJHRV9CQVRDSCAqIG51bV9vbmxpbmVfY3B1cygpO1xubW0vbWVtY29udHJvbC5jLTcxNS19XG4tLVxubW0vbWVtY29udHJvbC5jPTcxNz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxuLS1cbm1tL21lbWNvbnRyb2wuYy03NDAtXHRcdFx0XHRcdFx0ICAgIGFicyh2YWwpKTtcbm1tL21lbWNvbnRyb2wuYzo3NDE6XHRcdGlmIChzdGF0c191cGRhdGVzIFx1MDAzYyBNRU1DR19DSEFSR0VfQkFUQ0gpXG5tbS9tZW1jb250cm9sLmMtNzQyLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04MTg9Ym9vbCBtZW1jZ19zdGF0X2l0ZW1fdmFsaWQoaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy04MTkte1xubW0vbWVtY29udHJvbC5jOjgyMDpcdGlmICgodTMyKWlkeCBcdTAwM2U9IE1FTUNHX05SX1NUQVQpXG5tbS9tZW1jb250cm9sLmMtODIxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtY29udHJvbC5jPTgzMj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg0Ny1cbm1tL21lbWNvbnRyb2wuYzo4NDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyOC1cbm1tL21lbWNvbnRyb2wuYzo5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXG4tLVxubW0vbWVtY29udHJvbC5jPTExMDQ9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMTEtXG5tbS9tZW1jb250cm9sLmM6MTExMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTc3LVx0eyBcJiMzNDtmaWxlXCYjMzQ7LFx0XHRcdE5SX0ZJTEVfUEFHRVNcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1Nzg6XHR7IFwmIzM0O2tlcm5lbFwmIzM0OyxcdFx0XHRNRU1DR19LTUVNXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTc5LVx0eyBcJiMzNDtrZXJuZWxfc3RhY2tcJiMzNDssXHRcdE5SX0tFUk5FTF9TVEFDS19LQlx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTgxLVx0eyBcJiMzNDtzZWNfcGFnZXRhYmxlc1wmIzM0OyxcdFx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRVx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1ODI6XHR7IFwmIzM0O3BlcmNwdVwmIzM0OyxcdFx0XHRNRU1DR19QRVJDUFVfQlx0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU4MzpcdHsgXCYjMzQ7c29ja1wmIzM0OyxcdFx0XHRNRU1DR19TT0NLXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTg0LVx0eyBcJiMzNDt2bWFsbG9jXCYjMzQ7LFx0XHRcdE5SX1ZNQUxMT0NcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTg2LSNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYzoxNTg3Olx0eyBcJiMzNDt6c3dhcFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUF9CXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTg4Olx0eyBcJiMzNDt6c3dhcHBlZFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUFBFRFx0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU4OTpcdHsgXCYjMzQ7enN3YXBfaW5jb21wXCYjMzQ7LFx0XHRNRU1DR19aU1dBUF9JTkNPTVBcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTkwLSNlbmRpZlxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjQxPXN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV91bml0KGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjQzLVx0c3dpdGNoIChpdGVtKSB7XG5tbS9tZW1jb250cm9sLmM6MTY0NDpcdGNhc2UgTUVNQ0dfUEVSQ1BVX0I6XG5tbS9tZW1jb250cm9sLmM6MTY0NTpcdGNhc2UgTUVNQ0dfWlNXQVBfQjpcbm1tL21lbWNvbnRyb2wuYy0xNjQ2LVx0Y2FzZSBOUl9TTEFCX1JFQ0xBSU1BQkxFX0I6XG4tLVxubW0vbWVtY29udHJvbC5jPTE2OTY9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzAxLVxubW0vbWVtY29udHJvbC5jOjE3MDI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTE3MDMtdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzIyPXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3NjgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpOyBpJiM0MzsmIzQzOykge1xubW0vbWVtY29udHJvbC5jOjE3Njk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTE3NzAtXHRcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xODIwPXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTE4MjktXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYzoxODMwOlx0XHRtZW1vcnlfZmFpbGNudCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19NQVhdKTtcbm1tL21lbWNvbnRyb2wuYy0xODMxLVx0ZWxzZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODQwLVx0XHRcdEsoKHU2NClSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpKSxcbm1tL21lbWNvbnRyb2wuYzoxODQxOlx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODQyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODQzLVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTE4ODM9dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTE4ODUte1xubW0vbWVtY29udHJvbC5jOjE4ODY6XHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcbm1tL21lbWNvbnRyb2wuYzoxODg3Olx0XHRcdCAgZXZlbnQgPT0gTUVNQ0dfU1dBUF9GQUlMO1xubW0vbWVtY29udHJvbC5jLTE4ODgtXG5tbS9tZW1jb250cm9sLmM6MTg4OTpcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xubW0vbWVtY29udHJvbC5jOjE4OTA6XHRWTV9XQVJOX09OX09OQ0UoIWFsbG93X3NwaW5uaW5nIFx1MDAyNlx1MDAyNiBldmVudCAhPSBNRU1DR19NQVgpO1xubW0vbWVtY29udHJvbC5jLTE4OTEtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk4MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19NRU1DR2AuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGxvb2sgZm9yIHRob3NlIGRlZmluaXRpb25zIGlzIHByb2JhYmx5IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZWl0aGVyIGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCB3aGljaCBvZnRlbiBjb250YWlucyBjb3JlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBvcHRpb25zLCBvciBwZXJoYXBzIGBtbS9LY29uZmlnYCwgc2luY2UgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYSBjb3JlIGFzcGVjdC4gU28sIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIHR3byBmaWxlcyDigJMgYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCDigJMgdG8gdW5jb3ZlciB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgY2FuIGV2ZW4gYmUgZW5hYmxlZCBpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgaXQgdG8gd29yayBjb3JyZWN0bHksIG9yIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBuZWVkZWQsIGFuZCBhbHNvIHdoZXJlIGl0IGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLkkgdGhpbmsgSSByZW1lbWJlciBzb21ldGhpbmcgaW1wb3J0YW50IGFyb3VuZCB0aGUgS2NvbmZpZyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGFyb3VuZCBsaW5lIDEwODUsIGFzIHRoYXQgbG9jYXRpb24gaXMgZnJlcXVlbnRseSByZWxldmFudCB0byB0aGUgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmUgaXMgZGVmaW5lZCBhcm91bmQgdGhlcmUgYW5kIHdoYXQgaXRzIGludGVyYWN0aW9ucyBhcmUgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbjExMDA6XHRcbjExMDE6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjExMDI6XHRcdGJvb2xcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjExMDU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjExMDY6XHRcdGRlZmF1bHQgeVxuMTEwNzpcdFxuMTEwODpcdGNvbmZpZyBNRU1DR19WMVxuMTEwOTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTEwOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTExOlx0XHRkZWZhdWx0IG5cbjExMTI6XHRcdGhlbHBcbjExMTM6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTE0Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTE1Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTExNjpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMTc6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTE4Olx0XG4xMTE5Olx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgQ0dyb3VwcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgQ09ORklHX1NXQVBgIGFuZCBzZWUgaWYgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgZmxhZ3Mgb3IgcGFyYW1ldGVycyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gc3dhcCBiZWhhdmlvciB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBkbyBhIHF1aWNrIGF1ZGl0IGZvciBzd2FwIHJlbGF0ZWQgc2V0dGluZ3Mgd2l0aGluIHRoZSBnZW5lcmFsIGNvbmZpZy4KClRoZW4sIEkmIzM5O2xsIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiB0aGUgY29yZSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGV5JiMzOTtyZSBzdWJqZWN0IHRvIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiBzd2FwIHNwYWNlIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGZyYW1ld29yay4gQXJlIHRoZXkgYWx3YXlzIGNvbXBpbGVkIGluLCBvciBhcmUgdGhlcmUgY2lyY3Vtc3RhbmNlcywgY29uZmlndXJhdGlvbnMsIG9yIGJ1aWxkIG9wdGlvbnMgdGhhdCB3b3VsZCBjYXVzZSB0aGVtIHRvIGJlIG9taXR0ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTc1OD1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Nzk1LS8qKlxubW0vbWVtY29udHJvbC5jOjU3OTY6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTc5Ny0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTgwMi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1ODAzOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTgwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCB0aGUgYCNpZmRlZmBzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzd2FwIHVzYWdlLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gaXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcHJvYmFibHkgcmVsYXRlZCB0byBkaWZmZXJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIG1heWJlIGV2ZW4gZmVhdHVyZSBmbGFncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgYWN0dWFsbHkgY29udHJvbGxpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGZ1bmN0aW9uIGlzICpub3QqIHByZXNlbnQgYW5kIHdoeSwgYmVjYXVzZSB0aGF0IGRpcmVjdGx5IGltcGFjdHMgaG93IHN3YXAgY2hhcmdlcyBhcmUgaGFuZGxlZCBpbiBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdGhlcmUgYW5kIG5vdCBiZWluZyB0aGVyZSBmb3Igd2hhdGV2ZXIgdGhlIHVzZSBjYXNlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTc4NTpcdFx0bWVtY2dfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7bWVtX2Nncm91cFwmIzM0OywgbWVtY2dfc2l6ZSwgMCxcbjU3ODY6XHRcdFx0XHRcdFx0IFNMQUJfUEFOSUMgfCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpO1xuNTc4NzpcdFxuNTc4ODpcdFx0bWVtY2dfcG5fY2FjaGVwID0gS01FTV9DQUNIRShtZW1fY2dyb3VwX3Blcl9ub2RlLFxuNTc4OTpcdFx0XHRcdFx0ICAgICBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbjU3OTA6XHRcbjU3OTE6XHRcdHJldHVybiAwO1xuNTc5MjpcdH1cbjU3OTM6XHRcbjU3OTQ6XHQjaWZkZWYgQ09ORklHX1NXQVBcbjU3OTU6XHQvKipcbjU3OTY6XHQgKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cbjU3OTc6XHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbjU3OTg6XHQgKlxuNTc5OTpcdCAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJiMzOTtzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cdTAwM2Vzd2FwLlxuNTgwMDpcdCAqXG41ODAxOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cbjU4MDI6XHQgKi9cbjU4MDM6XHRpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNTgwNDpcdHtcbjU4MDU6XHRcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjU4MDY6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG41ODA3Olx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuNTgwODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTgwOTpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuNTgxMDpcdFx0dW5zaWduZWQgc2hvcnQgbWVtY2dpZDtcbjU4MTE6XHRcbjU4MTI6XHRcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG41ODEzOlx0XHRcdHJldHVybiAwO1xuNTgxNDpcdFxuNTgxNTpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG41ODE2Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG41ODE3Olx0XHRpZiAoIW9iamNnKVxuNTgxODpcdFx0XHRyZXR1cm4gMDtcbjU4MTk6XHRcbjU4MjA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjU4MjE6XHRcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG41ODIyOlx0XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuNTgyMzpcdFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG41ODI0Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGx5OiBgQ09ORklHX1NXQVBgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGJlY2F1c2Ugb2YgdGhvc2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGZ1bmN0aW9ucyDigJMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gQW5kIG9idmlvdXNseSwgYENPTkZJR19NRU1DR2AgaXMgYSByZXF1aXJlbWVudCwgc2luY2UgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gYG1lbWNvbnRyb2wub2AgYW5kIGFsbCB0aGUgcHJpdmF0ZSBJRCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBtZW1jZ3MuCgpCdXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLCBzbyBJJiMzOTttIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgYWJvdXQgYENPTkZJR19NRU1DR19WMWAuIFJpZ2h0LCBsb29raW5nIGF0IGBtbS9tZW1jb250cm9sLXYxLmNgLCBJIHNlZSBgbWVtY2cxX3N3YXBvdXRgIGlzIGNhbGxpbmcgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYC4gT2theSwgdGhhdCBhZGRzIGFub3RoZXIgcGllY2UgdG8gdGhlIHB1enpsZS4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcywgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQuIEkgc2VlIGEgZGVjZW50IG51bWJlciBvZiB0aGVtLgpUaGUgbGlzdCBpczoKMS4gIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYAoyLiAgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYAozLiAgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYAo0LiAgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYAo1LiAgYGxpc3RfbHJ1X3dhbGtfbm9kZWAKNi4gIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YAo3LiAgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgLyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgKENTUyBjYWxsYmFja3MpCjguICBgbWVtX2Nncm91cF9hbGxvY2AgLyBgbWVtX2Nncm91cF9mcmVlYCAvIGBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXRgIC8gYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXRgIC8gYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsYAoKSXQgbG9va3MgbGlrZSB0aGUgZmlyc3Qgc2l4IGFyZSBub24tc3RhdGljLCBzbywgZXhwb3J0ZWQsIGFuZCB0aGUgbGFzdCBmaXZlLCBzdGF0aWMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGJldHRlciwgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGl0cyBkZWZpbml0aW9uIGFuZCBjYWxsZXJzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAgYW5kIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODA3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTMtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODE0OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTUtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTI5Mz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTI5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyOTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjk5LXtcbi0tXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTQyOS1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9saXN0X2xydS5jOjQzMDpcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTtcbm1tL2xpc3RfbHJ1LmMtNDMxLVx0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MDg2PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTEwLS8qKlxubW0vbWVtY29udHJvbC5jOjQxMTE6ICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGEgbWVtY2cgZnJvbSBhIG1lbWNnIGlkXG5tbS9tZW1jb250cm9sLmMtNDExMi0gKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4tLVxubW0vbWVtY29udHJvbC5jLTQxMTctICovXG5tbS9tZW1jb250cm9sLmM6NDExODpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG5tbS9tZW1jb250cm9sLmMtNDExOS17XG4tLVxubW0vbWVtY29udHJvbC5jPTQzNDM9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM4My1cdC8qXG5tbS9tZW1jb250cm9sLmM6NDM4NDpcdCAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UmIzM5O3JlIGZ1bGx5IG9ubGluZS5cbm1tL21lbWNvbnRyb2wuYy00Mzg1LVx0ICpcbi0tXG5tbS9tZW1jb250cm9sLmM9NTM1Mj1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzYxLVx0cmN1X3JlYWRfbG9jaygpO1xubW0vbWVtY29udHJvbC5jOjUzNjI6XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbm1tL21lbWNvbnRyb2wuYy01MzYzLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbi0tXG5tbS93b3JraW5nc2V0LmM9MjczPXN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yODItXG5tbS93b3JraW5nc2V0LmM6MjgzOlx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7XG5tbS93b3JraW5nc2V0LmMtMjg0LVx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTQ3MS1cdCAqL1xubW0vd29ya2luZ3NldC5jOjQ3MjpcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG5tbS93b3JraW5nc2V0LmMtNDczLVx0aWYgKGV2aWN0aW9uX21lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVgIENhbGxlcnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UsIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgaXRzIGNhbGxlcnMuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNvcmUsIHNvIEkgZXhwZWN0IGEgZGVjZW50IG51bWJlciBvZiB0aGVtLCBsaWtlbHkgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgKndoeSogYmVoaW5kIHRob3NlIGNhbGxzLiBJcyBpdCBmb3IgaWRlbnRpZmljYXRpb24gd2l0aGluIGNncm91cHM/IFBlcmhhcHMgcmVzb3VyY2UgYWNjb3VudGluZz8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb250ZXh0IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgZXZlbiBkZXNpZ24gaW1wcm92ZW1lbnRzLiBBIHRhcmdldGVkIGFuYWx5c2lzIG9mIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MjY5PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yOTgtXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xubW0vbWVtY29udHJvbC12MS5jOjI5OTpcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG5tbS9tZW1jb250cm9sLXYxLmMtMzAwLVx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yMz1pbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xubW0vbWVtY29udHJvbC12MS5oLTI0LVxubW0vbWVtY29udHJvbC12MS5oOjI1OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLXYxLmgtMjYtXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDA4MT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTQwODUtXG5tbS9tZW1jb250cm9sLmM6NDA4NjpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbm1tL21lbWNvbnRyb2wuYy00MDg3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTgwMz1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODM5LVxubW0vbWVtY29udHJvbC5jOjU4NDA6XHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtNTg0MS1cdG1lbWNnaWQgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBGdW5jdGlvbiBTZWxlY3Rpb24gYW5kIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgbW9zdCBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGdvdCBhIGxpc3QgYWxyZWFkeTogYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3M6IGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgYWxsIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBhY2Nlc3NpYmxlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZWlyIGRlZmluaXRpb25zLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbGlzdF9scnUuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gQWgsIHllcy4gQ29uZmlybWVkOgoKKiAgIEluIGBtbS9tZW1jb250cm9sLmNgLCB3ZSBoYXZlIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZWAsIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgYXJlIGFsbCBub24tc3RhdGljLgoqICAgSW4gYG1tL2xpc3RfbHJ1LmNgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCBpcyBub24tc3RhdGljLgoqICAgQW5kIGZpbmFsbHksIGluIGBtbS93b3JraW5nc2V0LmNgLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgaXMgYWxzbyBub24tc3RhdGljLgoKRXhjZWxsZW50LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIGBNRU1DR2Ag4oCTIHRoZSBjb3JlIGNvbmZpZyBmb3IgbWVtb3J5IGNncm91cCBzdXBwb3J0LCBlbmFibGluZyBgbW0vbWVtY29udHJvbC5jYCDigJMgYW5kIGBTV0FQYCB0byBlbmFibGUgc3dhcCBzdXBwb3J0IGFuZCwgaW1wb3J0YW50bHksIHRoZSBzd2FwIGFjY291bnRpbmcgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYENPTkZJR19NRU1DR2AgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLCBkZXBlbmRpbmcgb24gbm90aGluZyBkaXJlY3RseS4gSXQgZG9lcywgaG93ZXZlciwgaW5kaXJlY3RseSBkZXBlbmQgb24gb3RoZXIgY29uZmlncy4gYENPTkZJR19TV0FQYCBhbHNvIGhhcyBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGl0cyBkZWZpbml0aW9uIGluIGBtbS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSYjMzk7dmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0ODMKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBkZWNpZGUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgd29ydGggaW5jbHVkaW5nIG9yIHRlc3RpbmcgYWxvbmdzaWRlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBsaXN0ZWQgYXMgb3B0aW9uYWwsIGJ1dCBnaXZlbiB0aGUgY3JpdGljYWwgcm9sZSBvZiBgTUVNQ0dgIGFuZCBgU1dBUGAgaW4gdGhpcyBhcmVhLCBpdCBtaWdodCBiZSByZWxldmFudC4gQmVzdCB0byBpbmNsdWRlIGl0IGZvciBub3cgdG8ga2VlcCB0aGluZ3MgdGhvcm91Z2guIFJpZ2h0LCB0aW1lIHRvIGdlbmVyYXRlIHRoZSBvdXRwdXRzIHdpdGggYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1fY2dyb3VwIHByaXZhdGUgSUQgbWFuYWdlbWVudCwgY2hhbmdpbmcgb3duZXJzaGlwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnJvbSBtZW1fY2dyb3VwIGRpcmVjdGx5IHRvIG9ial9jZ3JvdXAgKG1lbWNnaWRfcmVmKSBzbyB0aGF0IHByaXZhdGUgSURzIHJlZmVyZW5jZSBvYmpfY2dyb3VwIGFuZCBhbGxvdyBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVwYXJlbnRpbmcgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiBhbmQgc3dhcCBhY2NvdW50aW5nLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYW5nZXMgdGhhdCBhZmZlY3Qgc3dhcCBjaGFyZ2luZy91bmNoYXJnaW5nLCBsaXN0X2xydSB0cmF2ZXJzYWwsIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGBtZW1jZ2lkYCwgYG9iamNnYCwgYG1lbWNnYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkIGluIGJyYW5jaGluZyBvciBhc3NpZ25tZW50cy5cbi0gTm8gdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGZpZWxkcyBhcmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIFRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHJlZmNvdW50X3QsIHBlcmNwdV9yZWYsIFJDVSwgWEFycmF5KS5cbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWY4NjUzNjAwYTIyN2RiNzk5ZDZmMzgxOTIxNmRiYjU5NWVjYWM2MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMTk6NDY6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IGYyMjczNDhhM2YyNGEuLmVhZmM4MTdmZjI0NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC02NiwxMSAmIzQzOzY2LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUgewogCiAjZGVmaW5lIE1FTV9DR1JPVVBfSURfU0hJRlQJMTYKIAotc3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCB7Ci0JaW50IGlkOwotCXJlZmNvdW50X3QgcmVmOwotfTsKLQogc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1Owogc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1Owogc3RydWN0IG1lbWNnX3Ztc3RhdHM7CkBAIC0xNzMsNiAmIzQzOzE2OCw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHsKIAlzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWF0b21pY190IG5yX2NoYXJnZWRfYnl0ZXM7CiYjNDM7CXJlZmNvdW50X3QgbWVtY2dpZF9yZWY7CiAJdW5pb24gewogCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIHByb3RlY3RlZCBieSBvYmpjZ19sb2NrICovCiAJCXN0cnVjdCByY3VfaGVhZCByY3U7CkBAIC0xODksOCAmIzQzOzE4NSw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHsKIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CiAKLQkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KLQlzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkOwomIzQzOwkvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqLwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7CiAKIAkvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovCiAJc3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7CQkvKiBCb3RoIHYxICZhbXA7IHYyICovCkBAIC0yNTUsNiAmIzQzOzI1MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKICNlbmRpZgogCWludCBrbWVtY2dfaWQ7CiAKJiM0MzsJLyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovCiYjNDM7CWludCBpZDsKJiM0MzsKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwogCXN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0OwogI2VuZGlmCkBAIC04MTAsNyAmIzQzOzgwOSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBtZW1jZy0mZ3Q7aWQuaWQ7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7aWQ7CiB9CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpOwogCmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuYwppbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NAotLS0gYS9tbS9saXN0X2xydS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmMKQEAgLTQyOCw3ICYjNDM7NDI4LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsCiAJCXhhX2Zvcl9lYWNoKCZhbXA7bHJ1LSZndDt4YSwgaW5kZXgsIG1scnUpIHsKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCW1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpOwotCQkJaWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHsKJiM0MzsJCQlpZiAoIW1lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHsKIAkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAyNTZiNjhmZmNhNzBlLi44NGRjYWIzYWNiOGEyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0zNzczLDcgJiM0MzszNzczLDcgQEAgc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCiAJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDttZW1jZ19rbWVtX29ubGluZV9rZXkpOwogCi0JbWVtY2ctJmd0O2ttZW1jZ19pZCA9IG1lbWNnLSZndDtpZC5pZDsKJiM0MzsJbWVtY2ctJmd0O2ttZW1jZ19pZCA9IG1lbWNnLSZndDtpZDsKIH0KIAogc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKQEAgLTQwMzIsMjUgJiM0Mzs0MDMyLDY1IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTsKIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7Ci0JaWYgKG1lbWNnLSZndDtpZC5pZCAmZ3Q7IDApIHsKLQkJeGFfZXJhc2UoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQuaWQpOwotCQltZW1jZy0mZ3Q7aWQuaWQgPSAwOwomIzQzOwlpZiAobWVtY2ctJmd0O2lkICZndDsgMCkgewomIzQzOwkJeGFfZXJhc2UoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQpOwomIzQzOwkJbWVtY2ctJmd0O2lkID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiYjNDM7c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywKJiM0MzsJCXVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbikKIHsKLQlpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sICZhbXA7bWVtY2ctJmd0O2lkLnJlZikpIHsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlOwogCi0JCS8qIE1lbWNnIElEIHBpbnMgQ1NTICovCi0JCWNzc19wdXQoJmFtcDttZW1jZy0mZ3Q7Y3NzKTsKJiM0MzsJaWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCAmYW1wO29iamNnLSZndDttZW1jZ2lkX3JlZikpIHsKJiM0MzsJCW9iamNnX2ZyZWUgPSB4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJCVZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7CiYjNDM7CiYjNDM7CQkvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqLwomIzQzOwkJb2JqX2Nncm91cF9wdXQob2JqY2cpOwogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQgLSBwdXQgbWVtY2dpZCBhbmQgZ2V0IHRoZSBuZWFyZXN0IG9ubGluZSBtZW1jZwomIzQzOyAqIEBpZDogdGhlIG1lbWNnIHByaXZhdGUgaWQgZ290IGZyb20gbWVtX2Nncm91cF9pZF9nZXRfb25saW5lCiYjNDM7ICogQG46IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcHV0CiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlvYmpjZyA9IHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CWlmICh1bmxpa2VseSghb2JqY2cpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CXdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkKJiM0MzsJCW1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwomIzQzOwomIzQzOwlfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gbWVtY2c7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7CV9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy0mZ3Q7aWRfb2JqY2csIG1lbWNnLSZndDtpZCwgMSk7CiYjNDM7fQomIzQzOwogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiB7Ci0Jd2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgJmFtcDttZW1jZy0mZ3Q7aWQucmVmKSkgewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJb2JqY2cgPSBtZW1jZy0mZ3Q7aWRfb2JqY2c7CiYjNDM7CiYjNDM7CXdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sICZhbXA7b2JqY2ctJmd0O21lbWNnaWRfcmVmKSkgewogCQkvKgogCQkgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQmIzM5O3MgcmVmY291bnQgbXVzdAogCQkgKiBhbHdheXMgYmUgJmd0Oz0gMS4KQEAgLTQwNjAsNyAmIzQzOzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW4KIAkJCWJyZWFrOwogCQl9CiAJCW1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwomIzQzOwkJb2JqY2cgPSBtZW1jZy0mZ3Q7aWRfb2JqY2c7CiAJfQomIzQzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gbWVtY2c7CiB9CiAKQEAgLTQwNjksMTEgJiM0Mzs0MTEyLDI0IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuCiAgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwCiAgKgogICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuCiYjNDM7ICoKJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC4KICAqLwogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKQogewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTsKLQlyZXR1cm4geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsKJiM0MzsJb2JqY2cgPSB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CWlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKIH0KIAogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKQpAQCAtNDE3NCw3ICYjNDM7NDIzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCWlmICghbWVtY2cpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZXJyb3IgPSB4YV9hbGxvYygmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsICZhbXA7bWVtY2ctJmd0O2lkLmlkLCBOVUxMLAomIzQzOwllcnJvciA9IHhhX2FsbG9jKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgJmFtcDttZW1jZy0mZ3Q7aWQsIE5VTEwsCiAJCQkgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKQEAgLTQzMTksOSAmIzQzOzQzNzUsMTAgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkJCQkgICBGTFVTSF9USU1FKTsKIAlscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7CiAKLQkvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi8KLQlyZWZjb3VudF9zZXQoJmFtcDttZW1jZy0mZ3Q7aWQucmVmLCAxKTsKLQljc3NfZ2V0KGNzcyk7CiYjNDM7CS8qIENTUyBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIG9iaiBjZ3JvdXAgKi8KJiM0MzsJbWVtY2ctJmd0O2lkX29iamNnID0gb2JqY2c7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZF9vYmpjZy0mZ3Q7bWVtY2dpZF9yZWYsIDEpOwomIzQzOwlvYmpfY2dyb3VwX2dldChtZW1jZy0mZ3Q7aWRfb2JqY2cpOwogCiAJLyoKIAkgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJiMzOTtyZSBmdWxseSBvbmxpbmUuCkBAIC00MzMzLDcgJiM0Mzs0MzkwLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZQogCSAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy4KIAkgKi8KLQl4YV9zdG9yZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZC5pZCwgbWVtY2csIEdGUF9LRVJORUwpOwomIzQzOwl4YV9zdG9yZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZCwgbWVtY2ctJmd0O2lkX29iamNnLCBHRlBfS0VSTkVMKTsKIAogCXJldHVybiAwOwogZnJlZV9vYmpjZzoKQEAgLTQzODUsNyAmIzQzOzQ0NDIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAKIAlkcmFpbl9hbGxfc3RvY2sobWVtY2cpOwogCi0JbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7CiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKG1lbWNnKTsKIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKQEAgLTU3NTAsNiAmIzQzOzU4MDcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJdW5zaWduZWQgc2hvcnQgbWVtY2dpZDsKIAogCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCXJldHVybiAwOwpAQCAtNTc2NywyMiAmIzQzOzU4MjUsMjQgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuIDA7CiAJfQogCi0JbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpOwotCS8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqLwotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKQomIzQzOwkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgJmFtcDsmYW1wOwogCSAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMsICZhbXA7Y291bnRlcikpIHsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTsKIAomIzQzOwltZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7CiYjNDM7CW1lbWNnaWQgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwotCV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9wYWdlcywKLQkJCSAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7CiYjNDM7CV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9wYWdlcywgbWVtY2dpZCk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU3OTgsMTggJiM0Mzs1ODU4LDIzIEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7CiYjNDM7CW1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChpZCwgbnJfcGFnZXMpOwogCWlmIChtZW1jZykgewotCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgbWVtY2cgd2FzIG9mZmxpbmUgYW5kIHJlcGFyZW50ZWQgdG8gcm9vdCwgc3dhcCBuZWVkcwomIzQzOwkJICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIHx8IGlkICE9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpIHsKIAkJCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbXN3LCBucl9wYWdlcyk7CiAJCQllbHNlCiAJCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O3N3YXAsIG5yX3BhZ2VzKTsKIAkJfQogCQltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIH0KIAogbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li40ZTliN2IxNjNjMDFlIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC00NzAsNyAmIzQzOzQ3MCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCwKIAkgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLgogCSAqLwogCWV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7Ci0JaWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiYjNDM7CWlmIChldmljdGlvbl9tZW1jZyAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiAJCWV2aWN0aW9uX21lbWNnID0gTlVMTDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vbGlzdF9scnUuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpUaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkYCBpcyBnb25lLiBJbnN0ZWFkLCBgc3RydWN0IG9ial9jZ3JvdXBgIGdldHMgYSBgcmVmY291bnRfdCBtZW1jZ2lkX3JlZmAsIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIGdldHRpbmcgYSBgc3RydWN0IG9ial9jZ3JvdXAgKmlkX29iamNnO2AgYW5kIGFuIGBpbnQgaWQ7YC4gVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2YgbnVsbCBjaGVja3MgaW4gYG1tL2xpc3RfbHJ1LmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gV2UmIzM5O3JlIGdldHRpbmcgc29tZSBuZXcgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgIGZvciBtYW5hZ2luZyB0aGUgcHJpdmF0ZSBJRHMgYW5kIHRoZWlyIHJlZmNvdW50aW5nLCBhbmQgbW9kaWZpY2F0aW9ucyBpbiByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBtZW1fY2dyb3VwX2FsbG9jYCwgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgZXRjLiBQbHVzLCBpdCB0b3VjaGVzIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYC4gVGhhdCYjMzk7cyBhIGdvb2QgYW1vdW50IG9mIGNodXJuIQoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBOb3BlLCBubyBkaXJlY3QgY29weWluZyBvZiBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHZpYSB0aGluZ3MgbGlrZSBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGxzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY29tZXMgdG8gbWluZC4gVGhhdCYjMzk7cyBhIHJlbGllZi4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE9rYXksIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2l0aCBhbGwgdGhpcyBzdHJ1Y3QgbWFuaXB1bGF0aW9uLCBJIG5lZWQgdG8gZm9jdXMgb24gc3RydWN0dXJlIGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgaG93IHRoZXNlIG5ldyBzdHJ1Y3R1cmVzIGludGVyYWN0IHdpdGggZXhpc3RpbmcgY29kZSwgZXNwZWNpYWxseSB0aGUgbmV3IGBvYmpfY2dyb3VwYC4gSXQmIzM5O3MgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZCBpbiBhIGNvbmRpdGlvbmFsLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgaG93IGBzdHJ1Y3Qgb2JqX2Nncm91cGAgaXMgYWxsb2NhdGVkLiBMZXQmIzM5O3MgZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGtlcm5lbCB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xNDk9c3RhdGljIHZvaWQgb2JqX2Nncm91cF9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxubW0vbWVtY29udHJvbC5jLTE5NS1cbm1tL21lbWNvbnRyb2wuYzoxOTY6c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG5tbS9tZW1jb250cm9sLmMtMTk3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM0Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MzU5LVx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbm1tL21lbWNvbnRyb2wuYzo0MzYwOlx0XHRvYmpjZyA9IG9ial9jZ3JvdXBfYWxsb2MoKTtcbm1tL21lbWNvbnRyb2wuYy00MzYxLVx0XHRpZiAoIW9iamNnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBvYmpfY2dyb3VwX2FsbG9jKioKCk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzIG9mIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyBkaXNzZWN0IGBvYmpfY2dyb3VwX2FsbG9jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IHRoZXNlIG9iamVjdCBjZ3JvdXBzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHNpbmNlIHdlJiMzOTt2ZSBiZWVuIHNlZWluZyBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yIHJlY2VudGx5LiBJJiMzOTttIGFzc3VtaW5nLCBhcyB1c3VhbCwgaXQmIzM5O3Mgbm90IGEgdHJpdmlhbCBhbGxvY2F0aW9uLCBhbmQgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCBhbnkgc3VidGxlIGluZWZmaWNpZW5jaWVzIGluIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGl0c2VsZiwgb3IgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcy4gS25vd2luZyBteSBsdWNrLCB0aGVyZeKAmWxsIGJlIHNvbWUgdHJpY2t5IHBvaW50ZXIgYXJpdGhtZXRpYyBpbiB0aGVyZSB0b28uLi4gbG9va2luZyBmb3J3YXJkIHRvIGl0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZvYmpjZ19sb2NrLCBmbGFncyk7XG4gMTkxOlx0XG4gMTkyOlx0XHRwZXJjcHVfcmVmX2V4aXQocmVmKTtcbiAxOTM6XHRcdGtmcmVlX3JjdShvYmpjZywgcmN1KTtcbiAxOTQ6XHR9XG4gMTk1Olx0XG4gMTk2Olx0c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG4gMTk3Olx0e1xuIDE5ODpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDE5OTpcdFx0aW50IHJldDtcbiAyMDA6XHRcbiAyMDE6XHRcdG9iamNnID0ga3phbGxvY19vYmooc3RydWN0IG9ial9jZ3JvdXApO1xuIDIwMjpcdFx0aWYgKCFvYmpjZylcbiAyMDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjA0Olx0XG4gMjA1Olx0XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2b2JqY2ctXHUwMDNlcmVmY250LCBvYmpfY2dyb3VwX3JlbGVhc2UsIDAsXG4gMjA2Olx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4gMjA3Olx0XHRpZiAocmV0KSB7XG4gMjA4Olx0XHRcdGtmcmVlKG9iamNnKTtcbiAyMDk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjEwOlx0XHR9XG4gMjExOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZvYmpjZy1cdTAwM2VsaXN0KTtcbiAyMTI6XHRcdHJldHVybiBvYmpjZztcbiAyMTM6XHR9XG4gMjE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFjY291bnRpbmcgaW4gQ29udHJvbCBHcm91cHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMsIG9yIGBtZW1jZ2BzLCBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBzZWVtcyBsaWtlIGBvYmpjZ2AgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBhbmQgemVyby1pbml0aWFsaXplcyBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBtZW1vcnkgcmVnaW9uLiBUaGVuLCB0aGUgY3JpdGljYWwgcGFydCBqdW1wcyBvdXQgYXQgbWUgaW4gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWA6IHdlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbWVtY2dpZF9yZWZgIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIHNldCBpdCB0byAxLiBUaGlzIGlzIGEgZGVsaWJlcmF0ZSBpbml0aWFsaXphdGlvbiwgcmF0aGVyIHRoYW4gYSByZWxpYW5jZSBvbiBga3phbGxvY2AuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2h5IGlzIHRoYXQgcmVxdWlyZWQ/IFRvIGFuc3dlciB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gd29ya3MuIEkgc2hvdWxkIGNoZWNrIGBtZW1fY2dyb3VwX2FsbG9jYCB0byBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW1wb3J0YW50IGhhcHBlbmluZyBpbiB0aGVyZSB0aGF0IEnigJltIG1pc3NpbmcgdGhhdCBpcyByZWxhdGVkIHRvIHRoZSByZWZlcmVuY2UgY291bnRlci4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBlYXJsaWVyIGludGVyYWN0aW9uIHRoYXQgSSBuZWVkIHRvIGtub3cgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjE1Olx0XHRscnVfZ2VuX2V4aXRfbWVtY2cobWVtY2cpO1xuNDIxNjpcdFx0bWVtY2dfd2JfZG9tYWluX2V4aXQobWVtY2cpO1xuNDIxNzpcdFx0X19tZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xuNDIxODpcdH1cbjQyMTk6XHRcbjQyMjA6XHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQyMjE6XHR7XG40MjIyOlx0XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xuNDIyMzpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcbjQyMjQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQyMjU6XHRcdGludCBub2RlLCBjcHU7XG40MjI2Olx0XHRpbnQgX19tYXliZV91bnVzZWQgaTtcbjQyMjc6XHRcdGxvbmcgZXJyb3I7XG40MjI4Olx0XG40MjI5Olx0XHRtZW1jZyA9IGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG40MjMwOlx0XHRpZiAoIW1lbWNnKVxuNDIzMTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjQyMzI6XHRcbjQyMzM6XHRcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQsIE5VTEwsXG40MjM0Olx0XHRcdFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XG40MjM1Olx0XHRpZiAoZXJyb3IpXG40MjM2Olx0XHRcdGdvdG8gZmFpbDtcbjQyMzc6XHRcdGVycm9yID0gLUVOT01FTTtcbjQyMzg6XHRcbjQyMzk6XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbWVtY2dfdm1zdGF0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjQyNDA6XHRcdGlmICghbWVtY2ctXHUwMDNldm1zdGF0cylcbjQyNDE6XHRcdFx0Z290byBmYWlsO1xuNDI0MjpcdFxuNDI0MzpcdFx0bWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcbjQyNDQ6XHRcdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjQyNDU6XHRcdGlmICghbWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUpXG40MjQ2Olx0XHRcdGdvdG8gZmFpbDtcbjQyNDc6XHRcbjQyNDg6XHRcdGlmICghbWVtY2cxX2FsbG9jX2V2ZW50cyhtZW1jZykpXG40MjQ5Olx0XHRcdGdvdG8gZmFpbDtcbjQyNTA6XHRcbjQyNTE6XHRcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcbjQyNTI6XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbjQyNTM6XHRcdFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSwgY3B1KTtcbjQyNTQ6XHRcdFx0c3RhdGMtXHUwMDNlcGFyZW50X3BjcHUgPSBwc3RhdGNfcGNwdTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxNgoJCQkJCQkJb3V0cHV0OiAyOTUKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgRGV0ZWN0ZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIHN0cm9uZ2x5IHN1Z2dlc3RzIEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGNvcmUgYWxsb2NhdGlvbiwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIGFuZCBkYXRhIGZsb3cgYW5kLCBhcyBJIHN1c3BlY3RlZCwgZXZlcnl0aGluZyBsb29rcyBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBgbWVtY2dgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbi4gQWxsIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgd2l0aGluIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhcmUgbG9jYWxseSBkZWNsYXJlZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhlcmUgYXJlbiYjMzk7dCBhbnkga2VybmVsLXRvLXVzZXIgc3BhY2UgY29waWVzIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBsZWFrIGRhdGEuCgpUaGUgZW50aXJlIHNjb3BlIG9mIHRoZSBwYXRjaCBzZWVtcyBsaW1pdGVkIHRvIGludGVybmFsIGBtZW1jZ2AgcmVmY291bnRpbmcsIElEIG1hbmFnZW1lbnQgdXNpbmcgWEFycmF5LCBsaWZlY3ljbGUgdHJhY2tpbmcgZm9yIGBvYmpfY2dyb3VwYCBhbmQgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZXMsIGFuZCBzd2FwL0xSVSBjaGFyZ2luZy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJldm9sdmUgYXJvdW5kIGNvcnJlY3RseSBtYW5hZ2luZyB0aGUgcmVmZXJlbmNlIGNvdW50cyBhbmQgSURzIGFuZCBwaW5uaW5nIHRoZSBgb2JqX2Nncm91cGAuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBsaWtlbHkgc3RlbSBmcm9tIHJlZmVyZW5jZSBjb3VudGluZyBlcnJvcnMgKFVBRnMsIGRvdWJsZSBmcmVlcywgbGVha3MpLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGJ1Z3MuIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIHRoaW5ncyB0aGF0IHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbHMg4oCTIEtBU0FOLCBMT0NLREVQLCBhbmQgYHJlZmNvdW50X3RgIGNoZWNrcyDigJMgYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjYXRjaC4gSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCBhZGQgdmFsdWUgdG8uCgpJJiMzOTt2ZSBhbHNvIGRvbmUgYSBkZWVwIGRpdmUgb24gdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlczoKCiogICBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGludm9sdmUgYHN0cnVjdCBvYmpfY2dyb3VwYCAoYWRkaW5nIGByZWZjb3VudF90IG1lbWNnaWRfcmVmYCksIGBzdHJ1Y3QgbWVtX2Nncm91cGAgKGFkZGluZyBgaWRfb2JqY2dgLCByZXBsYWNpbmcgc3RydWN0IHdpdGggYGludCBpZGApLCBhbmQgdGhlIGlubGluZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9wcml2YXRlX2lkYC4KKiAgIEEgYCFtZW1jZyB8fGAgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gYG1tL2xpc3RfbHJ1LmNgLgoqICAgU2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgbWVtY2cgcHJpdmF0ZSBJRCBhbGxvY2F0aW9uIGFuZCByZWZjb3VudGluZyBsb2dpYyB0byBwaW4gYG9ial9jZ3JvdXBgIGluc3RlYWQgb2YgYG1lbWNnLSZndDtjc3NgIGhhcyBiZWVuIGRvbmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuCiogICBBIGBudWxsYCBjaGVjayBgZXZpY3Rpb25fbWVtY2cgJmFtcDsmYW1wO2AgaGFzIGJlZW4gYWRkZWQgdG8gYG1tL3dvcmtpbmdzZXQuY2AuCgpBIHF1aWNrIGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgbW9kaWZpY2F0aW9ucyBjb25maXJtIHRoZSBjb2RlIGlzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpXaXRoIHRoYXQgaW4gbWluZCwgSSYjMzk7bSBjb21mb3J0YWJsZSBwcmVwYXJpbmcgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1vcnkgY2dyb3VwIHByaXZhdGUgSUQgdHJhY2tpbmcgbWVjaGFuaXNtIHNvIHRoYXQgdGhlIHByaXZhdGUgSUQgcGlucyB0aGUgY29ycmVzcG9uZGluZyBvYmpfY2dyb3VwIHJhdGhlciB0aGFuIHRoZSBtZW1fY2dyb3VwIENTUyBkaXJlY3RseS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XG4tIEFsbCBtb2RpZmllZCBzdHJ1Y3R1cmVzIChgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgKSBhcmUgemVyby1hbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBga21lbV9jYWNoZV96YWxsb2MoKWAsIGFuZCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyAoYG1lbWNnaWRfcmVmYCwgYGlkX29iamNnYCwgYGlkYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gLyBvbmxpbmUgc3RhdGUuXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBmaWVsZHMgYXJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChyZWZjb3VudF90LCBwZXJjcHVfcmVmLCBSQ1UsIFhBcnJheSkuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCByZWZjb3VudCBkZWJ1Z2dpbmcsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGBtZW1jZ2lkYCwgYG9iamNnYCwgYG1lbWNnYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkIGluIGJyYW5jaGluZyBvciBhc3NpZ25tZW50cy5cbi0gTm8gdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGZpZWxkcyBhcmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIFRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHJlZmNvdW50X3QsIHBlcmNwdV9yZWYsIFJDVSwgWEFycmF5KS5cbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDc6MDEuODA2NDI2Njk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MTkxMzQyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibGlzdF9scnVfd2Fsa19ub2RlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3Rlc3RfcmVjZW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgZmllbGRzIGFyZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocmVmY291bnRfdCwgcGVyY3B1X3JlZiwgUkNVLCBYQXJyYXkpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRCBtYW5hZ2VtZW50LCBjaGFuZ2luZyBvd25lcnNoaXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBmcm9tIG1lbV9jZ3JvdXAgZGlyZWN0bHkgdG8gb2JqX2Nncm91cCAobWVtY2dpZF9yZWYpIHNvIHRoYXQgcHJpdmF0ZSBJRHMgcmVmZXJlbmNlIG9ial9jZ3JvdXAgYW5kIGFsbG93IHByb3BlciBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIGFuZCBzd2FwIGFjY291bnRpbmcuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhbmdlcyB0aGF0IGFmZmVjdCBzd2FwIGNoYXJnaW5nL3VuY2hhcmdpbmcsIGxpc3RfbHJ1IHRyYXZlcnNhbCwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDc6MDEuODA2NDMxMDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc0NTYxMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWY4NjUzNjAwYTIyN2RiNzk5ZDZmMzgxOTIxNmRiYjU5NWVjYWM2M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjQ2OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBmMjI3MzQ4YTNmMjRhLi5lYWZjODE3ZmYyNDRjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtNjYsMTEgKzY2LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUge1xcbiBcXG4gI2RlZmluZSBNRU1fQ0dST1VQX0lEX1NISUZUXFx0MTZcXG4gXFxuLXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQge1xcbi1cXHRpbnQgaWQ7XFxuLVxcdHJlZmNvdW50X3QgcmVmO1xcbi19O1xcbi1cXG4gc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1O1xcbiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHU7XFxuIHN0cnVjdCBtZW1jZ192bXN0YXRzO1xcbkBAIC0xNzMsNiArMTY4LDcgQEAgc3RydWN0IG9ial9jZ3JvdXAge1xcbiBcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0YXRvbWljX3QgbnJfY2hhcmdlZF9ieXRlcztcXG4rXFx0cmVmY291bnRfdCBtZW1jZ2lkX3JlZjtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIHByb3RlY3RlZCBieSBvYmpjZ19sb2NrICovXFxuIFxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuQEAgLTE4OSw4ICsxODUsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XFxuIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xcbiBcXG4tXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XFxuK1xcdC8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovXFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcXG4gXFxuIFxcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cXG4gXFx0c3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7XFx0XFx0LyogQm90aCB2MSBcXHUwMDI2IHYyICovXFxuQEAgLTI1NSw2ICsyNTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XFxuICNlbmRpZlxcbiBcXHRpbnQga21lbWNnX2lkO1xcbiBcXG4rXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuK1xcdGludCBpZDtcXG4rXFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDtcXG4gI2VuZGlmXFxuQEAgLTgxMCw3ICs4MDksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4rXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZDtcXG4gfVxcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxcbi0tLSBhL21tL2xpc3RfbHJ1LmNcXG4rKysgYi9tbS9saXN0X2xydS5jXFxuQEAgLTQyOCw3ICs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4gXFx0XFx0eGFfZm9yX2VhY2goXFx1MDAyNmxydS1cXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XFxuIFxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7XFxuLVxcdFxcdFxcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxuK1xcdFxcdFxcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xcbiBcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMjU2YjY4ZmZjYTcwZS4uODRkY2FiM2FjYjhhMiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMzc3Myw3ICszNzczLDcgQEAgc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXG4gXFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIFxcbi1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXFx1MDAzZWlkLmlkO1xcbitcXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXFx1MDAzZWlkO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbkBAIC00MDMyLDI1ICs0MDMyLDY1IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTtcXG4gXFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuLVxcdGlmIChtZW1jZy1cXHUwMDNlaWQuaWQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHhhX2VyYXNlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cXHUwMDNlaWQuaWQpO1xcbi1cXHRcXHRtZW1jZy1cXHUwMDNlaWQuaWQgPSAwO1xcbitcXHRpZiAobWVtY2ctXFx1MDAzZWlkIFxcdTAwM2UgMCkge1xcbitcXHRcXHR4YV9lcmFzZShcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXFx1MDAzZWlkKTtcXG4rXFx0XFx0bWVtY2ctXFx1MDAzZWlkID0gMDtcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxcbitzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbitcXHRcXHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4tXFx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLnJlZikpIHtcXG4tXFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xcbiBcXG4tXFx0XFx0LyogTWVtY2cgSUQgcGlucyBDU1MgKi9cXG4tXFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuK1xcdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXFx1MDAyNm9iamNnLVxcdTAwM2VtZW1jZ2lkX3JlZikpIHtcXG4rXFx0XFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XFxuK1xcdFxcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XFxuK1xcbitcXHRcXHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xcbitcXHRcXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XFxuIFxcdH1cXG4gfVxcbiBcXG4rLyoqXFxuKyAqIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQgLSBwdXQgbWVtY2dpZCBhbmQgZ2V0IHRoZSBuZWFyZXN0IG9ubGluZSBtZW1jZ1xcbisgKiBAaWQ6IHRoZSBtZW1jZyBwcml2YXRlIGlkIGdvdCBmcm9tIG1lbV9jZ3JvdXBfaWRfZ2V0X29ubGluZVxcbisgKiBAbjogY291bnQgb2YgcmVmZXJlbmNlcyB0byBwdXRcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRvYmpjZyA9IHhhX2xvYWQoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcXG4rXFx0aWYgKHVubGlrZWx5KCFvYmpjZykpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFx0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxcbitcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4rXFxuK1xcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xcbitcXG4rb3V0OlxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3tcXG4rXFx0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLVxcdTAwM2VpZF9vYmpjZywgbWVtY2ctXFx1MDAzZWlkLCAxKTtcXG4rfVxcbitcXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4tXFx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXFx1MDAyNm1lbWNnLVxcdTAwM2VpZC5yZWYpKSB7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0b2JqY2cgPSBtZW1jZy1cXHUwMDNlaWRfb2JqY2c7XFxuK1xcbitcXHR3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcXHUwMDI2b2JqY2ctXFx1MDAzZW1lbWNnaWRfcmVmKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQncyByZWZjb3VudCBtdXN0XFxuIFxcdFxcdCAqIGFsd2F5cyBiZSBcXHUwMDNlPSAxLlxcbkBAIC00MDYwLDcgKzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuK1xcdFxcdG9iamNnID0gbWVtY2ctXFx1MDAzZWlkX29iamNnO1xcbiBcXHR9XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIG1lbWNnO1xcbiB9XFxuIFxcbkBAIC00MDY5LDExICs0MTEyLDI0IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXFxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcXG4gICpcXG4gICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuXFxuKyAqXFxuKyAqIEByZXR1cm46IHRoZSBtZW1jZywgb3IgTlVMTCBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSByZXBhcmVudGVkLlxcbiAgKi9cXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxcbiB7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcXG4tXFx0cmV0dXJuIHhhX2xvYWQoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcXG4rXFxuK1xcdG9iamNnID0geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuK1xcdGlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBtZW1jZztcXG4gfVxcbiBcXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKVxcbkBAIC00MTc0LDcgKzQyMzAsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0aWYgKCFtZW1jZylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbi1cXHRlcnJvciA9IHhhX2FsbG9jKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLmlkLCBOVUxMLFxcbitcXHRlcnJvciA9IHhhX2FsbG9jKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLCBOVUxMLFxcbiBcXHRcXHRcXHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuQEAgLTQzMTksOSArNDM3NSwxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXHRcXHRcXHRcXHQgICBGTFVTSF9USU1FKTtcXG4gXFx0bHJ1X2dlbl9vbmxpbmVfbWVtY2cobWVtY2cpO1xcbiBcXG4tXFx0LyogT25saW5lIHN0YXRlIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgQ1NTICovXFxuLVxcdHJlZmNvdW50X3NldChcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLnJlZiwgMSk7XFxuLVxcdGNzc19nZXQoY3NzKTtcXG4rXFx0LyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqL1xcbitcXHRtZW1jZy1cXHUwMDNlaWRfb2JqY2cgPSBvYmpjZztcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlaWRfb2JqY2ctXFx1MDAzZW1lbWNnaWRfcmVmLCAxKTtcXG4rXFx0b2JqX2Nncm91cF9nZXQobWVtY2ctXFx1MDAzZWlkX29iamNnKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UncmUgZnVsbHkgb25saW5lLlxcbkBAIC00MzMzLDcgKzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXHQgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZVxcbiBcXHQgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuXFxuIFxcdCAqL1xcbi1cXHR4YV9zdG9yZShcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXFx1MDAzZWlkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7XFxuK1xcdHhhX3N0b3JlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cXHUwMDNlaWQsIG1lbWNnLVxcdTAwM2VpZF9vYmpjZywgR0ZQX0tFUk5FTCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gZnJlZV9vYmpjZzpcXG5AQCAtNDM4NSw3ICs0NDQyLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXG4gXFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFxuLVxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xcbitcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChtZW1jZyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuQEAgLTU3NTAsNiArNTgwNyw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXHR1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkO1xcbiBcXG4gXFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTU3NjcsMjIgKzU4MjUsMjQgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG4tXFx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxcbitcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gXFxuIFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbiBcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG4gXFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xcbi1cXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcXG4gXFxuK1xcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG4rXFx0bWVtY2dpZCA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcXG4tXFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxcbi1cXHRcXHRcXHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xcbitcXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVxcdTAwM2Vzd2FwKSwgbnJfcGFnZXMsIG1lbWNnaWQpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01Nzk4LDE4ICs1ODU4LDIzIEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcXG4rXFx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KGlkLCBucl9wYWdlcyk7XFxuIFxcdGlmIChtZW1jZykge1xcbi1cXHRcXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIG1lbWNnIHdhcyBvZmZsaW5lIGFuZCByZXBhcmVudGVkIHRvIHJvb3QsIHN3YXAgbmVlZHNcXG4rXFx0XFx0ICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fCBpZCAhPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKSB7XFxuIFxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuIFxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTtcXG4tXFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiB9XFxuIFxcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCA3YWMyYjg4YzgwYWU1Li40ZTliN2IxNjNjMDFlIDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC00NzAsNyArNDcwLDcgQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbiBcXHQgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLlxcbiBcXHQgKi9cXG4gXFx0ZXZpY3Rpb25fbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ2lkKTtcXG4tXFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXFxuK1xcdGlmIChldmljdGlvbl9tZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxcbiBcXHRcXHRldmljdGlvbl9tZW1jZyA9IE5VTEw7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDc6MDMuNDgyMDUxMDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTAwMTU4NjIwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiLFxuICAgIFwibWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtX2Nncm91cCBwcml2YXRlIElEIG1hbmFnZW1lbnQsIGNoYW5naW5nIG93bmVyc2hpcCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGZyb20gbWVtX2Nncm91cCBkaXJlY3RseSB0byBvYmpfY2dyb3VwIChtZW1jZ2lkX3JlZikgc28gdGhhdCBwcml2YXRlIElEcyByZWZlcmVuY2Ugb2JqX2Nncm91cCBhbmQgYWxsb3cgcHJvcGVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHJlcGFyZW50aW5nIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gYW5kIHN3YXAgYWNjb3VudGluZy4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHN3YXAgY2hhcmdpbmcvdW5jaGFyZ2luZywgbGlzdF9scnUgdHJhdmVyc2FsLCBhbmQgd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Zjg2NTM2MDBhMjI3ZGI3OTlkNmYzODE5MjE2ZGJiNTk1ZWNhYzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAxOTo0Njo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGYyMjczNDhhM2YyNGEuLmVhZmM4MTdmZjI0NGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC02NiwxMSArNjYsNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7XG4gXG4gI2RlZmluZSBNRU1fQ0dST1VQX0lEX1NISUZUXHQxNlxuIFxuLXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQge1xuLVx0aW50IGlkO1xuLVx0cmVmY291bnRfdCByZWY7XG4tfTtcbi1cbiBzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHU7XG4gc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1O1xuIHN0cnVjdCBtZW1jZ192bXN0YXRzO1xuQEAgLTE3Myw2ICsxNjgsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWZjbnQ7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRhdG9taWNfdCBucl9jaGFyZ2VkX2J5dGVzO1xuK1x0cmVmY291bnRfdCBtZW1jZ2lkX3JlZjtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiBwcm90ZWN0ZWQgYnkgb2JqY2dfbG9jayAqL1xuIFx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuQEAgLTE4OSw4ICsxODUsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gc3RydWN0IG1lbV9jZ3JvdXAge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xuIFxuLVx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkO1xuK1x0LyogVGhlIG9iamNnIGhvbGRpbmcgcHJpdmF0ZSBtZW1jZyBJRC4gKi9cbitcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcbiBcbiBcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgbWVtb3J5O1x0XHQvKiBCb3RoIHYxIFx1MDAyNiB2MiAqL1xuQEAgLTI1NSw2ICsyNTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gI2VuZGlmXG4gXHRpbnQga21lbWNnX2lkO1xuIFxuK1x0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4rXHRpbnQgaWQ7XG4rXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDtcbiAjZW5kaWZcbkBAIC04MTAsNyArODA5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4rKysgYi9tbS9saXN0X2xydS5jXG5AQCAtNDI4LDcgKzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHR4YV9mb3JfZWFjaChcdTAwMjZscnUtXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XG4gXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xuLVx0XHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4rXHRcdFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4gXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDI1NmI2OGZmY2E3MGUuLjg0ZGNhYjNhY2I4YTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM3NzMsNyArMzc3Myw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiBcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZC5pZDtcbitcdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTQwMzIsMjUgKzQwMzIsNjUgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbitcdGlmIChtZW1jZy1cdTAwM2VpZCBcdTAwM2UgMCkge1xuK1x0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCk7XG4rXHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbitzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuK1x0XHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XG4gXG4tXHRcdC8qIE1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbitcdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2b2JqY2ctXHUwMDNlbWVtY2dpZF9yZWYpKSB7XG4rXHRcdG9iamNnX2ZyZWUgPSB4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXHRcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XG4rXG4rXHRcdC8qIE1lbWNnIElEIHBpbnMgdGhlIG9iamNnICovXG4rXHRcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiBcdH1cbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dCAtIHB1dCBtZW1jZ2lkIGFuZCBnZXQgdGhlIG5lYXJlc3Qgb25saW5lIG1lbWNnXG4rICogQGlkOiB0aGUgbWVtY2cgcHJpdmF0ZSBpZCBnb3QgZnJvbSBtZW1fY2dyb3VwX2lkX2dldF9vbmxpbmVcbisgKiBAbjogY291bnQgb2YgcmVmZXJlbmNlcyB0byBwdXRcbisgKi9cbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKHVubGlrZWx5KCFvYmpjZykpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbitcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbitcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4rXG4rXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTtcbitcbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiBtZW1jZztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy1cdTAwM2VpZF9vYmpjZywgbWVtY2ctXHUwMDNlaWQsIDEpO1xuK31cbitcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiB7XG4tXHR3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRvYmpjZyA9IG1lbWNnLVx1MDAzZWlkX29iamNnO1xuK1xuK1x0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2b2JqY2ctXHUwMDNlbWVtY2dpZF9yZWYpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCdzIHJlZmNvdW50IG11c3RcbiBcdFx0ICogYWx3YXlzIGJlIFx1MDAzZT0gMS5cbkBAIC00MDYwLDcgKzQxMDAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbitcdFx0b2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbiBcdH1cbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbkBAIC00MDY5LDExICs0MTEyLDI0IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXG4gICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cFxuICAqXG4gICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuXG4rICpcbisgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0V0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7XG4tXHRyZXR1cm4geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuK1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXG5AQCAtNDE3NCw3ICs0MjMwLDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRpZiAoIW1lbWNnKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQuaWQsIE5VTEwsXG4rXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuIFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNDMxOSw5ICs0Mzc1LDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRcdFx0XHQgICBGTFVTSF9USU1FKTtcbiBcdGxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTtcbiBcbi1cdC8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZiwgMSk7XG4tXHRjc3NfZ2V0KGNzcyk7XG4rXHQvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovXG4rXHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IG9iamNnO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZW1lbWNnaWRfcmVmLCAxKTtcbitcdG9ial9jZ3JvdXBfZ2V0KG1lbWNnLVx1MDAzZWlkX29iamNnKTtcbiBcbiBcdC8qXG4gXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJ3JlIGZ1bGx5IG9ubGluZS5cbkBAIC00MzMzLDcgKzQzOTAsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiBcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cbiBcdCAqL1xuLVx0eGFfc3RvcmUoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcbitcdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLCBtZW1jZy1cdTAwM2VpZF9vYmpjZywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBmcmVlX29iamNnOlxuQEAgLTQzODUsNyArNDQ0Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG4gXG4tXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcbitcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKG1lbWNnKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbkBAIC01NzUwLDYgKzU4MDcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcdHVuc2lnbmVkIHNob3J0IG1lbWNnaWQ7XG4gXG4gXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01NzY3LDIyICs1ODI1LDI0IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpO1xuLVx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4rXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuIFxuIFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcywgXHUwMDI2Y291bnRlcikpIHtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbi1cdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbiBcbitcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbitcdG1lbWNnaWQgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuLVx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cdTAwM2Vzd2FwKSwgbnJfcGFnZXMsXG4tXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcbitcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLCBtZW1jZ2lkKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTc5OCwxOCArNTg1OCwyMyBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbitcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChpZCwgbnJfcGFnZXMpO1xuIFx0aWYgKG1lbWNnKSB7XG4tXHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgbWVtY2cgd2FzIG9mZmxpbmUgYW5kIHJlcGFyZW50ZWQgdG8gcm9vdCwgc3dhcCBuZWVkc1xuK1x0XHQgKiB1bmNoYXJnaW5nIGFzIHdlbGwuIFdlIGNoZWNrIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBtZW1jZ2lkLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIHx8IGlkICE9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpIHtcbiBcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdFx0fVxuIFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggN2FjMmI4OGM4MGFlNS4uNGU5YjdiMTYzYzAxZSAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNDcwLDcgKzQ3MCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbitcdGlmIChldmljdGlvbl9tZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiBcdFx0ZXZpY3Rpb25fbWVtY2cgPSBOVUxMO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0NzowMy40ODIwNTM2MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTk1MDg4MzIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQsIGlmIHNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uLiBGaXJzdCwgbGV0J3MgbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBtYWxpY2lvdXMgaGVyZS4gVGhpcyBpcyBhIHN0YW5kYXJkIFFBL2RlZmVuc2l2ZSBhbmFseXNpcyBvZiBhIGtlcm5lbCBwYXRjaCDigJMgaXQncyBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSBrZXJuZWwncyByb2J1c3RuZXNzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgbm90IGFza2luZyBtZSB0byBkbyBhbnl0aGluZyBleHBsb2l0YXRpdmUuIEdvb2QuXG5cbk5vdywgdGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIHNvbWUgaW50ZXJlc3RpbmcgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBtbS9saXN0X2xydS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCByaWdodCB0aGVyZSBnZXRzIG15IGF0dGVudGlvbi4gVGhlc2UgZmlsZXMgYXJlIGFsbCBpbiB0aGUgaGVhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wsIHNwZWNpZmljYWxseSBhcm91bmQgY2dyb3Vwcy5cblxuVGhlIGNvbW1pdCByZWZhY3RvcnMgaG93IG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRHMgYXJlIGhhbmRsZWQuIFRoZSBvbGQgd2F5IGludm9sdmVkIGEgYHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRgIHdpdGggYSByZWZlcmVuY2UgY291bnQgZGlyZWN0bHkgd2l0aGluIGBtZW1fY2dyb3VwYC4gVGhlIG5ldyB3YXkgbW92ZXMgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBgb2JqX2Nncm91cGAgYW5kIHVzZXMgYW4gYHhhcnJheWAgdG8gbWFuYWdlIGBvYmpfY2dyb3VwYCBwb2ludGVycyBmb3IgcHJpdmF0ZSBJRHMuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyB0byBjcml0aWNhbCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYW5kIGFsc28gc29tZSBzd2FwIGFuZCBscnUgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC5cblxuVGhpcyBpcyBhICoqbWFqb3IqKiBhcmVhLCB3aGljaCBtZWFucyB0aGlzICppcyogYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHN1YnN5c3RlbSBjaGFuZ2UuIEl0IHRvdWNoZXMgbWVtb3J5IGNvbnRyb2wsIHN3YXAgYWNjb3VudGluZywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdGluZyBsb2dpYy4gVGhpcyBraW5kIG9mIHJlZmFjdG9yaW5nIGlzIHJpcGUgZm9yIGludHJvZHVjaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLCBlc3BlY2lhbGx5IHdpdGggdGhlc2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBjaGFuZ2VzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjaGFuZ2VzIHRvIHN3YXAgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgYmVjYXVzZSB0aG9zZSBhcmVhcyBjYW4gYmUgdHJpY2t5LiBSZXBhcmVudGluZyBhbmQgbGlzdF9scnUgb3BlcmF0aW9ucyBhcmUgb3RoZXIgZ29vZCB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGZpcmUgdXAgZ3JlcCBhbmQgb3VyIGNvZGUgc2VhcmNoIHRvb2xzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgcmVsZXZhbnQga2VybmVsIHN5bWJvbHMgdG8gbmFycm93IGRvd24gb3VyIGZ1enppbmcgdGFyZ2V0cyBhbmQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODowNS40MzI5NDA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg5NDcxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTQ5MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xMjU9X19icGZfa2Z1bmMgdW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9tZW1vcnlfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTI3LXtcXG5tbS9icGZfbWVtY29udHJvbC5jOjEyODpcXHRpZiAodW5saWtlbHkoZXZlbnQgXFx1MDAzZT0gTUVNQ0dfTlJfTUVNT1JZX0VWRU5UUykpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xMjktXFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKS0xO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExMjg9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEzNS1cXHRcXHRicmVhaztcXG5tbS9kYW1vbi9jb3JlLmM6MTEzNjpcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MTEzNzpcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmMtMTEzOC1cXHRcXHRkc3QtXFx1MDAzZW5pZCA9IHNyYy1cXHUwMDNlbmlkO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMzc9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMjQxOlxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jLTEyNDItXFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTY3Nj1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjgyLVxcdHN3aXRjaCAoZHN0LVxcdTAwM2V0eXBlKSB7XFxubW0vZGFtb24vY29yZS5jOjE2ODM6XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9jb3JlLmMtMTY4NC1cXHRcXHRkc3QtXFx1MDAzZW1lbWNnX2lkID0gc3JjLVxcdTAwM2VtZW1jZ19pZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjkxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcxMy1cXHRcXHRzd2l0Y2ggKHNyY19maWx0ZXItXFx1MDAzZXR5cGUpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcxNDpcXHRcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbm1tL2RhbW9uL2NvcmUuYy0xNzE1LVxcdFxcdFxcdG5ld19maWx0ZXItXFx1MDAzZW1lbWNnX2lkID0gc3JjX2ZpbHRlci1cXHUwMDNlbWVtY2dfaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgxNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MjQtXFx0aWYgKGludmFsaWRfbWVtX25vZGUoZ29hbC1cXHUwMDNlbmlkKSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyODI1OlxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxcbm1tL2RhbW9uL2NvcmUuYy0yODI2LVxcdFxcdFxcdHJldHVybiAwO1xcbm1tL2RhbW9uL2NvcmUuYzoyODI3OlxcdFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjgyOC1cXHRcXHRcXHRyZXR1cm4gMTAwMDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjgzMi1cXHRpZiAoIW1lbWNnKSB7XFxubW0vZGFtb24vY29yZS5jOjI4MzM6XFx0XFx0aWYgKGdvYWwtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlApXFxubW0vZGFtb24vY29yZS5jLTI4MzQtXFx0XFx0XFx0cmV0dXJuIDA7XFxubW0vZGFtb24vY29yZS5jOjI4MzU6XFx0XFx0ZWxzZVxcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yODM2LVxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODQ4LVxcdHNpX21lbWluZm9fbm9kZShcXHUwMDI2aSwgZ29hbC1cXHUwMDNlbmlkKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mjg0OTpcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG5tbS9kYW1vbi9jb3JlLmMtMjg1MC1cXHRcXHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xcbm1tL2RhbW9uL2NvcmUuYzoyODUxOlxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjg1Mi1cXHRcXHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gdXNlZF9wYWdlcztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDE3PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDM0LVxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL2NvcmUuYzozMDM1OlxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDM2OlxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxcbm1tL2RhbW9uL2NvcmUuYy0zMDM3LVxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2MT1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjczLVxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNzQ6XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjc1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyMS1cXHRcXHRicmVhaztcXG5tbS9kYW1vbi9wYWRkci5jOjEyMjpcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbm1tL2RhbW9uL3BhZGRyLmMtMTIzLVxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwNj1zdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwOC17XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXFx0Y2dyb3VwX3BhdGgobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIG1lbWNnX3BhdGhfYnVmLCBQQVRIX01BWCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTItXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTEzOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTQtXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU1OD1kYW1vc19zeXNmc19maWx0ZXJfdHlwZV9uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU2Ny1cXHR7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU2ODpcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NjktXFx0XFx0Lm5hbWUgPSBcXFwibWVtY2dcXFwiLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzU9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNTItXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjUzOlxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNTQtXFx0XFx0Lm5hbWUgPSBcXFwibm9kZV9tZW1jZ191c2VkX2JwXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjU2LVxcdHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI1NzpcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjU4LVxcdFxcdC5uYW1lID0gXFxcIm5vZGVfbWVtY2dfZnJlZV9icFxcXCIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODE5LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODIwOlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT1NfRklMVEVSX1RZUEVfTUVNQ0cpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgyMS1cXHRcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3Ni1cXHRcXHRcXHRicmVhaztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3NzpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg3ODpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cXHRcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NzU9ZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZXNbXSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNzgwLVxcdHtcXG5tbS9kYW1vbi9zeXNmcy5jOjc4MTpcXHRcXHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNzgyLVxcdFxcdC5uYW1lID0gXFxcIm1lbWNnXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTkzNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5NDktXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3lzZnMuYzoxOTUwOlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXR5cGUgPT0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0cpIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5NTEtXFx0XFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc3Ni1cXHRcXHRicmVhaztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzc3OlxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3Nzg6XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc3OS1cXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03ODc9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE2LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTc6XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE4LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA0NTYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI0LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MjU6XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI2LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA4OTAsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA2Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDczLVxcdHN3aXRjaCAoc3JjLVxcdTAwM2V0eXBlKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwNzQ6XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTA3NS1cXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtZW1jZ19pZCwgc3JjLVxcdTAwM2VtZW1jZ19pZCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA5NT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMTAtXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfZmlsdGVyKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTExMTpcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTEyLVxcdFxcdFxcdC5tYXRjaGluZyA9IGZhbHNlLFxcbi0tXFxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9kZWJ1Zy5jLTk2LVxcbm1tL2RlYnVnLmM6OTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtOTgtXFx0aWYgKGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhKVxcbi0tXFxubW0vZGVidWcuYz0xNzE9dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vZGVidWcuYy0xODQtI2VuZGlmXFxubW0vZGVidWcuYzoxODU6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMTg2LVxcdFxcdFxcXCJvd25lciAlcHggXFxcIlxcbi0tXFxubW0vZGVidWcuYy0yMTMtI2VuZGlmXFxubW0vZGVidWcuYzoyMTQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMjE1LVxcdFxcdG1tLVxcdTAwM2Vvd25lcixcXG4tLVxcbm1tL2ZvbGlvLmM9MTExMD12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTExMjEtXFxubW0vZm9saW8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9mb2xpby5jLTExMjMtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ni1cXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA2NzpcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY4LVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwidGhwLWRlZmVycmVkX3NwbGl0XFxcIik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2ODk9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzkxLVxcdFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzozNzkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9odWdlX21lbW9yeS5jLTM3OTMtXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gZm9saW8tXFx1MDAzZW1lbWNnX2RhdGE7XFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz00NT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl9mbGFncyhzdHJ1Y3QgcGFnZSAqcClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xcbm1tL2h3cG9pc29uLWluamVjdC5jOjY3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBwZm5faW5qZWN0X2luaXQodm9pZClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYzoxOTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXFxcImNvcnJ1cHQtZmlsdGVyLW1lbWNnXFxcIiwgMDYwMCwgaHdwb2lzb25fZGlyLFxcbi0tXFxubW0vaW50ZXJuYWwuaD02NT11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vaW50ZXJuYWwuaC02Ny1cXG5tbS9pbnRlcm5hbC5oOjY4OiNkZWZpbmUgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCAoMSBcXHUwMDNjXFx1MDAzYyAxKVxcbm1tL2ludGVybmFsLmg6Njk6I2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcXHUwMDNjXFx1MDAzYyAyKVxcbm1tL2ludGVybmFsLmgtNzAtI2RlZmluZSBNSU5fU1dBUFBJTkVTUyAwXFxuLS1cXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxcbi0tXFxubW0vbGlzdF9scnUuYy0zOS1cXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jLTQxLXN0YXRpYyBMSVNUX0hFQUQobWVtY2dfbGlzdF9scnVzKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1MC19XFxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtMTUyLVxcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyMS1cXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MjMtXFx0aWYgKCpucl90b193YWxrIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XFxuLS1cXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQ2MS1cXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjU5PXN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2MS19XFxubW0vbGlzdF9scnUuYzo2NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtNjYzLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2Ny1cXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy02NjktXFx0aWYgKHNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYz02OTI9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy03MDMtXFxubW0vbGlzdF9scnUuYzo3MDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNzA1LVxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjk5LVxcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XFxubW0vbWVtY29udHJvbC12MS5jOjMwMDpcXHRtb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XFxubW0vbWVtY29udHJvbC12MS5jLTMwMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMTIzPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMTMwLSAqIGNncm91cCB2MSB1c2Vyc3BhY2Ugdm1wcmVzc3VyZSBpbnRlcmZhY2UgKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCAvXFxubW0vbWVtY29udHJvbC12MS5jOjExMzE6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE0MjI9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE0NjctXFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNDY4OlxcdFxcdFxcdFxcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XFxubW0vbWVtY29udHJvbC12MS5jLTE0NjktXFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE0ODU9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTAzLVxcdFxcdGlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCxcXG5tbS9tZW1jb250cm9sLXYxLmM6MTUwNDpcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTA1LVxcdFxcdFxcdG5yX3JldHJpZXMtLTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODI2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzOC0jaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmM6MTgzOTpcXHRNRU1DR19TV0FQLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVxcdE5SX1NXQVBDQUNIRSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xOTg2PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9vb21fY29udHJvbF9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTk5Mi1cXHRzZXFfcHJpbnRmKHNmLCBcXFwib29tX2tpbGwgJWx1XFxcXG5cXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTkzOlxcdFxcdCAgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX09PTV9LSUxMXSkpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTk0LVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC12MS5oLTMwLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTg2PWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XFxubW0vbWVtY29udHJvbC12MS5oLTg3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo4ODojZWxzZVxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMjA6I2VuZGlmXFx0LyogQ09ORklHX01FTUNHX1YxICovXFxubW0vbWVtY29udHJvbC12MS5oLTEyMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNDE9c3RhdGljIHZvaWQgbWVtY2dfdW5jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtMTQyLXtcXG5tbS9tZW1jb250cm9sLmM6MTQzOlxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfS01FTSwgLW5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMTQ0LVxcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMzQtXFxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTIzNi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00Mzc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19zdGF0X2l0ZW1zW10gPSB7XFxubW0vbWVtY29udHJvbC5jOjQzODpcXHRNRU1DR19TV0FQLFxcbm1tL21lbWNvbnRyb2wuYzo0Mzk6XFx0TUVNQ0dfU09DSyxcXG5tbS9tZW1jb250cm9sLmM6NDQwOlxcdE1FTUNHX1BFUkNQVV9CLFxcbm1tL21lbWNvbnRyb2wuYzo0NDE6XFx0TUVNQ0dfS01FTSxcXG5tbS9tZW1jb250cm9sLmM6NDQyOlxcdE1FTUNHX1pTV0FQX0IsXFxubW0vbWVtY29udHJvbC5jOjQ0MzpcXHRNRU1DR19aU1dBUFBFRCxcXG5tbS9tZW1jb250cm9sLmM6NDQ0OlxcdE1FTUNHX1pTV0FQX0lOQ09NUCxcXG5tbS9tZW1jb250cm9sLmMtNDQ1LX07XFxubW0vbWVtY29udHJvbC5jLTQ0Ni1cXG5tbS9tZW1jb250cm9sLmM6NDQ3OiNkZWZpbmUgTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TIEFSUkFZX1NJWkUobWVtY2dfbm9kZV9zdGF0X2l0ZW1zKVxcbm1tL21lbWNvbnRyb2wuYzo0NDg6I2RlZmluZSBNRU1DR19WTVNUQVRfU0laRSAoTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TICsgXFxcXFxcbm1tL21lbWNvbnRyb2wuYy00NDktXFx0XFx0XFx0ICAgQVJSQVlfU0laRShtZW1jZ19zdGF0X2l0ZW1zKSlcXG5tbS9tZW1jb250cm9sLmMtNDUwLSNkZWZpbmUgQkFEX1NUQVRfSURYKGluZGV4KSAoKHUzMikoaW5kZXgpIFxcdTAwM2U9IFU4X01BWClcXG5tbS9tZW1jb250cm9sLmM6NDUxOnN0YXRpYyB1OCBtZW1fY2dyb3VwX3N0YXRzX2luZGV4W01FTUNHX05SX1NUQVRdIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtY29udHJvbC5jLTQ1Mi1cXG5tbS9tZW1jb250cm9sLmM9NDUzPXN0YXRpYyB2b2lkIGluaXRfbWVtY2dfc3RhdHModm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTYtXFxubW0vbWVtY29udHJvbC5jOjQ1NzpcXHRCVUlMRF9CVUdfT04oTUVNQ0dfTlJfU1RBVCBcXHUwMDNlPSBVOF9NQVgpO1xcbm1tL21lbWNvbnRyb2wuYy00NTgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYwLVxcbm1tL21lbWNvbnRyb2wuYzo0NjE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX05PREVfU1RBVF9JVEVNUzsgKytpLCArK2opXFxubW0vbWVtY29udHJvbC5jLTQ2Mi1cXHRcXHRtZW1fY2dyb3VwX3N0YXRzX2luZGV4W21lbWNnX25vZGVfc3RhdF9pdGVtc1tpXV0gPSBqO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ3Mz1zdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSB7XFxubW0vbWVtY29udHJvbC5jLTQ3NC1cXHQvKiBMb2NhbCAoQ1BVIGFuZCBjZ3JvdXApIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ3NTpcXHRsb25nIHN0YXRlW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ3Ni1cXG5tbS9tZW1jb250cm9sLmMtNDc3LVxcdC8qIERlbHRhIGNhbGN1bGF0aW9uIGZvciBsb2NrbGVzcyB1cHdhcmQgcHJvcGFnYXRpb24gKi9cXG5tbS9tZW1jb250cm9sLmM6NDc4OlxcdGxvbmcgc3RhdGVfcHJldltOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xcbm1tL21lbWNvbnRyb2wuYy00NzktfTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XFxubW0vbWVtY29udHJvbC5jLTQ4Mi1cXHQvKiBBZ2dyZWdhdGVkIChDUFUgYW5kIHN1YnRyZWUpIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ4MzpcXHRsb25nIHN0YXRlW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ4NC1cXG5tbS9tZW1jb250cm9sLmMtNDg1LVxcdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBzdGF0ZSAqL1xcbm1tL21lbWNvbnRyb2wuYzo0ODY6XFx0bG9uZyBzdGF0ZV9sb2NhbFtOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xcbm1tL21lbWNvbnRyb2wuYy00ODctXFxubW0vbWVtY29udHJvbC5jLTQ4OC1cXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xcbm1tL21lbWNvbnRyb2wuYzo0ODk6XFx0bG9uZyBzdGF0ZV9wZW5kaW5nW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ5MC19O1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzItXFxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjAwLVxcdFBHUEdJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MzItXFxubW0vbWVtY29udHJvbC5jOjYzMzojZGVmaW5lIE5SX01FTUNHX0VWRU5UUyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpXFxubW0vbWVtY29udHJvbC5jLTYzNC1zdGF0aWMgdTggbWVtX2Nncm91cF9ldmVudHNfaW5kZXhbTlJfVk1fRVZFTlRfSVRFTVNdIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjM2PXN0YXRpYyB2b2lkIGluaXRfbWVtY2dfZXZlbnRzKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjQ0LVxcbm1tL21lbWNvbnRyb2wuYzo2NDU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgKytpKVxcbm1tL21lbWNvbnRyb2wuYy02NDYtXFx0XFx0bWVtX2Nncm91cF9ldmVudHNfaW5kZXhbbWVtY2dfdm1fZXZlbnRfc3RhdFtpXV0gPSBpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTY1ND1zdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY2NC1cXHQvKiBMb2NhbCAoQ1BVIGFuZCBjZ3JvdXApIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6NjY1OlxcdGxvbmdcXHRcXHRcXHRzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY2NjpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY2Ny1cXG5tbS9tZW1jb250cm9sLmMtNjY4LVxcdC8qIERlbHRhIGNhbGN1bGF0aW9uIGZvciBsb2NrbGVzcyB1cHdhcmQgcHJvcGFnYXRpb24gKi9cXG5tbS9tZW1jb250cm9sLmM6NjY5OlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9wcmV2W01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5tbS9tZW1jb250cm9sLmM6NjcwOlxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNfcHJldltOUl9NRU1DR19FVkVOVFNdO1xcbm1tL21lbWNvbnRyb2wuYy02NzEtfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG5tbS9tZW1jb250cm9sLmMtNjc0LVxcdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzo2NzU6XFx0bG9uZ1xcdFxcdFxcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5tbS9tZW1jb250cm9sLmM6Njc2OlxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNbTlJfTUVNQ0dfRVZFTlRTXTtcXG5tbS9tZW1jb250cm9sLmMtNjc3LVxcbm1tL21lbWNvbnRyb2wuYy02NzgtXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6Njc5OlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4MDpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY4MS1cXG5tbS9tZW1jb250cm9sLmMtNjgyLVxcdC8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXFxubW0vbWVtY29udHJvbC5jOjY4MzpcXHRsb25nXFx0XFx0XFx0c3RhdGVfcGVuZGluZ1tNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4NDpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX3BlbmRpbmdbTlJfTUVNQ0dfRVZFTlRTXTtcXG5tbS9tZW1jb250cm9sLmMtNjg1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwMC0gKiAyKSBGbHVzaCB0aGUgc3RhdHMgc3luY2hyb25vdXNseSBvbiByZWFkZXIgc2lkZSBvbmx5IHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhblxcbm1tL21lbWNvbnRyb2wuYzo3MDE6ICogICAgKE1FTUNHX0NIQVJHRV9CQVRDSCAqIG5yX2NwdXMpIHVwZGF0ZSBldmVudHMuIFRob3VnaCB0aGlzIG9wdGltaXphdGlvblxcbm1tL21lbWNvbnRyb2wuYzo3MDI6ICogICAgd2lsbCBsZXQgc3RhdHMgYmUgb3V0IG9mIHN5bmMgYnkgYXRtb3N0IChNRU1DR19DSEFSR0VfQkFUQ0ggKiBucl9jcHVzKSBidXRcXG5tbS9tZW1jb250cm9sLmMtNzAzLSAqICAgIG9ubHkgZm9yIDIgc2Vjb25kcyBkdWUgdG8gKDEpLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTcxMT1zdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcxMy1cXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcykgXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wuYzo3MTQ6XFx0XFx0TUVNQ0dfQ0hBUkdFX0JBVENIICogbnVtX29ubGluZV9jcHVzKCk7XFxubW0vbWVtY29udHJvbC5jLTcxNS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NzE3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19yc3RhdF91cGRhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgbG9uZyB2YWwsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBhYnModmFsKSk7XFxubW0vbWVtY29udHJvbC5jOjc0MTpcXHRcXHRpZiAoc3RhdHNfdXBkYXRlcyBcXHUwMDNjIE1FTUNHX0NIQVJHRV9CQVRDSClcXG5tbS9tZW1jb250cm9sLmMtNzQyLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTgxOD1ib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KVxcbm1tL21lbWNvbnRyb2wuYy04MTkte1xcbm1tL21lbWNvbnRyb2wuYzo4MjA6XFx0aWYgKCh1MzIpaWR4IFxcdTAwM2U9IE1FTUNHX05SX1NUQVQpXFxubW0vbWVtY29udHJvbC5jLTgyMS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NDctXFxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjgtXFxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTExLVxcbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU3Ny1cXHR7IFxcXCJmaWxlXFxcIixcXHRcXHRcXHROUl9GSUxFX1BBR0VTXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU3ODpcXHR7IFxcXCJrZXJuZWxcXFwiLFxcdFxcdFxcdE1FTUNHX0tNRU1cXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYy0xNTc5LVxcdHsgXFxcImtlcm5lbF9zdGFja1xcXCIsXFx0XFx0TlJfS0VSTkVMX1NUQUNLX0tCXFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTgxLVxcdHsgXFxcInNlY19wYWdldGFibGVzXFxcIixcXHRcXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFXFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU4MjpcXHR7IFxcXCJwZXJjcHVcXFwiLFxcdFxcdFxcdE1FTUNHX1BFUkNQVV9CXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU4MzpcXHR7IFxcXCJzb2NrXFxcIixcXHRcXHRcXHRNRU1DR19TT0NLXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmMtMTU4NC1cXHR7IFxcXCJ2bWFsbG9jXFxcIixcXHRcXHRcXHROUl9WTUFMTE9DXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTg2LSNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmM6MTU4NzpcXHR7IFxcXCJ6c3dhcFxcXCIsXFx0XFx0XFx0TUVNQ0dfWlNXQVBfQlxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODg6XFx0eyBcXFwienN3YXBwZWRcXFwiLFxcdFxcdFxcdE1FTUNHX1pTV0FQUEVEXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU4OTpcXHR7IFxcXCJ6c3dhcF9pbmNvbXBcXFwiLFxcdFxcdE1FTUNHX1pTV0FQX0lOQ09NUFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jLTE1OTAtI2VuZGlmXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTY0MT1zdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfdW5pdChpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjQzLVxcdHN3aXRjaCAoaXRlbSkge1xcbm1tL21lbWNvbnRyb2wuYzoxNjQ0OlxcdGNhc2UgTUVNQ0dfUEVSQ1BVX0I6XFxubW0vbWVtY29udHJvbC5jOjE2NDU6XFx0Y2FzZSBNRU1DR19aU1dBUF9COlxcbm1tL21lbWNvbnRyb2wuYy0xNjQ2LVxcdGNhc2UgTlJfU0xBQl9SRUNMQUlNQUJMRV9COlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2OTY9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MDEtXFxubW0vbWVtY29udHJvbC5jOjE3MDI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzAzLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzIyPXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc2OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSsrKSB7XFxubW0vbWVtY29udHJvbC5jOjE3Njk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzcwLVxcdFxcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MjA9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODI5LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYzoxODMwOlxcdFxcdG1lbW9yeV9mYWlsY250ID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfTUFYXSk7XFxubW0vbWVtY29udHJvbC5jLTE4MzEtXFx0ZWxzZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4NDAtXFx0XFx0XFx0SygodTY0KVJFQURfT05DRShtZW1jZy1cXHUwMDNlc3dhcC5tYXgpKSxcXG5tbS9tZW1jb250cm9sLmM6MTg0MTpcXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTg0MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4NDMtXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTg4Mz12b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODg1LXtcXG5tbS9tZW1jb250cm9sLmM6MTg4NjpcXHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcXG5tbS9tZW1jb250cm9sLmM6MTg4NzpcXHRcXHRcXHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcXG5tbS9tZW1jb250cm9sLmMtMTg4OC1cXG5tbS9tZW1jb250cm9sLmM6MTg4OTpcXHQvKiBGb3Igbm93IG9ubHkgTUVNQ0dfTUFYIGNhbiBoYXBwZW4gd2l0aCAhYWxsb3dfc3Bpbm5pbmcgY29udGV4dC4gKi9cXG5tbS9tZW1jb250cm9sLmM6MTg5MDpcXHRWTV9XQVJOX09OX09OQ0UoIWFsbG93X3NwaW5uaW5nIFxcdTAwMjZcXHUwMDI2IGV2ZW50ICE9IE1FTUNHX01BWCk7XFxubW0vbWVtY29udHJvbC5jLTE4OTEtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjA1LjgwMTg5MjA1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTIwNjcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX01FTUNHYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIGZvciB0aG9zZSBkZWZpbml0aW9ucyBpcyBwcm9iYWJseSB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGVpdGhlciBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgd2hpY2ggb2Z0ZW4gY29udGFpbnMgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gb3B0aW9ucywgb3IgcGVyaGFwcyBgbW0vS2NvbmZpZ2AsIHNpbmNlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGEgY29yZSBhc3BlY3QuIFNvLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIHR3byBmaWxlcyDigJMgYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCDigJMgdG8gdW5jb3ZlciB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgY2FuIGV2ZW4gYmUgZW5hYmxlZCBpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBpdCB0byB3b3JrIGNvcnJlY3RseSwgb3Igd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIG5lZWRlZCwgYW5kIGFsc28gd2hlcmUgaXQgaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODowOC4xMTM5NjIzMzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0Njk0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjA4LjE5NjQzNzA0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1OTAyMDQ1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi5JIHRoaW5rIEkgcmVtZW1iZXIgc29tZXRoaW5nIGltcG9ydGFudCBhcm91bmQgdGhlIEtjb25maWcgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYXJvdW5kIGxpbmUgMTA4NSwgYXMgdGhhdCBsb2NhdGlvbiBpcyBmcmVxdWVudGx5IHJlbGV2YW50IHRvIHRoZSBjb3JlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmZWF0dXJlIGlzIGRlZmluZWQgYXJvdW5kIHRoZXJlIGFuZCB3aGF0IGl0cyBpbnRlcmFjdGlvbnMgYXJlIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoxMy43ODY2NDM0NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTEwOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTExOlxcdFxcdGRlZmF1bHQgblxcbjExMTI6XFx0XFx0aGVscFxcbjExMTM6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTE0OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG4xMTE1OlxcdFxcdCAgd2hpY2ggaGF2ZW4ndCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcXG4xMTE2OlxcdFxcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXFxuMTExNzpcXHRcXHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbjExMTg6XFx0XFxuMTExOTpcXHRcXHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MTMuNzg2NzY5NjM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwNTYxNjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBhbmQgTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IGBDT05GSUdfU1dBUGAgYW5kIHNlZSBpZiBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gQXJlIHRoZXJlIGFueSBmbGFncyBvciBwYXJhbWV0ZXJzIHRoYXQgYXJlIHNwZWNpZmljYWxseSByZWxldmFudCB0byBzd2FwIGJlaGF2aW9yIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJ2xsIHByb2JhYmx5IGFsc28gZG8gYSBxdWljayBhdWRpdCBmb3Igc3dhcCByZWxhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUgZ2VuZXJhbCBjb25maWcuXG5cblRoZW4sIEknbGwgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGlmIHRoZXkncmUgc3ViamVjdCB0byBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaGF2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb2Ygc3dhcCBzcGFjZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBmcmFtZXdvcmsuIEFyZSB0aGV5IGFsd2F5cyBjb21waWxlZCBpbiwgb3IgYXJlIHRoZXJlIGNpcmN1bXN0YW5jZXMsIGNvbmZpZ3VyYXRpb25zLCBvciBidWlsZCBvcHRpb25zIHRoYXQgd291bGQgY2F1c2UgdGhlbSB0byBiZSBvbWl0dGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBsb2dpYyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoxNy42OTIzODc0MDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NjI3NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01NzU4PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5NS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTc5NjogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTc5Ny0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODAyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODAzOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTU4MDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoxNy43OTEwMTk2MjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIzNDc1ODE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRoZSBgI2lmZGVmYHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIGZvciBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSB0YWxraW5nIGFib3V0IHN3YXAgdXNhZ2UuIEknbSBndWVzc2luZyB0aGVyZSdzIGEgZ29vZCByZWFzb24gaXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcHJvYmFibHkgcmVsYXRlZCB0byBkaWZmZXJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIG1heWJlIGV2ZW4gZmVhdHVyZSBmbGFncy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSBhY3R1YWxseSBjb250cm9sbGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb24gaXMgKm5vdCogcHJlc2VudCBhbmQgd2h5LCBiZWNhdXNlIHRoYXQgZGlyZWN0bHkgaW1wYWN0cyBob3cgc3dhcCBjaGFyZ2VzIGFyZSBoYW5kbGVkIGluIGRpZmZlcmVudCBkZXBsb3ltZW50IHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyB0aGVyZSBhbmQgbm90IGJlaW5nIHRoZXJlIGZvciB3aGF0ZXZlciB0aGUgdXNlIGNhc2UgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MjUuMDI1NzgyMDE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTc4NTpcXHRcXHRtZW1jZ19jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShcXFwibWVtX2Nncm91cFxcXCIsIG1lbWNnX3NpemUsIDAsXFxuNTc4NjpcXHRcXHRcXHRcXHRcXHRcXHQgU0xBQl9QQU5JQyB8IFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XFxuNTc4NzpcXHRcXG41Nzg4OlxcdFxcdG1lbWNnX3BuX2NhY2hlcCA9IEtNRU1fQ0FDSEUobWVtX2Nncm91cF9wZXJfbm9kZSxcXG41Nzg5OlxcdFxcdFxcdFxcdFxcdCAgICAgU0xBQl9QQU5JQyB8IFNMQUJfSFdDQUNIRV9BTElHTik7XFxuNTc5MDpcXHRcXG41NzkxOlxcdFxcdHJldHVybiAwO1xcbjU3OTI6XFx0fVxcbjU3OTM6XFx0XFxuNTc5NDpcXHQjaWZkZWYgQ09ORklHX1NXQVBcXG41Nzk1OlxcdC8qKlxcbjU3OTY6XFx0ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXFxuNTc5NzpcXHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG41Nzk4OlxcdCAqXFxuNTc5OTpcXHQgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbydzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cXHUwMDNlc3dhcC5cXG41ODAwOlxcdCAqXFxuNTgwMTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxcbjU4MDI6XFx0ICovXFxuNTgwMzpcXHRpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjU4MDQ6XFx0e1xcbjU4MDU6XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjU4MDY6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG41ODA3OlxcdFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XFxuNTgwODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTgwOTpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuNTgxMDpcXHRcXHR1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkO1xcbjU4MTE6XFx0XFxuNTgxMjpcXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbjU4MTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTgxNDpcXHRcXG41ODE1OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbjU4MTY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbjU4MTc6XFx0XFx0aWYgKCFvYmpjZylcXG41ODE4OlxcdFxcdFxcdHJldHVybiAwO1xcbjU4MTk6XFx0XFxuNTgyMDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNTgyMTpcXHRcXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbjU4MjI6XFx0XFx0aWYgKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG41ODIzOlxcdFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcXG41ODI0OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0ODoyNS4wMjYxMTYyNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY0MjIyODk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxseTogYENPTkZJR19TV0FQYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBiZWNhdXNlIG9mIHRob3NlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBmdW5jdGlvbnMg4oCTIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEFuZCBvYnZpb3VzbHksIGBDT05GSUdfTUVNQ0dgIGlzIGEgcmVxdWlyZW1lbnQsIHNpbmNlIGl0J3MgZnVuZGFtZW50YWwgdG8gYG1lbWNvbnRyb2wub2AgYW5kIGFsbCB0aGUgcHJpdmF0ZSBJRCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBtZW1jZ3MuXG5cbkJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIEknbSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgYWJvdXQgYENPTkZJR19NRU1DR19WMWAuIFJpZ2h0LCBsb29raW5nIGF0IGBtbS9tZW1jb250cm9sLXYxLmNgLCBJIHNlZSBgbWVtY2cxX3N3YXBvdXRgIGlzIGNhbGxpbmcgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYC4gT2theSwgdGhhdCBhZGRzIGFub3RoZXIgcGllY2UgdG8gdGhlIHB1enpsZS5cblxuTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHNlZSBhIGRlY2VudCBudW1iZXIgb2YgdGhlbS5cblRoZSBsaXN0IGlzOlxuMS4gIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYFxuMi4gIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGBcbjMuICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgXG40LiAgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYFxuNS4gIGBsaXN0X2xydV93YWxrX25vZGVgXG42LiAgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgXG43LiAgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgLyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgKENTUyBjYWxsYmFja3MpXG44LiAgYG1lbV9jZ3JvdXBfYWxsb2NgIC8gYG1lbV9jZ3JvdXBfZnJlZWAgLyBgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCAvIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0YCAvIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbGBcblxuSXQgbG9va3MgbGlrZSB0aGUgZmlyc3Qgc2l4IGFyZSBub24tc3RhdGljLCBzbywgZXhwb3J0ZWQsIGFuZCB0aGUgbGFzdCBmaXZlLCBzdGF0aWMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAgYmV0dGVyLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgY2FsbGVycyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFuZCBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjEwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MzIuNjY4MzQ4NDI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3MDc3OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTMtfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgxNDpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxNS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEyOTM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTI5Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk4OnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTkte1xcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyOS1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vbGlzdF9scnUuYzo0MzA6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7XFxubW0vbGlzdF9scnUuYy00MzEtXFx0XFx0XFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDA4Nj1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTEwLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo0MTExOiAqIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkIC0gbG9vayB1cCBhIG1lbWNnIGZyb20gYSBtZW1jZyBpZFxcbm1tL21lbWNvbnRyb2wuYy00MTEyLSAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTE3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MTE4OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcXG5tbS9tZW1jb250cm9sLmMtNDExOS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM0Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzODMtXFx0LypcXG5tbS9tZW1jb250cm9sLmM6NDM4NDpcXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJ3JlIGZ1bGx5IG9ubGluZS5cXG5tbS9tZW1jb250cm9sLmMtNDM4NS1cXHQgKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzNTI9aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzYxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9tZW1jb250cm9sLmM6NTM2MjpcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcXG5tbS9tZW1jb250cm9sLmMtNTM2My1cXHRpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZShcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcykpXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjczPXN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTI4Mi1cXG5tbS93b3JraW5nc2V0LmM6MjgzOlxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xcbm1tL3dvcmtpbmdzZXQuYy0yODQtXFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy00NzEtXFx0ICovXFxubW0vd29ya2luZ3NldC5jOjQ3MjpcXHRldmljdGlvbl9tZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnaWQpO1xcbm1tL3dvcmtpbmdzZXQuYy00NzMtXFx0aWYgKGV2aWN0aW9uX21lbWNnIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjM1LjA4NTQzNTIwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjYzNjc4OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCBDYWxsZXJzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UsIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgaXRzIGNhbGxlcnMuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNvcmUsIHNvIEkgZXhwZWN0IGEgZGVjZW50IG51bWJlciBvZiB0aGVtLCBsaWtlbHkgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtcy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSAqd2h5KiBiZWhpbmQgdGhvc2UgY2FsbHMuIElzIGl0IGZvciBpZGVudGlmaWNhdGlvbiB3aXRoaW4gY2dyb3Vwcz8gUGVyaGFwcyByZXNvdXJjZSBhY2NvdW50aW5nPyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGNvbnRleHQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBldmVuIGRlc2lnbiBpbXByb3ZlbWVudHMuIEEgdGFyZ2V0ZWQgYW5hbHlzaXMgb2YgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6MzkuMzQ5MTE2ODk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU2ODU1OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjk4LVxcdG5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxubW0vbWVtY29udHJvbC12MS5jOjI5OTpcXHRzd2FwX21lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX2VudHJpZXMpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0zMDAtXFx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTIzPWludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XFxubW0vbWVtY29udHJvbC12MS5oLTI0LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoyNTpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wtdjEuaC0yNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG4pO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQwODE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2tpbGwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQwODUtXFxubW0vbWVtY29udHJvbC5jOjQwODY6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxubW0vbWVtY29udHJvbC5jLTQwODcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4MDM9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODM5LVxcbm1tL21lbWNvbnRyb2wuYzo1ODQwOlxcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtNTg0MS1cXHRtZW1jZ2lkID0gbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6NDEuNjA1OTc3MTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NTEzMjgzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogRnVuY3Rpb24gU2VsZWN0aW9uIGFuZCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYXJlIG1vc3QgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3QgYWxyZWFkeTogYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3M6IGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgYWxsIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBhY2Nlc3NpYmxlIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGVpciBkZWZpbml0aW9ucy4gSSdsbCBxdWlja2x5IGNoZWNrIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbGlzdF9scnUuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gQWgsIHllcy4gQ29uZmlybWVkOlxuXG4qICAgSW4gYG1tL21lbWNvbnRyb2wuY2AsIHdlIGhhdmUgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBhcmUgYWxsIG5vbi1zdGF0aWMuXG4qICAgSW4gYG1tL2xpc3RfbHJ1LmNgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCBpcyBub24tc3RhdGljLlxuKiAgIEFuZCBmaW5hbGx5LCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgIGlzIGFsc28gbm9uLXN0YXRpYy5cblxuRXhjZWxsZW50LiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCBgTUVNQ0dgIOKAkyB0aGUgY29yZSBjb25maWcgZm9yIG1lbW9yeSBjZ3JvdXAgc3VwcG9ydCwgZW5hYmxpbmcgYG1tL21lbWNvbnRyb2wuY2Ag4oCTIGFuZCBgU1dBUGAgdG8gZW5hYmxlIHN3YXAgc3VwcG9ydCBhbmQsIGltcG9ydGFudGx5LCB0aGUgc3dhcCBhY2NvdW50aW5nIGZ1bmN0aW9ucyBsaWtlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCBhbmQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYC5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgQ09ORklHX01FTUNHYCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGRlcGVuZGluZyBvbiBub3RoaW5nIGRpcmVjdGx5LiBJdCBkb2VzLCBob3dldmVyLCBpbmRpcmVjdGx5IGRlcGVuZCBvbiBvdGhlciBjb25maWdzLiBgQ09ORklHX1NXQVBgIGFsc28gaGFzIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjQ3LjU1NzMwODIyOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5OTUzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjQ3LjYxNTMxMTAyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzU5NTI2MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGRlY2lkZSBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyB3b3J0aCBpbmNsdWRpbmcgb3IgdGVzdGluZyBhbG9uZ3NpZGUgdGhlIG1haW4gY29uZmlndXJhdGlvbnMuIEl0J3MgbGlzdGVkIGFzIG9wdGlvbmFsLCBidXQgZ2l2ZW4gdGhlIGNyaXRpY2FsIHJvbGUgb2YgYE1FTUNHYCBhbmQgYFNXQVBgIGluIHRoaXMgYXJlYSwgaXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc3QgdG8gaW5jbHVkZSBpdCBmb3Igbm93IHRvIGtlZXAgdGhpbmdzIHRob3JvdWdoLiBSaWdodCwgdGltZSB0byBnZW5lcmF0ZSB0aGUgb3V0cHV0cyB3aXRoIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDgzLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjUzLjM3NDg0MTEyNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzA2ODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiLFxuICAgIFwibWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmVcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtX2Nncm91cCBwcml2YXRlIElEIG1hbmFnZW1lbnQsIGNoYW5naW5nIG93bmVyc2hpcCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGZyb20gbWVtX2Nncm91cCBkaXJlY3RseSB0byBvYmpfY2dyb3VwIChtZW1jZ2lkX3JlZikgc28gdGhhdCBwcml2YXRlIElEcyByZWZlcmVuY2Ugb2JqX2Nncm91cCBhbmQgYWxsb3cgcHJvcGVyIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHJlcGFyZW50aW5nIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gYW5kIHN3YXAgYWNjb3VudGluZy4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHN3YXAgY2hhcmdpbmcvdW5jaGFyZ2luZywgbGlzdF9scnUgdHJhdmVyc2FsLCBhbmQgd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibGlzdF9scnVfd2Fsa19ub2RlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3Rlc3RfcmVjZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbV9jZ3JvdXAgcHJpdmF0ZSBJRCBtYW5hZ2VtZW50LCBjaGFuZ2luZyBvd25lcnNoaXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBmcm9tIG1lbV9jZ3JvdXAgZGlyZWN0bHkgdG8gb2JqX2Nncm91cCAobWVtY2dpZF9yZWYpIHNvIHRoYXQgcHJpdmF0ZSBJRHMgcmVmZXJlbmNlIG9ial9jZ3JvdXAgYW5kIGFsbG93IHByb3BlciBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIGFuZCBzd2FwIGFjY291bnRpbmcuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhbmdlcyB0aGF0IGFmZmVjdCBzd2FwIGNoYXJnaW5nL3VuY2hhcmdpbmcsIGxpc3RfbHJ1IHRyYXZlcnNhbCwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6NTMuNDk3OTE2Nzg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ5OTg0NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ4OjUzLjQ5ODM5MjExNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2NDk5MzY0Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgZmllbGRzIGFyZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocmVmY291bnRfdCwgcGVyY3B1X3JlZiwgUkNVLCBYQXJyYXkpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWY4NjUzNjAwYTIyN2RiNzk5ZDZmMzgxOTIxNmRiYjU5NWVjYWM2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMTk6NDY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBmMjI3MzQ4YTNmMjRhLi5lYWZjODE3ZmYyNDRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYsMTEgKzY2LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUge1xuIFxuICNkZWZpbmUgTUVNX0NHUk9VUF9JRF9TSElGVFx0MTZcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIHtcbi1cdGludCBpZDtcbi1cdHJlZmNvdW50X3QgcmVmO1xuLX07XG4tXG4gc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1O1xuIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdTtcbiBzdHJ1Y3QgbWVtY2dfdm1zdGF0cztcbkBAIC0xNzMsNiArMTY4LDcgQEAgc3RydWN0IG9ial9jZ3JvdXAge1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmY250O1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0YXRvbWljX3QgbnJfY2hhcmdlZF9ieXRlcztcbitcdHJlZmNvdW50X3QgbWVtY2dpZF9yZWY7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogcHJvdGVjdGVkIGJ5IG9iamNnX2xvY2sgKi9cbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbkBAIC0xODksOCArMTg1LDggQEAgc3RydWN0IG9ial9jZ3JvdXAge1xuIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzcztcbiBcbi1cdC8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqL1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCBpZDtcbitcdC8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovXG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7XG4gXG4gXHQvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovXG4gXHRzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTtcdFx0LyogQm90aCB2MSBcdTAwMjYgdjIgKi9cbkBAIC0yNTUsNiArMjUxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNlbmRpZlxuIFx0aW50IGttZW1jZ19pZDtcbiBcbitcdC8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqL1xuK1x0aW50IGlkO1xuK1xuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjZ3diX2xpc3Q7XG4gI2VuZGlmXG5AQCAtODEwLDcgKzgwOSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIG1lbWNnLVx1MDAzZWlkLmlkO1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTQyOCw3ICs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcdFx0eGFfZm9yX2VhY2goXHUwMDI2bHJ1LVx1MDAzZXhhLCBpbmRleCwgbWxydSkge1xuIFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTtcbi1cdFx0XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuK1x0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuIFx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAyNTZiNjhmZmNhNzBlLi44NGRjYWIzYWNiOGEyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNzczLDcgKzM3NzMsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbkBAIC00MDMyLDI1ICs0MDMyLDY1IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTtcbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4tXHRpZiAobWVtY2ctXHUwMDNlaWQuaWQgXHUwMDNlIDApIHtcbi1cdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQpO1xuLVx0XHRtZW1jZy1cdTAwM2VpZC5pZCA9IDA7XG4rXHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbitcdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQpO1xuK1x0XHRtZW1jZy1cdTAwM2VpZCA9IDA7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4rc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbitcdFx0dW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuIHtcbi1cdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xuIFxuLVx0XHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4rXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuK1x0XHRvYmpjZ19mcmVlID0geGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0XHRWTV9XQVJOX09OKG9iamNnX2ZyZWUgIT0gb2JqY2cpO1xuK1xuK1x0XHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xuK1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gXHR9XG4gfVxuIFxuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQgLSBwdXQgbWVtY2dpZCBhbmQgZ2V0IHRoZSBuZWFyZXN0IG9ubGluZSBtZW1jZ1xuKyAqIEBpZDogdGhlIG1lbWNnIHByaXZhdGUgaWQgZ290IGZyb20gbWVtX2Nncm91cF9pZF9nZXRfb25saW5lXG4rICogQG46IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcHV0XG4rICovXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdGlmICh1bmxpa2VseSghb2JqY2cpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpIHx8ICFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpXG4rXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuK1xuK1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG9iamNnLCBpZCwgbik7XG4rXG4rb3V0OlxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4gbWVtY2c7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9raWxsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2ctXHUwMDNlaWRfb2JqY2csIG1lbWNnLVx1MDAzZWlkLCAxKTtcbit9XG4rXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0b2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbitcbitcdHdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sIFx1MDAyNm9iamNnLVx1MDAzZW1lbWNnaWRfcmVmKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQncyByZWZjb3VudCBtdXN0XG4gXHRcdCAqIGFsd2F5cyBiZSBcdTAwM2U9IDEuXG5AQCAtNDA2MCw3ICs0MTAwLDEwIEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4rXHRcdG9iamNnID0gbWVtY2ctXHUwMDNlaWRfb2JqY2c7XG4gXHR9XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBtZW1jZztcbiB9XG4gXG5AQCAtNDA2OSwxMSArNDExMiwyNCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1blxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLlxuKyAqXG4rICogQHJldHVybjogdGhlIG1lbWNnLCBvciBOVUxMIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IHJlcGFyZW50ZWQuXG4gICovXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxuIHtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdFdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpO1xuLVx0cmV0dXJuIHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1xuK1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbitcdGlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBtZW1jZztcbiB9XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKVxuQEAgLTQxNzQsNyArNDIzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0aWYgKCFtZW1jZylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4tXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLmlkLCBOVUxMLFxuK1x0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZCwgTlVMTCxcbiBcdFx0XHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBmYWlsO1xuQEAgLTQzMTksOSArNDM3NSwxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0XHRcdFx0ICAgRkxVU0hfVElNRSk7XG4gXHRscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7XG4gXG4tXHQvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi9cbi1cdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYsIDEpO1xuLVx0Y3NzX2dldChjc3MpO1xuK1x0LyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqL1xuK1x0bWVtY2ctXHUwMDNlaWRfb2JqY2cgPSBvYmpjZztcbitcdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZF9vYmpjZy1cdTAwM2VtZW1jZ2lkX3JlZiwgMSk7XG4rXHRvYmpfY2dyb3VwX2dldChtZW1jZy1cdTAwM2VpZF9vYmpjZyk7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSdyZSBmdWxseSBvbmxpbmUuXG5AQCAtNDMzMyw3ICs0MzkwLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gXHQgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuXG4gXHQgKi9cbi1cdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7XG4rXHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCwgbWVtY2ctXHUwMDNlaWRfb2JqY2csIEdGUF9LRVJORUwpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZnJlZV9vYmpjZzpcbkBAIC00Mzg1LDcgKzQ0NDIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXG4gXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFxuLVx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XG4rXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfa2lsbChtZW1jZyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5AQCAtNTc1MCw2ICs1ODA3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHR1bnNpZ25lZCBzaG9ydCBtZW1jZ2lkO1xuIFxuIFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTc2NywyMiArNTgyNSwyNCBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbi1cdC8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqL1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiBcbiBcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7XG4gXG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG4rXHRtZW1jZ2lkID0gbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbi1cdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxuLVx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4rXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9wYWdlcywgbWVtY2dpZCk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU3OTgsMTggKzU4NTgsMjMgQEAgdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoaWQsIG5yX3BhZ2VzKTtcbiBcdGlmIChtZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbitcdFx0LypcbitcdFx0ICogSWYgdGhlIG1lbWNnIHdhcyBvZmZsaW5lIGFuZCByZXBhcmVudGVkIHRvIHJvb3QsIHN3YXAgbmVlZHNcbitcdFx0ICogdW5jaGFyZ2luZyBhcyB3ZWxsLiBXZSBjaGVjayB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbWVtY2dpZC5cbitcdFx0ICovXG4rXHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fCBpZCAhPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKSB7XG4gXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbiBcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcyk7XG4gXHRcdH1cbiBcdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiB9XG4gXG4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjRlOWI3YjE2M2MwMWUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTQ3MCw3ICs0NzAsNyBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHQgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLlxuIFx0ICovXG4gXHRldmljdGlvbl9tZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnaWQpO1xuLVx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4rXHRpZiAoZXZpY3Rpb25fbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4gXHRcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDg6NTMuNDk4MzkyOTY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1MTIyNTk4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHNwZWNpZmljYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuRmlyc3QsIGxldCdzIG5haWwgZG93biB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJdCdzIG1lc3Npbmcgd2l0aCB0aGUgbWVtb3J5IGNncm91cCBwcml2YXRlIElEIHRyYWNraW5nIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBtbS9saXN0X2xydS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gU28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LlxuXG5UaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkYCBpcyBnb25lLiBJbnN0ZWFkLCBgc3RydWN0IG9ial9jZ3JvdXBgIGdldHMgYSBgcmVmY291bnRfdCBtZW1jZ2lkX3JlZmAsIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIGdldHRpbmcgYSBgc3RydWN0IG9ial9jZ3JvdXAgKmlkX29iamNnO2AgYW5kIGFuIGBpbnQgaWQ7YC4gVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2YgbnVsbCBjaGVja3MgaW4gYG1tL2xpc3RfbHJ1LmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gV2UncmUgZ2V0dGluZyBzb21lIG5ldyBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgZm9yIG1hbmFnaW5nIHRoZSBwcml2YXRlIElEcyBhbmQgdGhlaXIgcmVmY291bnRpbmcsIGFuZCBtb2RpZmljYXRpb25zIGluIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfYWxsb2NgLCBgbWVtX2Nncm91cF9jc3Nfb25saW5lYCwgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBldGMuIFBsdXMsIGl0IHRvdWNoZXMgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLiBUaGF0J3MgYSBnb29kIGFtb3VudCBvZiBjaHVybiFcblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cbjEuICAqKlVzZXItc3BhY2UgZXhwb3N1cmU6KiogTm9wZSwgbm8gZGlyZWN0IGNvcHlpbmcgb2Yga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB2aWEgdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIGlvY3Rscywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IGNvbWVzIHRvIG1pbmQuIFRoYXQncyBhIHJlbGllZi5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBPa2F5LCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdpdGggYWxsIHRoaXMgc3RydWN0IG1hbmlwdWxhdGlvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHN0cnVjdHVyZSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgYW5kIGhvdyB0aGVzZSBuZXcgc3RydWN0dXJlcyBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIG5ldyBgb2JqX2Nncm91cGAuIEl0J3MgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZCBpbiBhIGNvbmRpdGlvbmFsLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgaG93IGBzdHJ1Y3Qgb2JqX2Nncm91cGAgaXMgYWxsb2NhdGVkLiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0OTowMy4wMTA2NTUwMjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE1OTkzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2Nncm91cF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTQ5PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5NS1cXG5tbS9tZW1jb250cm9sLmM6MTk2OnN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2Nncm91cF9hbGxvYyh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xOTcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQzNDM9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzU5LVxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxubW0vbWVtY29udHJvbC5jOjQzNjA6XFx0XFx0b2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7XFxubW0vbWVtY29udHJvbC5jLTQzNjEtXFx0XFx0aWYgKCFvYmpjZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDk6MDUuMjYyMjYxNjY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTM1MDYyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gb2JqX2Nncm91cF9hbGxvYyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzIG9mIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHksIGxldCdzIGRpc3NlY3QgYG9ial9jZ3JvdXBfYWxsb2NgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhlc2Ugb2JqZWN0IGNncm91cHMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UndmUgYmVlbiBzZWVpbmcgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciByZWNlbnRseS4gSSdtIGFzc3VtaW5nLCBhcyB1c3VhbCwgaXQncyBub3QgYSB0cml2aWFsIGFsbG9jYXRpb24sIGFuZCB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cywgYW55IHN1YnRsZSBpbmVmZmljaWVuY2llcyBpbiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpdHNlbGYsIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgbGVhZCB0byB1bmV4cGVjdGVkIG1lbW9yeSBwcmVzc3VyZSBzY2VuYXJpb3MuIEtub3dpbmcgbXkgbHVjaywgdGhlcmXigJlsbCBiZSBzb21lIHRyaWNreSBwb2ludGVyIGFyaXRobWV0aWMgaW4gdGhlcmUgdG9vLi4uIGxvb2tpbmcgZm9yd2FyZCB0byBpdC4gSXQncyB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ5OjA3LjUxNTc3MDU2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZvYmpjZ19sb2NrLCBmbGFncyk7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHBlcmNwdV9yZWZfZXhpdChyZWYpO1xcbiAxOTM6XFx0XFx0a2ZyZWVfcmN1KG9iamNnLCByY3UpO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHRzdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKm9ial9jZ3JvdXBfYWxsb2Modm9pZClcXG4gMTk3OlxcdHtcXG4gMTk4OlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gMTk5OlxcdFxcdGludCByZXQ7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdG9iamNnID0ga3phbGxvY19vYmooc3RydWN0IG9ial9jZ3JvdXApO1xcbiAyMDI6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjAzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNm9iamNnLVxcdTAwM2VyZWZjbnQsIG9ial9jZ3JvdXBfcmVsZWFzZSwgMCxcXG4gMjA2OlxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbiAyMDc6XFx0XFx0aWYgKHJldCkge1xcbiAyMDg6XFx0XFx0XFx0a2ZyZWUob2JqY2cpO1xcbiAyMDk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIxMDpcXHRcXHR9XFxuIDIxMTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2b2JqY2ctXFx1MDAzZWxpc3QpO1xcbiAyMTI6XFx0XFx0cmV0dXJuIG9iamNnO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ5OjA3LjUxNjE0ODg0MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDY3MjU3ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZyBpbiBDb250cm9sIEdyb3VwcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMsIG9yIGBtZW1jZ2BzLCBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBzZWVtcyBsaWtlIGBvYmpjZ2AgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBhbmQgemVyby1pbml0aWFsaXplcyBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBtZW1vcnkgcmVnaW9uLiBUaGVuLCB0aGUgY3JpdGljYWwgcGFydCBqdW1wcyBvdXQgYXQgbWUgaW4gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWA6IHdlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbWVtY2dpZF9yZWZgIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIHNldCBpdCB0byAxLiBUaGlzIGlzIGEgZGVsaWJlcmF0ZSBpbml0aWFsaXphdGlvbiwgcmF0aGVyIHRoYW4gYSByZWxpYW5jZSBvbiBga3phbGxvY2AuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aHkgaXMgdGhhdCByZXF1aXJlZD8gVG8gYW5zd2VyIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3Jrcy4gSSBzaG91bGQgY2hlY2sgYG1lbV9jZ3JvdXBfYWxsb2NgIHRvIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5pbmcgdGhlcmUuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbXBvcnRhbnQgaGFwcGVuaW5nIGluIHRoZXJlIHRoYXQgSeKAmW0gbWlzc2luZyB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBjb3VudGVyLiBQZXJoYXBzIHRoZXJlJ3MgYW4gZWFybGllciBpbnRlcmFjdGlvbiB0aGF0IEkgbmVlZCB0byBrbm93IGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0OToxMC45ODM0MDk5NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjE1OlxcdFxcdGxydV9nZW5fZXhpdF9tZW1jZyhtZW1jZyk7XFxuNDIxNjpcXHRcXHRtZW1jZ193Yl9kb21haW5fZXhpdChtZW1jZyk7XFxuNDIxNzpcXHRcXHRfX21lbV9jZ3JvdXBfZnJlZShtZW1jZyk7XFxuNDIxODpcXHR9XFxuNDIxOTpcXHRcXG40MjIwOlxcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbjQyMjE6XFx0e1xcbjQyMjI6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcXG40MjIzOlxcdFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XFxuNDIyNDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNDIyNTpcXHRcXHRpbnQgbm9kZSwgY3B1O1xcbjQyMjY6XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XFxuNDIyNzpcXHRcXHRsb25nIGVycm9yO1xcbjQyMjg6XFx0XFxuNDIyOTpcXHRcXHRtZW1jZyA9IGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuNDIzMDpcXHRcXHRpZiAoIW1lbWNnKVxcbjQyMzE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNDIzMjpcXHRcXG40MjMzOlxcdFxcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQsIE5VTEwsXFxuNDIzNDpcXHRcXHRcXHRcXHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG40MjM1OlxcdFxcdGlmIChlcnJvcilcXG40MjM2OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MjM3OlxcdFxcdGVycm9yID0gLUVOT01FTTtcXG40MjM4OlxcdFxcbjQyMzk6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbWVtY2dfdm1zdGF0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40MjQwOlxcdFxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxuNDI0MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI0MjpcXHRcXG40MjQzOlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxcbjQyNDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNDI0NTpcXHRcXHRpZiAoIW1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSlcXG40MjQ2OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MjQ3OlxcdFxcbjQyNDg6XFx0XFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcXG40MjQ5OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MjUwOlxcdFxcbjQyNTE6XFx0XFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXFx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcXG40MjUyOlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG40MjUzOlxcdFxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbjQyNTQ6XFx0XFx0XFx0c3RhdGMtXFx1MDAzZXBhcmVudF9wY3B1ID0gcHN0YXRjX3BjcHU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQ5OjEwLjk4Mzg3MzY3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDEzODU5NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNvZGUgc3Ryb25nbHkgc3VnZ2VzdHMgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmUuIEkndmUgcmV2aWV3ZWQgdGhlIGNvcmUgYWxsb2NhdGlvbiwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIGFuZCBkYXRhIGZsb3cgYW5kLCBhcyBJIHN1c3BlY3RlZCwgZXZlcnl0aGluZyBsb29rcyBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIGBtZW1jZ2AgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uLiBBbGwgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyB3aXRoaW4gdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgbGlrZSBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGFyZSBsb2NhbGx5IGRlY2xhcmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBJJ3ZlIGFsc28gY29uZmlybWVkIHRoZXJlIGFyZW4ndCBhbnkga2VybmVsLXRvLXVzZXIgc3BhY2UgY29waWVzIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBsZWFrIGRhdGEuXG5cblRoZSBlbnRpcmUgc2NvcGUgb2YgdGhlIHBhdGNoIHNlZW1zIGxpbWl0ZWQgdG8gaW50ZXJuYWwgYG1lbWNnYCByZWZjb3VudGluZywgSUQgbWFuYWdlbWVudCB1c2luZyBYQXJyYXksIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgYG9ial9jZ3JvdXBgIGFuZCBgbWVtX2Nncm91cGAgc3RydWN0dXJlcywgYW5kIHN3YXAvTFJVIGNoYXJnaW5nLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgcmV2b2x2ZSBhcm91bmQgY29ycmVjdGx5IG1hbmFnaW5nIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBJRHMgYW5kIHBpbm5pbmcgdGhlIGBvYmpfY2dyb3VwYC5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgYW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbGlrZWx5IHN0ZW0gZnJvbSByZWZlcmVuY2UgY291bnRpbmcgZXJyb3JzIChVQUZzLCBkb3VibGUgZnJlZXMsIGxlYWtzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBidWdzLiBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiB0aGluZ3MgdGhhdCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzIOKAkyBLQVNBTiwgTE9DS0RFUCwgYW5kIGByZWZjb3VudF90YCBjaGVja3Mg4oCTIGFyZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCBhZGQgdmFsdWUgdG8uXG5cbkkndmUgYWxzbyBkb25lIGEgZGVlcCBkaXZlIG9uIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXM6XG5cbiogICBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGludm9sdmUgYHN0cnVjdCBvYmpfY2dyb3VwYCAoYWRkaW5nIGByZWZjb3VudF90IG1lbWNnaWRfcmVmYCksIGBzdHJ1Y3QgbWVtX2Nncm91cGAgKGFkZGluZyBgaWRfb2JqY2dgLCByZXBsYWNpbmcgc3RydWN0IHdpdGggYGludCBpZGApLCBhbmQgdGhlIGlubGluZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9wcml2YXRlX2lkYC5cbiogICBBIGAhbWVtY2cgfHxgIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGBtbS9saXN0X2xydS5jYC5cbiogICBTaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBtZW1jZyBwcml2YXRlIElEIGFsbG9jYXRpb24gYW5kIHJlZmNvdW50aW5nIGxvZ2ljIHRvIHBpbiBgb2JqX2Nncm91cGAgaW5zdGVhZCBvZiBgbWVtY2ctXHUwMDNlY3NzYCBoYXMgYmVlbiBkb25lIGluIGBtbS9tZW1jb250cm9sLmNgLlxuKiAgIEEgYG51bGxgIGNoZWNrIGBldmljdGlvbl9tZW1jZyBcdTAwMjZcdTAwMjZgIGhhcyBiZWVuIGFkZGVkIHRvIGBtbS93b3JraW5nc2V0LmNgLlxuXG5BIHF1aWNrIGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgbW9kaWZpY2F0aW9ucyBjb25maXJtIHRoZSBjb2RlIGlzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXG5cbldpdGggdGhhdCBpbiBtaW5kLCBJJ20gY29tZm9ydGFibGUgcHJlcGFyaW5nIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTYsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDk6MTkuOTk3NzM1NzcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbW9yeSBjZ3JvdXAgcHJpdmF0ZSBJRCB0cmFja2luZyBtZWNoYW5pc20gc28gdGhhdCB0aGUgcHJpdmF0ZSBJRCBwaW5zIHRoZSBjb3JyZXNwb25kaW5nIG9ial9jZ3JvdXAgcmF0aGVyIHRoYW4gdGhlIG1lbV9jZ3JvdXAgQ1NTIGRpcmVjdGx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gQWxsIG1vZGlmaWVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgb2JqX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtX2Nncm91cGApIGFyZSB6ZXJvLWFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgYW5kIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIChgbWVtY2dpZF9yZWZgLCBgaWRfb2JqY2dgLCBgaWRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiAvIG9ubGluZSBzdGF0ZS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgbWVtY2dpZGAsIGBvYmpjZ2AsIGBtZW1jZ2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgYXNzaWdubWVudHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgZmllbGRzIGFyZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocmVmY291bnRfdCwgcGVyY3B1X3JlZiwgUkNVLCBYQXJyYXkpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4sIHJlZmNvdW50IGRlYnVnZ2luZywgYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1vcnkgY2dyb3VwIHByaXZhdGUgSUQgdHJhY2tpbmcgbWVjaGFuaXNtIHNvIHRoYXQgdGhlIHByaXZhdGUgSUQgcGlucyB0aGUgY29ycmVzcG9uZGluZyBvYmpfY2dyb3VwIHJhdGhlciB0aGFuIHRoZSBtZW1fY2dyb3VwIENTUyBkaXJlY3RseS5cXG5cXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcXG4tIEFsbCBtb2RpZmllZCBzdHJ1Y3R1cmVzIChgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbV9jZ3JvdXBgKSBhcmUgemVyby1hbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBga21lbV9jYWNoZV96YWxsb2MoKWAsIGFuZCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyAoYG1lbWNnaWRfcmVmYCwgYGlkX29iamNnYCwgYGlkYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gLyBvbmxpbmUgc3RhdGUuXFxuLSBMb2NhbCB2YXJpYWJsZXMgYWNyb3NzIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYG1lbWNnaWRgLCBgb2JqY2dgLCBgbWVtY2dgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQgaW4gYnJhbmNoaW5nIG9yIGFzc2lnbm1lbnRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGZpZWxkcyBhcmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIFRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHJlZmNvdW50X3QsIHBlcmNwdV9yZWYsIFJDVSwgWEFycmF5KS5cXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCByZWZjb3VudCBkZWJ1Z2dpbmcsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cXG4tIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmfp4w[1] Phase: Succeeded StartedAt: 2026-09-01 19:49:32 +0000 UTC FinishedAt: 2026-09-01 19:49:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 19:49:33 +0000 UTC FinishedAt: 2026-09-01 19:49:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2] Phase: Succeeded StartedAt: 2026-09-01 19:49:33 +0000 UTC FinishedAt: 2026-09-01 23:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 19:49:33 +0000 UTC FinishedAt: 2026-09-01 23:40:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 19:49:33 +0000 UTC FinishedAt: 2026-09-01 19:49:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 19:49:33 +0000 UTC FinishedAt: 2026-09-01 19:49:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmfp4w/series-workflowmfp4w-convert-artifact-2088260577/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 19:49:44 +0000 UTC FinishedAt: 2026-09-01 20:08:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 19:49:44 +0000 UTC FinishedAt: 2026-09-01 20:08:55 +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:*182ff760-d06b-446a-9412-68d54fbd404c,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-workflowmfp4w/series-workflowmfp4w-convert-artifact-2088260577/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": "ed357cf9-3429-4b82-86d9-1bb9d90d3801", "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-workflowmfp4w/series-workflowmfp4w-build-action-3174572303/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 19:49:44 +0000 UTC FinishedAt: 2026-09-01 20:08:45 +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:*182ff760-d06b-446a-9412-68d54fbd404c,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-workflowmfp4w/series-workflowmfp4w-convert-artifact-2088260577/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": "ed357cf9-3429-4b82-86d9-1bb9d90d3801", "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-workflowmfp4w/series-workflowmfp4w-build-action-3174572303/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-01 20:08:55 +0000 UTC FinishedAt: 2026-09-01 20:08:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-01 20:08:55 +0000 UTC FinishedAt: 2026-09-01 20:08:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-01 20:08:55 +0000 UTC FinishedAt: 2026-09-01 20:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-01 20:08:55 +0000 UTC FinishedAt: 2026-09-01 20:09:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmfp4w/series-workflowmfp4w-convert-artifact-42482228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-01 20:09:05 +0000 UTC FinishedAt: 2026-09-01 20:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-01 20:09:05 +0000 UTC FinishedAt: 2026-09-01 20:10:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed357cf9-3429-4b82-86d9-1bb9d90d3801,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-workflowmfp4w/series-workflowmfp4w-build-action-3174572303/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-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-01 20:11:01 +0000 UTC FinishedAt: 2026-09-01 20:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-01 20:11:01 +0000 UTC FinishedAt: 2026-09-01 20:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-01 20:11:01 +0000 UTC FinishedAt: 2026-09-01 20:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-01 20:11:01 +0000 UTC FinishedAt: 2026-09-01 20:32:09 +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:*182ff760-d06b-446a-9412-68d54fbd404c,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-workflowmfp4w/series-workflowmfp4w-convert-artifact-42482228/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": "45f557b6-9de7-4b3a-b0bd-5b3c5774503e", "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-workflowmfp4w/series-workflowmfp4w-build-action-1926405120/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-01 20:11:01 +0000 UTC FinishedAt: 2026-09-01 20:31:59 +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:*182ff760-d06b-446a-9412-68d54fbd404c,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-workflowmfp4w/series-workflowmfp4w-convert-artifact-42482228/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": "45f557b6-9de7-4b3a-b0bd-5b3c5774503e", "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-workflowmfp4w/series-workflowmfp4w-build-action-1926405120/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-01 20:32:09 +0000 UTC FinishedAt: 2026-09-01 20:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-01 20:32:09 +0000 UTC FinishedAt: 2026-09-01 20:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-01 20:32:09 +0000 UTC FinishedAt: 2026-09-01 20:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-01 20:32:09 +0000 UTC FinishedAt: 2026-09-01 20:33:49 +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:*45f557b6-9de7-4b3a-b0bd-5b3c5774503e,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-workflowmfp4w/series-workflowmfp4w-build-action-1926405120/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-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-01 20:33:59 +0000 UTC FinishedAt: 2026-09-01 23:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-01 20:33:59 +0000 UTC FinishedAt: 2026-09-01 23:40:58 +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":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"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:*ed357cf9-3429-4b82-86d9-1bb9d90d3801,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45f557b6-9de7-4b3a-b0bd-5b3c5774503e,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-workflowmfp4w/series-workflowmfp4w-build-action-3174572303/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-workflowmfp4w/series-workflowmfp4w-build-action-1926405120/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-01 20:33:59 +0000 UTC FinishedAt: 2026-09-01 20:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-01 20:33:59 +0000 UTC FinishedAt: 2026-09-01 20:34:03 +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":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"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-workflowmfp4w/series-workflowmfp4w-convert-artifact-2098753117/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-01 20:33:59 +0000 UTC FinishedAt: 2026-09-01 20:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-01 20:33:59 +0000 UTC FinishedAt: 2026-09-01 20:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-01 20:33:59 +0000 UTC FinishedAt: 2026-09-01 20:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-01 20:34:10 +0000 UTC FinishedAt: 2026-09-01 23:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfp4w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_from_private_id","mem_cgroup_private_id_get_online","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"d90000e9-e5fa-4ca4-9193-4861db2501dc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-01 20:34:10 +0000 UTC FinishedAt: 2026-09-01 23:40:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed357cf9-3429-4b82-86d9-1bb9d90d3801,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45f557b6-9de7-4b3a-b0bd-5b3c5774503e,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-workflowmfp4w/series-workflowmfp4w-build-action-3174572303/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-workflowmfp4w/series-workflowmfp4w-build-action-1926405120/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-workflowmfp4w/series-workflowmfp4w-convert-artifact-2098753117/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,}