Name: series-workflowkvtb9 Phase: Succeeded StartedAt: 2026-08-18 22:07:19 +0000 UTC FinishedAt: 2026-08-19 01:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[0] Phase: Succeeded StartedAt: 2026-08-18 22:07:19 +0000 UTC FinishedAt: 2026-08-18 22:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 22:07:19 +0000 UTC FinishedAt: 2026-08-18 22:12:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_MEM_ALWAYS_FORCE", "SECURITY_SELINUX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_MEM_ALWAYS_FORCE", "SECURITY_SELINUX" ], "series_id": "a6361e55-581b-4ca3-8d32-20f0d0ae60a4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "security_introspect_mem_foll_force", "selinux_introspect_mem_foll_force", "mem_release_with_private" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfTUVNX0FMV0FZU19GT1JDRSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7bWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkMGRiYzY2NjE2ODAzMTAxMzhmNTQwMzZkMDgyMTcxZGVlZWJkMTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjowOToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXG5pbmRleCA3ODBmODEyNTkwNTI3Li4zZGZhZWY0OWJiNzBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jXG5AQCAtODQ4LDE1ICYjNDM7ODQ4LDMyIEBAIHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuJiM0MztzdHJ1Y3QgbWVtX3ByaXZhdGUge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdC8qIFdhcyB0aGUgcHRyYWNlIGFjY2VzcyBjaGVjayBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbj8gKi9cbiYjNDM7XHRib29sIGludHJvc3BlY3Rpb247XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuJiM0MztcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuJiM0MztcdHByaXYtXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZW1tKSlcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZW1tID8gUFRSX0VSUihwcml2LVx1MDAzZW1tKSA6IC1FU1JDSDtcbiYjNDM7XHRwcml2LVx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuJiM0MztcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODczLDYgJiM0Mzs4OTAsOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0fVxuIFx0XHRyZXR1cm4gcHRyYWNlX2FjdGl2ZTtcbiBcdGRlZmF1bHQ6XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uKVxuJiM0MztcdFx0XHRyZXR1cm4gc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShmaWxlLVx1MDAzZWZfY3JlZCkgPT0gMDtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gfVxuQEAgLTg4MCw3ICYjNDM7ODk5LDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXG4ge1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXHUwMDNlbW07XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcbiBcdHNzaXplX3QgY29waWVkO1xuIFx0Y2hhciAqcGFnZTtcbkBAIC05NzAsMTIgJiM0Mzs5OTAsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0bW1kcm9wKHByaXYtXHUwMDNlbW0pO1xuJiM0MztcdGtmcmVlKHByaXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuIFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbiBcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbiBcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4tXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbiYjNDM7XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4gXHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li42NzQ1MmY3MWJlZGZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMzYsNiAmIzQzOzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLFxuIFx0IHVuc2lnbmVkIGludCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxuIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHQga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5mODQ4M2JlNThiYzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC0zMzgsNiAmIzQzOzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XG4mIzQzO2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTtcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuIFx0XHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxuQEAgLTY3Niw2ICYjNDM7Njc3LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0cmV0dXJuIGNhcF9wdHJhY2VfdHJhY2VtZShwYXJlbnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZDBmNzkwYTUzNGViMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiAmIzQzOzU5NSwyMSBAQCBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBpbnRyb3NwZWN0aXZlIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxuJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XG4mIzQzOyAqXG4mIzQzOyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSwgd2hpY2hcbiYjNDM7ICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxuJiM0MzsgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3NcbiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2Vzc1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMThkZDI4YjJiYjEzZC4uOTA1MTM3YzQ3MzIxNyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMjE1Nyw2ICYjNDM7MjE1NywzMiBAQCBzdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRcdFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGVcbiYjNDM7ICogbm9uLXdyaXRhYmxlIFZNQXMgdmlhIC9wcm9jL3NlbGYvbWVtLlxuJiM0MzsgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5XG4mIzQzOyAqIHRyaWdnZXJzIG9uIGFjY2Vzc2VzIHRoYXQgYXJlIG5vdCB2aXNpYmxlIHRvIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS5cbiYjNDM7ICpcbiYjNDM7ICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2VzbiYjMzk7dCBtYWtlIHNlbnNlIGhlcmUsIHNpbmNlIHdlIGNhbiYjMzk7dFxuJiM0MzsgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0dTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpO1xuJiM0MztcbiYjNDM7XHQvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi9cbiYjNDM7XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcdTAwMjZhdmQpO1xuJiM0MztcbiYjNDM7XHQvKiBBbHNvIGFsbG93IGlmIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIHdvdWxkIGFsbG93IGl0LiAqL1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICYjNDM7NzU4NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV90cmFjZW1lLCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19NRU1fQUxXQVlTX0ZPUkNFJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDttZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDBkYmM2NjYxNjgwMzEwMTM4ZjU0MDM2ZDA4MjE3MWRlZWViZDEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMjI6MDk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDc4MGY4MTI1OTA1MjcuLjNkZmFlZjQ5YmI3MGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04NDgsMTUgJiM0Mzs4NDgsMzIgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqLwomIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwkvKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgYnlwYXNzZWQgZHVlIHRvIGludHJvc3BlY3Rpb24/ICovCiYjNDM7CWJvb2wgaW50cm9zcGVjdGlvbjsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS0mZ3Q7Zl9vcC0mZ3Q7Zm9wX2ZsYWdzICZhbXA7IEZPUF9VTlNJR05FRF9PRkZTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7CiYjNDM7CXByaXYtJmd0O21tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHByaXYtJmd0O21tKSkKJiM0MzsJCXJldHVybiBwcml2LSZndDttbSA/IFBUUl9FUlIocHJpdi0mZ3Q7bW0pIDogLUVTUkNIOwomIzQzOwlwcml2LSZndDtpbnRyb3NwZWN0aW9uID0gcHJpdi0mZ3Q7bW0gPT0gY3VycmVudC0mZ3Q7bW07CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJYm9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7CiAKQEAgLTg3Myw2ICYjNDM7ODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCX0KIAkJcmV0dXJuIHB0cmFjZV9hY3RpdmU7CiAJZGVmYXVsdDoKJiM0MzsJCWlmIChwcml2LSZndDtpbnRyb3NwZWN0aW9uKQomIzQzOwkJCXJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtJmd0O2ZfY3JlZCkgPT0gMDsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQpAQCAtODgwLDcgJiM0Mzs4OTksOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDttbTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvczsKIAlzc2l6ZV90IGNvcGllZDsKIAljaGFyICpwYWdlOwpAQCAtOTcwLDEyICYjNDM7OTkwLDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJbW1kcm9wKHByaXYtJmd0O21tKTsKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBtZW1fbHNlZWssCiAJLnJlYWQJCT0gbWVtX3JlYWQsCiAJLndyaXRlCQk9IG1lbV93cml0ZSwKIAkub3BlbgkJPSBtZW1fb3BlbiwKLQkucmVsZWFzZQk9IG1lbV9yZWxlYXNlLAomIzQzOwkucmVsZWFzZQk9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSwKIAkuZm9wX2ZsYWdzCT0gRk9QX1VOU0lHTkVEX09GRlNFVCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uNjc0NTJmNzFiZWRmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCSB1bnNpZ25lZCBpbnQgbW9kZSkKIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpCiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCSBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTMzOCw2ICYjNDM7MzM4LDcgQEAgaW50IHNlY3VyaXR5X2JpbmRlcl90cmFuc2Zlcl9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogCQkJCSAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpOwomIzQzO2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTsKIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCkBAIC02NzYsNiAmIzQzOzY3NywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MWFlYThmZGYwMTQyLi5kMGY3OTBhNTM0ZWIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTU5NSw2ICYjNDM7NTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkCiYjNDM7ICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIG9mIHRoZSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5LCB3aGljaAomIzQzOyAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay4KJiM0MzsgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KJiM0MzsgKi8KJiM0MztpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QpOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzCiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDE4ZGQyOGIyYmIxM2QuLjkwNTEzN2M0NzMyMTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsMzIgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCQkJICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZQomIzQzOyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS4KJiM0MzsgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5CiYjNDM7ICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS4KJiM0MzsgKgomIzQzOyAqIENyZWF0aW5nIGFuIGF1ZGl0IHJlY29yZCBvbiBkZW5pYWwgZG9lc24mIzM5O3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4mIzM5O3QKJiM0MzsgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiYjNDM7CWludCByYzsKJiM0MzsJdTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpOwomIzQzOwomIzQzOwkvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi8KJiM0MzsJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fRVhFQ01FTSwgMCwgJmFtcDthdmQpOwomIzQzOwomIzQzOwkvKiBBbHNvIGFsbG93IGlmIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIHdvdWxkIGFsbG93IGl0LiAqLwomIzQzOwlpZiAocmMpCiYjNDM7CQlyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsICZhbXA7YXZkKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIHsKQEAgLTc1NTgsNiAmIzQzOzc1ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCiAJTFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLAogCUxTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLAomIzQzOwlMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksCiAJTFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSwKIAlMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLAogCUxTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGFjY2Vzc2VkLiBJdCYjMzk7cyBhZGRpbmcgYW4gTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCwgY2hlY2tpbmcgZm9yIGBGT0xMX0ZPUkNFYC4gIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIGFuZCBjbGVhcmx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuICBJJiMzOTttIHNlZWluZyBuZXcgc3RydWN0dXJlcywgYHN0cnVjdCBtZW1fcHJpdmF0ZWAsIGFuZCBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zIGxpa2UgYG1lbV9vcGVuYCwgYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiBBbmQgaXQgaG9va3MgdGhlIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGluIFNFTGludXggdG9vLgoKTXkgaW5pdGlhbCBmb2N1cyBpcyBmaW5kaW5nIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJIG5vdGVkOgoKKiAgIGBtZW1fb3BlbmAg4oCTIHN0YXRpYywgYnV0IHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIGBwcm9jX21lbV9vcGVyYXRpb25zLm9wZW5gLiBXb3J0aCBsb29raW5nIGF0LgoqICAgYHByb2NfbWVtX2ZvbGxfZm9yY2VgIOKAkyBzdGF0aWMsIGNhbGxlZCBmcm9tIGBtZW1fcndgLgoqICAgYG1lbV9yd2Ag4oCTIHN0YXRpYywgY2FsbGVkIGZyb20gYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAuCiogICBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAg4oCTIFRoaXMgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuICBJdCYjMzk7cyBnbG9iYWwhIEhpZ2ggcHJpb3JpdHkuCiogICBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCDigJMgc3RhdGljLCBidXQgaG9va2VkLgoKSG1tLCBva2F5LCBzbyBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGFuZCBgbWVtX3J3YCBhcmUgYWxsICpzdGF0aWMqLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXkmIzM5O3JlIGNhbGxlZCwgYW5kIHdoYXQgdGhlIFZGUyBpbnRlcmFjdGlvbiBsb29rcyBsaWtlLiAgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGFyZSBhY3R1YWxseSB1c2VkLgoKQWxyaWdodCwgSSByZW1lbWJlciB0aGF0IGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGFyZSBpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AuICBBbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMgdGhlcmUgdG9vLiAgTm93LCB0aGUgcmVhbCBnZW0gaGVyZSBpcyB0aGF0IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBpcyAqZXhwb3J0ZWQqIOKAkyB0aGF0JiMzOTtzIG11Y2ggYmV0dGVyIGZvciBmdXp6aW5nLiBJIGNvbmZpcm1lZCBpdCYjMzk7cyBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuCgpPa2F5LCBiYWNrIHRvIGBmcy9wcm9jL2Jhc2UuY2AuIENvbmZpcm1lZCDigJMgYG1lbV9vcGVuYCwgYG1lbV9yd2AsIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBhcmUgYWxsIHN0YXRpYy4gIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugc3RhdGljYWxseSBkZWZpbmVkIGZ1bmN0aW9ucyBhcmUgbGVzcyBsaWtlbHkgdG8gYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBiZWluZyBjYWxsZWQgZGlyZWN0bHkuIFdlIHVzdWFsbHkgd2FudCB0byBmaW5kIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGFzIEFQSXMuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIFZGUyBsYXllci4gU28sIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBsb29rcyBwcmltZSwgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVkZTIGNhbGxzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHBhdGNoIHN1Z2dlc3RzIHRoZSBuZXcgZnVuY3Rpb24mIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKSSYjMzk7bSBhbHNvIHNlZWluZyBhIGNvbW1lbnQgYWJvdXQgYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoaXMgaXMgYSAqY3JpdGljYWwqIHBpZWNlLiAgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBBIGNvbmRpdGlvbmFsIHBhdGggaXMgYSBiaWcgcmVkIGZsYWcgdGhhdCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhvcm91Z2hseSB3aXRoIGZ1enppbmcuIExldCYjMzk7cyBkbyBhIGdyZXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFJPQ19NRU1fRk9SQ0VfQUxXQVlTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcbmZzL3Byb2MvYmFzZS5jOjEyMjpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcbmZzL3Byb2MvYmFzZS5jLTEyMy1cdFBST0NfTUVNX0ZPUkNFX1BUUkFDRSxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMjktXHRJU19FTkFCTEVEKENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0UpID8gUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIDpcbmZzL3Byb2MvYmFzZS5jOjEzMDpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUztcbmZzL3Byb2MvYmFzZS5jLTEzMS1cbmZzL3Byb2MvYmFzZS5jPTEzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIHByb2NfbWVtX2ZvcmNlX3RhYmxlW10gX19pbml0Y29uc3QgPSB7XG5mcy9wcm9jL2Jhc2UuYzoxMzM6XHR7IFwmIzM0O2Fsd2F5c1wmIzM0OywgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTIH0sXG5mcy9wcm9jL2Jhc2UuYy0xMzQtXHR7IFwmIzM0O3B0cmFjZVwmIzM0OywgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIH0sXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjAzLSAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay5cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjA0OiAqIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLlxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDUtICpcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE1ND1zdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNjItICogbm9uLXdyaXRhYmxlIFZNQXMgdmlhIC9wcm9jL3NlbGYvbWVtLlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNjM6ICogVGhpcyBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLCBhbmQgb25seVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNjQtICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM2NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLZXJuZWwgTWVtb3J5IEFjY2VzcyBDb250cm9sKioKClJpZ2h0LCBzbyBJIHNlZSBgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTYC4gT2theSwgZW51bSB2YWx1ZS4gQW5kIHRoYXQmIzM5O3MgbGlrZWx5IGNvbm5lY3RlZCB0byBhIGtlcm5lbCBjb25maWcgb3B0aW9uIGxpa2UgYENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBkZWFsaW5nIHdpdGggaG93IGBwcm9jZnNgIGhhbmRsZXMgbWVtb3J5IGFjY2Vzcy4gR2l2ZW4gSSYjMzk7bSBzZWVpbmcgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpdmVzLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgYFBST0NfTUVNX0ZPUkNFYCBmYW1pbHkgb2Ygb3B0aW9ucyBhY3R1YWxseSAqZG9lcyouIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHksIGRlYnVnZ2luZywgYW5kIG90aGVyIGFzcGVjdHMgb2YgdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdWxseSB0byBhc3Nlc3MgaXRzIGltcGFjdC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgbXkgbmV4dCBzdG9wLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BST0NfTUVNX0ZPUkNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcbmZzL3Byb2MvYmFzZS5jOjEyMjpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcdFBST0NfTUVNX0ZPUkNFX1BUUkFDRSxcbmZzL3Byb2MvYmFzZS5jOjEyNDpcdFBST0NfTUVNX0ZPUkNFX05FVkVSXG5mcy9wcm9jL2Jhc2UuYy0xMjUtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cbmZzL3Byb2MvYmFzZS5jOjEyODpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX05PX0ZPUkNFKSA/IFBST0NfTUVNX0ZPUkNFX05FVkVSIDpcbmZzL3Byb2MvYmFzZS5jOjEyOTpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX0ZPUkNFX1BUUkFDRSkgPyBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgOlxuZnMvcHJvYy9iYXNlLmM6MTMwOlx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xuZnMvcHJvYy9iYXNlLmMtMTMxLVxuZnMvcHJvYy9iYXNlLmM9MTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgcHJvY19tZW1fZm9yY2VfdGFibGVbXSBfX2luaXRjb25zdCA9IHtcbmZzL3Byb2MvYmFzZS5jOjEzMzpcdHsgXCYjMzQ7YWx3YXlzXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNDpcdHsgXCYjMzQ7cHRyYWNlXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNTpcdHsgXCYjMzQ7bmV2ZXJcJiMzNDssIFBST0NfTUVNX0ZPUkNFX05FVkVSIH0sXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXHR7IH1cbi0tXG5mcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuZnMvcHJvYy9iYXNlLmMtODgwLVx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xuZnMvcHJvYy9iYXNlLmM6ODgxOlx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcbmZzL3Byb2MvYmFzZS5jLTg4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuZnMvcHJvYy9iYXNlLmM6ODgzOlx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XG5mcy9wcm9jL2Jhc2UuYy04ODQtXHRcdHRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGVfaW5vZGUoZmlsZSkpO1xuLS1cbnNlY3VyaXR5L0tjb25maWc9MjI9Y2hvaWNlXG5zZWN1cml0eS9LY29uZmlnLTIzLVx0cHJvbXB0IFwmIzM0O0FsbG93IC9wcm9jL3BpZC9tZW0gYWNjZXNzIG92ZXJyaWRlXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnOjI0Olx0ZGVmYXVsdCBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcbnNlY3VyaXR5L0tjb25maWctMjUtXHRoZWxwXG4tLVxuc2VjdXJpdHkvS2NvbmZpZz0zMz1jb25maWcgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0zOC1cbnNlY3VyaXR5L0tjb25maWc6Mzk6Y29uZmlnIFBST0NfTUVNX0ZPUkNFX1BUUkFDRVxuc2VjdXJpdHkvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7UmVxdWlyZSBhY3RpdmUgcHRyYWNlKCkgdXNlIGZvciBhY2Nlc3Mgb3ZlcnJpZGVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTU5Mz1pbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDMtICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxuc2VjdXJpdHkvc2VjdXJpdHkuYzo2MDQ6ICogVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMuXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwNS0gKlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMTU0PXN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2Mi0gKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE2MzogKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2NC0gKiB0cmlnZ2VycyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0byBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gdGhlIG9uZSBoYXZpbmcgaXQ6CgoqKkNvbmZpZ3VyYXRpb24gQ29uZnVzaW9uIGFuZCBWZXJpZmljYXRpb24qKgoKSG1tLCBsZXQgbWUgc2VlLi4uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYC4uLiBvciB3YXMgaXQgYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2A/IEl0JiMzOTtzIGVhc3kgdG8gZ2V0IHRob3NlIG1peGVkIHVwIHNvbWV0aW1lcy4gQmVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gaW4gYHNlY3VyaXR5L0tjb25maWdgLiBDYW4mIzM5O3QgdHJ1c3QgbXkgbWVtb3J5IG9uIHRoZXNlIGRldGFpbHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBjcml0aWNhbCBzZWN1cml0eS1yZWxhdGVkIHNldHRpbmdzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGFsd2F5cywgdG8gZ28gYmFjayB0byB0aGUgc291cmNlIHdoZW4gdGhlcmUmIzM5O3MgZXZlbiBhIGZsaWNrZXIgb2YgZG91YnQgYWJvdXQgdGhlIGV4YWN0IG5hbWUgb3IgbWVhbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NlY3VyaXR5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDIxOlx0XG4gIDIyOlx0Y2hvaWNlXG4gIDIzOlx0XHRwcm9tcHQgXCYjMzQ7QWxsb3cgL3Byb2MvcGlkL21lbSBhY2Nlc3Mgb3ZlcnJpZGVcJiMzNDtcbiAgMjQ6XHRcdGRlZmF1bHQgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRyYWRpdGlvbmFsbHkgL3Byb2MvcGlkL21lbSBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgbWVtb3J5XG4gIDI3Olx0XHQgIHBlcm1pc3Npb25zIGZvciB1c2VycyBsaWtlIHB0cmFjZSwgYXNzdW1pbmcgdGhleSBoYXZlIHB0cmFjZVxuICAyODpcdFx0ICBjYXBhYmlsaXR5LlxuICAyOTpcdFxuICAzMDpcdFx0ICBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbGltaXQgdGhhdCAtIGVpdGhlciBuZXZlciBvdmVycmlkZSwgb3JcbiAgMzE6XHRcdCAgcmVxdWlyZSBhY3R1YWwgYWN0aXZlIHB0cmFjZSBhdHRhY2htZW50IChkZWZhdWx0KS5cbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXG4gIDM0Olx0XHRib29sIFwmIzM0O1RyYWRpdGlvbmFsIC9wcm9jL3BpZC9tZW0gYmVoYXZpb3JcJiMzNDtcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBhbGxvd3MgL3Byb2MvcGlkL21lbSBhY2Nlc3NlcyB0byBvdmVycmlkZSBtZW1vcnkgbWFwcGluZ1xuICAzNzpcdFx0ICBwZXJtaXNzaW9ucyBpZiB5b3UgaGF2ZSBwdHJhY2UgYWNjZXNzIHJpZ2h0cy5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDQwOlx0XHRib29sIFwmIzM0O1JlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXCYjMzQ7XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcbiAgNDM6XHRcdCAgcGVybWlzc2lvbnMgZm9yIGFjdGl2ZSBwdHJhY2VycyBsaWtlIGdkYi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgUFJPQ19NRU1fTk9fRk9SQ0VcbiAgNDY6XHRcdGJvb2wgXCYjMzQ7TmV2ZXJcJiMzNDtcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgTmV2ZXIgb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmcgcGVybWlzc2lvbnNcbiAgNDk6XHRcbiAgNTA6XHRlbmRjaG9pY2VcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gIDUzOlx0XHRib29sIFwmIzM0O21zZWFsIHN5c3RlbSBtYXBwaW5nc1wmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiA2NEJJVFxuICA1NTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuICA1NjpcdFx0ZGVwZW5kcyBvbiAhQ0hFQ0tQT0lOVF9SRVNUT1JFXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIEFwcGx5IG1zZWFsIG9uIHN5c3RlbSBtYXBwaW5ncy5cbiAgNTk6XHRcdCAgVGhlIHN5c3RlbSBtYXBwaW5ncyBpbmNsdWRlcyB2ZHNvLCB2dmFyLCB2dmFyX3ZjbG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzA1CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uOiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYC4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBgZnMvcHJvYy9iYXNlLmNgLCBpZiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBzZXQsIG5laXRoZXIgYENPTkZJR19QUk9DX01FTV9OT19GT1JDRWAgbm9yIGBDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFYCBpcyBlbmFibGVkLCBhbmQgaXQgZGVmYXVsdHMgdG8gYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoZXJlZm9yZSwgZW5hYmxpbmcgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBwYXRoIGZvciB0ZXN0aW5nLgoKSSBuZWVkIHRvIHJlbWVtYmVyIFNFTGludXggaXMgaW52b2x2ZWQuIFNvLCBgU0VDVVJJVFlfU0VMSU5VWGAgaXMgYWxzbyBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG1lbV9vcGVuYCwgYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGluIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZ1enppbmcgdGFyZ2V0cy4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucy4gYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGxvb2tzIHByb21pc2luZyDigJMgaXQmIzM5O3MgYW4gZXhwb3J0ZWQsIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLiBBbHNvLCBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBzZWVtcyBsaWtlIGFub3RoZXIgZ3JlYXQgdGFyZ2V0LCBmb3VuZCBpbiBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueXRoaW5nIGVsc2UgaXMgdmlhYmxlLiBgbWVtX29wZW5gIGlzIHN0YXRpYywgYnV0IGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AsIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGlzIG1lYW5zIGl0IGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhbmQgd29uJiMzOTt0IGJlIGZ1bGx5IGlubGluZWQuIFRoZXJlZm9yZSwgYG1lbV9vcGVuYCBjb3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgZm9yIGZ1enppbmcuIFRoZSBzYW1lIGxvZ2ljIGhvbGRzIHRydWUgZm9yIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiBIb3dldmVyLCBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaXMgdGhlIGJldHRlciBjaG9pY2UgYmVjYXVzZSBpdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgbWVtX29wZW5gICppcyogc3RhdGljLCBhbmQgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgICppcyogZXhwb3J0ZWQuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgZG9lc24mIzM5O3QgZGVwZW5kIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucywgYWNjb3JkaW5nIHRvIHRoZSBLY29uZmlnIGZpbGUgaW4gYHNlY3VyaXR5L0tjb25maWdgLiBgU0VDVVJJVFlfU0VMSU5VWGAgaGFzIGEgZmV3IGRlcGVuZGVuY2llcywgYnV0IHRoYXQmIzM5O3MgYWxyZWFkeSBrbm93bi4KCkhlcmUgYXJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAKKiAgIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgCiogICBgbWVtX29wZW5gCiogICBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYAoKSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgYG1lbV9vcGVuYCBpcyB1bmlxdWUsIGJ1dCBpdCBkb2VzIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX29wZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0xNTY9c3RhdGljIGludFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzoxNTc6c3B1ZnNfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTE1OC17XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0zMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWVtX2ZvcHMgPSB7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjMwNDpcdC5vcGVuXHRcdFx0PSBzcHVmc19tZW1fb3BlbixcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA1LVx0LnJlbGVhc2VcdFx0PSBzcHVmc19tZW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTkyMD1pbnQgeGVfcGFnZW1hcF9jYWNoZV9jcmVhdGUoc3RydWN0IHhlX3RpbGUgKnRpbGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5MzYtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTkzNzpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kZXZtZW1fb3BlbihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTM4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTk3Mj1zdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2RybV9wYWdlbWFwX2Zyb21fZmQoaW50IGZkLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTk4LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE5OTk6XHRkcGFnZW1hcCA9IHhlX2Rldm1lbV9vcGVuKHRvX3hlX2RldmljZShkcm0pLCByZWdpb25faW5zdGFuY2UpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTIwMDAtXHRkcm1fZGV2X2V4aXQoaWR4KTtcbi0tXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jPTUzMT12b2lkIHVwZGF0ZV93YXRlcm1hcmtfc2V0dGluZyhzdHJ1Y3QgaXB1Nl9pc3lzICppc3lzKVxuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNTQwLVx0dTY0IGlzeXNfcGJfZGF0YXJhdGVfbWJzID0gMDtcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NTQxOlx0dTMyIG1lbV9vcGVuX3RocmVzaG9sZCA9IDA7XG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jLTU0Mi1cdHN0cnVjdCBsdHJfZGlkIGx0cmRpZDtcbi0tXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jLTYxOS1cdFx0XHQgICAgIElTRl9ETUFfVE9QX0dEQV9QUk9GRVJUWV9QQUdFX1NJWkUpID8gMSA6IDA7XG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jOjYyMDpcdFx0bWVtX29wZW5fdGhyZXNob2xkID0gaXN5cy1cdTAwM2VwZGF0YS1cdTAwM2VpcGRhdGEtXHUwMDNlbWVtb3Blbl90aHJlc2hvbGQ7XG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jOjYyMTpcdFx0bWVtX29wZW5fdGhyZXNob2xkID0gbWF4X3QodTMyLCBtZW1fb3Blbl90aHJlc2hvbGQsIHBhZ2VfbnVtKTtcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NjIyOlx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7bWVtX29wZW5fdGhyZXNob2xkOiAldVxcblwmIzM0OywgbWVtX29wZW5fdGhyZXNob2xkKTtcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNjIzLVx0XHRzZXRfaXdha2VfcmVnaXN0ZXIoaXN5cywgR0RBX01FTU9QRU5fVEhSRVNIT0xEX0lOREVYLFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo2MjQ6XHRcdFx0XHQgICBtZW1fb3Blbl90aHJlc2hvbGQpO1xuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYy02MjUtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jPTE2NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmxhc2hfZGVidWdmc19mb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMTY1OS1cdC5vd25lciAgID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYzoxNjYwOlx0Lm9wZW4gICAgPSBtZW1fb3BlbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTE2NjEtXHQucmVhZCAgICA9IGZsYXNoX3JlYWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM9MzI0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ2VfcWluZm9fZGVidWdmc19mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTMyNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYzozMjUzOmludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTMyNTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oPTY1PXZvaWQgYWRkX2RlYnVnZnNfZmlsZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmgtNjctXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbmZpbGVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oOjY4OmludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuaC02OS1cbi0tXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jPTY5PUFUVFJJQlVURV9HUk9VUFMocWNvbV9ybXRmc19tZW0pO1xuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy03MC1cbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmM6NzE6c3RhdGljIGludCBxY29tX3JtdGZzX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy03Mi17XG4tLVxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYz0xNTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWNvbV9ybXRmc19tZW1fZm9wcyA9IHtcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMTUzLVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jOjE1NDpcdC5vcGVuID0gcWNvbV9ybXRmc19tZW1fb3BlbixcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMTU1LVx0LnJlYWQgPSBxY29tX3JtdGZzX21lbV9yZWFkLFxuLS1cbmZzL3Byb2MvYmFzZS5jPTgwND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3NpbmdsZV9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtODExLS8qXG5mcy9wcm9jL2Jhc2UuYzo4MTI6ICogcHJvY19tZW1fb3BlbigpIGNhbiByZXR1cm4gZXJybm8sIE5VTEwgb3IgbW1fc3RydWN0Ki5cbmZzL3Byb2MvYmFzZS5jLTgxMy0gKlxuLS1cbmZzL3Byb2MvYmFzZS5jLTgxNy0gKi9cbmZzL3Byb2MvYmFzZS5jOjgxODpzdHJ1Y3QgbW1fc3RydWN0ICpwcm9jX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKVxuZnMvcHJvYy9iYXNlLmMtODE5LXtcbi0tXG5mcy9wcm9jL2Jhc2UuYy04MzktXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL3Byb2MvYmFzZS5jLTg0MS17XG5mcy9wcm9jL2Jhc2UuYzo4NDI6XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xuZnMvcHJvYy9iYXNlLmMtODQzLVxuLS1cbmZzL3Byb2MvYmFzZS5jPTg1Mj1zdHJ1Y3QgbWVtX3ByaXZhdGUge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTg1Ny1cbmZzL3Byb2MvYmFzZS5jOjg1ODpzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtODU5LXtcbi0tXG5mcy9wcm9jL2Jhc2UuYy04NjUtXHRcdHJldHVybiAtRUlOVkFMO1xuZnMvcHJvYy9iYXNlLmM6ODY2Olx0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG5mcy9wcm9jL2Jhc2UuYy04NjctXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2VtbSkpXG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwMDUtXHQud3JpdGVcdFx0PSBtZW1fd3JpdGUsXG5mcy9wcm9jL2Jhc2UuYzoxMDA2Olx0Lm9wZW5cdFx0PSBtZW1fb3BlbixcbmZzL3Byb2MvYmFzZS5jLTEwMDctXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAxMT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTEwMTIte1xuZnMvcHJvYy9iYXNlLmM6MTAxMzpcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcbmZzL3Byb2MvYmFzZS5jLTEwMTQtfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTEwODY9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDg3LXtcbmZzL3Byb2MvYmFzZS5jOjEwODg6XHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcbmZzL3Byb2MvYmFzZS5jLTEwODktfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTI3Njc9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjc2OS1cdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gTlVMTDtcbmZzL3Byb2MvYmFzZS5jOjI3NzA6XHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xuZnMvcHJvYy9iYXNlLmMtMjc3MS1cdHJldHVybiAwO1xuLS1cbmZzL3Byb2MvaW50ZXJuYWwuaD0zOTQ9c3RydWN0IHByb2NfbWFwc19wcml2YXRlIHtcbi0tXG5mcy9wcm9jL2ludGVybmFsLmgtNDA0LVxuZnMvcHJvYy9pbnRlcm5hbC5oOjQwNTpzdHJ1Y3QgbW1fc3RydWN0ICpwcm9jX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKTtcbmZzL3Byb2MvaW50ZXJuYWwuaC00MDYtXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTM3Nj1zdGF0aWMgaW50IHByb2NfbWFwc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zODQtXHRwcml2LVx1MDAzZWlub2RlID0gaW5vZGU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mzg1Olx0cHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX1JFQUQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTM4Ni1cdGlmIChJU19FUlIocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSkpIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTYxOT1zdGF0aWMgaW50IHNtYXBzX3JvbGx1cF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNjMyLVx0cHJpdi1cdTAwM2Vpbm9kZSA9IGlub2RlO1xuZnMvcHJvYy90YXNrX21tdS5jOjE2MzM6XHRwcml2LVx1MDAzZWxvY2tfY3R4Lm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTYzNC1cdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tKSkge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yMzk0PXN0YXRpYyBpbnQgcGFnZW1hcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMzk3LVxuZnMvcHJvYy90YXNrX21tdS5jOjIzOTg6XHRtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX1JFQUQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTIzOTktXHRpZiAoSVNfRVJSX09SX05VTEwobW0pKVxuLS1cbmZzL3Byb2MvdGFza19ub21tdS5jPTI1Mj1zdGF0aWMgaW50IG1hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNjEtXHRwcml2LVx1MDAzZWlub2RlID0gaW5vZGU7XG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoyNjI6XHRwcml2LVx1MDAzZWxvY2tfY3R4Lm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNjMtXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMzkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBDaGVsaXNvIGN4Z2I0IERyaXZlcioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgQ2hlbGlzbyBjeGdiNCBkcml2ZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGl0cyBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gSSBzcG90dGVkIGEgYG1lbV9vcGVuYCBmdW5jdGlvbiBjYWxsIHdpdGhpbiBgY3hnYjRfZGVidWdmcy5jYC4gSG1tLCB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IHVuaXF1ZSwgaXMgaXQ/IEkmIzM5O3ZlIHNlZW4gdGhhdCBuYW1lIHVzZWQgaW4gdmFyaW91cyBjb250ZXh0cy4gSXQgbWFrZXMgbWUgd2FudCB0byBsb29rIGRlZXBlci4KCkl0IG1lYW5zIHRoZSBmdW5jdGlvbiBuYW1lIGlzIGxpa2VseSBub3QgYSBwYXJ0aWN1bGFybHkgcm9idXN0IHNpZ25pZmllciBvZiBhbnl0aGluZywgdGhlcmVmb3JlIGEgZGlmZmVyZW50IG5hbWUgb3IgZnVuY3Rpb24gaGFzIHRvIGJlIHNlbGVjdGVkLgoKT2theSwgbGV0JiMzOTtzIHRyeSBhIGRpZmZlcmVudCB0YWNrLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc3BlY2lmaWMgYW5kIGxlc3MgZ2VuZXJpYyBuYW1lLiBNYXliZSBhIGZ1bmN0aW9uIHdpdGggbW9yZSBzcGVjaWFsaXplZCBwdXJwb3NlLiBXaGF0IGFib3V0IHRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmdW5jdGlvbj8gVGhhdCBuYW1lIHNvdW5kcyBtb3JlIHByb21pc2luZy4gSXQgaW1wbGllcyBhIHJlbGVhc2UgbWVjaGFuaXNtIGFzc29jaWF0ZWQgd2l0aCBwcml2YXRlIGRhdGEsIHdoaWNoIGlzIG9mdGVuIGEga2V5IGFzcGVjdCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIGJlaW5nIHVzZWQuIElzIGl0IGNvdXBsZWQgdG8gdGhlIGBtZW1fb3BlbmA/IFdoYXQga2luZCBvZiBwcml2YXRlIGRhdGEgaXMgYmVpbmcgbWFuYWdlZCBoZXJlPyBBbmQgd2hhdCYjMzk7cyBiZWluZyByZWxlYXNlZD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTk4NT1zdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTk5Mi1cbmZzL3Byb2MvYmFzZS5jOjk5MzpzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTk5NC17XG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwMDYtXHQub3Blblx0XHQ9IG1lbV9vcGVuLFxuZnMvcHJvYy9iYXNlLmM6MTAwNzpcdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcbmZzL3Byb2MvYmFzZS5jLTEwMDgtXHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjg0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeS1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBzdG9vZCBvdXQgaW5pdGlhbGx5IGFzIHNvbWV0aGluZyB1bmlxdWUuIEkgaGFkIGl0IG9uIGEgbGlzdCB3aXRoIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIEJ1dCwgdGhpbmtpbmcgYWJvdXQgaXQgYSBiaXQgbW9yZSwgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMganVzdCBhIHNpbXBsZSBtZW1vcnkgcmVsZWFzZSBmdW5jdGlvbi4gSXQmIzM5O3Mgbm90IHBhcnRpY3VsYXJseSBjb21wbGV4IG9yIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBpdCBqdXN0IGZyZWVzIG1lbW9yeS4gUHJvYmFibHkgbm90IGdvaW5nIHRvIHJldmVhbCBhbnl0aGluZyBuZXcuCgpOb3csIG15IGF0dGVudGlvbiYjMzk7cyB0dXJuZWQgdG8gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLiBXaGlsZSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgSSBzZWUgdGhhdCBgbWVtX3J3YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYm90aCBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYCwgY2FsbHMgYHByb2NfbWVtX2ZvbGxfZm9yY2VgLiBUaGlzIGlzIG11Y2ggbW9yZSBwcm9taXNpbmcuIFRoZSBjaGFpbiBvZiBjYWxscyBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBtb3JlIGNvbXBsZXggbWVtb3J5IG9wZXJhdGlvbnMsIHNvbWV0aGluZyBJIGNhbiBwb3RlbnRpYWxseSBleHBsb2l0IHRocm91Z2ggZnV6emluZyBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYCAtIHRocm91Z2ggdGhlIGluZGlyZWN0aW9ucy4gSSBzaG91bGQgY2hlY2sgaWYgYHByb2NfbWVtX2ZvbGxfZm9yY2VgIGlzIHVuaXF1ZSwgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX21lbV9mb2xsX2ZvcmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTg1OD1zdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTg3My1cbmZzL3Byb2MvYmFzZS5jOjg3NDpzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmZzL3Byb2MvYmFzZS5jLTg3NS17XG4tLVxuZnMvcHJvYy9iYXNlLmM9ODk5PXN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL2Jhc2UuYy05MjAtXHRmbGFncyA9IHdyaXRlID8gRk9MTF9XUklURSA6IDA7XG5mcy9wcm9jL2Jhc2UuYzo5MjE6XHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXG5mcy9wcm9jL2Jhc2UuYy05MjItXHRcdGZsYWdzIHw9IEZPTExfRk9SQ0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzYwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgRm9sbG93IEZvcmNlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSBiaXQgdW51c3VhbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIG9uY2Ugc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gaXQgd29uJiMzOTt0IGV2ZW4gaGF2ZSBpdHMgb3duIGRlZGljYXRlZCBzeW1ib2wgaW4gdGhlIGZpbmFsIGV4ZWN1dGFibGUsIHdoaWNoIGlzIGdvaW5nIHRvIG1ha2UgaXQgdHJpY2tpZXIgdG8gdGFyZ2V0LCBzbyBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgZnVuY3Rpb25zIGluc3RlYWQuCgpCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IG15IGFzc3VtcHRpb25zIGFyZSBzb3VuZCwgc28gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgc28gd2UgaGF2ZSBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgLgoKV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGlzIHBhdGNoIGFkZHMgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCByZXNwZWN0aXZlbHkuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBhbnkgb3RoZXIgTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGUpIGlzIGltcGxlbWVudGluZyB0aGlzIGhvb2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbiBTRUxpbnV4IHNwZWNpZmljIGhvb2suIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuZnMvcHJvYy9iYXNlLmMtODkzLVx0XHRpZiAocHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uKVxuZnMvcHJvYy9iYXNlLmM6ODk0Olx0XHRcdHJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkKSA9PSAwO1xuZnMvcHJvYy9iYXNlLmMtODk1LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0zOD1MU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjM5OkxTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC00MC1MU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0zNDA9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDozNDE6aW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTM0Mi1pbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD02NzU9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTY3OS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo2ODA6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC02ODEte1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9NTkzPWludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTU5OC0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTk5OiAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwMC0gKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDctICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjYwODppbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjA5LXtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjEwOlx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTYxMS19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNTQ9c3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTcwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNzE6c3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3Mi17XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Nzk9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU4Ni1cdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc1ODc6XHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU4OC1cdExTTV9IT09LX0lOSVQoY2FwZ2V0LCBzZWxpbnV4X2NhcGdldCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODAwCgkJCQkJCQlvdXRwdXQ6IDIzOAoJCQkJCQkJdGhvdWdodHM6IDc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYC9wcm9jL3BpZC9tZW1gIEludHJvc3BlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwcmltYXJpbHkgYW4gU0VMaW51eCB0aGluZywgYXQgbGVhc3QgaW4gdGVybXMgb2YgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRyaWdnZXJpbmcgdGhpcy4gWWVzLCBjb25maXJtZWQsIGZvdW5kIGl0IGluIGBzZWN1cml0eS9LY29uZmlnYC4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvcmUgbG9naWMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGFjY2Vzc2VkLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBhIHByb2Nlc3MgdG8gYnlwYXNzIHRoZSB1c3VhbCBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpdCBpbnRyb3NwZWN0cyBpdHMgb3duIG1lbW9yeS4gVGhpcyBieXBhc3MgaXMgZ3JhbnRlZCBvbmx5IGlmIHRoZSBuZXcgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIExTTSBob29rIGFsbG93cyBpdC4gQW5kIHRoaXMgd2hvbGUgdGhpbmcgaXMgb25seSBhY3RpdmUgaWYgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBzb3VuZHMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBwcm9jZnMgYW5kLCBjcml0aWNhbGx5LCBTRUxpbnV4LCBhZmZlY3RpbmcgaG93IG1lbW9yeSBpbnRyb3NwZWN0aW9uIHZpYSBgL3Byb2Mvc2VsZi9tZW1gIHdvcmtzLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBrZXkgc3ltYm9scyBmb3IgZnV6emluZzogYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGFuZCBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYC4gQW5kLCB0byBtYWtlIGl0IHdvcmssIEkgbmVlZCB0byBlbmFibGUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC4KCkhtbSwgSSBzZWUgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMgYSBub24taW5saW5lZCBmdW5jdGlvbiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNob3VsZCBJIGluY2x1ZGUgaXQgaW4gdGhlIGZ1enppbmcgc2NvcGU/IEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IGp1c3QgZHJvcHMgdGhlIGBtbWAgYW5kIGZyZWVzIHRoZSBgbWVtX3ByaXZhdGVgIHN0cnVjdC4KCmBgYGMKc3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCnsKCXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKCgltbWRyb3AocHJpdi0mZ3Q7bW0pOwoJa2ZyZWUocHJpdik7CglyZXR1cm4gMDsKfQpgYGAKCkhvd2V2ZXIsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIG5ldyBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgYG1lbV9wcml2YXRlYC4gRnV6emluZyB0aGlzIG1pZ2h0IHVuY292ZXIgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaG93IHRoZSBgbWVtX3ByaXZhdGVgIGlzIGFsbG9jYXRlZCBvciBkZWFsbG9jYXRlZC4gSSYjMzk7bGwgYWRkIGl0IHRvIHRoZSBsaXN0LgoKV2FpdCwgd2hhdCBhYm91dCBgbWVtX29wZW5gPyBUaGVyZSBhcmUgbXVsdGlwbGUgaW1wbGVtZW50YXRpb25zLCBpdCYjMzk7cyBlYXN5IHRvIGNyZWF0ZSBpc3N1ZXMgd2l0aCBzeXprYWxsZXIgaWYgSSBqdXN0IHB1dCBgbWVtX29wZW5gLiBTaW5jZSB0aGUgcmVsZXZhbnQgYG1lbV9vcGVuYCBpbiBgZnMvcHJvYy9iYXNlLmNgIGlzIHN0YXRpYywgSSBjYW4mIzM5O3QganVzdCBwcm92aWRlIHRoZSBmdW5jdGlvbiBuYW1lLiBJZiBJIHByb3ZpZGUgdGhlIG5hbWUsIHN5emthbGxlciBtaWdodCB0cnkgdG8gZnV6eiB0aGUgd3Jvbmcgb3IgYWxsIGluc3RhbmNlcyBvZiBgbWVtX29wZW5gLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCB3aGF0IEkgd2FudC4gU28gSSB3aWxsIGF2b2lkIGFueSBhbWJpZ3VvdXMgZnVuY3Rpb24gbmFtZXMuCgpTbywgdGhlIGRlZmluaXRpdmUgbGlzdCBmb3IgZnV6emluZyBpczoKKiAgIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYAoqICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAKKiAgIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBpcyB1bmlxdWUuIFllcywgaXQmIzM5O3MgdGhlIG9ubHkgb25lIG9mIGl0cyBuYW1lLgoKQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoZSByZWFzb25pbmcgaW50byBhIGNvbmNpc2UgYXJndW1lbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgbG9naWMgZm9yIGAvcHJvYy9waWQvbWVtYC4gU3BlY2lmaWNhbGx5LCBpdCBhbGxvd3MgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBUaGlzIGludHJvZHVjZXMgYSBuZXcgYG1lbV9wcml2YXRlYCBzdHJ1Y3QgdG8gdHJhY2sgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLiBJdCBhbHNvIGFkZHMgYSBuZXcgTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCksIHdoaWNoIGNvbnRyb2xzIHRoZSBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmF0ZWQgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBlbmFibGVkLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHByb2NmcyBhbmQgdGhlIHNlY3VyaXR5IHN1YnN5c3RlbSwgYW5kIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGZlYXR1cmUgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuCgpTb3VuZHMgc29saWQuIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBncmFzcCBvbiB0aGlzIHBhdGNoIGFuZCBhbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX01FTV9BTFdBWVNfRk9SQ0UmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O21lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19NRU1fQUxXQVlTX0ZPUkNFJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDttZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDBkYmM2NjYxNjgwMzEwMTM4ZjU0MDM2ZDA4MjE3MWRlZWViZDEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMjI6MDk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDc4MGY4MTI1OTA1MjcuLjNkZmFlZjQ5YmI3MGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04NDgsMTUgJiM0Mzs4NDgsMzIgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqLwomIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwkvKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgYnlwYXNzZWQgZHVlIHRvIGludHJvc3BlY3Rpb24/ICovCiYjNDM7CWJvb2wgaW50cm9zcGVjdGlvbjsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS0mZ3Q7Zl9vcC0mZ3Q7Zm9wX2ZsYWdzICZhbXA7IEZPUF9VTlNJR05FRF9PRkZTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7CiYjNDM7CXByaXYtJmd0O21tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHByaXYtJmd0O21tKSkKJiM0MzsJCXJldHVybiBwcml2LSZndDttbSA/IFBUUl9FUlIocHJpdi0mZ3Q7bW0pIDogLUVTUkNIOwomIzQzOwlwcml2LSZndDtpbnRyb3NwZWN0aW9uID0gcHJpdi0mZ3Q7bW0gPT0gY3VycmVudC0mZ3Q7bW07CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJYm9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7CiAKQEAgLTg3Myw2ICYjNDM7ODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCX0KIAkJcmV0dXJuIHB0cmFjZV9hY3RpdmU7CiAJZGVmYXVsdDoKJiM0MzsJCWlmIChwcml2LSZndDtpbnRyb3NwZWN0aW9uKQomIzQzOwkJCXJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtJmd0O2ZfY3JlZCkgPT0gMDsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQpAQCAtODgwLDcgJiM0Mzs4OTksOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDttbTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvczsKIAlzc2l6ZV90IGNvcGllZDsKIAljaGFyICpwYWdlOwpAQCAtOTcwLDEyICYjNDM7OTkwLDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJbW1kcm9wKHByaXYtJmd0O21tKTsKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBtZW1fbHNlZWssCiAJLnJlYWQJCT0gbWVtX3JlYWQsCiAJLndyaXRlCQk9IG1lbV93cml0ZSwKIAkub3BlbgkJPSBtZW1fb3BlbiwKLQkucmVsZWFzZQk9IG1lbV9yZWxlYXNlLAomIzQzOwkucmVsZWFzZQk9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSwKIAkuZm9wX2ZsYWdzCT0gRk9QX1VOU0lHTkVEX09GRlNFVCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uNjc0NTJmNzFiZWRmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCSB1bnNpZ25lZCBpbnQgbW9kZSkKIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpCiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCSBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTMzOCw2ICYjNDM7MzM4LDcgQEAgaW50IHNlY3VyaXR5X2JpbmRlcl90cmFuc2Zlcl9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogCQkJCSAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpOwomIzQzO2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTsKIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCkBAIC02NzYsNiAmIzQzOzY3NywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MWFlYThmZGYwMTQyLi5kMGY3OTBhNTM0ZWIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTU5NSw2ICYjNDM7NTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkCiYjNDM7ICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIG9mIHRoZSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5LCB3aGljaAomIzQzOyAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay4KJiM0MzsgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KJiM0MzsgKi8KJiM0MztpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QpOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzCiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDE4ZGQyOGIyYmIxM2QuLjkwNTEzN2M0NzMyMTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsMzIgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCQkJICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZQomIzQzOyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS4KJiM0MzsgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5CiYjNDM7ICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS4KJiM0MzsgKgomIzQzOyAqIENyZWF0aW5nIGFuIGF1ZGl0IHJlY29yZCBvbiBkZW5pYWwgZG9lc24mIzM5O3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4mIzM5O3QKJiM0MzsgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiYjNDM7CWludCByYzsKJiM0MzsJdTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpOwomIzQzOwomIzQzOwkvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi8KJiM0MzsJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fRVhFQ01FTSwgMCwgJmFtcDthdmQpOwomIzQzOwomIzQzOwkvKiBBbHNvIGFsbG93IGlmIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIHdvdWxkIGFsbG93IGl0LiAqLwomIzQzOwlpZiAocmMpCiYjNDM7CQlyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsICZhbXA7YXZkKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIHsKQEAgLTc1NTgsNiAmIzQzOzc1ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCiAJTFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLAogCUxTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLAomIzQzOwlMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksCiAJTFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSwKIAlMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLAogCUxTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgY2xlYXJseSBhbHRlcmluZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGhhbmRsZWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGludHJvZHVjaW5nIGEgbmV3IGRhdGEgc3RydWN0dXJlLCBgc3RydWN0IG1lbV9wcml2YXRlYC4gVGhpcyBzdHJ1Y3QgaXMgZ29pbmcgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIGBtbV9zdHJ1Y3RgIGFuZCBhIGJvb2xlYW4gZmxhZyBjYWxsZWQgYGludHJvc3BlY3Rpb25gLiBJbnRlcmVzdGluZywgSSB3b25kZXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGF0IGZsYWcgaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGFsbG9jYXRpb24gaGFwcGVucyB3aXRoaW4gYG1lbV9vcGVuYCwgdXNpbmcgYGttYWxsb2Nfb2JqYC4gTm93LCBga21hbGxvY19vYmpgLi4uIHRoYXQmIzM5O3Mgbm90IHN0YW5kYXJkLCBpcyBpdD8gSSYjMzk7bSBmYW1pbGlhciB3aXRoIGBrbWFsbG9jYCwgYGt6YWxsb2NgLi4uIEkgKnN1c3BlY3QqIGl0JiMzOTtzIGEgbWFjcm8gb3IgYSB3cmFwcGVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBwcm9iYWJseSBlcXVpdmFsZW50IHRvIGBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtX3ByaXZhdGUpLCBHRlBfS0VSTkVMKWAsIGJ1dCB0aGUgc3ludGF4IGlzIHRocm93aW5nIG1lIGEgYml0LiBXYWl0LCB0aGUgY29kZSBkZWNsYXJlczogYHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtgIEFoLCB0aGUgYF9fZnJlZShrZnJlZSlgIGF0dHJpYnV0ZSBpcyBpbnRlcmVzdGluZywgdGhhdCBoZWxwcyBtZSB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IHdpbGwgYmUgZGVhbGxvY2F0ZWQuIEJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyBga21hbGxvY19vYmpgIGlzIGRlZmluZWQuIEkmIzM5O20gZ29pbmcgdG8gZ3JlcCBmb3IgaXQganVzdCB0byBtYWtlIHN1cmUuIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBhIGxvY2FsIG1hY3JvIG9mIHNvbWUgc29ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21hbGxvY19vYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE1NTAyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjAzPW5vbi1cXCBgYE5VTExgYCwgbG9ja2xlc3NseSBhY2Nlc3NpbmcgdGhlIGBgLVx1MDAzZWFgYCBhbmQgYGAtXHUwMDNlYmBgIGZpZWxkcy5cbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjA4LSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMDk6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIxMC0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjI1PXRoZWlyIHJpZ2h0cyB0byByZW9yZGVyIHRoaXMgY29kZSBhcyBmb2xsb3dzOlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzAtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIzMTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMyLSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yNjE9c2hvd3MgYW4gZXhhbXBsZSBvZiBpbnNlcnRpb246XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2Ni0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjY3OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjgtICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q9MjY3PVRoZSBSQ1UgdmVyc2lvbiBvZiBhdWRpdF91cGRfcnVsZSgpIGlzIGFzIGZvbGxvd3M6OlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI3OC1cdFx0XHRpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCBcdTAwMjZlLVx1MDAzZXJ1bGUpKSB7XG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdDoyNzk6XHRcdFx0XHRuZSA9IGttYWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yODAtXHRcdFx0XHRpZiAobmUgPT0gTlVMTClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTQ0MT11c2VzIG9mIFJDVSBtYXkgYmUgZm91bmQgaW4gbGlzdFJDVS5yc3QgYW5kIE5NSS1SQ1UucnN0LlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcwLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo0NzE6XHRcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzItXHRcdHNwaW5fbG9jayhcdTAwMjZmb29fbXV0ZXgpO1xuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NTUzPVRoZSBmb29fdXBkYXRlX2EoKSBmdW5jdGlvbiBtaWdodCB0aGVuIGJlIHdyaXR0ZW4gYXMgZm9sbG93czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzItXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjU3MzpcdFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3NC1cdFx0c3Bpbl9sb2NrKFx1MDAyNmZvb19tdXRleCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD0zOT1rcmVmX2luaXQgYXMgc286OlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDItXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjQzOiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDQtICAgICBpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD04MT10aHJlYWQgdG8gcHJvY2Vzczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDItXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjEwMzpcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwNC1cdGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTM4Mz10byBwcm90ZWN0IHRoZSBjYWNoZSBhbmQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBpdC4gSGVyZSYjMzk7cyB0aGUgY29kZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDQtXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ0NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQ5OT13aGljaCBhcmUgdGFrZW4gYXdheSwgYW5kIHRoZSBgYCYjNDM7YGAgYXJlIGxpbmVzIHdoaWNoIGFyZSBhZGRlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUxOS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTIwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MjEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk4PXdvcmtzIHBlcmZlY3RseTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAwLSAgcmF3X3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDItXG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NTA3PXByZWVtcHRpb24gb24gUFJFRU1QVF9SVCBrZXJuZWxzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDktICBzcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MTA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTExLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIHBhc3NpbmcgYSBzaXplIG9mIGEgc3RydWN0IGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ4Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zODY9bWF5IGhlbHAgd2l0aCBhbGlnbm1lbnQsIHdyYXAtYXJvdW5kLCBvciBhZGRpdGlvbmFsIGhhcmRlbmluZy4gVGhlXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6Mzg3OmttYWxsb2Nfb2JqKCktZmFtaWx5IG9mIG1hY3JvcyBwcm92aWRlIHRoaXMgaW50cm9zcGVjdGlvbiwgd2hpY2ggY2FuIGJlXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzg4LXVzZWQgZm9yIHRoZSBjb21tb24gY29kZSBwYXR0ZXJucyBmb3Igc2luZ2xlLCBhcnJheSwgYW5kIGZsZXhpYmxlIG9iamVjdFxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM5OS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDA6XHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDA1Olx0X19hdXRvX3R5cGUgcHRyID0ga21hbGxvY19vYmooc3RydWN0IGZvbyBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA2LVxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0xNzM0PWNhbGxiYWNrOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTczOS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjE3NDA6ICAgICAgICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTc0MS0gICAgICAgICAgc3Vic3RyZWFtLVx1MDAzZXJ1bnRpbWUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzMwMj1kZXN0cnVjdG9yIGZ1bmN0aW9uIGlzIHNldCBpbiB0aGUgYGBwcml2YXRlX2ZyZWVgYCBmaWVsZDo6XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwMy1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozMzA0OiAgc3RydWN0IG15ZGF0YSAqcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzA1LSAgaHctXHUwMDNlcHJpdmF0ZV9kYXRhID0gcDtcbi0tXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q9MjQyPUFuZCBTT0Mtc3BlY2lmaWMgdXRpbGl0eSBjb2RlIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6OlxuLS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTEtXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q6MjUyOlx0XHRwZGF0YTIgPSBrbWFsbG9jX29iaigqcGRhdGEyKTtcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTMtXHRcdCpwZGF0YTIgPSBwZGF0YTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00MDM9ZSB0dXR0aSBnbGkgb2dnZXR0aSBjaGUgY29udGllbmUuIEVjY28gaWwgY29kaWNlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NjU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTUxOT1zb25vIHF1ZWxsZSByaW1vc3NlLCBtZW50cmUgcXVlbGxlIGBgJiM0MztgYCBzb25vIHF1ZWxsZSBhZ2dpdW50ZS5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MzktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1NDA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01NDEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ4OD1tZW1vcmlhLiBTdSB1biBrZXJuZWwgbm9uLVBSRUVNUFRfUlQgaWwgc2VndWVudGUgY29kaWNlIGZ1bnppb25hIHBlcmZldHRhbWVudGU6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTAtICByYXdfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjQ5MTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkyLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTc9UFJFRU1QVF9SVDo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5OS0gIHNwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQyPUlsIG1vZG8gcHJlZmVyaXRvIHBlciBwYXNzYXJlIGxhIGRpbWVuc2lvbmUgZGkgdW5hIHN0cnV0dHVyYSDDqCBpbCBzZWd1ZW50ZTpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0NjpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1ND1MYSBmb3JtYSBwcmVmZXJpZGEgcGFyYSBwYXNhciBlbCB0YW1hw7FvIGRlIHVuYSBlc3RydWN0dXJhIGVzIGxhIHNpZ3VpZW50ZTpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU3LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk1ODpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NDY9a3JlZuWPr+S7peWHuueOsOWcqOaVsOaNrue7k+aehOS9k+S4reeahOS7u+S9leWcsOaWueOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6NTU6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTYtICAgICBpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NjI9S3JlZuinhOWImVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTEwOC1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjEwOTpcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMTAtXHRpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgxMD1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MTY6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE3LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MjQ9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MjktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODMwOlx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgzMS1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTg1Nz1tYXJ2ZWxfYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjMtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjg2NDpcdGFwZXIgPSBrbWFsbG9jX29iaigqYXBlcik7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2NS1cdGlmIChhcGVyID09IE5VTEwpIHJldHVybiAtRU5PTUVNO1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTAxOT1tYXJ2ZWxfYWdwX2luZm8odm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjEtXHQgKi9cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6MTA2MjpcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYzLVx0aWYgKCFhZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTU5MD10aXRhbl9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk2LVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjU5NzpcdGFwZXIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdGl0YW5fYWdwX2FwZXJ0dXJlKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTgtXHRpZiAoYXBlciA9PSBOVUxMKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz03MzE9dGl0YW5fYWdwX2luZm8odm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzYyLVx0ICovXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NzYzOlx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzY0LVx0aWYgKCFhZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9Mjk9cHJvY2Vzc19yZWxvY19mb3JfZ290KEVsZjY0X1JlbGEgKnJlbGEsXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNDgtXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo0OTpcdGcgPSBrbWFsbG9jX29iaigqZyk7XG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy01MC1cdGctXHUwMDNlbmV4dCA9IGNoYWluc1tyX3N5bV0ubmV4dDtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYz0yMTE9c3RhdGljIHZvaWQgcGRldl9zYXZlX3NybV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjMtXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYzoyMjQ6XHR0bXAgPSBrbWFsbG9jX29iaigqdG1wKTtcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyNS1cdGlmICghdG1wKSB7XG4tLVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jPTM1OT12b2lkICp1bndpbmRfYWRkX3RhYmxlKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgY29uc3Qgdm9pZCAqdGFibGVfc3RhcnQsXG4tLVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM2OC1cbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYzozNjk6XHR0YWJsZSA9IGttYWxsb2Nfb2JqKCp0YWJsZSk7XG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzcwLVx0aWYgKCF0YWJsZSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9Mjc0PXN0YXRpYyBpbnQgbG9jb21vX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI3OS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyODA6XHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IGxvY29tb19zYXZlX2RhdGEpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI4MS1cdGlmICghc2F2ZSlcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9OTY0PXN0YXRpYyBpbnQgc2ExMTExX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzEtXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6OTcyOlx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhKTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzMtXHRpZiAoIXNhdmUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jPTU3Mj1zdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmRfdGFibGVfYWRkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbi0tXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYzo1Nzc6XHRzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jX29iaigqdGFiKTtcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzgtXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM9NTM9c3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqX2dldF9wd3JkbShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM6MTAyOlx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAzLVx0aWYgKGVudHJ5KSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYz00MDY9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxMi1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM6NDEzOlx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTQtXHRpZiAoIXB3cnN0KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM9MTEzPXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jOjEzNTpcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM2LVx0aWYgKCFwd3JzdClcbi0tXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXG5hcmNoL2FybS9tbS9wZ2QuYzoyMDojZGVmaW5lIF9wZ2RfYWxsb2MobW0pXHRcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcbmFyY2gvYXJtL21tL3BnZC5jLTIxLSNkZWZpbmUgX3BnZF9mcmVlKG1tLCBwZ2QpXHRrZnJlZShwZ2QpXG4tLVxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM9NzY0PXN0YXRpYyBpbnQgY292ZXJhZ2Vfc3RhcnQoY29uc3QgdW5pb24gZGVjb2RlX2l0ZW0gKnRhYmxlKVxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY1LXtcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcdGNvdmVyYWdlLmJhc2UgPSBrbWFsbG9jX29ianMoc3RydWN0IGNvdmVyYWdlX2VudHJ5LFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY3LVx0XHRcdFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz03NzQ9dm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg2LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo3ODc6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4OC1cdGlmICghZW50cnkpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MTAyPXN0YXRpYyB2b2lkICp2Z2ljX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA2LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6MTA3Olx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwOC1cdGlmICghaXRlcilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0zNjQ9c3RhdGljIHZvaWQgKnZnaWNfaXRzX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc3LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6Mzc4Olx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3OS1cdGlmICghaXRlcilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTc0Mz12b2lkIF9faW5pdCB2Z2ljX3NldF9rdm1faW5mbyhjb25zdCBzdHJ1Y3QgZ2ljX2t2bV9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ1LVx0QlVHX09OKGdpY19rdm1faW5mbyAhPSBOVUxMKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NzQ2Olx0Z2ljX2t2bV9pbmZvID0ga21hbGxvY19vYmooKmdpY19rdm1faW5mbyk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0Ny1cdGlmIChnaWNfa3ZtX2luZm8pXG4tLVxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM9OTc9c3RhdGljIGludCBfX2luaXQgbmZoZF9pbml0X29uZShpbnQgaWQsIHUzMiBibG9ja3MsIHUzMiBic2l6ZSlcbi0tXG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTQtXG5hcmNoL202OGsvZW11L25mYmxvY2suYzoxMTU6XHRkZXYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZoZF9kZXZpY2UpO1xuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE2LVx0aWYgKCFkZXYpXG4tLVxuYXJjaC9tNjhrL21tL2ttYXAuYz0xMDg9c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF9pb19hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL202OGsvbW0va21hcC5jLTExMi1cbmFyY2gvbTY4ay9tbS9rbWFwLmM6MTEzOlx0YXJlYSA9IGttYWxsb2Nfb2JqKCphcmVhKTtcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTE0LVx0aWYgKCFhcmVhKVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTI1Mz11MzIgYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2ModTMyIHNyY2lkLCB1MzIgZGVzdGlkLFxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxMi1cdFx0XHQgKi9cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjMxMzpcdFx0XHRjdHAgPSBrbWFsbG9jX29iaihjaGFuX3RhYl90LCBHRlBfQVRPTUlDKTtcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxNC1cdFx0XHRjaGFuX3RhYl9wdHJbaV0gPSBjdHA7XG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MzkxPXUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcylcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTQtXHQgKi9cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjQxNTpcdGRlc2NfYmFzZSA9ICh1MzIpIGttYWxsb2Nfb2JqcyhhdTF4X2RkbWFfZGVzY190LCBlbnRyaWVzLFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE2LVx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbi0tXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHUzMiAqbG9jYXRpb24sIEVsZl9BZGRyIHYsXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03NC1cdCAqL1xuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYzo3NTpcdG4gPSBrbWFsbG9jX29iaigqbik7XG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc2LVx0aWYgKCFuKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM9MzExPXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHVpbnQzMl90ICpsb2NhdGlvbixcbi0tXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMC1cdCAqL1xuYXJjaC9taXBzL2tlcm5lbC92cGUuYzozMjE6XHRuID0ga21hbGxvY19vYmooKm4pO1xuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjItXHRpZiAoIW4pXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTE4OD1wYXRfcXVlcnlfbW9kdWxlKHVsb25nIHBjZWxsX2xvYywgdWxvbmcgbW9kX2luZGV4KVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTUtXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6MTk2Olx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5Ny1cdGlmICghcGFfcGRjX2NlbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XHRkZXYtXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVx1MDAzZWFkZHIsIG51bV9hZGRycyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVx0aWYoIWRldi1cdTAwM2VhZGRyKSB7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jPTgxPXN0YXRpYyBpbnQgX19pbml0IHByb2Nlc3Nvcl9wcm9iZShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTItXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM6MTEzOlx0XHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTE0LVx0XHRpZiAoIXBhX3BkY19jZWxsKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz0xNDk9dW53aW5kX3RhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE1OS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzoxNjA6XHR0YWJsZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1bndpbmRfdGFibGUsIEdGUF9VU0VSKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNjEtXHRpZiAodGFibGUgPT0gTlVMTClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9NDA2PXZvaWQgdW53aW5kX2ZyYW1lX2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMC1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzo0MTE6XHRyMiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwdF9yZWdzLCBHRlBfQVRPTUlDKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTItXHRpZiAoIXIyKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYz05ODQ9aW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzMi1cdFx0fVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jOjEwMzM6XHRcdHRtcF9wYXJ0ID0ga21hbGxvY19vYmooKnRtcF9wYXJ0KTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDM0LVx0XHRlcnIgPSAtRU5PTUVNO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz03MzE9aW50IGt2bV92Y3B1X2lvY3RsX2NvbmZpZ190bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzQtXHRcdCAgICBjZmctXHUwMDNlYXJyYXkgLyBQQUdFX1NJWkU7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6Nzc1Olx0cGFnZXMgPSBrbWFsbG9jX29ianMoKnBhZ2VzLCBudW1fcGFnZXMpO1xuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3Ni1cdGlmICghcGFnZXMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTg5OD1pbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE0LVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjkxNTpcdHZjcHVfZTUwMC1cdTAwM2VndGxiX2FyY2ggPSBrbWFsbG9jX29ianMoKnZjcHVfZTUwMC1cdTAwM2VndGxiX2FyY2gsXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE2LVx0XHRcdFx0XHQgICAgS1ZNX0U1MDBfVExCMF9TSVpFICYjNDM7IEtWTV9FNTAwX1RMQjFfU0laRSk7XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTQ1PXN0YXRpYyBpbnQgZ3JvdyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgbWF4X2Jsb2Nrcylcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTYtXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6NTc6XHRibG9jayA9IGttYWxsb2Nfb2JqcyhyaF9ibG9ja190LCBtYXhfYmxvY2tzLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01OC1cdGlmIChibG9jayA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz0yNTM9cmhfaW5mb190ICpyaF9jcmVhdGUodW5zaWduZWQgaW50IGFsaWdubWVudClcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYwLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjI2MTpcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYyLVx0aWYgKGluZm8gPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYz05NT1zdGF0aWMgaW50IGhhc2hfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtOTgtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzo5OTpcdG1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0ID0ga21hbGxvY19vYmooc3RydWN0IGhhc2hfbW1fY29udGV4dCk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMDAtXHRpZiAoIW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0KVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNS1cdFx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXHUwMDNlc3B0KSB7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzoxMjY6XHRcdFx0bW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXHUwMDNlc3B0ID0ga21hbGxvY19vYmooc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjctXHRcdFx0aWYgKCFtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NjIzPXN0YXRpYyBpbnQgZXZlbnRfdW5pcV9hZGQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubCxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUwLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjY1MTpcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUyLVx0aWYgKCFkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz03NTU9c3RhdGljIGludCBjcmVhdGVfZXZlbnRzX2Zyb21fY2F0YWxvZyhzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50c18sXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkwOC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MDk6XHRldmVudHMgPSBrbWFsbG9jX29ianMoKmV2ZW50cywgYXR0cl9tYXggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTEwLVx0aWYgKCFldmVudHMpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE0LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkxNTpcdGV2ZW50X2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNi1cdGlmICghZXZlbnRfZGVzY3MpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIwLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkyMTpcdGV2ZW50X2xvbmdfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2xvbmdfZGVzY3MsIGV2ZW50X2lkeCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjItXHRpZiAoIWV2ZW50X2xvbmdfZGVzY3MpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jPTEyMj1zdGF0aWMgaW50IGhzdGFfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jOjE1NDpcdHBwYzR4eF9oc3RhX21zaS5pcnFfbWFwID0ga21hbGxvY19vYmpzKGludCwgaXJxX2NvdW50KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTU1LVx0aWYgKCFwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCkge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9NDQ9c3RhdGljIGludCBzcHVmc19hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy00OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6NTA6XHRhdHRyID0ga21hbGxvY19vYmooKmF0dHIpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy01MS1cdGlmICghYXR0cilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYz02Mjg9dm9pZCBxdWV1ZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBwc2VyaWVzX2hwX2Vycm9ybG9nICpocF9lcnJsb2cpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM2LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM6NjM3Olx0d29yayA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwc2VyaWVzX2hwX3dvcmssIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM4LVx0aWYgKHdvcmspIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM9MTE5PWludCBodmNzX2dldF9wYXJ0bmVyX2luZm8odWludDMyX3QgdW5pdF9hZGRyZXNzLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjItXHRcdCAqIGh2Y3NfZnJlZV9wYXJ0bmVyX2luZm8oKS4gKi9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYzoxNjM6XHRcdG5leHRfcGFydG5lcl9pbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh2Y3NfcGFydG5lcl9pbmZvLFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2NC1cdFx0XHRcdFx0XHRHRlBfQVRPTUlDKTtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jPTE0ND1zdGF0aWMgdm9pZCBzaG93X2dwY2lfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNDktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jOjE1MDpcdGJ1ZiA9IGttYWxsb2Nfb2JqKCpidWYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNTEtXHRpZiAoYnVmID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jPTQzNT1zdGF0aWMgaW50IHBzZXJpZXNfbXNpX29wc19wcmVwYXJlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQzLVx0c3RydWN0IHBzZXJpZXNfbXNpX2RldmljZSAqcHNlcmllc19kZXYgX19mcmVlKGtmcmVlKVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jOjQ0NDpcdFx0PSBrbWFsbG9jX29iaigqcHNlcmllc19kZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0NS1cdGlmICghcHNlcmllc19kZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcdHBkbi1cdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVx0aWYgKCFwZG4tXHUwMDNlcGVfbnVtX21hcClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM9MTA3Nj1zdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX3Zhc19pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwODktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM6MTA5MDpcdGh2X2NhcHMgPSBrbWFsbG9jX29iaigqaHZfY2Fwcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA5MS1cdGlmICghaHZfY2Fwcylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM9NzA1PXN0YXRpYyBpbnQgdmlvX2Ntb19idXNfcHJvYmUoc3RydWN0IHZpb19kZXYgKnZpb2Rldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ3LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jOjc0ODpcdFx0ZGV2X2VudCA9IGttYWxsb2Nfb2JqKHN0cnVjdCB2aW9fY21vX2Rldl9lbnRyeSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ5LVx0XHRpZiAoIWRldl9lbnQpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM9MzUyPXN0YXRpYyBpbnQgZnNsX2xiY19zeXNjb3JlX3N1c3BlbmQodm9pZCAqZGF0YSlcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjQtXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYzozNjU6XHRjdHJsLVx1MDAzZXNhdmVkX3JlZ3MgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZnNsX2xiY19yZWdzKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2Ni1cdGlmICghY3RybC1cdTAwM2VzYXZlZF9yZWdzKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDEtXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYzoxNjQyOlx0bXBpYy1cdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXHUwMDNlc2F2ZV9kYXRhLCBtcGljLVx1MDAzZW51bV9zb3VyY2VzKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXHRCVUdfT04obXBpYy1cdTAwM2VzYXZlX2RhdGEgPT0gTlVMTCk7XG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYz0yMz12b2lkIF9faW5pdCBvZl9pbnN0YW50aWF0ZV9ydGModm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM1LVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYzozNjpcdFx0XHRyZXMgPSBrbWFsbG9jX29iaigqcmVzKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzctXHRcdFx0aWYgKCFyZXMpIHtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYz02NTQ9c3RhdGljIGludCBhZGRfcmVsb2NhdGlvbl90b19hY2N1bXVsYXRlKHN0cnVjdCBtb2R1bGUgKm1lLCBpbnQgdHlwZSxcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjUtXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo2NjY6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjctXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjk5LVx0aWYgKCFmb3VuZCkge1xuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzAwOlx0XHRyZWxfaGVhZCA9IGttYWxsb2Nfb2JqKCpyZWxfaGVhZCk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MDEtXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzExLVx0XHRcdGJ1Y2tldCA9XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MTI6XHRcdFx0XHRrbWFsbG9jX29iaihzdHJ1Y3QgdXNlZF9idWNrZXQpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzI0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTY5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2VjdXJpdHkgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGttYWxsb2Nfb2JqYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBtYWNybyBzaG9ydGhhbmQgZm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhbiBvYmplY3QgdXNpbmcgYGttYWxsb2NgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1lYW50IHRvIHJlcGxhY2UgYGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb28pLCBHRlBfS0VSTkVMKWAuICBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG5ldyBtYWNybyB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkuICBTaW5jZSBwbGFpbiBga21hbGxvY2AgZG9lc24mIzM5O3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGttYWxsb2Nfb2JqYCAqZG9lc24mIzM5O3QqIHplcm8gaXQgZWl0aGVyLiAgTXkgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBhc3N1bXB0aW9uLiBUaGlzIG1lYW5zIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIG9iamVjdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoZSBwYXRjaCBhbGxvY2F0ZXMgYSBgc3RydWN0IG1lbV9wcml2YXRlYC4gIEkgc2VlIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgYHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtgLCBhbmQgdGhlbiB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIGhvdyB0aGF0IG1lbW9yeSBpcyAqdXNlZCouIFRoZSBmaWVsZHMgYG1tYCBhbmQgYGludHJvc3BlY3Rpb25gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kLgoKTGV0JiMzOTtzIGV4YW1pbmUgdGhlIHN0cnVjdHVyZSBpdHNlbGY6IGBzdHJ1Y3QgbW1fc3RydWN0ICptbTtgIGlzIGFuIDgtYnl0ZSBwb2ludGVyLCBhbmQgYGJvb2wgaW50cm9zcGVjdGlvbjtgIGlzIDEgYnl0ZSwgc28gdGhlcmUgYXJlIDcgYnl0ZXMgb2YgcGFkZGluZy4gTXkgY29uY2VybiBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGVyZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPwoKSSBjaGVja2VkIHdoZXJlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIHVzZWQuIEl0JiMzOTtzIHN0b3JlZCBpbiBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYC4gSXQmIzM5O3MgYWNjZXNzZWQgaW4gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiAgQ3J1Y2lhbGx5LCBpdCBpcyBub3QgKmNvcGllZCogdG8gdXNlciBzcGFjZSBpbiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBhIHNlY3VyaXR5IGlzc3VlIHNpbmNlIHRoZXkgYXJlIG5vdCBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB0aGUgdXNlci4gVGhlIGZpZWxkcyBgbW1gIGFuZCBgaW50cm9zcGVjdGlvbmAgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCBpcyBzdWZmaWNpZW50LgoKT2theSwgbGV0JiMzOTtzIGJyb2FkZW4gbXkgdmlldyB0byBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2guIEkgc2VlIG5ldyBMU00gaG9va3MgYmVpbmcgaW50cm9kdWNlZC4gIFRoZSBhZGRpdGlvbiBvZiBgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaG9vayBpcyB0aGUgY3JpdGljYWwgbmV3IGFkZGl0aW9uLiBJJiMzOTttIG5vdGluZyB0aGUgbmV3IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgdGhlIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9ucy4KCk15IGludGVyZXN0IG5vdyB0dXJucyB0byBob3cgdGhlc2UgaG9va3MgYXJlIGJlaW5nIGltcGxlbWVudGVkLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiB1c2VzIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAuIFRoZSBjb2RlIGNhbGxzIGl0IHdpdGggYW4gYCZhbXA7YXZkYCBhcmd1bWVudCwgaW5kaWNhdGluZyBpdCYjMzk7cyBhIHBvaW50ZXIgdG8gYW4gYGF2X2RlY2lzaW9uYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgYXZkYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAsIGFuZCBsb29rIGludG8gdGhlIHNpZ25hdHVyZXMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXZjX2hhc19wZXJtX25vYXVkaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9hdmMuYz05NTQ9aW50IGF2Y19zc19yZXNldCh1MzIgc2Vxbm8pXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODItICpcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6OTgzOiAqIFNsb3ctcGF0aCBoZWxwZXIgZnVuY3Rpb24gZm9yIGF2Y19oYXNfcGVybV9ub2F1ZGl0LCB3aGVuIHRoZSBhdmNfbm9kZSBsb29rdXBcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtOTg0LSAqIGZhaWxzLiAgRG9uJiMzOTt0IGlubGluZSB0aGlzLCBzaW5jZSBpdCYjMzk7cyB0aGUgc2xvdy1wYXRoIGFuZCBqdXN0IHJlc3VsdHMgaW4gYVxuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTAxOT1pbnQgYXZjX2hhc19leHRlbmRlZF9wZXJtcyh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA1LSAqXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExMDY6ICogVGhpcyBpcyB0aGUgXCYjMzQ7d2UgaGF2ZSBubyBub2RlXCYjMzQ7IHBhcnQgb2YgYXZjX2hhc19wZXJtX25vYXVkaXQoKSwgd2hpY2ggaXNcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEwNy0gKiB1bmxpa2VseSBhbmQgbmVlZHMgZXh0cmEgc3RhY2sgc3BhY2UgZm9yIHRoZSBuZXcgbm9kZSB0aGF0IHdlIGdlbmVyYXRlLCBzb1xuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTExMD1zdGF0aWMgbm9pbmxpbmUgaW50IGF2Y19wZXJtX25vbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTI1LS8qKlxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTI2OiAqIGF2Y19oYXNfcGVybV9ub2F1ZGl0IC0gQ2hlY2sgcGVybWlzc2lvbnMgYnV0IHBlcmZvcm0gbm8gYXVkaXRpbmcuXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExMjctICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ0LSAqL1xuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTQ1OmlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVx0XHRcdFx0dTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExODk9aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk0LVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTk1Olx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgMCxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE5Ni1cdFx0XHRcdCAgXHUwMDI2YXZkKTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTY0MT1zdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE2NjUtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTY2NjpcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIHNjbGFzcywgYXYsIDAsIFx1MDAyNmF2ZCk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2Ny1cdGlmICghKG9wdHMgXHUwMDI2IENBUF9PUFRfTk9BVURJVCkpIHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE3MT1zdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3Ny1cdC8qIEFsbG93IGlmIHRoZSBwcm9jZXNzIGlzIGdlbmVyYWxseSBhbGxvd2VkIHRvIGhhdmUgZXhlY3V0YWJsZSBhbm9ueW1vdXMgbWVtb3J5LiAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNzg6XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcdTAwMjZhdmQpO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNzktXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODEtXHRpZiAocmMpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE4MjpcdFx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcdTAwMjZhdmQpO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODMtXHRyZXR1cm4gcmM7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMyNjk9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwNS1cdFx0LyogQ2FjaGUgbWlzcy4gKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMzA2Olx0XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgaXNlYy1cdTAwM2VzaWQsIGlzZWMtXHUwMDNlc2NsYXNzLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMDctXHRcdFx0XHRcdCAgcGVybXMsIDAsIGF2ZHApO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMDE9aW50IHNsb3dfYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwgdTMyIGF1ZGl0ZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExMC0gKiBAYXZkOiBhY2Nlc3MgdmVjdG9yIGRlY2lzaW9uc1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjExMTogKiBAcmVzdWx0OiByZXN1bHQgZnJvbSBhdmNfaGFzX3Blcm1fbm9hdWRpdFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExMi0gKiBAYTogIGF1eGlsaWFyeSBhdWRpdCBkYXRhXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExNi0gKiBhdmNfaGFzX3Blcm0oKSBhZnRlciBhIHBlcm1pc3Npb24gY2hlY2ssIGJ1dCBjYW4gYWxzbyBiZVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjExNzogKiBjYWxsZWQgZGlyZWN0bHkgYnkgY2FsbGVycyB3aG8gdXNlIGF2Y19oYXNfcGVybV9ub2F1ZGl0KClcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTgtICogaW4gb3JkZXIgdG8gc2VwYXJhdGUgdGhlIHBlcm1pc3Npb24gY2hlY2sgZnJvbSB0aGUgYXVkaXRpbmcuXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oPTEyMz1zdGF0aWMgaW5saW5lIGludCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzYtI2RlZmluZSBBVkNfRVhURU5ERURfUEVSTVMgMiAvKiB1cGRhdGUgZXh0ZW5kZWQgcGVybWlzc2lvbnMgKi9cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMzc6aW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzgtXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE2OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGEgaHlwb3RoZXRpY2FsIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgYXZjX2hhc19wZXJtX25vYXVkaXRgJiMzOTtzIEludGVyYWN0aW9uIHdpdGggYGF2ZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFNFTGludXggYWNjZXNzIHZlY3RvciBjYWNoZSAoQVZDKSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyBgYXZjX2hhc19wZXJtX25vYXVkaXRgIGluIGBzZWN1cml0eS9zZWxpbnV4L2F2Yy5jYCBhY3R1YWxseSAqdXNlcyogdGhlIGBhdmRgIHN0cnVjdHVyZS4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHVwZGF0aW5nIGl0LCBlZmZlY3RpdmVseSB3cml0aW5nIGluZm9ybWF0aW9uPyBPciBpcyBpdCBhY3R1YWxseSByZWFkaW5nIGRhdGEgZnJvbSB0aGUgYGF2ZGAgdG8gcGVyZm9ybSBzb21lIGtpbmQgb2YgY2hlY2sgb3IgZGVjaXNpb24tbWFraW5nIHByb2Nlc3M/IFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIGRhdGEgZmxvd3MgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEFWQy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbXBvcnRhbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIHRvbyEgVW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgZGF0YSBnb2VzLCBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbSBpcyBwYXJhbW91bnQgdG8gZmluZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHNjYW4sIGJ1dCBwcmVjaXNpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmxpbmUgaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgvYXZjLmM9MTExMD1zdGF0aWMgbm9pbmxpbmUgaW50IGF2Y19wZXJtX25vbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ0LSAqL1xuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTQ1OmlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVx0XHRcdFx0dTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1ODgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEFWQy5jKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHNlY3VyaXR5L3NlbGludXgvYXZjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTE0NS4gSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYWNjZXNzIHZlY3RvciBjYWNoZSAoQVZDKSBoYW5kbGluZywgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBoYXMgaGlzdG9yaWNhbGx5IGJlZW4gcHJvbmUgdG8gc3VidGxlIGlzc3VlcywgYW5kIHRoZSBzeW1wdG9tcyBJJiMzOTttIGNoYXNpbmcgYXJlIGxlYWRpbmcgbWUgaW4gdGhpcyBkaXJlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoZSBBVkMgY2FjaGUgbG9va3VwIGFuZCBpbnZhbGlkYXRpb24uIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZS4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L2F2Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTQwOlx0ICogb3RoZXIgZXJyb3JzLiAgVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGJ5IGF2Y19oYXNfcGVybSgpLFxuMTE0MTpcdCAqIGJ1dCBtYXkgYWxzbyBiZSBjYWxsZWQgZGlyZWN0bHkgdG8gc2VwYXJhdGUgcGVybWlzc2lvbiBjaGVja2luZyBmcm9tXG4xMTQyOlx0ICogYXVkaXRpbmcsIGUuZy4gaW4gY2FzZXMgd2hlcmUgYSBsb2NrIG11c3QgYmUgaGVsZCBmb3IgdGhlIGNoZWNrIGJ1dFxuMTE0MzpcdCAqIHNob3VsZCBiZSByZWxlYXNlZCBmb3IgdGhlIGF1ZGl0aW5nLlxuMTE0NDpcdCAqL1xuMTE0NTpcdGlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxuMTE0NjpcdFx0XHRcdFx0dTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbjExNDc6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncyxcbjExNDg6XHRcdFx0XHRcdHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKVxuMTE0OTpcdHtcbjExNTA6XHRcdHUzMiBkZW5pZWQ7XG4xMTUxOlx0XHRzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7XG4xMTUyOlx0XG4xMTUzOlx0XHRpZiAoV0FSTl9PTighcmVxdWVzdGVkKSlcbjExNTQ6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4xMTU1Olx0XG4xMTU2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMTU3Olx0XHRub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MpO1xuMTE1ODpcdFx0aWYgKHVubGlrZWx5KCFub2RlKSkge1xuMTE1OTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjExNjA6XHRcdFx0cmV0dXJuIGF2Y19wZXJtX25vbm9kZShzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCxcbjExNjE6XHRcdFx0XHRcdCAgICAgICBmbGFncywgYXZkKTtcbjExNjI6XHRcdH1cbjExNjM6XHRcdGRlbmllZCA9IHJlcXVlc3RlZCBcdTAwMjYgfm5vZGUtXHUwMDNlYWUuYXZkLmFsbG93ZWQ7XG4xMTY0Olx0XHRtZW1jcHkoYXZkLCBcdTAwMjZub2RlLVx1MDAzZWFlLmF2ZCwgc2l6ZW9mKCphdmQpKTtcbjExNjU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTE2NjpcdFxuMTE2NzpcdFx0aWYgKHVubGlrZWx5KGRlbmllZCkpXG4xMTY4Olx0XHRcdHJldHVybiBhdmNfZGVuaWVkKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAwLCAwLCAwLFxuMTE2OTpcdFx0XHRcdFx0ICBmbGFncywgYXZkKTtcbjExNzA6XHRcdHJldHVybiAwO1xuMTE3MTpcdH1cbjExNzI6XHRcbjExNzM6XHQvKipcbjExNzQ6XHQgKiBhdmNfaGFzX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9ucyBhbmQgcGVyZm9ybSBhbnkgYXBwcm9wcmlhdGUgYXVkaXRpbmcuXG4xMTc1Olx0ICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyXG4xMTc2Olx0ICogQHRzaWQ6IHRhcmdldCBzZWN1cml0eSBpZGVudGlmaWVyXG4xMTc3Olx0ICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzXG4xMTc4Olx0ICogQHJlcXVlc3RlZDogcmVxdWVzdGVkIHBlcm1pc3Npb25zLCBpbnRlcnByZXRlZCBiYXNlZCBvbiBAdGNsYXNzXG4xMTc5Olx0ICogQGF1ZGl0ZGF0YTogYXV4aWxpYXJ5IGF1ZGl0IGRhdGFcbjExODA6XHQgKlxuMTE4MTpcdCAqIENoZWNrIHRoZSBBVkMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYXJlIGdyYW50ZWRcbjExODI6XHQgKiBmb3IgdGhlIFNJRCBwYWlyIChAc3NpZCwgQHRzaWQpLCBpbnRlcnByZXRpbmcgdGhlIHBlcm1pc3Npb25zXG4xMTgzOlx0ICogYmFzZWQgb24gQHRjbGFzcywgYW5kIGNhbGwgdGhlIHNlY3VyaXR5IHNlcnZlciBvbiBhIGNhY2hlIG1pc3MgdG8gb2J0YWluXG4xMTg0Olx0ICogYSBuZXcgZGVjaXNpb24gYW5kIGFkZCBpdCB0byB0aGUgY2FjaGUuICBBdWRpdCB0aGUgZ3JhbnRpbmcgb3IgZGVuaWFsIG9mXG4xMTg1Olx0ICogcGVybWlzc2lvbnMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwb2xpY3kuICBSZXR1cm4gJTAgaWYgYWxsIEByZXF1ZXN0ZWRcbjExODY6XHQgKiBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZCwgLSVFQUNDRVMgaWYgYW55IHBlcm1pc3Npb25zIGFyZSBkZW5pZWQsIG9yXG4xMTg3Olx0ICogYW5vdGhlciAtZXJybm8gdXBvbiBvdGhlciBlcnJvcnMuXG4xMTg4Olx0ICovXG4xMTg5Olx0aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjU3CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgVXNlIGluIFNFTGludXgvUHJvYyBGaWxlc3lzdGVtIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYC4gTXkgcXVpY2sgc2NhbiBzaG93ZWQgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCBwb3B1bGF0aW5nIGFuIGBhdl9kZWNpc2lvbmAgc3RydWN0LCB3aGljaCBpcyBhbiBvdXRwdXQgcGFyYW1ldGVyLCBzbyB0aGF0JiMzOTtzIHBlcmZlY3RseSBmaW5lLiBXZSYjMzk7cmUgZ29vZCB0aGVyZS4KCk5vdywgdGhhdCBga21hbGxvY19vYmpgIG1hY3JvLCB0aGF0JiMzOTtzIHdoYXQgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvIGJ1dCBhcHBlYXJzIHRvIGJlIGEgcmVjZW50IGFkZGl0aW9uIHRvIHJlcGxhY2UgYGttYWxsb2Moc2l6ZW9mKC4uLikpYC4gUmlnaHQsIHNvIGl0ICphbGxvY2F0ZXMqIGJ1dCBkb2VzbiYjMzk7dCAqemVybyogbWVtb3J5LCB3aGljaCBtZWFucyB0aGVyZSBjb3VsZCBiZSBzb21lIGlzc3Vlcy4gSWYgd2UgdXNlIGl0IG9uIGEgc3RydWN0IHRoYXQgaXMgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgaXRzIGZpZWxkcyBhcmUgdXNlZCBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuCgpTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHVzZXMgYGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSlgLiBMZXQmIzM5O3MgbG9vayBhdCBgc3RydWN0IG1lbV9wcml2YXRlYC4uLiBJdCBjb250YWlucyBhIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYW5kIGEgYGJvb2wgaW50cm9zcGVjdGlvbmAuIE9rYXksIGlmIHdlIGNoZWNrIHRoZSBjb2RlIGZvciBgbWVtX29wZW5gLCB0aGV5JiMzOTtyZSBib3RoIGluaXRpYWxpemVkOiBgcHJpdi0mZ3Q7bW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpYCBhbmQgYHByaXYtJmd0O2ludHJvc3BlY3Rpb24gPSBwcml2LSZndDttbSA9PSBjdXJyZW50LSZndDttbWAuIEhvd2V2ZXIsIHRoZXJlIGlzIHBhZGRpbmcuIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIDE2IGJ5dGVzIG9uIDY0LWJpdCwgd2l0aCA4IGJ5dGVzIGZvciBgbW1gLCAxIGJ5dGUgZm9yIGBpbnRyb3NwZWN0aW9uYCwgYW5kIDcgYnl0ZXMgb2YgcGFkZGluZy4gVGhlIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZC4gQW5kIHRoZSBzdHJ1Y3QgaXNuJiMzOTt0IGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsc28sIGl0IGlzbiYjMzk7dCB1c2VkIGluIGFueSBjb25kaXRpb25hbCBsb2dpYyBleGNlcHQgdGhlIGZpZWxkIGBwcml2LSZndDtpbnRyb3NwZWN0aW9uYC4KCkJ1dCB3aGF0IGlmIGBwcm9jX21lbV9vcGVuYCByZXR1cm5zIGFuIGVycm9yPyBPa2F5LCByaWdodCwgaW4gdGhhdCBjYXNlLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGJlZm9yZSBgcHJpdi0mZ3Q7aW50cm9zcGVjdGlvbmAgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgc3RydWN0IGlzIGZyZWVkLiBTbywgbm8gbWVtb3J5IGlzIGFjY2Vzc2VkLgoKTGV0JiMzOTtzIHRyYWNlIGl0cyB1c2UuIFRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBsb29rcyBzYWZlOyBpdCBkZXJlZmVyZW5jZXMgdGhlIG1lbWJlcnMgYW5kIHRoZW4gYGtmcmVlYHMgdGhlIHN0cnVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHVzaW5nIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIGlzIGFjY291bnRlZCBmb3IuCgpDaGVja2luZyBvdGhlciB1c2VzIG9mIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLCBpbiBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIHRoZSBgaW50cm9zcGVjdGlvbmAgZmllbGQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFsc28sIGBtZW1fcndgIGlzIHNhZmUsIGFzIGl0cyBzdHJ1Y3QgdXNlcyB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzLgoKQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gYGZzL3Byb2MvYmFzZS5jYCB0aGF0IHVzZSB0aGUgYHByb2NfbWVtX29wZXJhdGlvbnNgIHN0cnVjdHVyZT8gSSBxdWlja2x5IGxvb2tlZCBhdCB0aGUgYHByb2NfbWVtX29wZXJhdGlvbnNgIHRvIGNoZWNrIGFsbCB0aGUgb3RoZXIgZmlsZSBvcGVyYXRpb25zLiBPa2F5LCBzbyBgbWVtX2xzZWVrYCBkb2VzbiYjMzk7dCB1c2UgYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAuIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGNhbGxzIGBtZW1fcndgLCB3aGljaCB1c2VzIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLCBhcyB3ZSBoYXZlIHNlZW4sIHNvIHRoZXkmIzM5O3JlIHNhZmUuCgpJIGFsc28gY2hlY2tlZCBvdGhlciByZWxhdGVkIHRoaW5ncyBsaWtlIGBlbnZpcm9uX3JlYWRgLCBidXQgaXQgdXNlcyBhIGRpZmZlcmVudCBvcGVyYXRpb24gc3RydWN0dXJlLiBUaGUgYG1lbV9yZWxlYXNlYCBpcyBzdGlsbCB0aGVyZSwgZm9yIG90aGVyIHRoaW5ncywgYnV0IHVzZXMgYSBkaWZmZXJlbnQgYHByaXZhdGVfZGF0YWAuIE5vdywgSSYjMzk7bSBjb21mb3J0YWJsZSB0aGF0IEkmIzM5O3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgcGxhY2UgdGhhdCB1c2VzIHRoZSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBHb29kLCB3ZSYjMzk7cmUgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9yZWxlYXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMzg4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTE3MD1zdGF0aWMgaW50XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjE3MTpzcHVmc19tZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMTcyLXtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTMwMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19tZW1fZm9wcyA9IHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA0LVx0Lm9wZW5cdFx0XHQ9IHNwdWZzX21lbV9vcGVuLFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzozMDU6XHQucmVsZWFzZVx0XHQ9IHNwdWZzX21lbV9yZWxlYXNlLFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy0zMDYtXHQucmVhZFx0XHRcdD0gc3B1ZnNfbWVtX3JlYWQsXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jPTE2MD1zdHJ1Y3QgaGxfY2JfbW1hcF9tZW1fYWxsb2NfYXJncyB7XG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jLTE2Ny1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYzoxNjg6c3RhdGljIHZvaWQgaGxfY2JfbW1hcF9tZW1fcmVsZWFzZShzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmICpidWYpXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMTY5LXtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmM9MjU4PXN0YXRpYyBzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmX2JlaGF2aW9yIGNiX2JlaGF2aW9yID0ge1xuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYy0yNjEtXHQuYWxsb2MgPSBobF9jYl9tbWFwX21lbV9hbGxvYyxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYzoyNjI6XHQucmVsZWFzZSA9IGhsX2NiX21tYXBfbWVtX3JlbGVhc2UsXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMjYzLVx0Lm1tYXAgPSBobF9jYl9tbWFwLFxuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTM2OT1zdGF0aWMgaW50IGZpZm9faW5pdChzdHJ1Y3QgeGlsbHlmaWZvICpmaWZvLFxuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTQzMi1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjQzMzpzdGF0aWMgdm9pZCBmaWZvX21lbV9yZWxlYXNlKHN0cnVjdCB4aWxseWZpZm8gKmZpZm8pXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy00MzQte1xuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTQ2Nz1zdGF0aWMgdm9pZCBlbmRwb2ludF9kZWFsbG9jKHN0cnVjdCB4aWxseXVzYl9lbmRwb2ludCAqZXApXG4tLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtNDcwLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6NDcxOlx0Zmlmb19tZW1fcmVsZWFzZShcdTAwMjZlcC1cdTAwM2VmaWZvKTtcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTQ3Mi1cbi0tXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYz0xMjM2PXN0YXRpYyBpbnQgeGlsbHl1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xMzk2LVx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MTM5NzpcdGZpZm9fbWVtX3JlbGVhc2UoaW5fZmlmbyk7XG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xMzk4LVx0a2ZyZWUoaW5fZmlmbyk7XG4tLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM9MTcwNj1zdGF0aWMgaW50IHhpbGx5dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMTczNC1cdFx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MTczNTpcdFx0Zmlmb19tZW1fcmVsZWFzZShpbl9maWZvKTtcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTE3MzYtXHRcdGtmcmVlKGluX2ZpZm8pO1xuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTIwMDE9c3RhdGljIGludCB4aWxseXVzYl9kaXNjb3Zlcnkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSlcbi0tXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0yMTIxLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MjEyMjpcdGZpZm9fbWVtX3JlbGVhc2UoXHUwMDI2aWR0X2ZpZm8pO1xuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMjEyMy1cdGtmcmVlKGNoYW4pO1xuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxNDAtXHRzYWZlbHlfYXNzaWduX2luX2ZpZm8oY2hhbiwgTlVMTCk7XG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYzoyMTQxOlx0Zmlmb19tZW1fcmVsZWFzZShcdTAwMjZpZHRfZmlmbyk7XG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0yMTQyLVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM9NjUyPXN0YXRpYyBpbnQgYWxsb2NfaHBhKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTY5Ny1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6Njk4OnN0YXRpYyB2b2lkIGN4bF9yZWdpb25faW9tZW1fcmVsZWFzZShzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscilcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtNjk5LXtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jPTcxNj1zdGF0aWMgaW50IGZyZWVfaHBhKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtNzI5LVxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYzo3MzA6XHRjeGxfcmVnaW9uX2lvbWVtX3JlbGVhc2UoY3hscik7XG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTczMS1cdHAtXHUwMDNlc3RhdGUgPSBDWExfQ09ORklHX0lETEU7XG4tLVxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYz0yNTYyPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4MC1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6MjU4MTpcdGN4bF9yZWdpb25faW9tZW1fcmVsZWFzZShjeGxyKTtcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4Mi1cdHB1dF9kZXZpY2UoXHUwMDI2Y3hsci1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM9MzY3NT1zdGF0aWMgaW50IF9fY29uc3RydWN0X3JlZ2lvbihzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTM3MjYtXHRcdCAqIFBsYXRmb3JtLWZpcm13YXJlIG1heSBub3QgaGF2ZSBzcGxpdCByZXNvdXJjZXMgbGlrZSBcJiMzNDtTeXN0ZW1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6MzcyNzpcdFx0ICogUkFNXCYjMzQ7IG9uIENYTCB3aW5kb3cgYm91bmRhcmllcyBzZWUgY3hsX3JlZ2lvbl9pb21lbV9yZWxlYXNlKClcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMzcyOC1cdFx0ICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM9MTU5PUVYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fY3JlYXRlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xNjEtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoxNjI6ICogX19kcm1fZ2VtX3NobWVtX3JlbGVhc2Vfc2d0X2xvY2tlZCAtIFVucGluIGFuZCBETUEgdW5tYXAgcGFnZXMsIGFuZCByZWxlYXNlIHRoZVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTYzLSAqIGNhY2hlZCBzY2F0dGVyL2dhdGhlciB0YWJsZSBmb3IgYW4gc2htZW0gR0VNIG9iamVjdC5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYz0xODM9RVhQT1JUX1NZTUJPTF9HUEwoX19kcm1fZ2VtX3NobWVtX2ZyZWVfc2d0X2xvY2tlZCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTg1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM6MTg2OiAqIGRybV9nZW1fc2htZW1fcmVsZWFzZSAtIFJlbGVhc2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHNobWVtIEdFTSBvYmplY3QuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xODctICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTkxLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM6MTkyOnZvaWQgZHJtX2dlbV9zaG1lbV9yZWxlYXNlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xOTMte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIxNS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoyMTY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9yZWxlYXNlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIxNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYz0yMjU9dm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIyNi17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoyMjc6XHRkcm1fZ2VtX3NobWVtX3JlbGVhc2Uoc2htZW0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMjI4LVx0a2ZyZWUoc2htZW0pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyOD1zdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF96ZGRfZGVzdHJveShzdHJ1Y3Qga3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNi1cdFx0Y29tcGxldGVfYWxsKFx1MDAyNmRldm1lbS1cdTAwM2VkZXRhY2hlZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzc6XHRcdGlmIChkZXZtZW0tXHUwMDNlb3BzLVx1MDAzZWRldm1lbV9yZWxlYXNlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM4Olx0XHRcdGRldm1lbS1cdTAwM2VvcHMtXHUwMDNlZGV2bWVtX3JlbGVhc2UoZGV2bWVtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzOS1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz02MTY9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg0MS1lcnJfb3V0OlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODQyOlx0ZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlb3BzLVx1MDAzZWRldm1lbV9yZWxlYXNlKGRldm1lbV9hbGxvY2F0aW9uKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg0My1cdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYz00NjY9dm9pZCBldG5hdml2X2dlbV9kZXNjcmliZV9vYmplY3RzKHN0cnVjdCBldG5hdml2X2RybV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDg3LVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYzo0ODg6c3RhdGljIHZvaWQgZXRuYXZpdl9nZW1fc2htZW1fcmVsZWFzZShzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iailcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDg5LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jPTQ5ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0bmF2aXZfZ2VtX29wcyBldG5hdml2X2dlbV9zaG1lbV9vcHMgPSB7XG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ5NS1cdC5nZXRfcGFnZXMgPSBldG5hdml2X2dlbV9zaG1lbV9nZXRfcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjQ5NjpcdC5yZWxlYXNlID0gZXRuYXZpdl9nZW1fc2htZW1fcmVsZWFzZSxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDk3LVx0LnZtYXAgPSBldG5hdml2X2dlbV92bWFwX2ltcGwsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9NDcxPXNobWVtX3ByZWFkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDc5LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM6NDgwOnN0YXRpYyB2b2lkIHNobWVtX3JlbGVhc2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jLTQ4MS17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9NDg4PWNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9zaG1lbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDk5LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM6NTAwOlx0LnJlbGVhc2UgPSBzaG1lbV9yZWxlYXNlLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTAxLX07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYz0xMTY9c3RhdGljIGludFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYzoxMTc6cmVnaW9uX2xtZW1fcmVsZWFzZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYy0xMTgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmM9MTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgaW50ZWxfcmVnaW9uX2xtZW1fb3BzID0ge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYy0xNTAtXHQuaW5pdCA9IHJlZ2lvbl9sbWVtX2luaXQsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZWdpb25fbG1lbS5jOjE1MTpcdC5yZWxlYXNlID0gcmVnaW9uX2xtZW1fcmVsZWFzZSxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmMtMTUyLVx0LmluaXRfb2JqZWN0ID0gX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmM9MTU0ND12YzRfZHNpX2luaXRfcGh5X2Nsb2NrcyhzdHJ1Y3QgdmM0X2RzaSAqZHNpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2MDYtXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYzoxNjA3OnN0YXRpYyB2b2lkIHZjNF9kc2lfZG1hX21lbV9yZWxlYXNlKHZvaWQgKnB0cilcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2MDgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jPTE2MzE9c3RhdGljIGludCB2YzRfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMtMTY3OC1cbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jOjE2Nzk6XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHZjNF9kc2lfZG1hX21lbV9yZWxlYXNlLCBkc2kpO1xuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMtMTY4MC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9NzU2PXN0YXRpYyBzdHJ1Y3QgeGVfYm8gKnRvX3hlX2JvKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy03NjAtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6NzYxOnN0YXRpYyB2b2lkIHhlX3N2bV9kZXZtZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy03NjIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIGRwYWdlbWFwX2Rldm1lbV9vcHMgPSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6ODA3Olx0LmRldm1lbV9yZWxlYXNlID0geGVfc3ZtX2Rldm1lbV9yZWxlYXNlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTgwOC1cdC5wb3B1bGF0ZV9kZXZtZW1fcGZuID0geGVfc3ZtX3BvcHVsYXRlX2Rldm1lbV9wZm4sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTQ5LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjUwOnN0YXRpYyB2b2lkIF9faWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sIGludCBkaXJ0eSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy01MS17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jPTE2Mj1zdGF0aWMgc3RydWN0IGliX3VtZW0gKl9faWJfdW1lbV9nZXRfdmEoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNDYtXHRcdFx0cmV0ID0gcGlubmVkO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI0NzpcdFx0XHRnb3RvIHVtZW1fcmVsZWFzZTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNDgtXHRcdH1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjU3LVx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhwYWdlX2xpc3QsIHBpbm5lZCwgMCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjU4Olx0XHRcdGdvdG8gdW1lbV9yZWxlYXNlO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI1OS1cdFx0fVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNjQtXHRpZiAocmV0KVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI2NTpcdFx0Z290byB1bWVtX3JlbGVhc2U7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjY2LVx0Z290byBvdXQ7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjY3LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI2ODp1bWVtX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY5Olx0X19pYl91bWVtX3JlbGVhc2UoZGV2aWNlLCB1bWVtLCAwKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNzAtXHRhdG9taWM2NF9zdWIoaWJfdW1lbV9udW1fcGFnZXModW1lbSksIFx1MDAyNm1tLVx1MDAzZXBpbm5lZF92bSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jPTM3Nj1pYl91bWVtX2dldF9kZXNjX2NoZWNrKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMzg1LVx0aWYgKHVtZW0tXHUwMDNlbGVuZ3RoIFx1MDAzYyBtaW5fc2l6ZSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjM4NjpcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTM4Ny1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jPTYxMj1FWFBPUlRfU1lNQk9MKGliX3VtZW1fZ2V0X2NxX2J1Zl9vcl92YSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYxNC0vKipcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzo2MTU6ICogaWJfdW1lbV9yZWxlYXNlIC0gcmVsZWFzZSBwaW5uZWQgbWVtb3J5XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjE2LSAqIEB1bWVtOiB1bWVtIHN0cnVjdCB0byByZWxlYXNlXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjE3LSAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYxODp2b2lkIGliX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfdW1lbSAqdW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MTkte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MjYtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6NjI3Olx0X19pYl91bWVtX3JlbGVhc2UodW1lbS1cdTAwM2VpYmRldiwgdW1lbSwgMSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjI4LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MzItfVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYzMzpFWFBPUlRfU1lNQk9MKGliX3VtZW1fcmVsZWFzZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjM0LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmM9MjE0PWliX3VtZW1fZG1hYnVmX2dldF9waW5uZWRfYW5kX2xvY2soc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjQyLVx0ZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jOjI0MzpcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjQ0LVx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jPTI2Mz1FWFBPUlRfU1lNQk9MKGliX3VtZW1fZG1hYnVmX2dldF9waW5uZWRfd2l0aF9kbWFfZGV2aWNlKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jLTI4Ny0gKiBJZiBzdWNjZXNzZnVsLCB0aGVuIHRoZSByZXZva2UgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2lsbFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYzoyODg6ICogYWxzbyBiZSBjYWxsZWQgYXV0b21hdGljYWxseSB1cG9uIGliX3VtZW1fcmVsZWFzZSAoc2VyaWFsaXplZCkuIFRoZSByZXZva2VcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjg5LSAqIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9uZSB0aW1lIGF0IG1vc3QuXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0xMDAxPXN0YXRpYyB2b2lkIGJueHRfcmVfcXBfZnJlZV91bWVtKHN0cnVjdCBibnh0X3JlX3FwICpxcClcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTAwMi17XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjEwMDM6XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlcnVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoxMDA0Olx0aWJfdW1lbV9yZWxlYXNlKHFwLVx1MDAzZXN1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTAwNS19XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0xMTk3PXN0YXRpYyBpbnQgYm54dF9yZV9pbml0X3VzZXJfcXAoc3RydWN0IGJueHRfcmVfZGV2ICpyZGV2LCBzdHJ1Y3QgYm54dF9yZV9wZCAqcGQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0xMjU1LXJxZmFpbDpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTI1NjpcdGliX3VtZW1fcmVsZWFzZShxcC1cdTAwM2VydW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNTctXHRxcC1cdTAwM2VydW1lbSA9IE5VTEw7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0xMjU5LWZhaWw6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjEyNjA6XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlc3VtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0xMjYxLVx0cXAtXHUwMDNlc3VtZW0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MjE0Mz1pbnQgYm54dF9yZV9kZXN0cm95X3NycShzdHJ1Y3QgaWJfc3JxICppYl9zcnEsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0yMTU5LVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3JxLVx1MDAzZXVjdHhfc3JxX3BhZ2UpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoyMTYwOlx0aWJfdW1lbV9yZWxlYXNlKHNycS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMjE2MS1cdGF0b21pY19kZWMoXHUwMDI2cmRldi1cdTAwM2VzdGF0cy5yZXMuc3JxX2NvdW50KTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTIxOTk9aW50IGJueHRfcmVfY3JlYXRlX3NycShzdHJ1Y3QgaWJfc3JxICppYl9zcnEsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0yMjg4LWZhaWw6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjIyODk6XHRpYl91bWVtX3JlbGVhc2Uoc3JxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0yMjkwLWV4aXQ6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0zNDYxPWludCBibnh0X3JlX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYl9jcSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM0ODctXHRrZnJlZShjcS1cdTAwM2VjcWwpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNDg4Olx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNDg5LVx0cmV0dXJuIGliX3Jlc3BvbmRfZW1wdHlfdWRhdGEodWRhdGEpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MzQ5Mj1pbnQgYm54dF9yZV9jcmVhdGVfdXNlcl9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGNvbnN0IHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgKmF0dHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNTgwLWZyZWVfdW1lbTpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzU4MTpcdGliX3VtZW1fcmVsZWFzZShjcS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzU4Mi1cdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2Mzc9c3RhdGljIHZvaWQgYm54dF9yZV9yZXNpemVfY3FfY29tcGxldGUoc3RydWN0IGJueHRfcmVfY3EgKmNxKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzY0NC1cdGlmIChjcS1cdTAwM2VyZXNpemVfdW1lbSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNjQ1Olx0XHRpYl91bWVtX3JlbGVhc2UoY3EtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM2NDYtXHRcdGNxLVx1MDAzZXVtZW0gPSBjcS1cdTAwM2VyZXNpemVfdW1lbTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2NTI9aW50IGJueHRfcmVfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgdW5zaWduZWQgaW50IGNxZSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM3MjMtXHRpZiAoY3EtXHUwMDNlcmVzaXplX3VtZW0pIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzcyNDpcdFx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXJlc2l6ZV91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzcyNS1cdFx0Y3EtXHUwMDNlcmVzaXplX3VtZW0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDQ0Nj1pbnQgYm54dF9yZV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDQ2OC1cdH1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDQ2OTpcdGliX3VtZW1fcmVsZWFzZShtci1cdTAwM2VpYl91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDQ3MC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTQ2ODg9c3RydWN0IGliX21yICpibnh0X3JlX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqaWJfcGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQ3MTEtXHRpZiAoSVNfRVJSKGliX21yKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDcxMjpcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzEzLVx0cmV0dXJuIGliX21yO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDcxNj1zdHJ1Y3QgaWJfbXIgKmJueHRfcmVfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJfcGQsIHU2NCBzdGFydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQ3MzktXHRpZiAoSVNfRVJSKGliX21yKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDc0MDpcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzQxLVx0cmV0dXJuIGliX21yO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYz00OTE9c3RydWN0IGliX21yICpjNGl3X3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMtNTQxLVx0aWYgKGVycilcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYzo1NDI6XHRcdGdvdG8gZXJyX3VtZW1fcmVsZWFzZTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01NDMtXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTU5MC1cdFx0XHQgICAgICBtaHAtXHUwMDNlYXR0ci5wYmxfc2l6ZSBcdTAwM2NcdTAwM2MgMyk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NTkxOmVycl91bWVtX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NTkyOlx0aWJfdW1lbV9yZWxlYXNlKG1ocC1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01OTMtZXJyX2ZyZWVfc2tiOlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYz03MDQ9aW50IGM0aXdfZGVyZWdfbXIoc3RydWN0IGliX21yICppYl9tciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMtNzI1LVx0XHRrZnJlZSgodm9pZCAqKSAodW5zaWduZWQgbG9uZykgbWhwLVx1MDAzZWt2YSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NzI2Olx0aWJfdW1lbV9yZWxlYXNlKG1ocC1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy03MjctXHRwcl9kZWJ1ZyhcJiMzNDttbWlkIDB4JXggcHRyICVwXFxuXCYjMzQ7LCBtbWlkLCBtaHApO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM9MTA1NT1pbnQgZWZhX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYmNxLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTA3My1cdFx0ZWZhX2ZyZWVfbWFwcGVkKGRldiwgY3EtXHUwMDNlY3B1X2FkZHIsIGNxLVx1MDAzZWRtYV9hZGRyLCBjcS1cdTAwM2VzaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxMDc0Olx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xMDc1LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xMTEzPWludCBlZmFfY3JlYXRlX3VzZXJfY3Eoc3RydWN0IGliX2NxICppYmNxLCBjb25zdCBzdHJ1Y3QgaWJfY3FfaW5pdF9hdHRyICphdHRyLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTI2NS1lcnJfcmVsZWFzZV91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxMjY2Olx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xMjY3LWVycl9vdXQ6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xNzEwPXN0cnVjdCBpYl9tciAqZWZhX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3NDgtZXJyX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjE3NDk6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3NTAtZXJyX2ZyZWU6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xNzU3PXN0cnVjdCBpYl9tciAqZWZhX3JlZ19tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3OTItZXJyX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjE3OTM6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3OTQtZXJyX2ZyZWU6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xODM0PWludCBlZmFfZGVyZWdfbXIoc3RydWN0IGliX21yICppYm1yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTg0Ny1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM6MTg0ODpcdGliX3VtZW1fcmVsZWFzZShtci1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTg0OS1cdGtmcmVlKG1yKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYz04MzE9c3RhdGljIGludCBnZXRfbXR0X2VudHJpZXMoc3RydWN0IGVyZG1hX2RldiAqZGV2LCBzdHJ1Y3QgZXJkbWFfbWVtICptZW0sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtODYyLVx0aWYgKG1lbS1cdTAwM2V1bWVtKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYzo4NjM6XHRcdGliX3VtZW1fcmVsZWFzZShtZW0tXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYy04NjQtXHRcdG1lbS1cdTAwM2V1bWVtID0gTlVMTDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYz04NzA9c3RhdGljIHZvaWQgcHV0X210dF9lbnRyaWVzKHN0cnVjdCBlcmRtYV9kZXYgKmRldiwgc3RydWN0IGVyZG1hX21lbSAqbWVtKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg3NS1cdGlmIChtZW0tXHUwMDNldW1lbSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6ODc2Olx0XHRpYl91bWVtX3JlbGVhc2UobWVtLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtODc3LVx0XHRtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9OTI2PWVyZG1hX3VubWFwX3VzZXJfZGJyZWNvcmRzKHN0cnVjdCBlcmRtYV91Y29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTkzNC1cdFx0bGlzdF9kZWwoXHUwMDI2KCpkYnJfcGFnZSktXHUwMDNlbGlzdCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYzo5MzU6XHRcdGliX3VtZW1fcmVsZWFzZSgoKmRicl9wYWdlKS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTkzNi1cdFx0a2ZyZWUoKmRicl9wYWdlKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmM9NTU9dm9pZCBobnNfcm9jZV9kYl91bm1hcF91c2VyKHN0cnVjdCBobnNfcm9jZV91Y29udGV4dCAqY29udGV4dCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmMtNjItXHRcdGxpc3RfZGVsKFx1MDAyNmRiLVx1MDAzZXUudXNlcl9wYWdlLVx1MDAzZWxpc3QpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kYi5jOjYzOlx0XHRpYl91bWVtX3JlbGVhc2UoZGItXHUwMDNldS51c2VyX3BhZ2UtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmMtNjQtXHRcdGtmcmVlKGRiLVx1MDAzZXUudXNlcl9wYWdlKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmM9NTcyPXN0YXRpYyB2b2lkIG10cl9mcmVlX2J1ZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2LCBzdHJ1Y3QgaG5zX3JvY2VfbXRyICptdHIpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tci5jLTU3NS1cdGlmIChtdHItXHUwMDNldW1lbSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tci5jOjU3NjpcdFx0aWJfdW1lbV9yZWxlYXNlKG10ci1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbXIuYy01NzctXHRcdG10ci1cdTAwM2V1bWVtID0gTlVMTDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz03Nj1pbnQgaW9uaWNfY3JlYXRlX2NxX2NvbW1vbihzdHJ1Y3QgaW9uaWNfdmNxICp2Y3EsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTY0LVx0aWYgKGNxLVx1MDAzZXVtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoxNjU6XHRcdGliX3VtZW1fcmVsZWFzZShjcS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE2Ni1lcnJfcWRlc2M6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MTc0PXZvaWQgaW9uaWNfZGVzdHJveV9jcV9jb21tb24oc3RydWN0IGlvbmljX2liZGV2ICpkZXYsIHN0cnVjdCBpb25pY19jcSAqY3EpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTg0LVx0aWYgKGNxLVx1MDAzZXVtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoxODU6XHRcdGliX3VtZW1fcmVsZWFzZShjcS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE4Ni1cdGVsc2Vcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz04NzA9c3RydWN0IGliX21yICppb25pY19yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy05MjYtZXJyX3BndGJsOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM6OTI3Olx0aWJfdW1lbV9yZWxlYXNlKG1yLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtOTI4LWVycl91bWVtOlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTkzNT1zdHJ1Y3QgaWJfbXIgKmlvbmljX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBvZmZzZXQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtOTk2LWVycl9wZ3RibDpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjk5NzpcdGliX3VtZW1fcmVsZWFzZShtci1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTk5OC1lcnJfdW1lbTpcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz0xMDA1PWludCBpb25pY19kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTAyMi1cdGlmIChtci1cdTAwM2V1bWVtKVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM6MTAyMzpcdFx0aWJfdW1lbV9yZWxlYXNlKG1yLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTAyNC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz0xNzgwPXN0YXRpYyBpbnQgaW9uaWNfcXBfc3FfaW5pdChzdHJ1Y3QgaW9uaWNfaWJkZXYgKmRldiwgc3RydWN0IGlvbmljX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MDgtXHRpZiAocXAtXHUwMDNlc3FfdW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5MDk6XHRcdGliX3VtZW1fcmVsZWFzZShxcC1cdTAwM2VzcV91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MTAtXHRlbHNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MTkxNT1zdGF0aWMgdm9pZCBpb25pY19xcF9zcV9kZXN0cm95KHN0cnVjdCBpb25pY19pYmRldiAqZGV2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MjctXHRpZiAocXAtXHUwMDNlc3FfdW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5Mjg6XHRcdGliX3VtZW1fcmVsZWFzZShxcC1cdTAwM2VzcV91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MjktXHRlbHNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MjAwNj1zdGF0aWMgaW50IGlvbmljX3FwX3JxX2luaXQoc3RydWN0IGlvbmljX2liZGV2ICpkZXYsIHN0cnVjdCBpb25pY19jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTE2LVx0aWYgKHFwLVx1MDAzZXJxX3VtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTE3Olx0XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlcnFfdW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTE4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTIxMjM9c3RhdGljIHZvaWQgaW9uaWNfcXBfcnFfZGVzdHJveShzdHJ1Y3QgaW9uaWNfaWJkZXYgKmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTM0LVx0aWYgKHFwLVx1MDAzZXJxX3VtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTM1Olx0XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlcnFfdW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTM2LVx0ZWxzZVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM1MDY9c3RhdGljIHN0cnVjdCBpYl9tciAqaXJkbWFfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1MzUtXHRpZiAoaWJfY29weV9mcm9tX3VkYXRhKFx1MDAyNnJlcSwgdWRhdGEsIG1pbihzaXplb2YocmVxKSwgdWRhdGEtXHUwMDNlaW5sZW4pKSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6MzUzNjpcdFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTM3LVx0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTQxLVx0aWYgKElTX0VSUihpd21yKSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6MzU0MjpcdFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTQzLVx0XHRyZXR1cm4gKHN0cnVjdCBpYl9tciAqKWl3bXI7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzU3Ni1lcnJvcjpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1Nzc6XHRpYl91bWVtX3JlbGVhc2UocmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1NzgtXHRpcmRtYV9mcmVlX2l3bXIoaXdtcik7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9MzYxMz1zdGF0aWMgc3RydWN0IGliX21yICppcmRtYV9yZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM2NjItXHQgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM2NjM6XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNjY0LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM3MjA9c3RhdGljIGludCBpcmRtYV9yZXJlZ19tcl90cmFucyhzdHJ1Y3QgaXJkbWFfbXIgKml3bXIsIHU2NCBzdGFydCwgdTY0IGxlbixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNzU0LWVycjpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM3NTU6XHRpYl91bWVtX3JlbGVhc2UocmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM3NTYtXHRpd21yLVx1MDAzZXJlZ2lvbiA9IE5VTEw7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9Mzc3NT1zdGF0aWMgc3RydWN0IGliX21yICppcmRtYV9yZXJlZ191c2VyX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIGludCBmbGFncyxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zODQyLVx0XHRpZiAoaXdtci1cdTAwM2VyZWdpb24pIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM4NDM6XHRcdFx0aWJfdW1lbV9yZWxlYXNlKGl3bXItXHUwMDNlcmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM4NDQtXHRcdFx0aXdtci1cdTAwM2VyZWdpb24gPSBOVUxMO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM5NzQ9c3RhdGljIGludCBpcmRtYV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTQwMDItXHRpZiAoaXdtci1cdTAwM2VyZWdpb24pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYzo0MDAzOlx0XHQvKiBGb3IgZG1hYnVmIE1ScywgaWJfdW1lbV9yZWxlYXNlIHdpbGwgdHJpZ2dlciBhIHN5bmNocm9ub3VzXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDA0LVx0XHQgKiBjYWxsIHRvIHRoZSByZXZva2UgY2FsbGJhY2sgd2hpY2ggd2lsbCBwZXJmb3JtIHRoZSBhY3R1YWwgSFdcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDA4LVx0XHQgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjQwMDk6XHRcdGliX3VtZW1fcmVsZWFzZShpd21yLVx1MDAzZXJlZ2lvbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDEwLVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYz0yNTU9aW50IG1hbmFfaWJfY3JlYXRlX3F1ZXVlKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgdTY0IGFkZHIsIHUzMiBzaXplLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy0yODEtZnJlZV91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jOjI4MjpcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy0yODMtXHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYz0yODY9dm9pZCBtYW5hX2liX2Rlc3Ryb3lfcXVldWUoc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCBzdHJ1Y3QgbWFuYV9pYl9xdWV1ZSAqcXVldWUpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jLTI5MS1cdG1hbmFfaWJfZ2RfZGVzdHJveV9kbWFfcmVnaW9uKG1kZXYsIHF1ZXVlLVx1MDAzZWdkbWFfcmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYzoyOTI6XHRpYl91bWVtX3JlbGVhc2UocXVldWUtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjkzLVx0aWYgKHF1ZXVlLVx1MDAzZWttZW0pXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYz0xMDA9c3RydWN0IGliX21yICptYW5hX2liX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqaWJwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMTc5LWVycl91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYzoxODA6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTE4MS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jPTE4Nz1zdHJ1Y3QgaWJfbXIgKm1hbmFfaWJfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMjUzLWVycl91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYzoyNTQ6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTI1NS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jPTM0Mj1pbnQgbWFuYV9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYy0zNTUtXHRpZiAobXItXHUwMDNldW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM6MzU2Olx0XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTM1Ny1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1fcmVsZWFzZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSBzZWUgYG1lbV9yZWxlYXNlYCBiZWluZyB1c2VkLCBvciBhdCBsZWFzdCAqcmVmZXJlbmNlZCosIGluIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jYCwgYnV0IHRoYXQmIzM5O3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgYHNwdWZzX21lbV9yZWxlYXNlYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGdlbmVyYWwgb25lIGluIGBmcy9wcm9jL2Jhc2UuY2AuIEkgcmVjYWxsIHRoYXQgdGhlIGBtZW1fcmVsZWFzZWAgZnVuY3Rpb24gaW4gdGhhdCBmaWxlIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIG5vdCBzaW1wbHkgdW51c2VkIHdpdGhpbiB0aGUgZmlsZSBub3cuIEkmIzM5O2xsIGNoZWNrIGl0cyB1c2FnZSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYC4KCkFoYSEgTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBsaWtlIGBtZW1fcmVsZWFzZWAgKmlzKiBzdGlsbCBwcmVzZW50LCBhdCBsZWFzdCBpbiB0aGUgb3JpZ2luYWwgZm9ybSwgYnV0IGl0JiMzOTtzIGJlZW4gdXBkYXRlZC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgaXQmIzM5O3MgYWN0dWFsbHkgYmVlbiByZXBsYWNlZCBpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AuIFRoZSBgcmVsZWFzZWAgZmllbGQgaW4gYHByb2NfbWVtX29wZXJhdGlvbnNgIHVzZWQgdG8gcG9pbnQgdG8gYG1lbV9yZWxlYXNlYCwgYnV0IG5vdyBpdCBwb2ludHMgdG8gYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAuIFRoZSBvcmlnaW5hbCBgbWVtX3JlbGVhc2VgIGlzIHN0aWxsIHRoZXJlLCBqdXN0IG5vdCB1c2VkIGluIHRoYXQgY29udGV4dCBhbnkgbG9uZ2VyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHNhZmUgd2l0aGluIHRoZSBmaWxlLCBhbmQgdGhhdCBhbnkgY29kZSByZWx5aW5nIG9uIHRoYXQgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmdW5jdGlvbi4KCkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBiZWluZyBjYWxsZWQgZWxzZXdoZXJlIGluIGBmcy9wcm9jL2Jhc2UuY2AgdXNpbmcgdGhlIG9sZCBmdW5jdGlvbiBuYW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTk2OT1sb2ZmX3QgbWVtX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZylcbi0tXG5mcy9wcm9jL2Jhc2UuYy05ODQtXG5mcy9wcm9jL2Jhc2UuYzo5ODU6c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTk4Ni17XG4tLVxuZnMvcHJvYy9iYXNlLmMtOTkyLVxuZnMvcHJvYy9iYXNlLmM6OTkzOnN0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtOTk0LXtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMTAwNi1cdC5vcGVuXHRcdD0gbWVtX29wZW4sXG5mcy9wcm9jL2Jhc2UuYzoxMDA3Olx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxuZnMvcHJvYy9iYXNlLmMtMTAwOC1cdC5mb3BfZmxhZ3NcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwODItXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjEwODM6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTEwODQtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfYXV4dl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTExMDktXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjExMTA6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTExMTEtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0yODUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX2F0dHJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0yODU3LVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5mcy9wcm9jL2Jhc2UuYzoyODU4Olx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG5mcy9wcm9jL2Jhc2UuYy0yODU5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgbWVtX3JlbGVhc2VgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzOiBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLCBgcHJvY19hdXh2X29wZXJhdGlvbnNgLCBhbmQgYHByb2NfcGlkX2F0dHJfb3BlcmF0aW9uc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHRob3NlIGFyZSBhbGwgcmVsYXRlZCB0byBwcm9jZXNzIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIHRob3VnaC4gSSB3b25kZXIgaWYgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgdGllZCB0byBgbWVtX29wZW5gIGluIGFueSB3YXk/IEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtZW1vcnkgbGlmZWN5Y2xlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLiBJJiMzOTtsbCBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZW52aXJvbl9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MTAxNj1zdGF0aWMgc3NpemVfdCBlbnZpcm9uX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMTA3OC1cbmZzL3Byb2MvYmFzZS5jOjEwNzk6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XG5mcy9wcm9jL2Jhc2UuYy0xMDgwLVx0Lm9wZW5cdFx0PSBlbnZpcm9uX29wZW4sXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzMxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzE5LSNlbmRpZlxuZnMvcHJvYy9iYXNlLmM6MzMyMDpcdFJFRyhcJiMzNDtlbnZpcm9uXCYjMzQ7LCAgICBTX0lSVVNSLCBwcm9jX2Vudmlyb25fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzIxLVx0UkVHKFwmIzM0O2F1eHZcJiMzNDssICAgICAgIFNfSVJVU1IsIHByb2NfYXV4dl9vcGVyYXRpb25zKSxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzY3Ni0jZW5kaWZcbmZzL3Byb2MvYmFzZS5jOjM2Nzc6XHRSRUcoXCYjMzQ7ZW52aXJvblwmIzM0OywgICBTX0lSVVNSLCBwcm9jX2Vudmlyb25fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zNjc4LVx0UkVHKFwmIzM0O2F1eHZcJiMzNDssICAgICAgU19JUlVTUiwgcHJvY19hdXh2X29wZXJhdGlvbnMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIwMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBgZW52aXJvbl9vcGVuYCoqCgpPa2F5LCBzbyB0aGV5JiMzOTtyZSB1c2luZyBgZW52aXJvbl9vcGVuYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIGZpZWxkIGdldHMgc2V0LCBsaWtlbHkgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHByb2JhYmx5IGBtbWAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcywgc2hhbGwgd2U/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGVudmlyb25fb3BlbmAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzICpyZWFsbHkqIGRvaW5nIHVuZGVyIHRoZSBob29kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgbWFuYWdpbmcgdGhlIGFzc29jaWF0ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnZpcm9uX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz0xMDAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMTAxMC1cbmZzL3Byb2MvYmFzZS5jOjEwMTE6c3RhdGljIGludCBlbnZpcm9uX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLXtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xuZnMvcHJvYy9iYXNlLmM6MTA4MDpcdC5vcGVuXHRcdD0gZW52aXJvbl9vcGVuLFxuZnMvcHJvYy9iYXNlLmMtMTA4MS1cdC5yZWFkXHRcdD0gZW52aXJvbl9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZW52aXJvbl9vcGVuYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGVudmlyb25fb3BlbmAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBhbnkgb2J2aW91cyBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCwgd2hhdCBpdCBkb2VzIGluIGEgYmFzaWMgc2Vuc2UsIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhcmUgdGhhdCByZXF1aXJlIGF0dGVudGlvbi4gSSYjMzk7bGwgYmUgZm9jdXNlZCwgZXNwZWNpYWxseSwgb24gYW55IGVycm9yIHBhdGhzIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBJcyBpdCByZWFkaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseSwgb3IgaXMgaXQgZ29pbmcgdGhyb3VnaCBzb21lIGtpbmQgb2YgYWJzdHJhY3Rpb24gbGF5ZXI/IERvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB0cnlpbmcgdG8gYWNjZXNzIG9yIG1vZGlmeSB0aGUgZW52aXJvbm1lbnQgY29uY3VycmVudGx5PyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzaWducyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBmb3JtYXQgc3RyaW5nIGJ1Z3MsIGVzcGVjaWFsbHkgaWYgaXQgaW50ZXJhY3RzIHdpdGggdXNlci1wcm92aWRlZCBpbnB1dCwgb3IgZGF0YSByZWFkIGZyb20gZGlzay4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHN0YW5kYXJkLCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIHByb2plY3QsIHRoYXQgbWlnaHQgbmVlZCBjbG9zZXIgc2NydXRpbnkgaWYgaXQgaXNuJiMzOTt0IHNvbWV0aGluZyB3ZWxsIGtub3duLiBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgY29udGV4dCBpcyBlc3NlbnRpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxMDpcdFxuMTAxMTpcdHN0YXRpYyBpbnQgZW52aXJvbl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuMTAxMjpcdHtcbjEwMTM6XHRcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcbjEwMTQ6XHR9XG4xMDE1Olx0XG4xMDE2Olx0c3RhdGljIHNzaXplX3QgZW52aXJvbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuMTAxNzpcdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuMTAxODpcdHtcbjEwMTk6XHRcdGNoYXIgKnBhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaWdnaW5nIGludG8gTWVtb3J5IE1hcHBpbmcqKgoKQWxyaWdodCwgc28gYGVudmlyb25fb3BlbmAgdXNlcyBgX19tZW1fb3BlbmAg4oCTIHN0YW5kYXJkIHByb2NlZHVyZS4gVGhlIGZ1bmN0aW9uIGNhbGwgaXMgYF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX1JFQUQpYC4gT2theSwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIFRoZSBgaW5vZGVgIGlzIGxpa2VseSB0aGUgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWxlLCBgZmlsZWAgd291bGQgYmUgdGhlIGZpbGUgc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZSBgUFRSQUNFX01PREVfUkVBRGAgaXMgb2J2aW91c2x5IGFib3V0IHJlYWQgYWNjZXNzIGZvciBwb3RlbnRpYWwgdHJhY2luZy4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBfX21lbV9vcGVuYC4gR290dGEgc2VlIGhvdyB0aGF0IG1lbW9yeSBtYXBwaW5nIGlzIGJlaW5nIHNldCB1cC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhY2Nlc3NpbmcgdGhlIHByb2Nlc3MmIzM5O3MgbWVtb3J5IHdpbGwgYmUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG1ldGhvZG9sb2d5LCBpZGVudGlmeSBhbmQgY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSB0aGlzIG1lZXRzIG15IHN0YW5kYXJkcyBmb3Igc2VjdXJlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiA4NDE6XHR7XG4gODQyOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcbiA4NDU6XHRcdFx0cmV0dXJuIG1tID8gUFRSX0VSUihtbSkgOiAtRVNSQ0g7XG4gODQ2Olx0XG4gODQ3Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG1tO1xuIDg0ODpcdFx0cmV0dXJuIDA7XG4gODQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQzMwoJCQkJCQkJb3V0cHV0OiAzNjgKCQkJCQkJCXRob3VnaHRzOiAzNzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2g6IEtNU0FOIFVubmVjZXNzYXJ5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGludm9sdmVzIG1hbmFnaW5nIGEgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgZm9yIGAvcHJvYy9waWQvbWVtYCBmaWxlIG9wZXJhdGlvbnMuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMgdGhhdCByZXF1aXJlIEtNU0FOLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBzdHJ1Y3QgdGhhdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAsIHdoaWNoICpkb2VzbiYjMzk7dCogemVybyBtZW1vcnkuIEl0IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBgaW50cm9zcGVjdGlvbmAgZmxhZy4KClRoZSBjcml0aWNhbCB0aGluZyB0byByZW1lbWJlciBpcyB0aGF0IGBfX21lbV9vcGVuYCBzZXRzIGBmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBtbTtgLCBhbmQgYG1lbV9yZWxlYXNlYCBjYWxscyBgbW1kcm9wKGZpbGUtJmd0O3ByaXZhdGVfZGF0YSlgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmb3IgdGhlIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYC4gVGhlIGBpbnRyb3NwZWN0aW9uYCBmbGFnIGlzIGluaXRpYWxpemVkICphZnRlciogYHByb2NfbWVtX29wZW5gIGlzIGNhbGxlZCBhbmQgaXRzIHJlc3VsdCBjaGVja2VkLiBJZiBgcHJvY19tZW1fb3BlbmAgZmFpbHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBJZiBga21hbGxvY19vYmpgIGZhaWxzLCBpdCByZXR1cm5zIGAtRU5PTUVNYC4gVGhlcmVmb3JlIHRoZSBgc3RydWN0IG1lbV9wcml2YXRlYCBpcyBub3QgdXNlZCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLgoKVGhlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIGFsbG9jYXRlZCwgYnV0IGl0cyBmaWVsZHMgYXJlIGFsbCBpbml0aWFsaXplZCAqYmVmb3JlKiBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCBpcyBzZXQuIFRoZSBzdHJ1Y3QgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3MgcG90ZW50aWFsIGZvciBwYWRkaW5nIGluIHRoZSBzdHJ1Y3QsIGJ1dCB0aGlzIGlzIGlycmVsZXZhbnQgYmVjYXVzZSBwYWRkaW5nIGlzIG5vdCB2aXNpYmxlIHRvIHVzZXJzcGFjZSwgdGhlcmVmb3JlIGl0JiMzOTtzIG5vdCBhIHNvdXJjZSBvZiBhbnkgaW5mb3JtYXRpb24gbGVhay4KClRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBMU00gaG9vayBhbHNvIG5lZWRzIGluc3BlY3Rpb24uIFRoaXMgaG9vayBnZXRzIGNhbGxlZCwgYW5kIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGF2ZGAgaXMgcGFzc2VkIGFzIGFuICpvdXRwdXQqIHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAuIFRoZSBmdW5jdGlvbiBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAgcG9wdWxhdGVzIGBhdmRgLiBUaGUgY29udGVudHMgb2YgYGF2ZGAgYXJlICpub3QqIGV2ZW4gdXNlZCBieSBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKClgLiBUaGVyZWZvcmUsIHdoZXRoZXIgYGF2ZGAgaXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gaXRzIHVzZSBpcyBjb21wbGV0ZWx5IGlycmVsZXZhbnQuCgpJdCBpcyBhbHNvIGltcG9ydGFudCB0byBjb25zaWRlciBpZiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBsZWF2ZXMgYW55IHBvdGVudGlhbCB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIGZpbGUgb3BlcmF0aW9ucyBjYW4gb25seSBiZSBkb25lIGFmdGVyIHN1Y2Nlc3NmdWwgb3BlbmluZyBvZiBhIGZpbGUgZGVzY3JpcHRvciwgYW5kIGBpbnRyb3NwZWN0aW9uYCBpcyBmdWxseSBpbml0aWFsaXplZCBhdCB0aGlzIHRpbWUuIFRoZSBWRlMgbGF5ZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY3JlZGVudGlhbHMuIFRoZXJlJiMzOTtzIG5vIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlIHNpbmNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXNuJiMzOTt0IHZpc2libGUgdW50aWwgYG9wZW5gIHJldHVybnMuCgpJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgYGttYWxsb2Nfb2JqYCBhbmQgY29uZmlybWVkIHRoYXQgaXQmIzM5O3MgYSB3cmFwcGVyIGFyb3VuZCBga21hbGxvY2AgYW5kIGlzIGNvbXBsZXRlbHkgc2FmZS4gVGhlIGBfX2ZyZWVgIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5IGZyZWVzIGl0IHdoZW4gYG1lbV9vcGVuYCByZXR1cm5zLiBTbywgaXQgaXMgc2FmZSB0byB1c2UuCgpJbiBzdW1tYXJ5OiB0aGUgcGF0Y2ggZXhwbGljaXRseSBpbml0aWFsaXplcyBhbGwgcmVsZXZhbnQgZmllbGRzLiBUaGUgc3RydWN0IGlzIG5ldmVyIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXMgZmFyIGFzIEkgY2FuIHRlbGwuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MuCgpUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOToyMC44OTAwNDc4MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyMTU1OTQ4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwic2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgL3Byb2MvcGlkL21lbWAgb3BlbiBhbmQgcmVhZC93cml0ZSBsb2dpYyB0byB0cmFjayB3aGV0aGVyIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIHdhcyBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbiAoYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSkuIEl0IGludHJvZHVjZXMgYSBuZXcgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgdG8gaG9sZCB0aGUgYG1tX3N0cnVjdGAgcG9pbnRlciBhbmQgYSBib29sZWFuIGBpbnRyb3NwZWN0aW9uYCBmbGFnLiBUaGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYnV0IGJvdGggb2YgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbWVtX29wZW4oKWAuIFRoZSBzdHJ1Y3QgaXMgb25seSB1c2VkIGludGVybmFsbHkgd2l0aGluIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgZG8gbm90IHBvc2UgYW4gaW5mby1sZWFrIHJpc2suXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxcblxcblNpbmNlIGFsbCBpbnRyb2R1Y2VkIG1lbW9yeSBpcyBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciB1c2VkIHN0cmljdGx5IGFzIG91dHB1dCBwYXJhbWV0ZXJzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGJ5dGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjIwLjg5MDA1MzUyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2Mzk5Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGQwZGJjNjY2MTY4MDMxMDEzOGY1NDAzNmQwODIxNzFkZWVlYmQxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjowOToxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXFxuaW5kZXggNzgwZjgxMjU5MDUyNy4uM2RmYWVmNDliYjcwYiAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xcbisrKyBiL2ZzL3Byb2MvYmFzZS5jXFxuQEAgLTg0OCwxNSArODQ4LDMyIEBAIHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cXG4rc3RydWN0IG1lbV9wcml2YXRlIHtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdC8qIFdhcyB0aGUgcHRyYWNlIGFjY2VzcyBjaGVjayBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbj8gKi9cXG4rXFx0Ym9vbCBpbnRyb3NwZWN0aW9uO1xcbit9O1xcbitcXG4gc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7XFxuK1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XFxuK1xcdHByaXYtXFx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXFx1MDAzZW1tKSlcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZW1tID8gUFRSX0VSUihwcml2LVxcdTAwM2VtbSkgOiAtRVNSQ0g7XFxuK1xcdHByaXYtXFx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVxcdTAwM2VtbSA9PSBjdXJyZW50LVxcdTAwM2VtbTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4gXFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XFxuIFxcbkBAIC04NzMsNiArODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XFxuIFxcdGRlZmF1bHQ6XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VpbnRyb3NwZWN0aW9uKVxcbitcXHRcXHRcXHRyZXR1cm4gc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShmaWxlLVxcdTAwM2VmX2NyZWQpID09IDA7XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIH1cXG5AQCAtODgwLDcgKzg5OSw4IEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXFxuIHtcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVxcdTAwM2VtbTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XFxuIFxcdHNzaXplX3QgY29waWVkO1xcbiBcXHRjaGFyICpwYWdlO1xcbkBAIC05NzAsMTIgKzk5MCwyMSBAQCBzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXG4rXFx0bW1kcm9wKHByaXYtXFx1MDAzZW1tKTtcXG4rXFx0a2ZyZWUocHJpdik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xcbiBcXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssXFxuIFxcdC5yZWFkXFx0XFx0PSBtZW1fcmVhZCxcXG4gXFx0LndyaXRlXFx0XFx0PSBtZW1fd3JpdGUsXFxuIFxcdC5vcGVuXFx0XFx0PSBtZW1fb3BlbixcXG4tXFx0LnJlbGVhc2VcXHQ9IG1lbV9yZWxlYXNlLFxcbitcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxcbiBcXHQuZm9wX2ZsYWdzXFx0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjY3NDUyZjcxYmVkZmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC0zNiw2ICszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsXFxuIFxcdCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfdHJhY2VtZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuK0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcXG4gTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcXG4gaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTtcXG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpO1xcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbiBcXHRcXHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdFxcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxcbkBAIC02NzYsNiArNjc3LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbiBcXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcXG4gXFx0XFx0XFx0XFx0ICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdFxcdFxcdFxcdCAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZDBmNzkwYTUzNGViMCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC01OTUsNiArNTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4gXFx0cmV0dXJuIGNhbGxfaW50X2hvb2socHRyYWNlX3RyYWNlbWUsIHBhcmVudCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBpbnRyb3NwZWN0aXZlIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XFxuKyAqXFxuKyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSwgd2hpY2hcXG4rICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxcbisgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy5cXG4rICpcXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbisgKi9cXG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuK3tcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3NcXG4gICogQHRhcmdldDogdGFyZ2V0IHByb2Nlc3NcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggMThkZDI4YjJiYjEzZC4uOTA1MTM3YzQ3MzIxNyAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjE1Nyw2ICsyMTU3LDMyIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4gXFx0XFx0XFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuKyAqIFRoaXMgb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHlcXG4rICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuXFxuKyAqXFxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxcbisgKlxcbisgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJ3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4ndFxcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxcbit7XFxuK1xcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XFxuK1xcdGludCByYztcXG4rXFx0dTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpO1xcbitcXG4rXFx0LyogQWxsb3cgaWYgdGhlIHByb2Nlc3MgaXMgZ2VuZXJhbGx5IGFsbG93ZWQgdG8gaGF2ZSBleGVjdXRhYmxlIGFub255bW91cyBtZW1vcnkuICovXFxuK1xcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX0VYRUNNRU0sIDAsIFxcdTAwMjZhdmQpO1xcbitcXG4rXFx0LyogQWxzbyBhbGxvdyBpZiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSB3b3VsZCBhbGxvdyBpdC4gKi9cXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsIFxcdTAwMjZhdmQpO1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHRcXHRcXHQgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxcbiB7XFxuQEAgLTc1NTgsNiArNzU4NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcbiBcXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXFxuIFxcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxcbitcXHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXFxuIFxcdExTTV9IT09LX0lOSVQoY2FwZ2V0LCBzZWxpbnV4X2NhcGdldCksXFxuIFxcdExTTV9IT09LX0lOSVQoY2Fwc2V0LCBzZWxpbnV4X2NhcHNldCksXFxuIFxcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MDk6MjEuMzk3MzM4NTE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQyMzMzNzg1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwic2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQwZGJjNjY2MTY4MDMxMDEzOGY1NDAzNmQwODIxNzFkZWVlYmQxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDIyOjA5OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuY1xuaW5kZXggNzgwZjgxMjU5MDUyNy4uM2RmYWVmNDliYjcwYiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvYmFzZS5jXG4rKysgYi9mcy9wcm9jL2Jhc2UuY1xuQEAgLTg0OCwxNSArODQ4LDMyIEBAIHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXG4rc3RydWN0IG1lbV9wcml2YXRlIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0LyogV2FzIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uPyAqL1xuK1x0Ym9vbCBpbnRyb3NwZWN0aW9uO1xuK307XG4rXG4gc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7XG4rXG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmb3BfZmxhZ3MgXHUwMDI2IEZPUF9VTlNJR05FRF9PRkZTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcbitcdHByaXYtXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXHUwMDNlbW0pKVxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cdTAwM2VtbSkgOiAtRVNSQ0g7XG4rXHRwcml2LVx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODczLDYgKzg5MCw4IEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHR9XG4gXHRcdHJldHVybiBwdHJhY2VfYWN0aXZlO1xuIFx0ZGVmYXVsdDpcbitcdFx0aWYgKHByaXYtXHUwMDNlaW50cm9zcGVjdGlvbilcbitcdFx0XHRyZXR1cm4gc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShmaWxlLVx1MDAzZWZfY3JlZCkgPT0gMDtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gfVxuQEAgLTg4MCw3ICs4OTksOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcbiB7XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXHUwMDNlbW07XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcbiBcdHNzaXplX3QgY29waWVkO1xuIFx0Y2hhciAqcGFnZTtcbkBAIC05NzAsMTIgKzk5MCwyMSBAQCBzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1xuK1x0bW1kcm9wKHByaXYtXHUwMDNlbW0pO1xuK1x0a2ZyZWUocHJpdik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBtZW1fbHNlZWssXG4gXHQucmVhZFx0XHQ9IG1lbV9yZWFkLFxuIFx0LndyaXRlXHRcdD0gbWVtX3dyaXRlLFxuIFx0Lm9wZW5cdFx0PSBtZW1fb3Blbixcbi1cdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlLFxuK1x0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxuIFx0LmZvcF9mbGFnc1x0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uNjc0NTJmNzFiZWRmYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTM2LDYgKzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLFxuIFx0IHVuc2lnbmVkIGludCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuK0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpO1xuK2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTtcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuIFx0XHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxuQEAgLTY3Niw2ICs2NzcsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZDBmNzkwYTUzNGViMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiArNTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xuIH1cbiBcbisvKipcbisgKiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBpbnRyb3NwZWN0aXZlIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxuKyAqIEBzdWJqZWN0OiBjcmVkZW50aWFscyBvZiB0aGUgcHJvY2VzcyBhY2Nlc3NpbmcgaXRzIG93biBtZW1vcnlcbisgKlxuKyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSwgd2hpY2hcbisgKiBieXBhc3NlcyB0aGUgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjaygpIGhvb2suXG4rICogVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMuXG4rICpcbisgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4rICovXG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4re1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi45MDUxMzdjNDczMjE3IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgKzIxNTcsMzIgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0XHRcdCAgICBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxuKyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS5cbisgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5XG4rICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuXG4rICpcbisgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS5cbisgKlxuKyAqIENyZWF0aW5nIGFuIGF1ZGl0IHJlY29yZCBvbiBkZW5pYWwgZG9lc24ndCBtYWtlIHNlbnNlIGhlcmUsIHNpbmNlIHdlIGNhbid0XG4rICogdGVsbCB3aGV0aGVyIEZPTExfRk9SQ0UgbWF0dGVycyBmb3IgdGhlIGFjY2Vzc2VkIFZNQXMuXG4rICovXG4rc3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4re1xuK1x0c3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtcbitcdGludCByYztcbitcdHUzMiBzaWQgPSBjcmVkX3NpZChzdWJqZWN0KTtcbitcbitcdC8qIEFsbG93IGlmIHRoZSBwcm9jZXNzIGlzIGdlbmVyYWxseSBhbGxvd2VkIHRvIGhhdmUgZXhlY3V0YWJsZSBhbm9ueW1vdXMgbWVtb3J5LiAqL1xuK1x0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fRVhFQ01FTSwgMCwgXHUwMDI2YXZkKTtcbitcbitcdC8qIEFsc28gYWxsb3cgaWYgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgd291bGQgYWxsb3cgaXQuICovXG4rXHRpZiAocmMpXG4rXHRcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbitcdHJldHVybiByYztcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICs3NTg0LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSxcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuK1x0TFNNX0hPT0tfSU5JVChpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2Fwc2V0LCBzZWxpbnV4X2NhcHNldCksXG4gXHRMU01fSE9PS19JTklUKGNhcGFibGUsIHNlbGludXhfY2FwYWJsZSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOToyMS4zOTczNDA0NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTYwOTAxOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIGAvcHJvYy9waWQvbWVtYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgaG93IGAvcHJvYy9waWQvbWVtYCBpcyBhY2Nlc3NlZC4gSXQncyBhZGRpbmcgYW4gTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCwgY2hlY2tpbmcgZm9yIGBGT0xMX0ZPUkNFYC4gIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIGFuZCBjbGVhcmx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuICBJJ20gc2VlaW5nIG5ldyBzdHJ1Y3R1cmVzLCBgc3RydWN0IG1lbV9wcml2YXRlYCwgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgbGlrZSBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAuIEFuZCBpdCBob29rcyB0aGUgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaW4gU0VMaW51eCB0b28uXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgZmluZGluZyB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIExldCdzIHNlZS4uLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIEkgbm90ZWQ6XG5cbiogICBgbWVtX29wZW5gIOKAkyBzdGF0aWMsIGJ1dCBwb3RlbnRpYWxseSByZWFjaGFibGUgdGhyb3VnaCBgcHJvY19tZW1fb3BlcmF0aW9ucy5vcGVuYC4gV29ydGggbG9va2luZyBhdC5cbiogICBgcHJvY19tZW1fZm9sbF9mb3JjZWAg4oCTIHN0YXRpYywgY2FsbGVkIGZyb20gYG1lbV9yd2AuXG4qICAgYG1lbV9yd2Ag4oCTIHN0YXRpYywgY2FsbGVkIGZyb20gYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAuXG4qICAgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIOKAkyBUaGlzIGlzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiAgSXQncyBnbG9iYWwhIEhpZ2ggcHJpb3JpdHkuXG4qICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAg4oCTIHN0YXRpYywgYnV0IGhvb2tlZC5cblxuSG1tLCBva2F5LCBzbyBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGFuZCBgbWVtX3J3YCBhcmUgYWxsICpzdGF0aWMqLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXkncmUgY2FsbGVkLCBhbmQgd2hhdCB0aGUgVkZTIGludGVyYWN0aW9uIGxvb2tzIGxpa2UuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAgYXJlIGFjdHVhbGx5IHVzZWQuXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYCBhcmUgaW4gYHByb2NfbWVtX29wZXJhdGlvbnNgLiAgQW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGlzIHRoZXJlIHRvby4gIE5vdywgdGhlIHJlYWwgZ2VtIGhlcmUgaXMgdGhhdCBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaXMgKmV4cG9ydGVkKiDigJMgdGhhdCdzIG11Y2ggYmV0dGVyIGZvciBmdXp6aW5nLiBJIGNvbmZpcm1lZCBpdCdzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC5cblxuT2theSwgYmFjayB0byBgZnMvcHJvYy9iYXNlLmNgLiBDb25maXJtZWQg4oCTIGBtZW1fb3BlbmAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgYXJlIGFsbCBzdGF0aWMuICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbnMgYXJlIGxlc3MgbGlrZWx5IHRvIGJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgYmVpbmcgY2FsbGVkIGRpcmVjdGx5LiBXZSB1c3VhbGx5IHdhbnQgdG8gZmluZCBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBhcyBBUElzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIFZGUyBsYXllci4gU28sIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBsb29rcyBwcmltZSwgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVkZTIGNhbGxzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHBhdGNoIHN1Z2dlc3RzIHRoZSBuZXcgZnVuY3Rpb24ncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuXG5cbkknbSBhbHNvIHNlZWluZyBhIGNvbW1lbnQgYWJvdXQgYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoaXMgaXMgYSAqY3JpdGljYWwqIHBpZWNlLiAgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBBIGNvbmRpdGlvbmFsIHBhdGggaXMgYSBiaWcgcmVkIGZsYWcgdGhhdCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhvcm91Z2hseSB3aXRoIGZ1enppbmcuIExldCdzIGRvIGEgZ3JlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjMxLjM1ODI0NTQ5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4NzE5OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfTUVNX0ZPUkNFX0FMV0FZU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz0xMjE9ZW51bSBwcm9jX21lbV9mb3JjZSB7XFxuZnMvcHJvYy9iYXNlLmM6MTIyOlxcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcXG5mcy9wcm9jL2Jhc2UuYy0xMjMtXFx0UFJPQ19NRU1fRk9SQ0VfUFRSQUNFLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTI3PXN0YXRpYyBlbnVtIHByb2NfbWVtX2ZvcmNlIHByb2NfbWVtX2ZvcmNlX292ZXJyaWRlIF9fcm9fYWZ0ZXJfaW5pdCA9XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMjktXFx0SVNfRU5BQkxFRChDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFKSA/IFBST0NfTUVNX0ZPUkNFX1BUUkFDRSA6XFxuZnMvcHJvYy9iYXNlLmM6MTMwOlxcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUztcXG5mcy9wcm9jL2Jhc2UuYy0xMzEtXFxuZnMvcHJvYy9iYXNlLmM9MTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgcHJvY19tZW1fZm9yY2VfdGFibGVbXSBfX2luaXRjb25zdCA9IHtcXG5mcy9wcm9jL2Jhc2UuYzoxMzM6XFx0eyBcXFwiYWx3YXlzXFxcIiwgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTIH0sXFxuZnMvcHJvYy9iYXNlLmMtMTM0LVxcdHsgXFxcInB0cmFjZVxcXCIsIFBST0NfTUVNX0ZPUkNFX1BUUkFDRSB9LFxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDMtICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjA0OiAqIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjA1LSAqXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE1ND1zdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2Mi0gKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNjM6ICogVGhpcyBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLCBhbmQgb25seVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTY0LSAqIHRyaWdnZXJzIG9uIGFjY2Vzc2VzIHRoYXQgYXJlIG5vdCB2aXNpYmxlIHRvIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOTozMy4wNzY5NzQ5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjUyODk0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLZXJuZWwgTWVtb3J5IEFjY2VzcyBDb250cm9sKipcblxuUmlnaHQsIHNvIEkgc2VlIGBQUk9DX01FTV9GT1JDRV9BTFdBWVNgLiBPa2F5LCBlbnVtIHZhbHVlLiBBbmQgdGhhdCdzIGxpa2VseSBjb25uZWN0ZWQgdG8gYSBrZXJuZWwgY29uZmlnIG9wdGlvbiBsaWtlIGBDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFYCBvciBzb21ldGhpbmcgc2ltaWxhciwgZGVhbGluZyB3aXRoIGhvdyBgcHJvY2ZzYCBoYW5kbGVzIG1lbW9yeSBhY2Nlc3MuIEdpdmVuIEknbSBzZWVpbmcgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQuIExldCdzIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBzdG9yeSBsaXZlcy4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGBQUk9DX01FTV9GT1JDRWAgZmFtaWx5IG9mIG9wdGlvbnMgYWN0dWFsbHkgKmRvZXMqLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyaXR5LCBkZWJ1Z2dpbmcsIGFuZCBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkgdG8gYXNzZXNzIGl0cyBpbXBhY3QuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIG15IG5leHQgc3RvcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjM2LjcwMjI2Nzg3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3Mzk3OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfTUVNX0ZPUkNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcXG5mcy9wcm9jL2Jhc2UuYzoxMjI6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTLFxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcXHRQUk9DX01FTV9GT1JDRV9QVFJBQ0UsXFxuZnMvcHJvYy9iYXNlLmM6MTI0OlxcdFBST0NfTUVNX0ZPUkNFX05FVkVSXFxuZnMvcHJvYy9iYXNlLmMtMTI1LX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cXG5mcy9wcm9jL2Jhc2UuYzoxMjg6XFx0SVNfRU5BQkxFRChDT05GSUdfUFJPQ19NRU1fTk9fRk9SQ0UpID8gUFJPQ19NRU1fRk9SQ0VfTkVWRVIgOlxcbmZzL3Byb2MvYmFzZS5jOjEyOTpcXHRJU19FTkFCTEVEKENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0UpID8gUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIDpcXG5mcy9wcm9jL2Jhc2UuYzoxMzA6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xcbmZzL3Byb2MvYmFzZS5jLTEzMS1cXG5mcy9wcm9jL2Jhc2UuYz0xMzI9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBwcm9jX21lbV9mb3JjZV90YWJsZVtdIF9faW5pdGNvbnN0ID0ge1xcbmZzL3Byb2MvYmFzZS5jOjEzMzpcXHR7IFxcXCJhbHdheXNcXFwiLCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcXG5mcy9wcm9jL2Jhc2UuYzoxMzQ6XFx0eyBcXFwicHRyYWNlXFxcIiwgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIH0sXFxuZnMvcHJvYy9iYXNlLmM6MTM1OlxcdHsgXFxcIm5ldmVyXFxcIiwgUFJPQ19NRU1fRk9SQ0VfTkVWRVIgfSxcXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXFx0eyB9XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04ODAtXFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xcbmZzL3Byb2MvYmFzZS5jOjg4MTpcXHRjYXNlIFBST0NfTUVNX0ZPUkNFX05FVkVSOlxcbmZzL3Byb2MvYmFzZS5jLTg4Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuZnMvcHJvYy9iYXNlLmM6ODgzOlxcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxcbmZzL3Byb2MvYmFzZS5jLTg4NC1cXHRcXHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9MjI9Y2hvaWNlXFxuc2VjdXJpdHkvS2NvbmZpZy0yMy1cXHRwcm9tcHQgXFxcIkFsbG93IC9wcm9jL3BpZC9tZW0gYWNjZXNzIG92ZXJyaWRlXFxcIlxcbnNlY3VyaXR5L0tjb25maWc6MjQ6XFx0ZGVmYXVsdCBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG5zZWN1cml0eS9LY29uZmlnLTI1LVxcdGhlbHBcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9MzM9Y29uZmlnIFBST0NfTUVNX0FMV0FZU19GT1JDRVxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0zOC1cXG5zZWN1cml0eS9LY29uZmlnOjM5OmNvbmZpZyBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG5zZWN1cml0eS9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIlJlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDMtICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjA0OiAqIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjA1LSAqXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE1ND1zdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2Mi0gKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNjM6ICogVGhpcyBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLCBhbmQgb25seVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTY0LSAqIHRyaWdnZXJzIG9uIGFjY2Vzc2VzIHRoYXQgYXJlIG5vdCB2aXNpYmxlIHRvIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOTozOC41Mjk2NzE0MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc3ODA3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB0aGUgb25lIGhhdmluZyBpdDpcblxuKipDb25maWd1cmF0aW9uIENvbmZ1c2lvbiBhbmQgVmVyaWZpY2F0aW9uKipcblxuSG1tLCBsZXQgbWUgc2VlLi4uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBQUk9DX01FTV9BTFdBWVNfRk9SQ0VgLi4uIG9yIHdhcyBpdCBgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTYD8gSXQncyBlYXN5IHRvIGdldCB0aG9zZSBtaXhlZCB1cCBzb21ldGltZXMuIEJlc3QgdG8gYmUgc3VyZS4gQWxyaWdodCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gaW4gYHNlY3VyaXR5L0tjb25maWdgLiBDYW4ndCB0cnVzdCBteSBtZW1vcnkgb24gdGhlc2UgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWNoIGNyaXRpY2FsIHNlY3VyaXR5LXJlbGF0ZWQgc2V0dGluZ3MuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBhbHdheXMsIHRvIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSB3aGVuIHRoZXJlJ3MgZXZlbiBhIGZsaWNrZXIgb2YgZG91YnQgYWJvdXQgdGhlIGV4YWN0IG5hbWUgb3IgbWVhbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjQxLjkwNzQ4MjQwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjaG9pY2VcXG4gIDIzOlxcdFxcdHByb21wdCBcXFwiQWxsb3cgL3Byb2MvcGlkL21lbSBhY2Nlc3Mgb3ZlcnJpZGVcXFwiXFxuICAyNDpcXHRcXHRkZWZhdWx0IFBST0NfTUVNX0ZPUkNFX1BUUkFDRVxcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBUcmFkaXRpb25hbGx5IC9wcm9jL3BpZC9tZW0gYWxsb3dzIHVzZXJzIHRvIG92ZXJyaWRlIG1lbW9yeVxcbiAgMjc6XFx0XFx0ICBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgbGlrZSBwdHJhY2UsIGFzc3VtaW5nIHRoZXkgaGF2ZSBwdHJhY2VcXG4gIDI4OlxcdFxcdCAgY2FwYWJpbGl0eS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbGltaXQgdGhhdCAtIGVpdGhlciBuZXZlciBvdmVycmlkZSwgb3JcXG4gIDMxOlxcdFxcdCAgcmVxdWlyZSBhY3R1YWwgYWN0aXZlIHB0cmFjZSBhdHRhY2htZW50IChkZWZhdWx0KS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIFBST0NfTUVNX0FMV0FZU19GT1JDRVxcbiAgMzQ6XFx0XFx0Ym9vbCBcXFwiVHJhZGl0aW9uYWwgL3Byb2MvcGlkL21lbSBiZWhhdmlvclxcXCJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBhbGxvd3MgL3Byb2MvcGlkL21lbSBhY2Nlc3NlcyB0byBvdmVycmlkZSBtZW1vcnkgbWFwcGluZ1xcbiAgMzc6XFx0XFx0ICBwZXJtaXNzaW9ucyBpZiB5b3UgaGF2ZSBwdHJhY2UgYWNjZXNzIHJpZ2h0cy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIFBST0NfTUVNX0ZPUkNFX1BUUkFDRVxcbiAgNDA6XFx0XFx0Ym9vbCBcXFwiUmVxdWlyZSBhY3RpdmUgcHRyYWNlKCkgdXNlIGZvciBhY2Nlc3Mgb3ZlcnJpZGVcXFwiXFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcXG4gIDQzOlxcdFxcdCAgcGVybWlzc2lvbnMgZm9yIGFjdGl2ZSBwdHJhY2VycyBsaWtlIGdkYi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnIFBST0NfTUVNX05PX0ZPUkNFXFxuICA0NjpcXHRcXHRib29sIFxcXCJOZXZlclxcXCJcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgTmV2ZXIgb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmcgcGVybWlzc2lvbnNcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0ZW5kY2hvaWNlXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBNU0VBTF9TWVNURU1fTUFQUElOR1NcXG4gIDUzOlxcdFxcdGJvb2wgXFxcIm1zZWFsIHN5c3RlbSBtYXBwaW5nc1xcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gNjRCSVRcXG4gIDU1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gIUNIRUNLUE9JTlRfUkVTVE9SRVxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBBcHBseSBtc2VhbCBvbiBzeXN0ZW0gbWFwcGluZ3MuXFxuICA1OTpcXHRcXHQgIFRoZSBzeXN0ZW0gbWFwcGluZ3MgaW5jbHVkZXMgdmRzbywgdnZhciwgdnZhcl92Y2xvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjQxLjkwNzU1NjY5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDQ0MTQ2MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBBIEZvY3VzZWQgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uOiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYC4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBgZnMvcHJvYy9iYXNlLmNgLCBpZiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBzZXQsIG5laXRoZXIgYENPTkZJR19QUk9DX01FTV9OT19GT1JDRWAgbm9yIGBDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFYCBpcyBlbmFibGVkLCBhbmQgaXQgZGVmYXVsdHMgdG8gYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoZXJlZm9yZSwgZW5hYmxpbmcgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBwYXRoIGZvciB0ZXN0aW5nLlxuXG5JIG5lZWQgdG8gcmVtZW1iZXIgU0VMaW51eCBpcyBpbnZvbHZlZC4gU28sIGBTRUNVUklUWV9TRUxJTlVYYCBpcyBhbHNvIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUuIEknbSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AsIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBpbiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zLiBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgbG9va3MgcHJvbWlzaW5nIOKAkyBpdCdzIGFuIGV4cG9ydGVkLCBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50IGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gQWxzbywgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgc2VlbXMgbGlrZSBhbm90aGVyIGdyZWF0IHRhcmdldCwgZm91bmQgaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGFueXRoaW5nIGVsc2UgaXMgdmlhYmxlLiBgbWVtX29wZW5gIGlzIHN0YXRpYywgYnV0IGJlY2F1c2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBwcm9jX21lbV9vcGVyYXRpb25zYCwgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoaXMgbWVhbnMgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFuZCB3b24ndCBiZSBmdWxseSBpbmxpbmVkLiBUaGVyZWZvcmUsIGBtZW1fb3BlbmAgY291bGQgYWxzbyBiZSBjb25zaWRlcmVkIGZvciBmdXp6aW5nLiBUaGUgc2FtZSBsb2dpYyBob2xkcyB0cnVlIGZvciBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYC4gSG93ZXZlciwgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGlzIHRoZSBiZXR0ZXIgY2hvaWNlIGJlY2F1c2UgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGBtZW1fb3BlbmAgKmlzKiBzdGF0aWMsIGFuZCBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKmlzKiBleHBvcnRlZC5cblxuU28sIGluIHN1bW1hcnksIEknbGwgbmVlZCB0byBlbmFibGUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgZG9lc24ndCBkZXBlbmQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBhY2NvcmRpbmcgdG8gdGhlIEtjb25maWcgZmlsZSBpbiBgc2VjdXJpdHkvS2NvbmZpZ2AuIGBTRUNVUklUWV9TRUxJTlVYYCBoYXMgYSBmZXcgZGVwZW5kZW5jaWVzLCBidXQgdGhhdCdzIGFscmVhZHkga25vd24uXG5cbkhlcmUgYXJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgXG4qICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWBcbiogICBgbWVtX29wZW5gXG4qICAgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWBcblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgYG1lbV9vcGVuYCBpcyB1bmlxdWUsIGJ1dCBpdCBkb2VzIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwNSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOTo1My45NTE3MDU5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNDk3ODQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTE1Nj1zdGF0aWMgaW50XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzoxNTc6c3B1ZnNfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy0xNTgte1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0zMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWVtX2ZvcHMgPSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzozMDQ6XFx0Lm9wZW5cXHRcXHRcXHQ9IHNwdWZzX21lbV9vcGVuLFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA1LVxcdC5yZWxlYXNlXFx0XFx0PSBzcHVmc19tZW1fcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTIwPWludCB4ZV9wYWdlbWFwX2NhY2hlX2NyZWF0ZShzdHJ1Y3QgeGVfdGlsZSAqdGlsZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTM2LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxOTM3OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2Rldm1lbV9vcGVuKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTM4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTcyPXN0cnVjdCBkcm1fcGFnZW1hcCAqeGVfZHJtX3BhZ2VtYXBfZnJvbV9mZChpbnQgZmQsIHUzMiByZWdpb25faW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTk5OC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTk5OTpcXHRkcGFnZW1hcCA9IHhlX2Rldm1lbV9vcGVuKHRvX3hlX2RldmljZShkcm0pLCByZWdpb25faW5zdGFuY2UpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0yMDAwLVxcdGRybV9kZXZfZXhpdChpZHgpO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYz01MzE9dm9pZCB1cGRhdGVfd2F0ZXJtYXJrX3NldHRpbmcoc3RydWN0IGlwdTZfaXN5cyAqaXN5cylcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNTQwLVxcdHU2NCBpc3lzX3BiX2RhdGFyYXRlX21icyA9IDA7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo1NDE6XFx0dTMyIG1lbV9vcGVuX3RocmVzaG9sZCA9IDA7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYy01NDItXFx0c3RydWN0IGx0cl9kaWQgbHRyZGlkO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYy02MTktXFx0XFx0XFx0ICAgICBJU0ZfRE1BX1RPUF9HREFfUFJPRkVSVFlfUEFHRV9TSVpFKSA/IDEgOiAwO1xcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NjIwOlxcdFxcdG1lbV9vcGVuX3RocmVzaG9sZCA9IGlzeXMtXFx1MDAzZXBkYXRhLVxcdTAwM2VpcGRhdGEtXFx1MDAzZW1lbW9wZW5fdGhyZXNob2xkO1xcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NjIxOlxcdFxcdG1lbV9vcGVuX3RocmVzaG9sZCA9IG1heF90KHUzMiwgbWVtX29wZW5fdGhyZXNob2xkLCBwYWdlX251bSk7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo2MjI6XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJtZW1fb3Blbl90aHJlc2hvbGQ6ICV1XFxcXG5cXFwiLCBtZW1fb3Blbl90aHJlc2hvbGQpO1xcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNjIzLVxcdFxcdHNldF9pd2FrZV9yZWdpc3Rlcihpc3lzLCBHREFfTUVNT1BFTl9USFJFU0hPTERfSU5ERVgsXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo2MjQ6XFx0XFx0XFx0XFx0ICAgbWVtX29wZW5fdGhyZXNob2xkKTtcXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jLTYyNS1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM9MTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmbGFzaF9kZWJ1Z2ZzX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMTY1OS1cXHQub3duZXIgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jOjE2NjA6XFx0Lm9wZW4gICAgPSBtZW1fb3BlbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYy0xNjYxLVxcdC5yZWFkICAgID0gZmxhc2hfcmVhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jPTMyNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dlX3FpbmZvX2RlYnVnZnNfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTMyNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM6MzI1MzppbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMzI1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuaD02NT12b2lkIGFkZF9kZWJ1Z2ZzX2ZpbGVzKHN0cnVjdCBhZGFwdGVyICphZGFwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmgtNjctXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuZmlsZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oOjY4OmludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmgtNjktXFxuLS1cXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jPTY5PUFUVFJJQlVURV9HUk9VUFMocWNvbV9ybXRmc19tZW0pO1xcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtNzAtXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYzo3MTpzdGF0aWMgaW50IHFjb21fcm10ZnNfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy03Mi17XFxuLS1cXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jPTE1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxY29tX3JtdGZzX21lbV9mb3BzID0ge1xcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMTUzLVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmM6MTU0OlxcdC5vcGVuID0gcWNvbV9ybXRmc19tZW1fb3BlbixcXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jLTE1NS1cXHQucmVhZCA9IHFjb21fcm10ZnNfbWVtX3JlYWQsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zaW5nbGVfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtODExLS8qXFxuZnMvcHJvYy9iYXNlLmM6ODEyOiAqIHByb2NfbWVtX29wZW4oKSBjYW4gcmV0dXJuIGVycm5vLCBOVUxMIG9yIG1tX3N0cnVjdCouXFxuZnMvcHJvYy9iYXNlLmMtODEzLSAqXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04MTctICovXFxuZnMvcHJvYy9iYXNlLmM6ODE4OnN0cnVjdCBtbV9zdHJ1Y3QgKnByb2NfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG1vZGUpXFxuZnMvcHJvYy9iYXNlLmMtODE5LXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTgzOS1cXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9wcm9jL2Jhc2UuYy04NDEte1xcbmZzL3Byb2MvYmFzZS5jOjg0MjpcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xcbmZzL3Byb2MvYmFzZS5jLTg0My1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTg1Mj1zdHJ1Y3QgbWVtX3ByaXZhdGUge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtODU3LVxcbmZzL3Byb2MvYmFzZS5jOjg1ODpzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvYmFzZS5jLTg1OS17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04NjUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMvcHJvYy9iYXNlLmM6ODY2OlxcdHByaXYtXFx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcXG5mcy9wcm9jL2Jhc2UuYy04NjctXFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXFx1MDAzZW1tKSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMDUtXFx0LndyaXRlXFx0XFx0PSBtZW1fd3JpdGUsXFxuZnMvcHJvYy9iYXNlLmM6MTAwNjpcXHQub3BlblxcdFxcdD0gbWVtX29wZW4sXFxuZnMvcHJvYy9iYXNlLmMtMTAwNy1cXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAxMT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDEzOlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDE0LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwODY9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy9iYXNlLmMtMTA4Ny17XFxuZnMvcHJvYy9iYXNlLmM6MTA4ODpcXHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDg5LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTI3Njc9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0yNzY5LVxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XFxuZnMvcHJvYy9iYXNlLmM6Mjc3MDpcXHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xcbmZzL3Byb2MvYmFzZS5jLTI3NzEtXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmg9Mzk0PXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSB7XFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmgtNDA0LVxcbmZzL3Byb2MvaW50ZXJuYWwuaDo0MDU6c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuZnMvcHJvYy9pbnRlcm5hbC5oLTQwNi1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zNzY9c3RhdGljIGludCBwcm9jX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zODQtXFx0cHJpdi1cXHUwMDNlaW5vZGUgPSBpbm9kZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mzg1OlxcdHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTM4Ni1cXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tKSkge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE2MTk9c3RhdGljIGludCBzbWFwc19yb2xsdXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNjMyLVxcdHByaXYtXFx1MDAzZWlub2RlID0gaW5vZGU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE2MzM6XFx0cHJpdi1cXHUwMDNlbG9ja19jdHgubW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTYzNC1cXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cXHUwMDNlbG9ja19jdHgubW0pKSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjM5ND1zdGF0aWMgaW50IHBhZ2VtYXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzk3LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMzk4OlxcdG1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIzOTktXFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jPTI1Mj1zdGF0aWMgaW50IG1hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jLTI2MS1cXHRwcml2LVxcdTAwM2Vpbm9kZSA9IGlub2RlO1xcbmZzL3Byb2MvdGFza19ub21tdS5jOjI2MjpcXHRwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX1JFQUQpO1xcbmZzL3Byb2MvdGFza19ub21tdS5jLTI2My1cXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cXHUwMDNlbG9ja19jdHgubW0pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjU1LjQ3NjY5MjIwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAxMjg3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBDaGVsaXNvIGN4Z2I0IERyaXZlcioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIENoZWxpc28gY3hnYjQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMuIEkgc3BvdHRlZCBhIGBtZW1fb3BlbmAgZnVuY3Rpb24gY2FsbCB3aXRoaW4gYGN4Z2I0X2RlYnVnZnMuY2AuIEhtbSwgdGhhdCdzIG5vdCBleGFjdGx5IHVuaXF1ZSwgaXMgaXQ/IEkndmUgc2VlbiB0aGF0IG5hbWUgdXNlZCBpbiB2YXJpb3VzIGNvbnRleHRzLiBJdCBtYWtlcyBtZSB3YW50IHRvIGxvb2sgZGVlcGVyLlxuXG5JdCBtZWFucyB0aGUgZnVuY3Rpb24gbmFtZSBpcyBsaWtlbHkgbm90IGEgcGFydGljdWxhcmx5IHJvYnVzdCBzaWduaWZpZXIgb2YgYW55dGhpbmcsIHRoZXJlZm9yZSBhIGRpZmZlcmVudCBuYW1lIG9yIGZ1bmN0aW9uIGhhcyB0byBiZSBzZWxlY3RlZC5cblxuT2theSwgbGV0J3MgdHJ5IGEgZGlmZmVyZW50IHRhY2suIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMgYW5kIGxlc3MgZ2VuZXJpYyBuYW1lLiBNYXliZSBhIGZ1bmN0aW9uIHdpdGggbW9yZSBzcGVjaWFsaXplZCBwdXJwb3NlLiBXaGF0IGFib3V0IHRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmdW5jdGlvbj8gVGhhdCBuYW1lIHNvdW5kcyBtb3JlIHByb21pc2luZy4gSXQgaW1wbGllcyBhIHJlbGVhc2UgbWVjaGFuaXNtIGFzc29jaWF0ZWQgd2l0aCBwcml2YXRlIGRhdGEsIHdoaWNoIGlzIG9mdGVuIGEga2V5IGFzcGVjdCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0J3MgYmVpbmcgdXNlZC4gSXMgaXQgY291cGxlZCB0byB0aGUgYG1lbV9vcGVuYD8gV2hhdCBraW5kIG9mIHByaXZhdGUgZGF0YSBpcyBiZWluZyBtYW5hZ2VkIGhlcmU/IEFuZCB3aGF0J3MgYmVpbmcgcmVsZWFzZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MDk6NTkuMjc3OTgyNjA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk5MDI2NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz05ODU9c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTk5Mi1cXG5mcy9wcm9jL2Jhc2UuYzo5OTM6c3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy9iYXNlLmMtOTk0LXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMDYtXFx0Lm9wZW5cXHRcXHQ9IG1lbV9vcGVuLFxcbmZzL3Byb2MvYmFzZS5jOjEwMDc6XFx0LnJlbGVhc2VcXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcXG5mcy9wcm9jL2Jhc2UuYy0xMDA4LVxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjAwLjk3NzAxNTg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODA3NTc5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE1lbW9yeSBNYW5hZ2VtZW50IEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeS1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBzdG9vZCBvdXQgaW5pdGlhbGx5IGFzIHNvbWV0aGluZyB1bmlxdWUuIEkgaGFkIGl0IG9uIGEgbGlzdCB3aXRoIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIEJ1dCwgdGhpbmtpbmcgYWJvdXQgaXQgYSBiaXQgbW9yZSwgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMganVzdCBhIHNpbXBsZSBtZW1vcnkgcmVsZWFzZSBmdW5jdGlvbi4gSXQncyBub3QgcGFydGljdWxhcmx5IGNvbXBsZXggb3IgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGl0IGp1c3QgZnJlZXMgbWVtb3J5LiBQcm9iYWJseSBub3QgZ29pbmcgdG8gcmV2ZWFsIGFueXRoaW5nIG5ldy5cblxuTm93LCBteSBhdHRlbnRpb24ncyB0dXJuZWQgdG8gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLiBXaGlsZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBJIHNlZSB0aGF0IGBtZW1fcndgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgLCBjYWxscyBgcHJvY19tZW1fZm9sbF9mb3JjZWAuIFRoaXMgaXMgbXVjaCBtb3JlIHByb21pc2luZy4gVGhlIGNoYWluIG9mIGNhbGxzIHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gbW9yZSBjb21wbGV4IG1lbW9yeSBvcGVyYXRpb25zLCBzb21ldGhpbmcgSSBjYW4gcG90ZW50aWFsbHkgZXhwbG9pdCB0aHJvdWdoIGZ1enppbmcgYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAgLSB0aHJvdWdoIHRoZSBpbmRpcmVjdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGlmIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBpcyB1bmlxdWUsIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2ODQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MDUuNTU3Nzc2MjM1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzMDQ3Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfbWVtX2ZvbGxfZm9yY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9iYXNlLmM9ODU4PXN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04NzMtXFxuZnMvcHJvYy9iYXNlLmM6ODc0OnN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmZzL3Byb2MvYmFzZS5jLTg3NS17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04OTk9c3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtOTIwLVxcdGZsYWdzID0gd3JpdGUgPyBGT0xMX1dSSVRFIDogMDtcXG5mcy9wcm9jL2Jhc2UuYzo5MjE6XFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxcbmZzL3Byb2MvYmFzZS5jLTkyMi1cXHRcXHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDowNy4xMDA4MzE3NjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMjUyMDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZvbGxvdyBGb3JjZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHByb2NfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgYml0IHVudXN1YWwuIFRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIG9uY2Ugc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCdzIGxpa2VseSB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGl0IHdvbid0IGV2ZW4gaGF2ZSBpdHMgb3duIGRlZGljYXRlZCBzeW1ib2wgaW4gdGhlIGZpbmFsIGV4ZWN1dGFibGUsIHdoaWNoIGlzIGdvaW5nIHRvIG1ha2UgaXQgdHJpY2tpZXIgdG8gdGFyZ2V0LCBzbyBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgZnVuY3Rpb25zIGluc3RlYWQuXG5cbkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLCBzbyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQsIHNvIHdlIGhhdmUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGlzIHBhdGNoIGFkZHMgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCByZXNwZWN0aXZlbHkuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBhbnkgb3RoZXIgTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGUpIGlzIGltcGxlbWVudGluZyB0aGlzIGhvb2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbiBTRUxpbnV4IHNwZWNpZmljIGhvb2suIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDoxMS42MTMzNTQ0MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI2NTczMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04OTMtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWludHJvc3BlY3Rpb24pXFxuZnMvcHJvYy9iYXNlLmM6ODk0OlxcdFxcdFxcdHJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtXFx1MDAzZWZfY3JlZCkgPT0gMDtcXG5mcy9wcm9jL2Jhc2UuYy04OTUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0zOD1MU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaDozOTpMU01fSE9PSyhpbnQsIDAsIGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTQwLUxTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MzQwPWludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjM0MTppbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTM0Mi1pbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTY3NT1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC02NzktXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjY4MDpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC02ODEte1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy01OTgtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo1OTk6ICogc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSgpIC0gQ2hlY2sgaWYgaW50cm9zcGVjdGl2ZSBGT0xMX0ZPUkNFIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwMC0gKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwNy0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjYwODppbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwOS17XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo2MTA6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MTEtfVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNTQ9c3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNzAtICovXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNzE6c3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNzIte1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Nzk9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTg2LVxcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NTg3OlxcdExTTV9IT09LX0lOSVQoaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU4OC1cXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDoxMy4zNjYwMTc1OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxODExMzk1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGAvcHJvYy9waWQvbWVtYCBJbnRyb3NwZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIHByaW1hcmlseSBhbiBTRUxpbnV4IHRoaW5nLCBhdCBsZWFzdCBpbiB0ZXJtcyBvZiB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdHJpZ2dlcmluZyB0aGlzLiBZZXMsIGNvbmZpcm1lZCwgZm91bmQgaXQgaW4gYHNlY3VyaXR5L0tjb25maWdgLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvcmUgbG9naWMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGFjY2Vzc2VkLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBhIHByb2Nlc3MgdG8gYnlwYXNzIHRoZSB1c3VhbCBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpdCBpbnRyb3NwZWN0cyBpdHMgb3duIG1lbW9yeS4gVGhpcyBieXBhc3MgaXMgZ3JhbnRlZCBvbmx5IGlmIHRoZSBuZXcgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIExTTSBob29rIGFsbG93cyBpdC4gQW5kIHRoaXMgd2hvbGUgdGhpbmcgaXMgb25seSBhY3RpdmUgaWYgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBzb3VuZHMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBwcm9jZnMgYW5kLCBjcml0aWNhbGx5LCBTRUxpbnV4LCBhZmZlY3RpbmcgaG93IG1lbW9yeSBpbnRyb3NwZWN0aW9uIHZpYSBgL3Byb2Mvc2VsZi9tZW1gIHdvcmtzLlxuXG5JJ3ZlIGlkZW50aWZpZWQga2V5IHN5bWJvbHMgZm9yIGZ1enppbmc6IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIEFuZCwgdG8gbWFrZSBpdCB3b3JrLCBJIG5lZWQgdG8gZW5hYmxlIGBQUk9DX01FTV9BTFdBWVNfRk9SQ0VgIGFuZCBgU0VDVVJJVFlfU0VMSU5VWGAuXG5cbkhtbSwgSSBzZWUgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMgYSBub24taW5saW5lZCBmdW5jdGlvbiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNob3VsZCBJIGluY2x1ZGUgaXQgaW4gdGhlIGZ1enppbmcgc2NvcGU/IEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQganVzdCBkcm9wcyB0aGUgYG1tYCBhbmQgZnJlZXMgdGhlIGBtZW1fcHJpdmF0ZWAgc3RydWN0LlxuXG5gYGBjXG5zdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbntcblx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5cblx0bW1kcm9wKHByaXYtXHUwMDNlbW0pO1xuXHRrZnJlZShwcml2KTtcblx0cmV0dXJuIDA7XG59XG5gYGBcblxuSG93ZXZlciwgaXQncyBwYXJ0IG9mIHRoZSBuZXcgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIGBtZW1fcHJpdmF0ZWAuIEZ1enppbmcgdGhpcyBtaWdodCB1bmNvdmVyIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyBpZiB0aGVyZSdzIGFuIGlzc3VlIHdpdGggaG93IHRoZSBgbWVtX3ByaXZhdGVgIGlzIGFsbG9jYXRlZCBvciBkZWFsbG9jYXRlZC4gSSdsbCBhZGQgaXQgdG8gdGhlIGxpc3QuXG5cbldhaXQsIHdoYXQgYWJvdXQgYG1lbV9vcGVuYD8gVGhlcmUgYXJlIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucywgaXQncyBlYXN5IHRvIGNyZWF0ZSBpc3N1ZXMgd2l0aCBzeXprYWxsZXIgaWYgSSBqdXN0IHB1dCBgbWVtX29wZW5gLiBTaW5jZSB0aGUgcmVsZXZhbnQgYG1lbV9vcGVuYCBpbiBgZnMvcHJvYy9iYXNlLmNgIGlzIHN0YXRpYywgSSBjYW4ndCBqdXN0IHByb3ZpZGUgdGhlIGZ1bmN0aW9uIG5hbWUuIElmIEkgcHJvdmlkZSB0aGUgbmFtZSwgc3l6a2FsbGVyIG1pZ2h0IHRyeSB0byBmdXp6IHRoZSB3cm9uZyBvciBhbGwgaW5zdGFuY2VzIG9mIGBtZW1fb3BlbmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQgSSB3YW50LiBTbyBJIHdpbGwgYXZvaWQgYW55IGFtYmlndW91cyBmdW5jdGlvbiBuYW1lcy5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIGZ1enppbmcgaXM6XG4qICAgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgXG4qICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWBcbiogICBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYFxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGlzIHVuaXF1ZS4gWWVzLCBpdCdzIHRoZSBvbmx5IG9uZSBvZiBpdHMgbmFtZS5cblxuQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoZSByZWFzb25pbmcgaW50byBhIGNvbmNpc2UgYXJndW1lbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgbG9naWMgZm9yIGAvcHJvYy9waWQvbWVtYC4gU3BlY2lmaWNhbGx5LCBpdCBhbGxvd3MgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBUaGlzIGludHJvZHVjZXMgYSBuZXcgYG1lbV9wcml2YXRlYCBzdHJ1Y3QgdG8gdHJhY2sgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLiBJdCBhbHNvIGFkZHMgYSBuZXcgTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCksIHdoaWNoIGNvbnRyb2xzIHRoZSBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmF0ZWQgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBlbmFibGVkLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHByb2NmcyBhbmQgdGhlIHNlY3VyaXR5IHN1YnN5c3RlbSwgYW5kIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGZlYXR1cmUgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuXG5cblNvdW5kcyBzb2xpZC4gSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhpcyBwYXRjaCBhbmQgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwMCwiT3V0cHV0VG9rZW5zIjoyMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MjUuNTQ3MTYwMjA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1NTMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfTUVNX0FMV0FZU19GT1JDRVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VcIixcbiAgICBcInNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwic2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MjUuNjMwNzIxMDUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTQ3NDkxMTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjI1LjYzMTM4NDE4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NTQ3NDI0NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cXG5cXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgaXRzIFNFTGludXggaW1wbGVtZW50YXRpb24gYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IGlzIHBhc3NlZCBwdXJlbHkgYXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIHdoaWNoIHBvcHVsYXRlcyBpdC4gVGhlIGNvbnRlbnRzIG9mIGBhdmRgIGFyZSBub3QgZXZlbiByZWFkIGJ5IHRoZSBjYWxsZXIuXFxuXFxuU2luY2UgYWxsIGludHJvZHVjZWQgbWVtb3J5IGlzIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHVzZWQgc3RyaWN0bHkgYXMgb3V0cHV0IHBhcmFtZXRlcnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDBkYmM2NjYxNjgwMzEwMTM4ZjU0MDM2ZDA4MjE3MWRlZWViZDEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6MDk6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXG5pbmRleCA3ODBmODEyNTkwNTI3Li4zZGZhZWY0OWJiNzBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcbisrKyBiL2ZzL3Byb2MvYmFzZS5jXG5AQCAtODQ4LDE1ICs4NDgsMzIgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cbitzdHJ1Y3QgbWVtX3ByaXZhdGUge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHQvKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgYnlwYXNzZWQgZHVlIHRvIGludHJvc3BlY3Rpb24/ICovXG4rXHRib29sIGludHJvc3BlY3Rpb247XG4rfTtcbitcbiBzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtcbitcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuK1x0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2VtbSkpXG4rXHRcdHJldHVybiBwcml2LVx1MDAzZW1tID8gUFRSX0VSUihwcml2LVx1MDAzZW1tKSA6IC1FU1JDSDtcbitcdHByaXYtXHUwMDNlaW50cm9zcGVjdGlvbiA9IHByaXYtXHUwMDNlbW0gPT0gY3VycmVudC1cdTAwM2VtbTtcbitcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4gXHRib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTtcbiBcbkBAIC04NzMsNiArODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdH1cbiBcdFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAocHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uKVxuK1x0XHRcdHJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkKSA9PSAwO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiB9XG5AQCAtODgwLDcgKzg5OSw4IEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywgaW50IHdyaXRlKVxuIHtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2VtbTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xuIFx0c3NpemVfdCBjb3BpZWQ7XG4gXHRjaGFyICpwYWdlO1xuQEAgLTk3MCwxMiArOTkwLDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXG4rXHRtbWRyb3AocHJpdi1cdTAwM2VtbSk7XG4rXHRrZnJlZShwcml2KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuIFx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlayxcbiBcdC5yZWFkXHRcdD0gbWVtX3JlYWQsXG4gXHQud3JpdGVcdFx0PSBtZW1fd3JpdGUsXG4gXHQub3Blblx0XHQ9IG1lbV9vcGVuLFxuLVx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG4rXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4gXHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li42NzQ1MmY3MWJlZGZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMzYsNiArMzYsNyBAQCBMU01fSE9PSyhpbnQsIDAsIGJpbmRlcl90cmFuc2Zlcl9maWxlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsXG4gXHQgdW5zaWduZWQgaW50IG1vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfdHJhY2VtZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4rTFNNX0hPT0soaW50LCAwLCBpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0IGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxuIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uZjg0ODNiZTU4YmM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtMzM4LDYgKzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgKzY3NywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0XHQgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCA3MWFlYThmZGYwMTQyLi5kMGY3OTBhNTM0ZWIwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTU5NSw2ICs1OTUsMjEgQEAgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0cmV0dXJuIGNhbGxfaW50X2hvb2socHRyYWNlX3RyYWNlbWUsIHBhcmVudCk7XG4gfVxuIFxuKy8qKlxuKyAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIG9mIHRoZSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeVxuKyAqXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5LCB3aGljaFxuKyAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay5cbisgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy5cbisgKlxuKyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbisgKi9cbitpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbit7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0KTtcbit9XG4rXG4gLyoqXG4gICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzXG4gICogQHRhcmdldDogdGFyZ2V0IHByb2Nlc3NcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDE4ZGQyOGIyYmIxM2QuLjkwNTEzN2M0NzMyMTcgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTIxNTcsNiArMjE1NywzMiBAQCBzdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRcdFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XG4gfVxuIFxuKy8qXG4rICogRGVjaWRlIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlYWQgbm9uLXJlYWRhYmxlIFZNQXMgYW5kIHdyaXRlXG4rICogbm9uLXdyaXRhYmxlIFZNQXMgdmlhIC9wcm9jL3NlbGYvbWVtLlxuKyAqIFRoaXMgb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHlcbisgKiB0cmlnZ2VycyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0byBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKS5cbisgKlxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuKyAqXG4rICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2Vzbid0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJ3RcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbisgKi9cbitzdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbit7XG4rXHRzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkO1xuK1x0aW50IHJjO1xuK1x0dTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpO1xuK1xuK1x0LyogQWxsb3cgaWYgdGhlIHByb2Nlc3MgaXMgZ2VuZXJhbGx5IGFsbG93ZWQgdG8gaGF2ZSBleGVjdXRhYmxlIGFub255bW91cyBtZW1vcnkuICovXG4rXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcdTAwMjZhdmQpO1xuK1xuK1x0LyogQWxzbyBhbGxvdyBpZiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSB3b3VsZCBhbGxvdyBpdC4gKi9cbitcdGlmIChyYylcbitcdFx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcdTAwMjZhdmQpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbiBzdGF0aWMgaW50IHNlbGludXhfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0XHQgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxuIHtcbkBAIC03NTU4LDYgKzc1ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuIFxuIFx0TFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLFxuIFx0TFNNX0hPT0tfSU5JVChwdHJhY2VfdHJhY2VtZSwgc2VsaW51eF9wdHJhY2VfdHJhY2VtZSksXG4rXHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjI1LjYzMTM4NTE2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUyNzk3NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYC9wcm9jL3BpZC9tZW1gIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgY2xlYXJseSBhbHRlcmluZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGhhbmRsZWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGludHJvZHVjaW5nIGEgbmV3IGRhdGEgc3RydWN0dXJlLCBgc3RydWN0IG1lbV9wcml2YXRlYC4gVGhpcyBzdHJ1Y3QgaXMgZ29pbmcgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIGBtbV9zdHJ1Y3RgIGFuZCBhIGJvb2xlYW4gZmxhZyBjYWxsZWQgYGludHJvc3BlY3Rpb25gLiBJbnRlcmVzdGluZywgSSB3b25kZXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGF0IGZsYWcgaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGFsbG9jYXRpb24gaGFwcGVucyB3aXRoaW4gYG1lbV9vcGVuYCwgdXNpbmcgYGttYWxsb2Nfb2JqYC4gTm93LCBga21hbGxvY19vYmpgLi4uIHRoYXQncyBub3Qgc3RhbmRhcmQsIGlzIGl0PyBJJ20gZmFtaWxpYXIgd2l0aCBga21hbGxvY2AsIGBremFsbG9jYC4uLiBJICpzdXNwZWN0KiBpdCdzIGEgbWFjcm8gb3IgYSB3cmFwcGVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHByb2JhYmx5IGVxdWl2YWxlbnQgdG8gYGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZW1fcHJpdmF0ZSksIEdGUF9LRVJORUwpYCwgYnV0IHRoZSBzeW50YXggaXMgdGhyb3dpbmcgbWUgYSBiaXQuIFdhaXQsIHRoZSBjb2RlIGRlY2xhcmVzOiBgc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO2AgQWgsIHRoZSBgX19mcmVlKGtmcmVlKWAgYXR0cmlidXRlIGlzIGludGVyZXN0aW5nLCB0aGF0IGhlbHBzIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgd2lsbCBiZSBkZWFsbG9jYXRlZC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IGBrbWFsbG9jX29iamAgaXMgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGl0IGp1c3QgdG8gbWFrZSBzdXJlLiBJJ20gYmV0dGluZyBpdCdzIGEgbG9jYWwgbWFjcm8gb2Ygc29tZSBzb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDIwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MzAuNTg0MTg1NTc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNjQ0MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU1MDIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMDM9bm9uLVxcXFwgYGBOVUxMYGAsIGxvY2tsZXNzbHkgYWNjZXNzaW5nIHRoZSBgYC1cXHUwMDNlYWBgIGFuZCBgYC1cXHUwMDNlYmBgIGZpZWxkcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMDgtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMDk6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMTAtICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjI1PXRoZWlyIHJpZ2h0cyB0byByZW9yZGVyIHRoaXMgY29kZSBhcyBmb2xsb3dzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMC0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIzMTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMi0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yNjE9c2hvd3MgYW4gZXhhbXBsZSBvZiBpbnNlcnRpb246XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY2LSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjY3OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY4LSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q9MjY3PVRoZSBSQ1UgdmVyc2lvbiBvZiBhdWRpdF91cGRfcnVsZSgpIGlzIGFzIGZvbGxvd3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjc4LVxcdFxcdFxcdGlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsIFxcdTAwMjZlLVxcdTAwM2VydWxlKSkge1xcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0OjI3OTpcXHRcXHRcXHRcXHRuZSA9IGttYWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjgwLVxcdFxcdFxcdFxcdGlmIChuZSA9PSBOVUxMKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD00NDE9dXNlcyBvZiBSQ1UgbWF5IGJlIGZvdW5kIGluIGxpc3RSQ1UucnN0IGFuZCBOTUktUkNVLnJzdC5cXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcwLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NDcxOlxcdFxcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcyLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Zm9vX211dGV4KTtcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NTUzPVRoZSBmb29fdXBkYXRlX2EoKSBmdW5jdGlvbiBtaWdodCB0aGVuIGJlIHdyaXR0ZW4gYXMgZm9sbG93czo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3Mi1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjU3MzpcXHRcXHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3NC1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmZvb19tdXRleCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTM5PWtyZWZfaW5pdCBhcyBzbzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQyLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6NDM6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDQtICAgICBpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTgxPXRocmVhZCB0byBwcm9jZXNzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTAyLVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjEwMzpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTA0LVxcdGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9MzgzPXRvIHByb3RlY3QgdGhlIGNhY2hlIGFuZCBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGl0LiBIZXJlJ3MgdGhlIGNvZGU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDQtXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NDU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00OTk9d2hpY2ggYXJlIHRha2VuIGF3YXksIGFuZCB0aGUgYGArYGAgYXJlIGxpbmVzIHdoaWNoIGFyZSBhZGRlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTE5LVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTIwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTIxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk4PXdvcmtzIHBlcmZlY3RseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDAtICByYXdfc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTUwNz1wcmVlbXB0aW9uIG9uIFBSRUVNUFRfUlQga2VybmVsczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDktICBzcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUxMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTExLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIHBhc3NpbmcgYSBzaXplIG9mIGEgc3RydWN0IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ4OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTg9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGFuIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTYyOlxcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM4Nj1tYXkgaGVscCB3aXRoIGFsaWdubWVudCwgd3JhcC1hcm91bmQsIG9yIGFkZGl0aW9uYWwgaGFyZGVuaW5nLiBUaGVcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6Mzg3OmttYWxsb2Nfb2JqKCktZmFtaWx5IG9mIG1hY3JvcyBwcm92aWRlIHRoaXMgaW50cm9zcGVjdGlvbiwgd2hpY2ggY2FuIGJlXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM4OC11c2VkIGZvciB0aGUgY29tbW9uIGNvZGUgcGF0dGVybnMgZm9yIHNpbmdsZSwgYXJyYXksIGFuZCBmbGV4aWJsZSBvYmplY3RcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zOTktXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMDpcXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAxLVxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDA1OlxcdF9fYXV0b190eXBlIHB0ciA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmb28gWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MTczND1jYWxsYmFjazo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTczOS0gICAgICAgICAgLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoxNzQwOiAgICAgICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzQxLSAgICAgICAgICBzdWJzdHJlYW0tXFx1MDAzZXJ1bnRpbWUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IGRhdGE7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzMwMj1kZXN0cnVjdG9yIGZ1bmN0aW9uIGlzIHNldCBpbiB0aGUgYGBwcml2YXRlX2ZyZWVgYCBmaWVsZDo6XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDMtXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjMzMDQ6ICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzA1LSAgaHctXFx1MDAzZXByaXZhdGVfZGF0YSA9IHA7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q9MjQyPUFuZCBTT0Mtc3BlY2lmaWMgdXRpbGl0eSBjb2RlIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1MS1cXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q6MjUyOlxcdFxcdHBkYXRhMiA9IGttYWxsb2Nfb2JqKCpwZGF0YTIpO1xcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTMtXFx0XFx0KnBkYXRhMiA9IHBkYXRhO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDAzPWUgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGNvbnRpZW5lLiBFY2NvIGlsIGNvZGljZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDY1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD01MTk9c29ubyBxdWVsbGUgcmltb3NzZSwgbWVudHJlIHF1ZWxsZSBgYCtgYCBzb25vIHF1ZWxsZSBhZ2dpdW50ZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUzOS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1NDA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTQxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ4OD1tZW1vcmlhLiBTdSB1biBrZXJuZWwgbm9uLVBSRUVNUFRfUlQgaWwgc2VndWVudGUgY29kaWNlIGZ1bnppb25hIHBlcmZldHRhbWVudGU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5MC0gIHJhd19zcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo0OTE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk3PVBSRUVNUFRfUlQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5OS0gIHNwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDI9SWwgbW9kbyBwcmVmZXJpdG8gcGVyIHBhc3NhcmUgbGEgZGltZW5zaW9uZSBkaSB1bmEgc3RydXR0dXJhIMOoIGlsIHNlZ3VlbnRlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ2OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1ND1MYSBmb3JtYSBwcmVmZXJpZGEgcGFyYSBwYXNhciBlbCB0YW1hw7FvIGRlIHVuYSBlc3RydWN0dXJhIGVzIGxhIHNpZ3VpZW50ZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTctXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk1ODpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTQ2PWtyZWblj6/ku6Xlh7rnjrDlnKjmlbDmja7nu5PmnoTkvZPkuK3nmoTku7vkvZXlnLDmlrnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjU1OiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01Ni0gICAgIGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTYyPUtyZWbop4TliJlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTEwOC1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6MTA5OlxcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTEwLVxcdGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MTA9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODE2OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgyND1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODI5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MzA6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MzEtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTg1Nz1tYXJ2ZWxfYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2My1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjg2NDpcXHRhcGVyID0ga21hbGxvY19vYmooKmFwZXIpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODY1LVxcdGlmIChhcGVyID09IE5VTEwpIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz0xMDE5PW1hcnZlbF9hZ3BfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYxLVxcdCAqL1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6MTA2MjpcXHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjMtXFx0aWYgKCFhZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NTkwPXRpdGFuX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5Ni1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NTk3OlxcdGFwZXIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdGl0YW5fYWdwX2FwZXJ0dXJlKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk4LVxcdGlmIChhcGVyID09IE5VTEwpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NzMxPXRpdGFuX2FncF9pbmZvKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzYyLVxcdCAqL1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo3NjM6XFx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2NC1cXHRpZiAoIWFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTI5PXByb2Nlc3NfcmVsb2NfZm9yX2dvdChFbGY2NF9SZWxhICpyZWxhLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNDgtXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6NDk6XFx0ZyA9IGttYWxsb2Nfb2JqKCpnKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy01MC1cXHRnLVxcdTAwM2VuZXh0ID0gY2hhaW5zW3Jfc3ltXS5uZXh0O1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9MjExPXN0YXRpYyB2b2lkIHBkZXZfc2F2ZV9zcm1fY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjMtXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6MjI0OlxcdHRtcCA9IGttYWxsb2Nfb2JqKCp0bXApO1xcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyNS1cXHRpZiAoIXRtcCkge1xcbi0tXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jPTM1OT12b2lkICp1bndpbmRfYWRkX3RhYmxlKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgY29uc3Qgdm9pZCAqdGFibGVfc3RhcnQsXFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzY4LVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYzozNjk6XFx0dGFibGUgPSBrbWFsbG9jX29iaigqdGFibGUpO1xcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNzAtXFx0aWYgKCF0YWJsZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yNzQ9c3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yNzktXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjI4MDpcXHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IGxvY29tb19zYXZlX2RhdGEpO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yODEtXFx0aWYgKCFzYXZlKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTk2ND1zdGF0aWMgaW50IHNhMTExMV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzEtXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjk3MjpcXHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IHNhMTExMV9zYXZlX2RhdGEpO1xcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzMtXFx0aWYgKCFzYXZlKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jPTU3Mj1zdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmRfdGFibGVfYWRkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzYtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM6NTc3OlxcdHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYiA9IGttYWxsb2Nfb2JqKCp0YWIpO1xcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzgtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYz01Mz1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfZ2V0X3B3cmRtKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYzoxMDI6XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMy1cXHRpZiAoZW50cnkpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxMi1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jOjQxMzpcXHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTQtXFx0aWYgKCFwd3JzdClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM9MTEzPXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jOjEzNTpcXHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzYtXFx0aWYgKCFwd3JzdClcXG4tLVxcbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcXG5hcmNoL2FybS9tbS9wZ2QuYzoyMDojZGVmaW5lIF9wZ2RfYWxsb2MobW0pXFx0XFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxcbmFyY2gvYXJtL21tL3BnZC5jLTIxLSNkZWZpbmUgX3BnZF9mcmVlKG1tLCBwZ2QpXFx0a2ZyZWUocGdkKVxcbi0tXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM9NzY0PXN0YXRpYyBpbnQgY292ZXJhZ2Vfc3RhcnQoY29uc3QgdW5pb24gZGVjb2RlX2l0ZW0gKnRhYmxlKVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2OlxcdGNvdmVyYWdlLmJhc2UgPSBrbWFsbG9jX29ianMoc3RydWN0IGNvdmVyYWdlX2VudHJ5LFxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cXHRcXHRcXHRcXHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9Nzc0PXZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg2LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6Nzg3OlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4OC1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MTAyPXN0YXRpYyB2b2lkICp2Z2ljX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDYtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6MTA3OlxcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA4LVxcdGlmICghaXRlcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTM2ND1zdGF0aWMgdm9pZCAqdmdpY19pdHNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzozNzg6XFx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzktXFx0aWYgKCFpdGVyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz03NDM9dm9pZCBfX2luaXQgdmdpY19zZXRfa3ZtX2luZm8oY29uc3Qgc3RydWN0IGdpY19rdm1faW5mbyAqaW5mbylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ1LVxcdEJVR19PTihnaWNfa3ZtX2luZm8gIT0gTlVMTCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo3NDY6XFx0Z2ljX2t2bV9pbmZvID0ga21hbGxvY19vYmooKmdpY19rdm1faW5mbyk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDctXFx0aWYgKGdpY19rdm1faW5mbylcXG4tLVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jPTk3PXN0YXRpYyBpbnQgX19pbml0IG5maGRfaW5pdF9vbmUoaW50IGlkLCB1MzIgYmxvY2tzLCB1MzIgYnNpemUpXFxuLS1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTQtXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM6MTE1OlxcdGRldiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZmhkX2RldmljZSk7XFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE2LVxcdGlmICghZGV2KVxcbi0tXFxuYXJjaC9tNjhrL21tL2ttYXAuYz0xMDg9c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF9pb19hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTEyLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmM6MTEzOlxcdGFyZWEgPSBrbWFsbG9jX29iaigqYXJlYSk7XFxuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTQtXFx0aWYgKCFhcmVhKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MjUzPXUzMiBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyh1MzIgc3JjaWQsIHUzMiBkZXN0aWQsXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTItXFx0XFx0XFx0ICovXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6MzEzOlxcdFxcdFxcdGN0cCA9IGttYWxsb2Nfb2JqKGNoYW5fdGFiX3QsIEdGUF9BVE9NSUMpO1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxNC1cXHRcXHRcXHRjaGFuX3RhYl9wdHJbaV0gPSBjdHA7XFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjQxNTpcXHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM9NTk9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdTMyICpsb2NhdGlvbiwgRWxmX0FkZHIgdixcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzQtXFx0ICovXFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYzo3NTpcXHRuID0ga21hbGxvY19vYmooKm4pO1xcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzYtXFx0aWYgKCFuKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYz0zMTE9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdWludDMyX3QgKmxvY2F0aW9uLFxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjAtXFx0ICovXFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYzozMjE6XFx0biA9IGttYWxsb2Nfb2JqKCpuKTtcXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMi1cXHRpZiAoIW4pXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9MTg4PXBhdF9xdWVyeV9tb2R1bGUodWxvbmcgcGNlbGxfbG9jLCB1bG9uZyBtb2RfaW5kZXgpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk1LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzoxOTY6XFx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTctXFx0aWYgKCFwYV9wZGNfY2VsbClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz01MzI9YWRkX3N5c3RlbV9tYXBfYWRkcmVzc2VzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsIGludCBudW1fYWRkcnMsIFxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6NTM5OlxcdGRldi1cXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVxcdTAwM2VhZGRyLCBudW1fYWRkcnMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXFx0aWYoIWRldi1cXHUwMDNlYWRkcikge1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jPTgxPXN0YXRpYyBpbnQgX19pbml0IHByb2Nlc3Nvcl9wcm9iZShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExMi1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM6MTEzOlxcdFxcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTE0LVxcdFxcdGlmICghcGFfcGRjX2NlbGwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9MTQ5PXVud2luZF90YWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIFxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE1OS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6MTYwOlxcdHRhYmxlID0ga21hbGxvY19vYmooc3RydWN0IHVud2luZF90YWJsZSwgR0ZQX1VTRVIpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNjEtXFx0aWYgKHRhYmxlID09IE5VTEwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9NDA2PXZvaWQgdW53aW5kX2ZyYW1lX2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEwLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzo0MTE6XFx0cjIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHRfcmVncywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMi1cXHRpZiAoIXIyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jPTk4ND1pbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzItXFx0XFx0fVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYzoxMDMzOlxcdFxcdHRtcF9wYXJ0ID0ga21hbGxvY19vYmooKnRtcF9wYXJ0KTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzNC1cXHRcXHRlcnIgPSAtRU5PTUVNO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc0LVxcdFxcdCAgICBjZmctXFx1MDAzZWFycmF5IC8gUEFHRV9TSVpFO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XFx0cGFnZXMgPSBrbWFsbG9jX29ianMoKnBhZ2VzLCBudW1fcGFnZXMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzYtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz04OTg9aW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo5MTU6XFx0dmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2ggPSBrbWFsbG9jX29ianMoKnZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoLFxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXFx0XFx0XFx0XFx0XFx0ICAgIEtWTV9FNTAwX1RMQjBfU0laRSArIEtWTV9FNTAwX1RMQjFfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU2LVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcXHRibG9jayA9IGttYWxsb2Nfb2JqcyhyaF9ibG9ja190LCBtYXhfYmxvY2tzLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTgtXFx0aWYgKGJsb2NrID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9MjUzPXJoX2luZm9fdCAqcmhfY3JlYXRlKHVuc2lnbmVkIGludCBhbGlnbm1lbnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYwLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzoyNjE6XFx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYyLVxcdGlmIChpbmZvID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYz05NT1zdGF0aWMgaW50IGhhc2hfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy05OC1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzo5OTpcXHRtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaGFzaF9tbV9jb250ZXh0KTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMDAtXFx0aWYgKCFtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjUtXFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0KSB7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6MTI2OlxcdFxcdFxcdG1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0ID0ga21hbGxvY19vYmooc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI3LVxcdFxcdFxcdGlmICghbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVxcdTAwM2VzcHQpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz02MjM9c3RhdGljIGludCBldmVudF91bmlxX2FkZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1MC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6NjUxOlxcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1Mi1cXHRpZiAoIWRhdGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NzU1PXN0YXRpYyBpbnQgY3JlYXRlX2V2ZW50c19mcm9tX2NhdGFsb2coc3RydWN0IGF0dHJpYnV0ZSAqKipldmVudHNfLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkwOC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTA5OlxcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXFx0aWYgKCFldmVudHMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkxNTpcXHRldmVudF9kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTYtXFx0aWYgKCFldmVudF9kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlxcdGV2ZW50X2xvbmdfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2xvbmdfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjItXFx0aWYgKCFldmVudF9sb25nX2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jPTEyMj1zdGF0aWMgaW50IGhzdGFfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jOjE1NDpcXHRwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCA9IGttYWxsb2Nfb2JqcyhpbnQsIGlycV9jb3VudCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXFx0aWYgKCFwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz00ND1zdGF0aWMgaW50IHNwdWZzX2F0dHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNDktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzo1MDpcXHRhdHRyID0ga21hbGxvY19vYmooKmF0dHIpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNTEtXFx0aWYgKCFhdHRyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM9NjI4PXZvaWQgcXVldWVfaG90cGx1Z19ldmVudChzdHJ1Y3QgcHNlcmllc19ocF9lcnJvcmxvZyAqaHBfZXJybG9nKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM2LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jOjYzNzpcXHR3b3JrID0ga21hbGxvY19vYmooc3RydWN0IHBzZXJpZXNfaHBfd29yaywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM4LVxcdGlmICh3b3JrKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM9MTE5PWludCBodmNzX2dldF9wYXJ0bmVyX2luZm8odWludDMyX3QgdW5pdF9hZGRyZXNzLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2Mi1cXHRcXHQgKiBodmNzX2ZyZWVfcGFydG5lcl9pbmZvKCkuICovXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jOjE2MzpcXHRcXHRuZXh0X3BhcnRuZXJfaW5mbyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBodmNzX3BhcnRuZXJfaW5mbyxcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTY0LVxcdFxcdFxcdFxcdFxcdFxcdEdGUF9BVE9NSUMpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYz0xNDQ9c3RhdGljIHZvaWQgc2hvd19ncGNpX2RhdGEoc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNDktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYzoxNTA6XFx0YnVmID0ga21hbGxvY19vYmooKmJ1Zik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNTEtXFx0aWYgKGJ1ZiA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jPTQzNT1zdGF0aWMgaW50IHBzZXJpZXNfbXNpX29wc19wcmVwYXJlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDMtXFx0c3RydWN0IHBzZXJpZXNfbXNpX2RldmljZSAqcHNlcmllc19kZXYgX19mcmVlKGtmcmVlKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYzo0NDQ6XFx0XFx0PSBrbWFsbG9jX29iaigqcHNlcmllc19kZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDUtXFx0aWYgKCFwc2VyaWVzX2RldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYz0xMjA9c3RhdGljIGludCBwc2VyaWVzX3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBudW1fdmZzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cXHRwZG4gPSBwY2lfZ2V0X3BkbihwZGV2KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM6MTQ0OlxcdHBkbi1cXHUwMDNlcGVfbnVtX21hcCA9IGttYWxsb2Nfb2JqcygqcGRuLVxcdTAwM2VwZV9udW1fbWFwLCBudW1fdmZzKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVxcdGlmICghcGRuLVxcdTAwM2VwZV9udW1fbWFwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jPTEwNzY9c3RhdGljIGludCBfX2luaXQgcHNlcmllc192YXNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwODktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jOjEwOTA6XFx0aHZfY2FwcyA9IGttYWxsb2Nfb2JqKCpodl9jYXBzKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA5MS1cXHRpZiAoIWh2X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM9NzA1PXN0YXRpYyBpbnQgdmlvX2Ntb19idXNfcHJvYmUoc3RydWN0IHZpb19kZXYgKnZpb2RldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDctXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jOjc0ODpcXHRcXHRkZXZfZW50ID0ga21hbGxvY19vYmooc3RydWN0IHZpb19jbW9fZGV2X2VudHJ5KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ5LVxcdFxcdGlmICghZGV2X2VudClcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jPTM1Mj1zdGF0aWMgaW50IGZzbF9sYmNfc3lzY29yZV9zdXNwZW5kKHZvaWQgKmRhdGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjQtXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM6MzY1OlxcdGN0cmwtXFx1MDAzZXNhdmVkX3JlZ3MgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZnNsX2xiY19yZWdzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjYtXFx0aWYgKCFjdHJsLVxcdTAwM2VzYXZlZF9yZWdzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM9MTU0OT12b2lkIF9faW5pdCBtcGljX2luaXQoc3RydWN0IG1waWMgKm1waWMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVxcdC8qIGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIG1waWMgc3RhdGUgKi9cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYzoxNjQyOlxcdG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9IGttYWxsb2Nfb2JqcygqbXBpYy1cXHUwMDNlc2F2ZV9kYXRhLCBtcGljLVxcdTAwM2VudW1fc291cmNlcyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0My1cXHRCVUdfT04obXBpYy1cXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYz0yMz12b2lkIF9faW5pdCBvZl9pbnN0YW50aWF0ZV9ydGModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzUtXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYzozNjpcXHRcXHRcXHRyZXMgPSBrbWFsbG9jX29iaigqcmVzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM3LVxcdFxcdFxcdGlmICghcmVzKSB7XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYz02NTQ9c3RhdGljIGludCBhZGRfcmVsb2NhdGlvbl90b19hY2N1bXVsYXRlKHN0cnVjdCBtb2R1bGUgKm1lLCBpbnQgdHlwZSxcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2NS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo2NjY6XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2Ny1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY5OS1cXHRpZiAoIWZvdW5kKSB7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzAwOlxcdFxcdHJlbF9oZWFkID0ga21hbGxvY19vYmooKnJlbF9oZWFkKTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MDEtXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MTEtXFx0XFx0XFx0YnVja2V0ID1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MTI6XFx0XFx0XFx0XFx0a21hbGxvY19vYmooc3RydWN0IHVzZWRfYnVja2V0KTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MzIuMjk2ODQ3MjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NDQ1MTI0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGttYWxsb2Nfb2JqYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBtYWNybyBzaG9ydGhhbmQgZm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhbiBvYmplY3QgdXNpbmcgYGttYWxsb2NgLiBJdCBsb29rcyBsaWtlIGl0J3MgbWVhbnQgdG8gcmVwbGFjZSBga21hbGxvYyhzaXplb2Yoc3RydWN0IGZvbyksIEdGUF9LRVJORUwpYC4gIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbmV3IG1hY3JvIHplcm9lcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gIFNpbmNlIHBsYWluIGBrbWFsbG9jYCBkb2Vzbid0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrbWFsbG9jX29iamAgKmRvZXNuJ3QqIHplcm8gaXQgZWl0aGVyLiAgTXkgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBhc3N1bXB0aW9uLiBUaGlzIG1lYW5zIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIG9iamVjdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuTm93LCBsZXQncyBsb29rIGF0IGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoZSBwYXRjaCBhbGxvY2F0ZXMgYSBgc3RydWN0IG1lbV9wcml2YXRlYC4gIEkgc2VlIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgYHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtgLCBhbmQgdGhlbiB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIGhvdyB0aGF0IG1lbW9yeSBpcyAqdXNlZCouIFRoZSBmaWVsZHMgYG1tYCBhbmQgYGludHJvc3BlY3Rpb25gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kLlxuXG5MZXQncyBleGFtaW5lIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmOiBgc3RydWN0IG1tX3N0cnVjdCAqbW07YCBpcyBhbiA4LWJ5dGUgcG9pbnRlciwgYW5kIGBib29sIGludHJvc3BlY3Rpb247YCBpcyAxIGJ5dGUsIHNvIHRoZXJlIGFyZSA3IGJ5dGVzIG9mIHBhZGRpbmcuIE15IGNvbmNlcm4gaGVyZSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZD9cblxuSSBjaGVja2VkIHdoZXJlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIHVzZWQuIEl0J3Mgc3RvcmVkIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIEl0J3MgYWNjZXNzZWQgaW4gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiAgQ3J1Y2lhbGx5LCBpdCBpcyBub3QgKmNvcGllZCogdG8gdXNlciBzcGFjZSBpbiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBhIHNlY3VyaXR5IGlzc3VlIHNpbmNlIHRoZXkgYXJlIG5vdCBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB0aGUgdXNlci4gVGhlIGZpZWxkcyBgbW1gIGFuZCBgaW50cm9zcGVjdGlvbmAgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCBpcyBzdWZmaWNpZW50LlxuXG5Pa2F5LCBsZXQncyBicm9hZGVuIG15IHZpZXcgdG8gb3RoZXIgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLiBJIHNlZSBuZXcgTFNNIGhvb2tzIGJlaW5nIGludHJvZHVjZWQuICBUaGUgYWRkaXRpb24gb2YgYGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaXMgdGhlIGNyaXRpY2FsIG5ldyBhZGRpdGlvbi4gSSdtIG5vdGluZyB0aGUgbmV3IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgdGhlIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9ucy5cblxuTXkgaW50ZXJlc3Qgbm93IHR1cm5zIHRvIGhvdyB0aGVzZSBob29rcyBhcmUgYmVpbmcgaW1wbGVtZW50ZWQuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIHVzZXMgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YC4gVGhlIGNvZGUgY2FsbHMgaXQgd2l0aCBhbiBgXHUwMDI2YXZkYCBhcmd1bWVudCwgaW5kaWNhdGluZyBpdCdzIGEgcG9pbnRlciB0byBhbiBgYXZfZGVjaXNpb25gIHN0cnVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBhdmRgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCwgYW5kIGxvb2sgaW50byB0aGUgc2lnbmF0dXJlcyBhbmQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMyNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6NDUuMjQxMzYzMzY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI1MDMzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF2Y19oYXNfcGVybV9ub2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvYXZjLmM9OTU0PWludCBhdmNfc3NfcmVzZXQodTMyIHNlcW5vKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODItICpcXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjk4MzogKiBTbG93LXBhdGggaGVscGVyIGZ1bmN0aW9uIGZvciBhdmNfaGFzX3Blcm1fbm9hdWRpdCwgd2hlbiB0aGUgYXZjX25vZGUgbG9va3VwXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODQtICogZmFpbHMuICBEb24ndCBpbmxpbmUgdGhpcywgc2luY2UgaXQncyB0aGUgc2xvdy1wYXRoIGFuZCBqdXN0IHJlc3VsdHMgaW4gYVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMDE5PWludCBhdmNfaGFzX2V4dGVuZGVkX3Blcm1zKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEwNS0gKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEwNjogKiBUaGlzIGlzIHRoZSBcXFwid2UgaGF2ZSBubyBub2RlXFxcIiBwYXJ0IG9mIGF2Y19oYXNfcGVybV9ub2F1ZGl0KCksIHdoaWNoIGlzXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA3LSAqIHVubGlrZWx5IGFuZCBuZWVkcyBleHRyYSBzdGFjayBzcGFjZSBmb3IgdGhlIG5ldyBub2RlIHRoYXQgd2UgZ2VuZXJhdGUsIHNvXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExMTA9c3RhdGljIG5vaW5saW5lIGludCBhdmNfcGVybV9ub25vZGUodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTI1LS8qKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEyNjogKiBhdmNfaGFzX3Blcm1fbm9hdWRpdCAtIENoZWNrIHBlcm1pc3Npb25zIGJ1dCBwZXJmb3JtIG5vIGF1ZGl0aW5nLlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEyNy0gKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE0NC0gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExNDU6aW5saW5lIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVxcdFxcdFxcdFxcdHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExODk9aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExOTQtXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTk1OlxcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIDAsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk2LVxcdFxcdFxcdFxcdCAgXFx1MDAyNmF2ZCk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTY0MT1zdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTY2NjpcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2Ny1cXHRpZiAoIShvcHRzIFxcdTAwMjYgQ0FQX09QVF9OT0FVRElUKSkge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNzE9c3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3Ny1cXHQvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE3ODpcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3OS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTgxLVxcdGlmIChyYylcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE4MjpcXHRcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsIFxcdTAwMjZhdmQpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTgzLVxcdHJldHVybiByYztcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMjY5PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwNS1cXHRcXHQvKiBDYWNoZSBtaXNzLiAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMzA2OlxcdFxcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBpc2VjLVxcdTAwM2VzaWQsIGlzZWMtXFx1MDAzZXNjbGFzcyxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwNy1cXHRcXHRcXHRcXHRcXHQgIHBlcm1zLCAwLCBhdmRwKTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMDE9aW50IHNsb3dfYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwgdTMyIGF1ZGl0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTEwLSAqIEBhdmQ6IGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjExMTogKiBAcmVzdWx0OiByZXN1bHQgZnJvbSBhdmNfaGFzX3Blcm1fbm9hdWRpdFxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTItICogQGE6ICBhdXhpbGlhcnkgYXVkaXQgZGF0YVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExNi0gKiBhdmNfaGFzX3Blcm0oKSBhZnRlciBhIHBlcm1pc3Npb24gY2hlY2ssIGJ1dCBjYW4gYWxzbyBiZVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTc6ICogY2FsbGVkIGRpcmVjdGx5IGJ5IGNhbGxlcnMgd2hvIHVzZSBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExOC0gKiBpbiBvcmRlciB0byBzZXBhcmF0ZSB0aGUgcGVybWlzc2lvbiBjaGVjayBmcm9tIHRoZSBhdWRpdGluZy5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMjM9c3RhdGljIGlubGluZSBpbnQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzYtI2RlZmluZSBBVkNfRVhURU5ERURfUEVSTVMgMiAvKiB1cGRhdGUgZXh0ZW5kZWQgcGVybWlzc2lvbnMgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg6MTM3OmludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTEzOC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjQ2Ljg2NjQwODIwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyOTUwMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBoeXBvdGhldGljYWwgZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBgYXZjX2hhc19wZXJtX25vYXVkaXRgJ3MgSW50ZXJhY3Rpb24gd2l0aCBgYXZkYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFNFTGludXggYWNjZXNzIHZlY3RvciBjYWNoZSAoQVZDKSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyBgYXZjX2hhc19wZXJtX25vYXVkaXRgIGluIGBzZWN1cml0eS9zZWxpbnV4L2F2Yy5jYCBhY3R1YWxseSAqdXNlcyogdGhlIGBhdmRgIHN0cnVjdHVyZS4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHVwZGF0aW5nIGl0LCBlZmZlY3RpdmVseSB3cml0aW5nIGluZm9ybWF0aW9uPyBPciBpcyBpdCBhY3R1YWxseSByZWFkaW5nIGRhdGEgZnJvbSB0aGUgYGF2ZGAgdG8gcGVyZm9ybSBzb21lIGtpbmQgb2YgY2hlY2sgb3IgZGVjaXNpb24tbWFraW5nIHByb2Nlc3M/IFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIGRhdGEgZmxvd3MgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEFWQy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbXBvcnRhbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIHRvbyEgVW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgZGF0YSBnb2VzLCBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbSBpcyBwYXJhbW91bnQgdG8gZmluZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHNjYW4sIGJ1dCBwcmVjaXNpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE2OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjUwLjQxOTM2MTUxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMjQ2OTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmxpbmUgaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTExMD1zdGF0aWMgbm9pbmxpbmUgaW50IGF2Y19wZXJtX25vbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExNDQtICovXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTQ1OmlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE0Ni1cXHRcXHRcXHRcXHR1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDo1Mi4xMjE4MzgyNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NzA2Nzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBBVkMuYyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgc2VjdXJpdHkvc2VsaW51eC9hdmMuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTQ1LiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIGFjY2VzcyB2ZWN0b3IgY2FjaGUgKEFWQykgaGFuZGxpbmcsIG1heWJlIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gVGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gaGFzIGhpc3RvcmljYWxseSBiZWVuIHByb25lIHRvIHN1YnRsZSBpc3N1ZXMsIGFuZCB0aGUgc3ltcHRvbXMgSSdtIGNoYXNpbmcgYXJlIGxlYWRpbmcgbWUgaW4gdGhpcyBkaXJlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoZSBBVkMgY2FjaGUgbG9va3VwIGFuZCBpbnZhbGlkYXRpb24uIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZS4gSSdsbCBmb2N1cyBvbiB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6NTUuNjA4OTA5Mzg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzZWN1cml0eS9zZWxpbnV4L2F2Yy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0ICogb3RoZXIgZXJyb3JzLiAgVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGJ5IGF2Y19oYXNfcGVybSgpLFxcbjExNDE6XFx0ICogYnV0IG1heSBhbHNvIGJlIGNhbGxlZCBkaXJlY3RseSB0byBzZXBhcmF0ZSBwZXJtaXNzaW9uIGNoZWNraW5nIGZyb21cXG4xMTQyOlxcdCAqIGF1ZGl0aW5nLCBlLmcuIGluIGNhc2VzIHdoZXJlIGEgbG9jayBtdXN0IGJlIGhlbGQgZm9yIHRoZSBjaGVjayBidXRcXG4xMTQzOlxcdCAqIHNob3VsZCBiZSByZWxlYXNlZCBmb3IgdGhlIGF1ZGl0aW5nLlxcbjExNDQ6XFx0ICovXFxuMTE0NTpcXHRpbmxpbmUgaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCxcXG4xMTQ2OlxcdFxcdFxcdFxcdFxcdHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZClcXG4xMTQ5OlxcdHtcXG4xMTUwOlxcdFxcdHUzMiBkZW5pZWQ7XFxuMTE1MTpcXHRcXHRzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7XFxuMTE1MjpcXHRcXG4xMTUzOlxcdFxcdGlmIChXQVJOX09OKCFyZXF1ZXN0ZWQpKVxcbjExNTQ6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTE1NTpcXHRcXG4xMTU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMTU3OlxcdFxcdG5vZGUgPSBhdmNfbG9va3VwKHNzaWQsIHRzaWQsIHRjbGFzcyk7XFxuMTE1ODpcXHRcXHRpZiAodW5saWtlbHkoIW5vZGUpKSB7XFxuMTE1OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMTYwOlxcdFxcdFxcdHJldHVybiBhdmNfcGVybV9ub25vZGUoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsXFxuMTE2MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MsIGF2ZCk7XFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXHRkZW5pZWQgPSByZXF1ZXN0ZWQgXFx1MDAyNiB+bm9kZS1cXHUwMDNlYWUuYXZkLmFsbG93ZWQ7XFxuMTE2NDpcXHRcXHRtZW1jcHkoYXZkLCBcXHUwMDI2bm9kZS1cXHUwMDNlYWUuYXZkLCBzaXplb2YoKmF2ZCkpO1xcbjExNjU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmICh1bmxpa2VseShkZW5pZWQpKVxcbjExNjg6XFx0XFx0XFx0cmV0dXJuIGF2Y19kZW5pZWQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIDAsIDAsIDAsXFxuMTE2OTpcXHRcXHRcXHRcXHRcXHQgIGZsYWdzLCBhdmQpO1xcbjExNzA6XFx0XFx0cmV0dXJuIDA7XFxuMTE3MTpcXHR9XFxuMTE3MjpcXHRcXG4xMTczOlxcdC8qKlxcbjExNzQ6XFx0ICogYXZjX2hhc19wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbnMgYW5kIHBlcmZvcm0gYW55IGFwcHJvcHJpYXRlIGF1ZGl0aW5nLlxcbjExNzU6XFx0ICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyXFxuMTE3NjpcXHQgKiBAdHNpZDogdGFyZ2V0IHNlY3VyaXR5IGlkZW50aWZpZXJcXG4xMTc3OlxcdCAqIEB0Y2xhc3M6IHRhcmdldCBzZWN1cml0eSBjbGFzc1xcbjExNzg6XFx0ICogQHJlcXVlc3RlZDogcmVxdWVzdGVkIHBlcm1pc3Npb25zLCBpbnRlcnByZXRlZCBiYXNlZCBvbiBAdGNsYXNzXFxuMTE3OTpcXHQgKiBAYXVkaXRkYXRhOiBhdXhpbGlhcnkgYXVkaXQgZGF0YVxcbjExODA6XFx0ICpcXG4xMTgxOlxcdCAqIENoZWNrIHRoZSBBVkMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYXJlIGdyYW50ZWRcXG4xMTgyOlxcdCAqIGZvciB0aGUgU0lEIHBhaXIgKEBzc2lkLCBAdHNpZCksIGludGVycHJldGluZyB0aGUgcGVybWlzc2lvbnNcXG4xMTgzOlxcdCAqIGJhc2VkIG9uIEB0Y2xhc3MsIGFuZCBjYWxsIHRoZSBzZWN1cml0eSBzZXJ2ZXIgb24gYSBjYWNoZSBtaXNzIHRvIG9idGFpblxcbjExODQ6XFx0ICogYSBuZXcgZGVjaXNpb24gYW5kIGFkZCBpdCB0byB0aGUgY2FjaGUuICBBdWRpdCB0aGUgZ3JhbnRpbmcgb3IgZGVuaWFsIG9mXFxuMTE4NTpcXHQgKiBwZXJtaXNzaW9ucyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHBvbGljeS4gIFJldHVybiAlMCBpZiBhbGwgQHJlcXVlc3RlZFxcbjExODY6XFx0ICogcGVybWlzc2lvbnMgYXJlIGdyYW50ZWQsIC0lRUFDQ0VTIGlmIGFueSBwZXJtaXNzaW9ucyBhcmUgZGVuaWVkLCBvclxcbjExODc6XFx0ICogYW5vdGhlciAtZXJybm8gdXBvbiBvdGhlciBlcnJvcnMuXFxuMTE4ODpcXHQgKi9cXG4xMTg5OlxcdGludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDo1NS42MDkwNDE2NzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3MTkwOTUzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFVzZSBpbiBTRUxpbnV4L1Byb2MgRmlsZXN5c3RlbSBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBNeSBxdWljayBzY2FuIHNob3dlZCBgYXZjX2hhc19wZXJtX25vYXVkaXRgIHBvcHVsYXRpbmcgYW4gYGF2X2RlY2lzaW9uYCBzdHJ1Y3QsIHdoaWNoIGlzIGFuIG91dHB1dCBwYXJhbWV0ZXIsIHNvIHRoYXQncyBwZXJmZWN0bHkgZmluZS4gV2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCB0aGF0IGBrbWFsbG9jX29iamAgbWFjcm8sIHRoYXQncyB3aGF0IGNhdWdodCBteSBhdHRlbnRpb24uIEl0J3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvIGJ1dCBhcHBlYXJzIHRvIGJlIGEgcmVjZW50IGFkZGl0aW9uIHRvIHJlcGxhY2UgYGttYWxsb2Moc2l6ZW9mKC4uLikpYC4gUmlnaHQsIHNvIGl0ICphbGxvY2F0ZXMqIGJ1dCBkb2Vzbid0ICp6ZXJvKiBtZW1vcnksIHdoaWNoIG1lYW5zIHRoZXJlIGNvdWxkIGJlIHNvbWUgaXNzdWVzLiBJZiB3ZSB1c2UgaXQgb24gYSBzdHJ1Y3QgdGhhdCBpcyBwYXNzZWQgdG8gdXNlcnNwYWNlLCBvciBpdHMgZmllbGRzIGFyZSB1c2VkIGluIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB1c2VzIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYC4gTGV0J3MgbG9vayBhdCBgc3RydWN0IG1lbV9wcml2YXRlYC4uLiBJdCBjb250YWlucyBhIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYW5kIGEgYGJvb2wgaW50cm9zcGVjdGlvbmAuIE9rYXksIGlmIHdlIGNoZWNrIHRoZSBjb2RlIGZvciBgbWVtX29wZW5gLCB0aGV5J3JlIGJvdGggaW5pdGlhbGl6ZWQ6IGBwcml2LVx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKWAgYW5kIGBwcml2LVx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW1gLiBIb3dldmVyLCB0aGVyZSBpcyBwYWRkaW5nLiBgc3RydWN0IG1lbV9wcml2YXRlYCBpcyAxNiBieXRlcyBvbiA2NC1iaXQsIHdpdGggOCBieXRlcyBmb3IgYG1tYCwgMSBieXRlIGZvciBgaW50cm9zcGVjdGlvbmAsIGFuZCA3IGJ5dGVzIG9mIHBhZGRpbmcuIFRoZSBwYWRkaW5nIGlzIG5ldmVyIHJlYWQuIEFuZCB0aGUgc3RydWN0IGlzbid0IGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsc28sIGl0IGlzbid0IHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGV4Y2VwdCB0aGUgZmllbGQgYHByaXYtXHUwMDNlaW50cm9zcGVjdGlvbmAuXG5cbkJ1dCB3aGF0IGlmIGBwcm9jX21lbV9vcGVuYCByZXR1cm5zIGFuIGVycm9yPyBPa2F5LCByaWdodCwgaW4gdGhhdCBjYXNlLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGJlZm9yZSBgcHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uYCBpcyBpbml0aWFsaXplZCwgYnV0IHRoZSBzdHJ1Y3QgaXMgZnJlZWQuIFNvLCBubyBtZW1vcnkgaXMgYWNjZXNzZWQuXG5cbkxldCdzIHRyYWNlIGl0cyB1c2UuIFRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBsb29rcyBzYWZlOyBpdCBkZXJlZmVyZW5jZXMgdGhlIG1lbWJlcnMgYW5kIHRoZW4gYGtmcmVlYHMgdGhlIHN0cnVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHVzaW5nIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgaXMgYWNjb3VudGVkIGZvci5cblxuQ2hlY2tpbmcgb3RoZXIgdXNlcyBvZiBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLCBpbiBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIHRoZSBgaW50cm9zcGVjdGlvbmAgZmllbGQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFsc28sIGBtZW1fcndgIGlzIHNhZmUsIGFzIGl0cyBzdHJ1Y3QgdXNlcyB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgZnMvcHJvYy9iYXNlLmNgIHRoYXQgdXNlIHRoZSBgcHJvY19tZW1fb3BlcmF0aW9uc2Agc3RydWN0dXJlPyBJIHF1aWNrbHkgbG9va2VkIGF0IHRoZSBgcHJvY19tZW1fb3BlcmF0aW9uc2AgdG8gY2hlY2sgYWxsIHRoZSBvdGhlciBmaWxlIG9wZXJhdGlvbnMuIE9rYXksIHNvIGBtZW1fbHNlZWtgIGRvZXNuJ3QgdXNlIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGNhbGxzIGBtZW1fcndgLCB3aGljaCB1c2VzIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAsIGFzIHdlIGhhdmUgc2Vlbiwgc28gdGhleSdyZSBzYWZlLlxuXG5JIGFsc28gY2hlY2tlZCBvdGhlciByZWxhdGVkIHRoaW5ncyBsaWtlIGBlbnZpcm9uX3JlYWRgLCBidXQgaXQgdXNlcyBhIGRpZmZlcmVudCBvcGVyYXRpb24gc3RydWN0dXJlLiBUaGUgYG1lbV9yZWxlYXNlYCBpcyBzdGlsbCB0aGVyZSwgZm9yIG90aGVyIHRoaW5ncywgYnV0IHVzZXMgYSBkaWZmZXJlbnQgYHByaXZhdGVfZGF0YWAuIE5vdywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IHBsYWNlIHRoYXQgdXNlcyB0aGUgYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBHb29kLCB3ZSdyZSBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NTcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MDkuMzI4MTM5Njg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5MjA5NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9yZWxlYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTM4OCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0xNzA9c3RhdGljIGludFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6MTcxOnNwdWZzX21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMTcyLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9MzAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX21lbV9mb3BzID0ge1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA0LVxcdC5vcGVuXFx0XFx0XFx0PSBzcHVmc19tZW1fb3BlbixcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjMwNTpcXHQucmVsZWFzZVxcdFxcdD0gc3B1ZnNfbWVtX3JlbGVhc2UsXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy0zMDYtXFx0LnJlYWRcXHRcXHRcXHQ9IHNwdWZzX21lbV9yZWFkLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jPTE2MD1zdHJ1Y3QgaGxfY2JfbW1hcF9tZW1fYWxsb2NfYXJncyB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMTY3LVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYzoxNjg6c3RhdGljIHZvaWQgaGxfY2JfbW1hcF9tZW1fcmVsZWFzZShzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmICpidWYpXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jLTE2OS17XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmM9MjU4PXN0YXRpYyBzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmX2JlaGF2aW9yIGNiX2JlaGF2aW9yID0ge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jLTI2MS1cXHQuYWxsb2MgPSBobF9jYl9tbWFwX21lbV9hbGxvYyxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmM6MjYyOlxcdC5yZWxlYXNlID0gaGxfY2JfbW1hcF9tZW1fcmVsZWFzZSxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMjYzLVxcdC5tbWFwID0gaGxfY2JfbW1hcCxcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTM2OT1zdGF0aWMgaW50IGZpZm9faW5pdChzdHJ1Y3QgeGlsbHlmaWZvICpmaWZvLFxcbi0tXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtNDMyLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjQzMzpzdGF0aWMgdm9pZCBmaWZvX21lbV9yZWxlYXNlKHN0cnVjdCB4aWxseWZpZm8gKmZpZm8pXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtNDM0LXtcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTQ2Nz1zdGF0aWMgdm9pZCBlbmRwb2ludF9kZWFsbG9jKHN0cnVjdCB4aWxseXVzYl9lbmRwb2ludCAqZXApXFxuLS1cXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy00NzAtXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6NDcxOlxcdGZpZm9fbWVtX3JlbGVhc2UoXFx1MDAyNmVwLVxcdTAwM2VmaWZvKTtcXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy00NzItXFxuLS1cXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYz0xMjM2PXN0YXRpYyBpbnQgeGlsbHl1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTEzOTYtXFx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjEzOTc6XFx0Zmlmb19tZW1fcmVsZWFzZShpbl9maWZvKTtcXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xMzk4LVxcdGtmcmVlKGluX2ZpZm8pO1xcbi0tXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM9MTcwNj1zdGF0aWMgaW50IHhpbGx5dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xNzM0LVxcdFxcdHNhZmVseV9hc3NpZ25faW5fZmlmbyhjaGFuLCBOVUxMKTtcXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYzoxNzM1OlxcdFxcdGZpZm9fbWVtX3JlbGVhc2UoaW5fZmlmbyk7XFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMTczNi1cXHRcXHRrZnJlZShpbl9maWZvKTtcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTIwMDE9c3RhdGljIGludCB4aWxseXVzYl9kaXNjb3Zlcnkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxMjEtXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MjEyMjpcXHRmaWZvX21lbV9yZWxlYXNlKFxcdTAwMjZpZHRfZmlmbyk7XFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMjEyMy1cXHRrZnJlZShjaGFuKTtcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxNDAtXFx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjIxNDE6XFx0Zmlmb19tZW1fcmVsZWFzZShcXHUwMDI2aWR0X2ZpZm8pO1xcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxNDItXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jPTY1Mj1zdGF0aWMgaW50IGFsbG9jX2hwYShzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hsciwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTY5Ny1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jOjY5ODpzdGF0aWMgdm9pZCBjeGxfcmVnaW9uX2lvbWVtX3JlbGVhc2Uoc3RydWN0IGN4bF9yZWdpb24gKmN4bHIpXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYy02OTkte1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYz03MTY9c3RhdGljIGludCBmcmVlX2hwYShzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscilcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtNzI5LVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6NzMwOlxcdGN4bF9yZWdpb25faW9tZW1fcmVsZWFzZShjeGxyKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTczMS1cXHRwLVxcdTAwM2VzdGF0ZSA9IENYTF9DT05GSUdfSURMRTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM9MjU2Mj1zdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscilcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4MC1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jOjI1ODE6XFx0Y3hsX3JlZ2lvbl9pb21lbV9yZWxlYXNlKGN4bHIpO1xcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4Mi1cXHRwdXRfZGV2aWNlKFxcdTAwMjZjeGxyLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYz0zNjc1PXN0YXRpYyBpbnQgX19jb25zdHJ1Y3RfcmVnaW9uKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyLFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYy0zNzI2LVxcdFxcdCAqIFBsYXRmb3JtLWZpcm13YXJlIG1heSBub3QgaGF2ZSBzcGxpdCByZXNvdXJjZXMgbGlrZSBcXFwiU3lzdGVtXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYzozNzI3OlxcdFxcdCAqIFJBTVxcXCIgb24gQ1hMIHdpbmRvdyBib3VuZGFyaWVzIHNlZSBjeGxfcmVnaW9uX2lvbWVtX3JlbGVhc2UoKVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMzcyOC1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jPTE1OT1FWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX2NyZWF0ZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xNjEtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM6MTYyOiAqIF9fZHJtX2dlbV9zaG1lbV9yZWxlYXNlX3NndF9sb2NrZWQgLSBVbnBpbiBhbmQgRE1BIHVubWFwIHBhZ2VzLCBhbmQgcmVsZWFzZSB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xNjMtICogY2FjaGVkIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIGZvciBhbiBzaG1lbSBHRU0gb2JqZWN0Llxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM9MTgzPUVYUE9SVF9TWU1CT0xfR1BMKF9fZHJtX2dlbV9zaG1lbV9mcmVlX3NndF9sb2NrZWQpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTg1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jOjE4NjogKiBkcm1fZ2VtX3NobWVtX3JlbGVhc2UgLSBSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBzaG1lbSBHRU0gb2JqZWN0LlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTE4Ny0gKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3RcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTE5MS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoxOTI6dm9pZCBkcm1fZ2VtX3NobWVtX3JlbGVhc2Uoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xOTMte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMjE1LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoyMTY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9yZWxlYXNlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0yMTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYz0yMjU9dm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0yMjYte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jOjIyNzpcXHRkcm1fZ2VtX3NobWVtX3JlbGVhc2Uoc2htZW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIyOC1cXHRrZnJlZShzaG1lbSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMjg9c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfemRkX2Rlc3Ryb3koc3RydWN0IGtyZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNi1cXHRcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmRldm1lbS1cXHUwMDNlZGV0YWNoZWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzNzpcXHRcXHRpZiAoZGV2bWVtLVxcdTAwM2VvcHMtXFx1MDAzZWRldm1lbV9yZWxlYXNlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzODpcXHRcXHRcXHRkZXZtZW0tXFx1MDAzZW9wcy1cXHUwMDNlZGV2bWVtX3JlbGVhc2UoZGV2bWVtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzktXFx0fVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjE2PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg0MS1lcnJfb3V0OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg0MjpcXHRkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNlb3BzLVxcdTAwM2VkZXZtZW1fcmVsZWFzZShkZXZtZW1fYWxsb2NhdGlvbik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODQzLVxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jPTQ2Nj12b2lkIGV0bmF2aXZfZ2VtX2Rlc2NyaWJlX29iamVjdHMoc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ4Ny1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjQ4ODpzdGF0aWMgdm9pZCBldG5hdml2X2dlbV9zaG1lbV9yZWxlYXNlKHN0cnVjdCBldG5hdml2X2dlbV9vYmplY3QgKmV0bmF2aXZfb2JqKVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDg5LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM9NDk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRuYXZpdl9nZW1fb3BzIGV0bmF2aXZfZ2VtX3NobWVtX29wcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ5NS1cXHQuZ2V0X3BhZ2VzID0gZXRuYXZpdl9nZW1fc2htZW1fZ2V0X3BhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM6NDk2OlxcdC5yZWxlYXNlID0gZXRuYXZpdl9nZW1fc2htZW1fcmVsZWFzZSxcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ5Ny1cXHQudm1hcCA9IGV0bmF2aXZfZ2VtX3ZtYXBfaW1wbCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jPTQ3MT1zaG1lbV9wcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDc5LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jOjQ4MDpzdGF0aWMgdm9pZCBzaG1lbV9yZWxlYXNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDgxLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jPTQ4OD1jb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fc2htZW1fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDk5LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jOjUwMDpcXHQucmVsZWFzZSA9IHNobWVtX3JlbGVhc2UsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTAxLX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZWdpb25fbG1lbS5jPTExNj1zdGF0aWMgaW50XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYzoxMTc6cmVnaW9uX2xtZW1fcmVsZWFzZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmMtMTE4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmM9MTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgaW50ZWxfcmVnaW9uX2xtZW1fb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmMtMTUwLVxcdC5pbml0ID0gcmVnaW9uX2xtZW1faW5pdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZWdpb25fbG1lbS5jOjE1MTpcXHQucmVsZWFzZSA9IHJlZ2lvbl9sbWVtX3JlbGVhc2UsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYy0xNTItXFx0LmluaXRfb2JqZWN0ID0gX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYz0xNTQ0PXZjNF9kc2lfaW5pdF9waHlfY2xvY2tzKHN0cnVjdCB2YzRfZHNpICpkc2kpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYy0xNjA2LVxcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jOjE2MDc6c3RhdGljIHZvaWQgdmM0X2RzaV9kbWFfbWVtX3JlbGVhc2Uodm9pZCAqcHRyKVxcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2MDgte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmM9MTYzMT1zdGF0aWMgaW50IHZjNF9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2NzgtXFxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmM6MTY3OTpcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB2YzRfZHNpX2RtYV9tZW1fcmVsZWFzZSwgZHNpKTtcXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYy0xNjgwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9NzU2PXN0YXRpYyBzdHJ1Y3QgeGVfYm8gKnRvX3hlX2JvKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTc2MC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6NzYxOnN0YXRpYyB2b2lkIHhlX3N2bV9kZXZtZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtNzYyLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIGRwYWdlbWFwX2Rldm1lbV9vcHMgPSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjgwNzpcXHQuZGV2bWVtX3JlbGVhc2UgPSB4ZV9zdm1fZGV2bWVtX3JlbGVhc2UsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTgwOC1cXHQucG9wdWxhdGVfZGV2bWVtX3BmbiA9IHhlX3N2bV9wb3B1bGF0ZV9kZXZtZW1fcGZuLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTQ5LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzo1MDpzdGF0aWMgdm9pZCBfX2liX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLCBpbnQgZGlydHkpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTUxLXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYz0xNjI9c3RhdGljIHN0cnVjdCBpYl91bWVtICpfX2liX3VtZW1fZ2V0X3ZhKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNDYtXFx0XFx0XFx0cmV0ID0gcGlubmVkO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzoyNDc6XFx0XFx0XFx0Z290byB1bWVtX3JlbGVhc2U7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI0OC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjU3LVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhwYWdlX2xpc3QsIHBpbm5lZCwgMCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI1ODpcXHRcXHRcXHRnb3RvIHVtZW1fcmVsZWFzZTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjU5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNjQtXFx0aWYgKHJldClcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY1OlxcdFxcdGdvdG8gdW1lbV9yZWxlYXNlO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNjYtXFx0Z290byBvdXQ7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI2Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY4OnVtZW1fcmVsZWFzZTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY5OlxcdF9faWJfdW1lbV9yZWxlYXNlKGRldmljZSwgdW1lbSwgMCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI3MC1cXHRhdG9taWM2NF9zdWIoaWJfdW1lbV9udW1fcGFnZXModW1lbSksIFxcdTAwMjZtbS1cXHUwMDNlcGlubmVkX3ZtKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYz0zNzY9aWJfdW1lbV9nZXRfZGVzY19jaGVjayhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMzg1LVxcdGlmICh1bWVtLVxcdTAwM2VsZW5ndGggXFx1MDAzYyBtaW5fc2l6ZSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzozODY6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0zODctXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM9NjEyPUVYUE9SVF9TWU1CT0woaWJfdW1lbV9nZXRfY3FfYnVmX29yX3ZhKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MTQtLyoqXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYxNTogKiBpYl91bWVtX3JlbGVhc2UgLSByZWxlYXNlIHBpbm5lZCBtZW1vcnlcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjE2LSAqIEB1bWVtOiB1bWVtIHN0cnVjdCB0byByZWxlYXNlXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYxNy0gKi9cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6NjE4OnZvaWQgaWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl91bWVtICp1bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MTkte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYyNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6NjI3OlxcdF9faWJfdW1lbV9yZWxlYXNlKHVtZW0tXFx1MDAzZWliZGV2LCB1bWVtLCAxKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjI4LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYzMi19XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYzMzpFWFBPUlRfU1lNQk9MKGliX3VtZW1fcmVsZWFzZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYzNC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmM9MjE0PWliX3VtZW1fZG1hYnVmX2dldF9waW5uZWRfYW5kX2xvY2soc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYy0yNDItXFx0ZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLVxcdTAwM2VhdHRhY2gtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYzoyNDM6XFx0aWJfdW1lbV9yZWxlYXNlKFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYy0yNDQtXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmM9MjYzPUVYUE9SVF9TWU1CT0woaWJfdW1lbV9kbWFidWZfZ2V0X3Bpbm5lZF93aXRoX2RtYV9kZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYy0yODctICogSWYgc3VjY2Vzc2Z1bCwgdGhlbiB0aGUgcmV2b2tlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpbGxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jOjI4ODogKiBhbHNvIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHVwb24gaWJfdW1lbV9yZWxlYXNlIChzZXJpYWxpemVkKS4gVGhlIHJldm9rZVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjg5LSAqIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9uZSB0aW1lIGF0IG1vc3QuXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTEwMDE9c3RhdGljIHZvaWQgYm54dF9yZV9xcF9mcmVlX3VtZW0oc3RydWN0IGJueHRfcmVfcXAgKnFwKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTAwMi17XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoxMDAzOlxcdGliX3VtZW1fcmVsZWFzZShxcC1cXHUwMDNlcnVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTAwNDpcXHRpYl91bWVtX3JlbGVhc2UocXAtXFx1MDAzZXN1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEwMDUtfVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0xMTk3PXN0YXRpYyBpbnQgYm54dF9yZV9pbml0X3VzZXJfcXAoc3RydWN0IGJueHRfcmVfZGV2ICpyZGV2LCBzdHJ1Y3QgYm54dF9yZV9wZCAqcGQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNTUtcnFmYWlsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTI1NjpcXHRpYl91bWVtX3JlbGVhc2UocXAtXFx1MDAzZXJ1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNTctXFx0cXAtXFx1MDAzZXJ1bWVtID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTI1OS1mYWlsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTI2MDpcXHRpYl91bWVtX3JlbGVhc2UocXAtXFx1MDAzZXN1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNjEtXFx0cXAtXFx1MDAzZXN1bWVtID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MjE0Mz1pbnQgYm54dF9yZV9kZXN0cm95X3NycShzdHJ1Y3QgaWJfc3JxICppYl9zcnEsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTIxNTktXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNycS1cXHUwMDNldWN0eF9zcnFfcGFnZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoyMTYwOlxcdGliX3VtZW1fcmVsZWFzZShzcnEtXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMjE2MS1cXHRhdG9taWNfZGVjKFxcdTAwMjZyZGV2LVxcdTAwM2VzdGF0cy5yZXMuc3JxX2NvdW50KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MjE5OT1pbnQgYm54dF9yZV9jcmVhdGVfc3JxKHN0cnVjdCBpYl9zcnEgKmliX3NycSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMjI4OC1mYWlsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MjI4OTpcXHRpYl91bWVtX3JlbGVhc2Uoc3JxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTIyOTAtZXhpdDpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MzQ2MT1pbnQgYm54dF9yZV9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqaWJfY3EsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM0ODctXFx0a2ZyZWUoY3EtXFx1MDAzZWNxbCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNDg4OlxcdGliX3VtZW1fcmVsZWFzZShjcS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNDg5LVxcdHJldHVybiBpYl9yZXNwb25kX2VtcHR5X3VkYXRhKHVkYXRhKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MzQ5Mj1pbnQgYm54dF9yZV9jcmVhdGVfdXNlcl9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGNvbnN0IHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM1ODAtZnJlZV91bWVtOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzU4MTpcXHRpYl91bWVtX3JlbGVhc2UoY3EtXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzU4Mi1cXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2Mzc9c3RhdGljIHZvaWQgYm54dF9yZV9yZXNpemVfY3FfY29tcGxldGUoc3RydWN0IGJueHRfcmVfY3EgKmNxKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNjQ0LVxcdGlmIChjcS1cXHUwMDNlcmVzaXplX3VtZW0pIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjM2NDU6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM2NDYtXFx0XFx0Y3EtXFx1MDAzZXVtZW0gPSBjcS1cXHUwMDNlcmVzaXplX3VtZW07XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2NTI9aW50IGJueHRfcmVfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgdW5zaWduZWQgaW50IGNxZSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzcyMy1cXHRpZiAoY3EtXFx1MDAzZXJlc2l6ZV91bWVtKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNzI0OlxcdFxcdGliX3VtZW1fcmVsZWFzZShjcS1cXHUwMDNlcmVzaXplX3VtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzcyNS1cXHRcXHRjcS1cXHUwMDNlcmVzaXplX3VtZW0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00NDQ2PWludCBibnh0X3JlX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQ0NjgtXFx0fVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDQ2OTpcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZWliX3VtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDQ3MC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDY4OD1zdHJ1Y3QgaWJfbXIgKmJueHRfcmVfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICppYl9wZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzExLVxcdGlmIChJU19FUlIoaWJfbXIpKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDcxMjpcXHRcXHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzEzLVxcdHJldHVybiBpYl9tcjtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDcxNj1zdHJ1Y3QgaWJfbXIgKmJueHRfcmVfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJfcGQsIHU2NCBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDczOS1cXHRpZiAoSVNfRVJSKGliX21yKSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjQ3NDA6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDc0MS1cXHRyZXR1cm4gaWJfbXI7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM9NDkxPXN0cnVjdCBpYl9tciAqYzRpd19yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMtNTQxLVxcdGlmIChlcnIpXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jOjU0MjpcXHRcXHRnb3RvIGVycl91bWVtX3JlbGVhc2U7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTU0My1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01OTAtXFx0XFx0XFx0ICAgICAgbWhwLVxcdTAwM2VhdHRyLnBibF9zaXplIFxcdTAwM2NcXHUwMDNjIDMpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYzo1OTE6ZXJyX3VtZW1fcmVsZWFzZTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NTkyOlxcdGliX3VtZW1fcmVsZWFzZShtaHAtXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01OTMtZXJyX2ZyZWVfc2tiOlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jPTcwND1pbnQgYzRpd19kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTcyNS1cXHRcXHRrZnJlZSgodm9pZCAqKSAodW5zaWduZWQgbG9uZykgbWhwLVxcdTAwM2VrdmEpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYzo3MjY6XFx0aWJfdW1lbV9yZWxlYXNlKG1ocC1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTcyNy1cXHRwcl9kZWJ1ZyhcXFwibW1pZCAweCV4IHB0ciAlcFxcXFxuXFxcIiwgbW1pZCwgbWhwKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM9MTA1NT1pbnQgZWZhX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYmNxLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xMDczLVxcdFxcdGVmYV9mcmVlX21hcHBlZChkZXYsIGNxLVxcdTAwM2VjcHVfYWRkciwgY3EtXFx1MDAzZWRtYV9hZGRyLCBjcS1cXHUwMDNlc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjEwNzQ6XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTEwNzUtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jPTExMTM9aW50IGVmYV9jcmVhdGVfdXNlcl9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGNvbnN0IHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTEyNjUtZXJyX3JlbGVhc2VfdW1lbTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjEyNjY6XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTEyNjctZXJyX291dDpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM9MTcxMD1zdHJ1Y3QgaWJfbXIgKmVmYV9yZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICppYnBkLCB1NjQgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3NDgtZXJyX3JlbGVhc2U6XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxNzQ5OlxcdGliX3VtZW1fcmVsZWFzZShtci1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xNzUwLWVycl9mcmVlOlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xNzU3PXN0cnVjdCBpYl9tciAqZWZhX3JlZ19tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTc5Mi1lcnJfcmVsZWFzZTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjE3OTM6XFx0aWJfdW1lbV9yZWxlYXNlKG1yLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3OTQtZXJyX2ZyZWU6XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jPTE4MzQ9aW50IGVmYV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE4NDctXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxODQ4OlxcdGliX3VtZW1fcmVsZWFzZShtci1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xODQ5LVxcdGtmcmVlKG1yKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jPTgzMT1zdGF0aWMgaW50IGdldF9tdHRfZW50cmllcyhzdHJ1Y3QgZXJkbWFfZGV2ICpkZXYsIHN0cnVjdCBlcmRtYV9tZW0gKm1lbSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg2Mi1cXHRpZiAobWVtLVxcdTAwM2V1bWVtKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6ODYzOlxcdFxcdGliX3VtZW1fcmVsZWFzZShtZW0tXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg2NC1cXHRcXHRtZW0tXFx1MDAzZXVtZW0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9ODcwPXN0YXRpYyB2b2lkIHB1dF9tdHRfZW50cmllcyhzdHJ1Y3QgZXJkbWFfZGV2ICpkZXYsIHN0cnVjdCBlcmRtYV9tZW0gKm1lbSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg3NS1cXHRpZiAobWVtLVxcdTAwM2V1bWVtKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6ODc2OlxcdFxcdGliX3VtZW1fcmVsZWFzZShtZW0tXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg3Ny1cXHRcXHRtZW0tXFx1MDAzZXVtZW0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9OTI2PWVyZG1hX3VubWFwX3VzZXJfZGJyZWNvcmRzKHN0cnVjdCBlcmRtYV91Y29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtOTM0LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjYoKmRicl9wYWdlKS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6OTM1OlxcdFxcdGliX3VtZW1fcmVsZWFzZSgoKmRicl9wYWdlKS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtOTM2LVxcdFxcdGtmcmVlKCpkYnJfcGFnZSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmM9NTU9dm9pZCBobnNfcm9jZV9kYl91bm1hcF91c2VyKHN0cnVjdCBobnNfcm9jZV91Y29udGV4dCAqY29udGV4dCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGIuYy02Mi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2ZGItXFx1MDAzZXUudXNlcl9wYWdlLVxcdTAwM2VsaXN0KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmM6NjM6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGRiLVxcdTAwM2V1LnVzZXJfcGFnZS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kYi5jLTY0LVxcdFxcdGtmcmVlKGRiLVxcdTAwM2V1LnVzZXJfcGFnZSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmM9NTcyPXN0YXRpYyB2b2lkIG10cl9mcmVlX2J1ZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2LCBzdHJ1Y3QgaG5zX3JvY2VfbXRyICptdHIpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmMtNTc1LVxcdGlmIChtdHItXFx1MDAzZXVtZW0pIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmM6NTc2OlxcdFxcdGliX3VtZW1fcmVsZWFzZShtdHItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbXIuYy01NzctXFx0XFx0bXRyLVxcdTAwM2V1bWVtID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTc2PWludCBpb25pY19jcmVhdGVfY3FfY29tbW9uKHN0cnVjdCBpb25pY192Y3EgKnZjcSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE2NC1cXHRpZiAoY3EtXFx1MDAzZXVtZW0pXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM6MTY1OlxcdFxcdGliX3VtZW1fcmVsZWFzZShjcS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTY2LWVycl9xZGVzYzpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTE3ND12b2lkIGlvbmljX2Rlc3Ryb3lfY3FfY29tbW9uKHN0cnVjdCBpb25pY19pYmRldiAqZGV2LCBzdHJ1Y3QgaW9uaWNfY3EgKmNxKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTg0LVxcdGlmIChjcS1cXHUwMDNldW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoxODU6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xODYtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9ODcwPXN0cnVjdCBpYl9tciAqaW9uaWNfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICppYnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy05MjYtZXJyX3BndGJsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjkyNzpcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTkyOC1lcnJfdW1lbTpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTkzNT1zdHJ1Y3QgaWJfbXIgKmlvbmljX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBvZmZzZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy05OTYtZXJyX3BndGJsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjk5NzpcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTk5OC1lcnJfdW1lbTpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTEwMDU9aW50IGlvbmljX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJtciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTEwMjItXFx0aWYgKG1yLVxcdTAwM2V1bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjEwMjM6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKG1yLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xMDI0LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MTc4MD1zdGF0aWMgaW50IGlvbmljX3FwX3NxX2luaXQoc3RydWN0IGlvbmljX2liZGV2ICpkZXYsIHN0cnVjdCBpb25pY19jdHggKmN0eCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MDgtXFx0aWYgKHFwLVxcdTAwM2VzcV91bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5MDk6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHFwLVxcdTAwM2VzcV91bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xOTEwLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTE5MTU9c3RhdGljIHZvaWQgaW9uaWNfcXBfc3FfZGVzdHJveShzdHJ1Y3QgaW9uaWNfaWJkZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MjctXFx0aWYgKHFwLVxcdTAwM2VzcV91bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5Mjg6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHFwLVxcdTAwM2VzcV91bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xOTI5LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTIwMDY9c3RhdGljIGludCBpb25pY19xcF9ycV9pbml0KHN0cnVjdCBpb25pY19pYmRldiAqZGV2LCBzdHJ1Y3QgaW9uaWNfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTE2LVxcdGlmIChxcC1cXHUwMDNlcnFfdW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTE3OlxcdFxcdGliX3VtZW1fcmVsZWFzZShxcC1cXHUwMDNlcnFfdW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMjExOC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz0yMTIzPXN0YXRpYyB2b2lkIGlvbmljX3FwX3JxX2Rlc3Ryb3koc3RydWN0IGlvbmljX2liZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTM0LVxcdGlmIChxcC1cXHUwMDNlcnFfdW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTM1OlxcdFxcdGliX3VtZW1fcmVsZWFzZShxcC1cXHUwMDNlcnFfdW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMjEzNi1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYz0zNTA2PXN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmlyZG1hX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHU2NCBzdGFydCwgdTY0IGxlbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1MzUtXFx0aWYgKGliX2NvcHlfZnJvbV91ZGF0YShcXHUwMDI2cmVxLCB1ZGF0YSwgbWluKHNpemVvZihyZXEpLCB1ZGF0YS1cXHUwMDNlaW5sZW4pKSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1MzY6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzUzNy1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1NDEtXFx0aWYgKElTX0VSUihpd21yKSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1NDI6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzU0My1cXHRcXHRyZXR1cm4gKHN0cnVjdCBpYl9tciAqKWl3bXI7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTc2LWVycm9yOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1Nzc6XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzU3OC1cXHRpcmRtYV9mcmVlX2l3bXIoaXdtcik7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYz0zNjEzPXN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmlyZG1hX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNjYyLVxcdCAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM2NjM6XFx0aWJfdW1lbV9yZWxlYXNlKFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzY2NC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM3MjA9c3RhdGljIGludCBpcmRtYV9yZXJlZ19tcl90cmFucyhzdHJ1Y3QgaXJkbWFfbXIgKml3bXIsIHU2NCBzdGFydCwgdTY0IGxlbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM3NTQtZXJyOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM3NTU6XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzc1Ni1cXHRpd21yLVxcdTAwM2VyZWdpb24gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9Mzc3NT1zdGF0aWMgc3RydWN0IGliX21yICppcmRtYV9yZXJlZ191c2VyX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIGludCBmbGFncyxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM4NDItXFx0XFx0aWYgKGl3bXItXFx1MDAzZXJlZ2lvbikge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM4NDM6XFx0XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGl3bXItXFx1MDAzZXJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzg0NC1cXHRcXHRcXHRpd21yLVxcdTAwM2VyZWdpb24gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9Mzk3ND1zdGF0aWMgaW50IGlyZG1hX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDAyLVxcdGlmIChpd21yLVxcdTAwM2VyZWdpb24pXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6NDAwMzpcXHRcXHQvKiBGb3IgZG1hYnVmIE1ScywgaWJfdW1lbV9yZWxlYXNlIHdpbGwgdHJpZ2dlciBhIHN5bmNocm9ub3VzXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtNDAwNC1cXHRcXHQgKiBjYWxsIHRvIHRoZSByZXZva2UgY2FsbGJhY2sgd2hpY2ggd2lsbCBwZXJmb3JtIHRoZSBhY3R1YWwgSFdcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTQwMDgtXFx0XFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6NDAwOTpcXHRcXHRpYl91bWVtX3JlbGVhc2UoaXdtci1cXHUwMDNlcmVnaW9uKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDEwLVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jPTI1NT1pbnQgbWFuYV9pYl9jcmVhdGVfcXVldWUoc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCB1NjQgYWRkciwgdTMyIHNpemUsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjgxLWZyZWVfdW1lbTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM6MjgyOlxcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjgzLVxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM9Mjg2PXZvaWQgbWFuYV9pYl9kZXN0cm95X3F1ZXVlKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jLTI5MS1cXHRtYW5hX2liX2dkX2Rlc3Ryb3lfZG1hX3JlZ2lvbihtZGV2LCBxdWV1ZS1cXHUwMDNlZ2RtYV9yZWdpb24pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYzoyOTI6XFx0aWJfdW1lbV9yZWxlYXNlKHF1ZXVlLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjkzLVxcdGlmIChxdWV1ZS1cXHUwMDNla21lbSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM9MTAwPXN0cnVjdCBpYl9tciAqbWFuYV9pYl9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMTc5LWVycl91bWVtOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM6MTgwOlxcdGliX3VtZW1fcmVsZWFzZShtci1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYy0xODEtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jPTE4Nz1zdHJ1Y3QgaWJfbXIgKm1hbmFfaWJfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYy0yNTMtZXJyX3VtZW06XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYzoyNTQ6XFx0aWJfdW1lbV9yZWxlYXNlKG1yLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM9MzQyPWludCBtYW5hX2liX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJtciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMzU1LVxcdGlmIChtci1cXHUwMDNldW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jOjM1NjpcXHRcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMzU3LVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToxMS4wMDczNTU2ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5Njg3MDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtZW1fcmVsZWFzZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgbWVtX3JlbGVhc2VgIGJlaW5nIHVzZWQsIG9yIGF0IGxlYXN0ICpyZWZlcmVuY2VkKiwgaW4gYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNgLCBidXQgdGhhdCdzIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGBzcHVmc19tZW1fcmVsZWFzZWAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBnZW5lcmFsIG9uZSBpbiBgZnMvcHJvYy9iYXNlLmNgLiBJIHJlY2FsbCB0aGF0IHRoZSBgbWVtX3JlbGVhc2VgIGZ1bmN0aW9uIGluIHRoYXQgZmlsZSBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCdzIG5vdCBzaW1wbHkgdW51c2VkIHdpdGhpbiB0aGUgZmlsZSBub3cuIEknbGwgY2hlY2sgaXRzIHVzYWdlIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLlxuXG5BaGEhIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgbG9va3MgbGlrZSBgbWVtX3JlbGVhc2VgICppcyogc3RpbGwgcHJlc2VudCwgYXQgbGVhc3QgaW4gdGhlIG9yaWdpbmFsIGZvcm0sIGJ1dCBpdCdzIGJlZW4gdXBkYXRlZC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgaXQncyBhY3R1YWxseSBiZWVuIHJlcGxhY2VkIGluIGBwcm9jX21lbV9vcGVyYXRpb25zYC4gVGhlIGByZWxlYXNlYCBmaWVsZCBpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AgdXNlZCB0byBwb2ludCB0byBgbWVtX3JlbGVhc2VgLCBidXQgbm93IGl0IHBvaW50cyB0byBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYC4gVGhlIG9yaWdpbmFsIGBtZW1fcmVsZWFzZWAgaXMgc3RpbGwgdGhlcmUsIGp1c3Qgbm90IHVzZWQgaW4gdGhhdCBjb250ZXh0IGFueSBsb25nZXIuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgc2FmZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB0aGF0IGFueSBjb2RlIHJlbHlpbmcgb24gdGhhdCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGZ1bmN0aW9uLlxuXG5JIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSBpdCdzIG5vdCBiZWluZyBjYWxsZWQgZWxzZXdoZXJlIGluIGBmcy9wcm9jL2Jhc2UuY2AgdXNpbmcgdGhlIG9sZCBmdW5jdGlvbiBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI3MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToxNy4zMDQyMjgxMzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE5MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTk2OT1sb2ZmX3QgbWVtX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZylcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTk4NC1cXG5mcy9wcm9jL2Jhc2UuYzo5ODU6c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy05ODYte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtOTkyLVxcbmZzL3Byb2MvYmFzZS5jOjk5MzpzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy05OTQte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMTAwNi1cXHQub3BlblxcdFxcdD0gbWVtX29wZW4sXFxuZnMvcHJvYy9iYXNlLmM6MTAwNzpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxcbmZzL3Byb2MvYmFzZS5jLTEwMDgtXFx0LmZvcF9mbGFnc1xcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMDgyLVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuZnMvcHJvYy9iYXNlLmM6MTA4MzpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuZnMvcHJvYy9iYXNlLmMtMTA4NC19O1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2F1eHZfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTExMDktXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5mcy9wcm9jL2Jhc2UuYzoxMTEwOlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZSxcXG5mcy9wcm9jL2Jhc2UuYy0xMTExLX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0yODUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX2F0dHJfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI4NTctXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5mcy9wcm9jL2Jhc2UuYzoyODU4OlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZSxcXG5mcy9wcm9jL2Jhc2UuYy0yODU5LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjExOjE3LjM1MTk1NjcwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ5OTE1NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbWVtX3JlbGVhc2VgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzOiBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLCBgcHJvY19hdXh2X29wZXJhdGlvbnNgLCBhbmQgYHByb2NfcGlkX2F0dHJfb3BlcmF0aW9uc2AuIFRoYXQncyBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGFsbCByZWxhdGVkIHRvIHByb2Nlc3MgaW5mb3JtYXRpb24gYW5kIG1ldGFkYXRhLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgdGhvdWdoLiBJIHdvbmRlciBpZiB0aGVzZSBvcGVyYXRpb25zIGFyZSB0aWVkIHRvIGBtZW1fb3BlbmAgaW4gYW55IHdheT8gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbWVtb3J5IGxpZmVjeWNsZS4gTGV0J3Mgc3RhcnQgd2l0aCBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLiBJJ2xsIGRlbHZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyMS43MDE4NzQ3OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzE0NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZW52aXJvbl9vcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEwMTY9c3RhdGljIHNzaXplX3QgZW52aXJvbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMTA3OC1cXG5mcy9wcm9jL2Jhc2UuYzoxMDc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xcbmZzL3Byb2MvYmFzZS5jLTEwODAtXFx0Lm9wZW5cXHRcXHQ9IGVudmlyb25fb3BlbixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTMzMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zMzE5LSNlbmRpZlxcbmZzL3Byb2MvYmFzZS5jOjMzMjA6XFx0UkVHKFxcXCJlbnZpcm9uXFxcIiwgICAgU19JUlVTUiwgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzMjEtXFx0UkVHKFxcXCJhdXh2XFxcIiwgICAgICAgU19JUlVTUiwgcHJvY19hdXh2X29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3Ni0jZW5kaWZcXG5mcy9wcm9jL2Jhc2UuYzozNjc3OlxcdFJFRyhcXFwiZW52aXJvblxcXCIsICAgU19JUlVTUiwgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTM2NzgtXFx0UkVHKFxcXCJhdXh2XFxcIiwgICAgICBTX0lSVVNSLCBwcm9jX2F1eHZfb3BlcmF0aW9ucyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjExOjIxLjc1MTU5MjcwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgwMDA0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgZW52aXJvbl9vcGVuYCoqXG5cbk9rYXksIHNvIHRoZXkncmUgdXNpbmcgYGVudmlyb25fb3BlbmAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIGZpZWxkIGdldHMgc2V0LCBsaWtlbHkgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHByb2JhYmx5IGBtbWAuIExldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLCBzaGFsbCB3ZT8gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZW52aXJvbl9vcGVuYCBhbmQgc2VlIHdoYXQgaXQncyAqcmVhbGx5KiBkb2luZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIG1hbmFnaW5nIHRoZSBhc3NvY2lhdGVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyNS40MzE2MDA5MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyOTE4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW52aXJvbl9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMTAtXFxuZnMvcHJvYy9iYXNlLmM6MTAxMTpzdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XFxuZnMvcHJvYy9iYXNlLmM6MTA4MDpcXHQub3BlblxcdFxcdD0gZW52aXJvbl9vcGVuLFxcbmZzL3Byb2MvYmFzZS5jLTEwODEtXFx0LnJlYWRcXHRcXHQ9IGVudmlyb25fcmVhZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MjUuNDgwOTAzODY5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODU4MDIyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGVudmlyb25fb3BlbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgZW52aXJvbl9vcGVuYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgYW55IG9idmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkLCB3aGF0IGl0IGRvZXMgaW4gYSBiYXNpYyBzZW5zZSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFyZSB0aGF0IHJlcXVpcmUgYXR0ZW50aW9uLiBJJ2xsIGJlIGZvY3VzZWQsIGVzcGVjaWFsbHksIG9uIGFueSBlcnJvciBwYXRocyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSXMgaXQgcmVhZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHksIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggc29tZSBraW5kIG9mIGFic3RyYWN0aW9uIGxheWVyPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgdHJ5aW5nIHRvIGFjY2VzcyBvciBtb2RpZnkgdGhlIGVudmlyb25tZW50IGNvbmN1cnJlbnRseT8gSSdsbCBiZSBsb29raW5nIGZvciBzaWducyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBmb3JtYXQgc3RyaW5nIGJ1Z3MsIGVzcGVjaWFsbHkgaWYgaXQgaW50ZXJhY3RzIHdpdGggdXNlci1wcm92aWRlZCBpbnB1dCwgb3IgZGF0YSByZWFkIGZyb20gZGlzay4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgc3RhbmRhcmQsIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGlzIHBhcnRpY3VsYXIgcHJvamVjdCwgdGhhdCBtaWdodCBuZWVkIGNsb3NlciBzY3J1dGlueSBpZiBpdCBpc24ndCBzb21ldGhpbmcgd2VsbCBrbm93bi4gVW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIGNvbnRleHQgaXMgZXNzZW50aWFsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyOS4wNjY3MDk1NDFaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMTA6XFx0XFxuMTAxMTpcXHRzdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4xMDEyOlxcdHtcXG4xMDEzOlxcdFxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG4xMDE0OlxcdH1cXG4xMDE1OlxcdFxcbjEwMTY6XFx0c3RhdGljIHNzaXplX3QgZW52aXJvbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbjEwMTc6XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuMTAxODpcXHR7XFxuMTAxOTpcXHRcXHRjaGFyICpwYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyOS4wNjY5MDk2MjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4ODcxMjc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IE1hcHBpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgZW52aXJvbl9vcGVuYCB1c2VzIGBfX21lbV9vcGVuYCDigJMgc3RhbmRhcmQgcHJvY2VkdXJlLiBUaGUgZnVuY3Rpb24gY2FsbCBpcyBgX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRClgLiBPa2F5LCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLiBUaGUgYGlub2RlYCBpcyBsaWtlbHkgdGhlIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlsZSwgYGZpbGVgIHdvdWxkIGJlIHRoZSBmaWxlIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCB0aGUgYFBUUkFDRV9NT0RFX1JFQURgIGlzIG9idmlvdXNseSBhYm91dCByZWFkIGFjY2VzcyBmb3IgcG90ZW50aWFsIHRyYWNpbmcuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBfX21lbV9vcGVuYC4gR290dGEgc2VlIGhvdyB0aGF0IG1lbW9yeSBtYXBwaW5nIGlzIGJlaW5nIHNldCB1cC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhY2Nlc3NpbmcgdGhlIHByb2Nlc3MncyBtZW1vcnkgd2lsbCBiZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgbWV0aG9kb2xvZ3ksIGlkZW50aWZ5IGFuZCBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoaXMgbWVldHMgbXkgc3RhbmRhcmRzIGZvciBzZWN1cmUgYWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MzIuOTU1NjI1ODg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL2Jhc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4gODQxOlxcdHtcXG4gODQyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgbW9kZSk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChtbSkpXFxuIDg0NTpcXHRcXHRcXHRyZXR1cm4gbW0gPyBQVFJfRVJSKG1tKSA6IC1FU1JDSDtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbW07XFxuIDg0ODpcXHRcXHRyZXR1cm4gMDtcXG4gODQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MzIuOTU1ODIyNDA1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTQ5Nzc5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2g6IEtNU0FOIFVubmVjZXNzYXJ5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBtYW5hZ2luZyBhIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGZvciBgL3Byb2MvcGlkL21lbWAgZmlsZSBvcGVyYXRpb25zLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIHRoYXQgcmVxdWlyZSBLTVNBTi4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgc3RydWN0IHRoYXQncyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAsIHdoaWNoICpkb2Vzbid0KiB6ZXJvIG1lbW9yeS4gSXQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGBpbnRyb3NwZWN0aW9uYCBmbGFnLlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgdG8gcmVtZW1iZXIgaXMgdGhhdCBgX19tZW1fb3BlbmAgc2V0cyBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBtbTtgLCBhbmQgYG1lbV9yZWxlYXNlYCBjYWxscyBgbW1kcm9wKGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKWAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGZvciB0aGUgbmV3IGBzdHJ1Y3QgbWVtX3ByaXZhdGVgLiBUaGUgYGludHJvc3BlY3Rpb25gIGZsYWcgaXMgaW5pdGlhbGl6ZWQgKmFmdGVyKiBgcHJvY19tZW1fb3BlbmAgaXMgY2FsbGVkIGFuZCBpdHMgcmVzdWx0IGNoZWNrZWQuIElmIGBwcm9jX21lbV9vcGVuYCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIElmIGBrbWFsbG9jX29iamAgZmFpbHMsIGl0IHJldHVybnMgYC1FTk9NRU1gLiBUaGVyZWZvcmUgdGhlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIG5vdCB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXG5cblRoZSBgc3RydWN0IG1lbV9wcml2YXRlYCBpcyBhbGxvY2F0ZWQsIGJ1dCBpdHMgZmllbGRzIGFyZSBhbGwgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCBpcyBzZXQuIFRoZSBzdHJ1Y3QgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUncyBwb3RlbnRpYWwgZm9yIHBhZGRpbmcgaW4gdGhlIHN0cnVjdCwgYnV0IHRoaXMgaXMgaXJyZWxldmFudCBiZWNhdXNlIHBhZGRpbmcgaXMgbm90IHZpc2libGUgdG8gdXNlcnNwYWNlLCB0aGVyZWZvcmUgaXQncyBub3QgYSBzb3VyY2Ugb2YgYW55IGluZm9ybWF0aW9uIGxlYWsuXG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBMU00gaG9vayBhbHNvIG5lZWRzIGluc3BlY3Rpb24uIFRoaXMgaG9vayBnZXRzIGNhbGxlZCwgYW5kIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGF2ZGAgaXMgcGFzc2VkIGFzIGFuICpvdXRwdXQqIHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAuIFRoZSBmdW5jdGlvbiBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAgcG9wdWxhdGVzIGBhdmRgLiBUaGUgY29udGVudHMgb2YgYGF2ZGAgYXJlICpub3QqIGV2ZW4gdXNlZCBieSBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKClgLiBUaGVyZWZvcmUsIHdoZXRoZXIgYGF2ZGAgaXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gaXRzIHVzZSBpcyBjb21wbGV0ZWx5IGlycmVsZXZhbnQuXG5cbkl0IGlzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyIGlmIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGxlYXZlcyBhbnkgcG90ZW50aWFsIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgZmlsZSBvcGVyYXRpb25zIGNhbiBvbmx5IGJlIGRvbmUgYWZ0ZXIgc3VjY2Vzc2Z1bCBvcGVuaW5nIG9mIGEgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYGludHJvc3BlY3Rpb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkIGF0IHRoaXMgdGltZS4gVGhlIFZGUyBsYXllciBwcm92aWRlcyB0aGUgY29ycmVjdCBjcmVkZW50aWFscy4gVGhlcmUncyBubyBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZSBzaW5jZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzbid0IHZpc2libGUgdW50aWwgYG9wZW5gIHJldHVybnMuXG5cbkkndmUgYWxzbyBjaGVja2VkIGBrbWFsbG9jX29iamAgYW5kIGNvbmZpcm1lZCB0aGF0IGl0J3MgYSB3cmFwcGVyIGFyb3VuZCBga21hbGxvY2AgYW5kIGlzIGNvbXBsZXRlbHkgc2FmZS4gVGhlIGBfX2ZyZWVgIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5IGZyZWVzIGl0IHdoZW4gYG1lbV9vcGVuYCByZXR1cm5zLiBTbywgaXQgaXMgc2FmZSB0byB1c2UuXG5cbkluIHN1bW1hcnk6IHRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCByZWxldmFudCBmaWVsZHMuIFRoZSBzdHJ1Y3QgaXMgbmV2ZXIgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDMzLCJPdXRwdXRUb2tlbnMiOjM2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMjowMS4xMDU2MDUzNDdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgL3Byb2MvcGlkL21lbWAgb3BlbiBhbmQgcmVhZC93cml0ZSBsb2dpYyB0byB0cmFjayB3aGV0aGVyIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIHdhcyBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbiAoYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSkuIEl0IGludHJvZHVjZXMgYSBuZXcgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgdG8gaG9sZCB0aGUgYG1tX3N0cnVjdGAgcG9pbnRlciBhbmQgYSBib29sZWFuIGBpbnRyb3NwZWN0aW9uYCBmbGFnLiBUaGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYnV0IGJvdGggb2YgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbWVtX29wZW4oKWAuIFRoZSBzdHJ1Y3QgaXMgb25seSB1c2VkIGludGVybmFsbHkgd2l0aGluIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgZG8gbm90IHBvc2UgYW4gaW5mby1sZWFrIHJpc2suXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxcblxcblNpbmNlIGFsbCBpbnRyb2R1Y2VkIG1lbW9yeSBpcyBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciB1c2VkIHN0cmljdGx5IGFzIG91dHB1dCBwYXJhbWV0ZXJzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGJ5dGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cXG5cXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgaXRzIFNFTGludXggaW1wbGVtZW50YXRpb24gYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IGlzIHBhc3NlZCBwdXJlbHkgYXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIHdoaWNoIHBvcHVsYXRlcyBpdC4gVGhlIGNvbnRlbnRzIG9mIGBhdmRgIGFyZSBub3QgZXZlbiByZWFkIGJ5IHRoZSBjYWxsZXIuXFxuXFxuU2luY2UgYWxsIGludHJvZHVjZWQgbWVtb3J5IGlzIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHVzZWQgc3RyaWN0bHkgYXMgb3V0cHV0IHBhcmFtZXRlcnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 22:07:19 +0000 UTC FinishedAt: 2026-08-18 22:12:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_MEM_ALWAYS_FORCE", "SECURITY_SELINUX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_MEM_ALWAYS_FORCE", "SECURITY_SELINUX" ], "series_id": "a6361e55-581b-4ca3-8d32-20f0d0ae60a4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "security_introspect_mem_foll_force", "selinux_introspect_mem_foll_force", "mem_release_with_private" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfTUVNX0FMV0FZU19GT1JDRSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7bWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkMGRiYzY2NjE2ODAzMTAxMzhmNTQwMzZkMDgyMTcxZGVlZWJkMTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjowOToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXG5pbmRleCA3ODBmODEyNTkwNTI3Li4zZGZhZWY0OWJiNzBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jXG5AQCAtODQ4LDE1ICYjNDM7ODQ4LDMyIEBAIHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuJiM0MztzdHJ1Y3QgbWVtX3ByaXZhdGUge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdC8qIFdhcyB0aGUgcHRyYWNlIGFjY2VzcyBjaGVjayBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbj8gKi9cbiYjNDM7XHRib29sIGludHJvc3BlY3Rpb247XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuJiM0MztcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuJiM0MztcdHByaXYtXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZW1tKSlcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZW1tID8gUFRSX0VSUihwcml2LVx1MDAzZW1tKSA6IC1FU1JDSDtcbiYjNDM7XHRwcml2LVx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuJiM0MztcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODczLDYgJiM0Mzs4OTAsOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0fVxuIFx0XHRyZXR1cm4gcHRyYWNlX2FjdGl2ZTtcbiBcdGRlZmF1bHQ6XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uKVxuJiM0MztcdFx0XHRyZXR1cm4gc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShmaWxlLVx1MDAzZWZfY3JlZCkgPT0gMDtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gfVxuQEAgLTg4MCw3ICYjNDM7ODk5LDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXG4ge1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXHUwMDNlbW07XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcbiBcdHNzaXplX3QgY29waWVkO1xuIFx0Y2hhciAqcGFnZTtcbkBAIC05NzAsMTIgJiM0Mzs5OTAsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0bW1kcm9wKHByaXYtXHUwMDNlbW0pO1xuJiM0MztcdGtmcmVlKHByaXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuIFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbiBcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbiBcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4tXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbiYjNDM7XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4gXHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li42NzQ1MmY3MWJlZGZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMzYsNiAmIzQzOzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLFxuIFx0IHVuc2lnbmVkIGludCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxuIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHQga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5mODQ4M2JlNThiYzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC0zMzgsNiAmIzQzOzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XG4mIzQzO2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTtcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuIFx0XHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxuQEAgLTY3Niw2ICYjNDM7Njc3LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0cmV0dXJuIGNhcF9wdHJhY2VfdHJhY2VtZShwYXJlbnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZDBmNzkwYTUzNGViMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiAmIzQzOzU5NSwyMSBAQCBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBpbnRyb3NwZWN0aXZlIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxuJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XG4mIzQzOyAqXG4mIzQzOyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSwgd2hpY2hcbiYjNDM7ICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxuJiM0MzsgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3NcbiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2Vzc1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMThkZDI4YjJiYjEzZC4uOTA1MTM3YzQ3MzIxNyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMjE1Nyw2ICYjNDM7MjE1NywzMiBAQCBzdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRcdFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGVcbiYjNDM7ICogbm9uLXdyaXRhYmxlIFZNQXMgdmlhIC9wcm9jL3NlbGYvbWVtLlxuJiM0MzsgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5XG4mIzQzOyAqIHRyaWdnZXJzIG9uIGFjY2Vzc2VzIHRoYXQgYXJlIG5vdCB2aXNpYmxlIHRvIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS5cbiYjNDM7ICpcbiYjNDM7ICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2VzbiYjMzk7dCBtYWtlIHNlbnNlIGhlcmUsIHNpbmNlIHdlIGNhbiYjMzk7dFxuJiM0MzsgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0dTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpO1xuJiM0MztcbiYjNDM7XHQvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi9cbiYjNDM7XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcdTAwMjZhdmQpO1xuJiM0MztcbiYjNDM7XHQvKiBBbHNvIGFsbG93IGlmIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIHdvdWxkIGFsbG93IGl0LiAqL1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICYjNDM7NzU4NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV90cmFjZW1lLCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19NRU1fQUxXQVlTX0ZPUkNFJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDttZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDBkYmM2NjYxNjgwMzEwMTM4ZjU0MDM2ZDA4MjE3MWRlZWViZDEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMjI6MDk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDc4MGY4MTI1OTA1MjcuLjNkZmFlZjQ5YmI3MGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04NDgsMTUgJiM0Mzs4NDgsMzIgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqLwomIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwkvKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgYnlwYXNzZWQgZHVlIHRvIGludHJvc3BlY3Rpb24/ICovCiYjNDM7CWJvb2wgaW50cm9zcGVjdGlvbjsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS0mZ3Q7Zl9vcC0mZ3Q7Zm9wX2ZsYWdzICZhbXA7IEZPUF9VTlNJR05FRF9PRkZTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7CiYjNDM7CXByaXYtJmd0O21tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHByaXYtJmd0O21tKSkKJiM0MzsJCXJldHVybiBwcml2LSZndDttbSA/IFBUUl9FUlIocHJpdi0mZ3Q7bW0pIDogLUVTUkNIOwomIzQzOwlwcml2LSZndDtpbnRyb3NwZWN0aW9uID0gcHJpdi0mZ3Q7bW0gPT0gY3VycmVudC0mZ3Q7bW07CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJYm9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7CiAKQEAgLTg3Myw2ICYjNDM7ODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCX0KIAkJcmV0dXJuIHB0cmFjZV9hY3RpdmU7CiAJZGVmYXVsdDoKJiM0MzsJCWlmIChwcml2LSZndDtpbnRyb3NwZWN0aW9uKQomIzQzOwkJCXJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtJmd0O2ZfY3JlZCkgPT0gMDsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQpAQCAtODgwLDcgJiM0Mzs4OTksOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDttbTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvczsKIAlzc2l6ZV90IGNvcGllZDsKIAljaGFyICpwYWdlOwpAQCAtOTcwLDEyICYjNDM7OTkwLDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJbW1kcm9wKHByaXYtJmd0O21tKTsKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBtZW1fbHNlZWssCiAJLnJlYWQJCT0gbWVtX3JlYWQsCiAJLndyaXRlCQk9IG1lbV93cml0ZSwKIAkub3BlbgkJPSBtZW1fb3BlbiwKLQkucmVsZWFzZQk9IG1lbV9yZWxlYXNlLAomIzQzOwkucmVsZWFzZQk9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSwKIAkuZm9wX2ZsYWdzCT0gRk9QX1VOU0lHTkVEX09GRlNFVCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uNjc0NTJmNzFiZWRmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCSB1bnNpZ25lZCBpbnQgbW9kZSkKIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpCiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCSBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTMzOCw2ICYjNDM7MzM4LDcgQEAgaW50IHNlY3VyaXR5X2JpbmRlcl90cmFuc2Zlcl9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogCQkJCSAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpOwomIzQzO2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTsKIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCkBAIC02NzYsNiAmIzQzOzY3NywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MWFlYThmZGYwMTQyLi5kMGY3OTBhNTM0ZWIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTU5NSw2ICYjNDM7NTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkCiYjNDM7ICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIG9mIHRoZSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5LCB3aGljaAomIzQzOyAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay4KJiM0MzsgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KJiM0MzsgKi8KJiM0MztpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QpOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzCiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDE4ZGQyOGIyYmIxM2QuLjkwNTEzN2M0NzMyMTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsMzIgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCQkJICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZQomIzQzOyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS4KJiM0MzsgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5CiYjNDM7ICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS4KJiM0MzsgKgomIzQzOyAqIENyZWF0aW5nIGFuIGF1ZGl0IHJlY29yZCBvbiBkZW5pYWwgZG9lc24mIzM5O3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4mIzM5O3QKJiM0MzsgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiYjNDM7CWludCByYzsKJiM0MzsJdTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpOwomIzQzOwomIzQzOwkvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi8KJiM0MzsJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fRVhFQ01FTSwgMCwgJmFtcDthdmQpOwomIzQzOwomIzQzOwkvKiBBbHNvIGFsbG93IGlmIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIHdvdWxkIGFsbG93IGl0LiAqLwomIzQzOwlpZiAocmMpCiYjNDM7CQlyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsICZhbXA7YXZkKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIHsKQEAgLTc1NTgsNiAmIzQzOzc1ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCiAJTFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLAogCUxTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLAomIzQzOwlMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksCiAJTFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSwKIAlMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLAogCUxTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGFjY2Vzc2VkLiBJdCYjMzk7cyBhZGRpbmcgYW4gTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCwgY2hlY2tpbmcgZm9yIGBGT0xMX0ZPUkNFYC4gIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIGFuZCBjbGVhcmx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuICBJJiMzOTttIHNlZWluZyBuZXcgc3RydWN0dXJlcywgYHN0cnVjdCBtZW1fcHJpdmF0ZWAsIGFuZCBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zIGxpa2UgYG1lbV9vcGVuYCwgYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiBBbmQgaXQgaG9va3MgdGhlIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGluIFNFTGludXggdG9vLgoKTXkgaW5pdGlhbCBmb2N1cyBpcyBmaW5kaW5nIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJIG5vdGVkOgoKKiAgIGBtZW1fb3BlbmAg4oCTIHN0YXRpYywgYnV0IHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIGBwcm9jX21lbV9vcGVyYXRpb25zLm9wZW5gLiBXb3J0aCBsb29raW5nIGF0LgoqICAgYHByb2NfbWVtX2ZvbGxfZm9yY2VgIOKAkyBzdGF0aWMsIGNhbGxlZCBmcm9tIGBtZW1fcndgLgoqICAgYG1lbV9yd2Ag4oCTIHN0YXRpYywgY2FsbGVkIGZyb20gYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAuCiogICBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAg4oCTIFRoaXMgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuICBJdCYjMzk7cyBnbG9iYWwhIEhpZ2ggcHJpb3JpdHkuCiogICBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCDigJMgc3RhdGljLCBidXQgaG9va2VkLgoKSG1tLCBva2F5LCBzbyBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGFuZCBgbWVtX3J3YCBhcmUgYWxsICpzdGF0aWMqLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXkmIzM5O3JlIGNhbGxlZCwgYW5kIHdoYXQgdGhlIFZGUyBpbnRlcmFjdGlvbiBsb29rcyBsaWtlLiAgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGFyZSBhY3R1YWxseSB1c2VkLgoKQWxyaWdodCwgSSByZW1lbWJlciB0aGF0IGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGFyZSBpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AuICBBbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMgdGhlcmUgdG9vLiAgTm93LCB0aGUgcmVhbCBnZW0gaGVyZSBpcyB0aGF0IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBpcyAqZXhwb3J0ZWQqIOKAkyB0aGF0JiMzOTtzIG11Y2ggYmV0dGVyIGZvciBmdXp6aW5nLiBJIGNvbmZpcm1lZCBpdCYjMzk7cyBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuCgpPa2F5LCBiYWNrIHRvIGBmcy9wcm9jL2Jhc2UuY2AuIENvbmZpcm1lZCDigJMgYG1lbV9vcGVuYCwgYG1lbV9yd2AsIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBhcmUgYWxsIHN0YXRpYy4gIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugc3RhdGljYWxseSBkZWZpbmVkIGZ1bmN0aW9ucyBhcmUgbGVzcyBsaWtlbHkgdG8gYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBiZWluZyBjYWxsZWQgZGlyZWN0bHkuIFdlIHVzdWFsbHkgd2FudCB0byBmaW5kIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGFzIEFQSXMuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIFZGUyBsYXllci4gU28sIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBsb29rcyBwcmltZSwgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVkZTIGNhbGxzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHBhdGNoIHN1Z2dlc3RzIHRoZSBuZXcgZnVuY3Rpb24mIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKSSYjMzk7bSBhbHNvIHNlZWluZyBhIGNvbW1lbnQgYWJvdXQgYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoaXMgaXMgYSAqY3JpdGljYWwqIHBpZWNlLiAgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBBIGNvbmRpdGlvbmFsIHBhdGggaXMgYSBiaWcgcmVkIGZsYWcgdGhhdCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhvcm91Z2hseSB3aXRoIGZ1enppbmcuIExldCYjMzk7cyBkbyBhIGdyZXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFJPQ19NRU1fRk9SQ0VfQUxXQVlTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcbmZzL3Byb2MvYmFzZS5jOjEyMjpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcbmZzL3Byb2MvYmFzZS5jLTEyMy1cdFBST0NfTUVNX0ZPUkNFX1BUUkFDRSxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMjktXHRJU19FTkFCTEVEKENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0UpID8gUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIDpcbmZzL3Byb2MvYmFzZS5jOjEzMDpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUztcbmZzL3Byb2MvYmFzZS5jLTEzMS1cbmZzL3Byb2MvYmFzZS5jPTEzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIHByb2NfbWVtX2ZvcmNlX3RhYmxlW10gX19pbml0Y29uc3QgPSB7XG5mcy9wcm9jL2Jhc2UuYzoxMzM6XHR7IFwmIzM0O2Fsd2F5c1wmIzM0OywgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTIH0sXG5mcy9wcm9jL2Jhc2UuYy0xMzQtXHR7IFwmIzM0O3B0cmFjZVwmIzM0OywgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIH0sXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjAzLSAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay5cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjA0OiAqIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLlxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDUtICpcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE1ND1zdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNjItICogbm9uLXdyaXRhYmxlIFZNQXMgdmlhIC9wcm9jL3NlbGYvbWVtLlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNjM6ICogVGhpcyBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLCBhbmQgb25seVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNjQtICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM2NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLZXJuZWwgTWVtb3J5IEFjY2VzcyBDb250cm9sKioKClJpZ2h0LCBzbyBJIHNlZSBgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTYC4gT2theSwgZW51bSB2YWx1ZS4gQW5kIHRoYXQmIzM5O3MgbGlrZWx5IGNvbm5lY3RlZCB0byBhIGtlcm5lbCBjb25maWcgb3B0aW9uIGxpa2UgYENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBkZWFsaW5nIHdpdGggaG93IGBwcm9jZnNgIGhhbmRsZXMgbWVtb3J5IGFjY2Vzcy4gR2l2ZW4gSSYjMzk7bSBzZWVpbmcgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpdmVzLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgYFBST0NfTUVNX0ZPUkNFYCBmYW1pbHkgb2Ygb3B0aW9ucyBhY3R1YWxseSAqZG9lcyouIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHksIGRlYnVnZ2luZywgYW5kIG90aGVyIGFzcGVjdHMgb2YgdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdWxseSB0byBhc3Nlc3MgaXRzIGltcGFjdC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgbXkgbmV4dCBzdG9wLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BST0NfTUVNX0ZPUkNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcbmZzL3Byb2MvYmFzZS5jOjEyMjpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcdFBST0NfTUVNX0ZPUkNFX1BUUkFDRSxcbmZzL3Byb2MvYmFzZS5jOjEyNDpcdFBST0NfTUVNX0ZPUkNFX05FVkVSXG5mcy9wcm9jL2Jhc2UuYy0xMjUtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cbmZzL3Byb2MvYmFzZS5jOjEyODpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX05PX0ZPUkNFKSA/IFBST0NfTUVNX0ZPUkNFX05FVkVSIDpcbmZzL3Byb2MvYmFzZS5jOjEyOTpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX0ZPUkNFX1BUUkFDRSkgPyBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgOlxuZnMvcHJvYy9iYXNlLmM6MTMwOlx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xuZnMvcHJvYy9iYXNlLmMtMTMxLVxuZnMvcHJvYy9iYXNlLmM9MTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgcHJvY19tZW1fZm9yY2VfdGFibGVbXSBfX2luaXRjb25zdCA9IHtcbmZzL3Byb2MvYmFzZS5jOjEzMzpcdHsgXCYjMzQ7YWx3YXlzXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNDpcdHsgXCYjMzQ7cHRyYWNlXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNTpcdHsgXCYjMzQ7bmV2ZXJcJiMzNDssIFBST0NfTUVNX0ZPUkNFX05FVkVSIH0sXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXHR7IH1cbi0tXG5mcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuZnMvcHJvYy9iYXNlLmMtODgwLVx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xuZnMvcHJvYy9iYXNlLmM6ODgxOlx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcbmZzL3Byb2MvYmFzZS5jLTg4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuZnMvcHJvYy9iYXNlLmM6ODgzOlx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XG5mcy9wcm9jL2Jhc2UuYy04ODQtXHRcdHRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGVfaW5vZGUoZmlsZSkpO1xuLS1cbnNlY3VyaXR5L0tjb25maWc9MjI9Y2hvaWNlXG5zZWN1cml0eS9LY29uZmlnLTIzLVx0cHJvbXB0IFwmIzM0O0FsbG93IC9wcm9jL3BpZC9tZW0gYWNjZXNzIG92ZXJyaWRlXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnOjI0Olx0ZGVmYXVsdCBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcbnNlY3VyaXR5L0tjb25maWctMjUtXHRoZWxwXG4tLVxuc2VjdXJpdHkvS2NvbmZpZz0zMz1jb25maWcgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0zOC1cbnNlY3VyaXR5L0tjb25maWc6Mzk6Y29uZmlnIFBST0NfTUVNX0ZPUkNFX1BUUkFDRVxuc2VjdXJpdHkvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7UmVxdWlyZSBhY3RpdmUgcHRyYWNlKCkgdXNlIGZvciBhY2Nlc3Mgb3ZlcnJpZGVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTU5Mz1pbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDMtICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxuc2VjdXJpdHkvc2VjdXJpdHkuYzo2MDQ6ICogVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMuXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwNS0gKlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMTU0PXN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2Mi0gKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE2MzogKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2NC0gKiB0cmlnZ2VycyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0byBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gdGhlIG9uZSBoYXZpbmcgaXQ6CgoqKkNvbmZpZ3VyYXRpb24gQ29uZnVzaW9uIGFuZCBWZXJpZmljYXRpb24qKgoKSG1tLCBsZXQgbWUgc2VlLi4uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYC4uLiBvciB3YXMgaXQgYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2A/IEl0JiMzOTtzIGVhc3kgdG8gZ2V0IHRob3NlIG1peGVkIHVwIHNvbWV0aW1lcy4gQmVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gaW4gYHNlY3VyaXR5L0tjb25maWdgLiBDYW4mIzM5O3QgdHJ1c3QgbXkgbWVtb3J5IG9uIHRoZXNlIGRldGFpbHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBjcml0aWNhbCBzZWN1cml0eS1yZWxhdGVkIHNldHRpbmdzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGFsd2F5cywgdG8gZ28gYmFjayB0byB0aGUgc291cmNlIHdoZW4gdGhlcmUmIzM5O3MgZXZlbiBhIGZsaWNrZXIgb2YgZG91YnQgYWJvdXQgdGhlIGV4YWN0IG5hbWUgb3IgbWVhbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NlY3VyaXR5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDIxOlx0XG4gIDIyOlx0Y2hvaWNlXG4gIDIzOlx0XHRwcm9tcHQgXCYjMzQ7QWxsb3cgL3Byb2MvcGlkL21lbSBhY2Nlc3Mgb3ZlcnJpZGVcJiMzNDtcbiAgMjQ6XHRcdGRlZmF1bHQgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRyYWRpdGlvbmFsbHkgL3Byb2MvcGlkL21lbSBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgbWVtb3J5XG4gIDI3Olx0XHQgIHBlcm1pc3Npb25zIGZvciB1c2VycyBsaWtlIHB0cmFjZSwgYXNzdW1pbmcgdGhleSBoYXZlIHB0cmFjZVxuICAyODpcdFx0ICBjYXBhYmlsaXR5LlxuICAyOTpcdFxuICAzMDpcdFx0ICBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbGltaXQgdGhhdCAtIGVpdGhlciBuZXZlciBvdmVycmlkZSwgb3JcbiAgMzE6XHRcdCAgcmVxdWlyZSBhY3R1YWwgYWN0aXZlIHB0cmFjZSBhdHRhY2htZW50IChkZWZhdWx0KS5cbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXG4gIDM0Olx0XHRib29sIFwmIzM0O1RyYWRpdGlvbmFsIC9wcm9jL3BpZC9tZW0gYmVoYXZpb3JcJiMzNDtcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBhbGxvd3MgL3Byb2MvcGlkL21lbSBhY2Nlc3NlcyB0byBvdmVycmlkZSBtZW1vcnkgbWFwcGluZ1xuICAzNzpcdFx0ICBwZXJtaXNzaW9ucyBpZiB5b3UgaGF2ZSBwdHJhY2UgYWNjZXNzIHJpZ2h0cy5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDQwOlx0XHRib29sIFwmIzM0O1JlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXCYjMzQ7XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcbiAgNDM6XHRcdCAgcGVybWlzc2lvbnMgZm9yIGFjdGl2ZSBwdHJhY2VycyBsaWtlIGdkYi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgUFJPQ19NRU1fTk9fRk9SQ0VcbiAgNDY6XHRcdGJvb2wgXCYjMzQ7TmV2ZXJcJiMzNDtcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgTmV2ZXIgb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmcgcGVybWlzc2lvbnNcbiAgNDk6XHRcbiAgNTA6XHRlbmRjaG9pY2VcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gIDUzOlx0XHRib29sIFwmIzM0O21zZWFsIHN5c3RlbSBtYXBwaW5nc1wmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiA2NEJJVFxuICA1NTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuICA1NjpcdFx0ZGVwZW5kcyBvbiAhQ0hFQ0tQT0lOVF9SRVNUT1JFXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIEFwcGx5IG1zZWFsIG9uIHN5c3RlbSBtYXBwaW5ncy5cbiAgNTk6XHRcdCAgVGhlIHN5c3RlbSBtYXBwaW5ncyBpbmNsdWRlcyB2ZHNvLCB2dmFyLCB2dmFyX3ZjbG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzA1CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uOiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYC4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBgZnMvcHJvYy9iYXNlLmNgLCBpZiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBzZXQsIG5laXRoZXIgYENPTkZJR19QUk9DX01FTV9OT19GT1JDRWAgbm9yIGBDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFYCBpcyBlbmFibGVkLCBhbmQgaXQgZGVmYXVsdHMgdG8gYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoZXJlZm9yZSwgZW5hYmxpbmcgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBwYXRoIGZvciB0ZXN0aW5nLgoKSSBuZWVkIHRvIHJlbWVtYmVyIFNFTGludXggaXMgaW52b2x2ZWQuIFNvLCBgU0VDVVJJVFlfU0VMSU5VWGAgaXMgYWxzbyBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG1lbV9vcGVuYCwgYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGluIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZ1enppbmcgdGFyZ2V0cy4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucy4gYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGxvb2tzIHByb21pc2luZyDigJMgaXQmIzM5O3MgYW4gZXhwb3J0ZWQsIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLiBBbHNvLCBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBzZWVtcyBsaWtlIGFub3RoZXIgZ3JlYXQgdGFyZ2V0LCBmb3VuZCBpbiBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueXRoaW5nIGVsc2UgaXMgdmlhYmxlLiBgbWVtX29wZW5gIGlzIHN0YXRpYywgYnV0IGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AsIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGlzIG1lYW5zIGl0IGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhbmQgd29uJiMzOTt0IGJlIGZ1bGx5IGlubGluZWQuIFRoZXJlZm9yZSwgYG1lbV9vcGVuYCBjb3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgZm9yIGZ1enppbmcuIFRoZSBzYW1lIGxvZ2ljIGhvbGRzIHRydWUgZm9yIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiBIb3dldmVyLCBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaXMgdGhlIGJldHRlciBjaG9pY2UgYmVjYXVzZSBpdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgbWVtX29wZW5gICppcyogc3RhdGljLCBhbmQgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgICppcyogZXhwb3J0ZWQuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgZG9lc24mIzM5O3QgZGVwZW5kIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucywgYWNjb3JkaW5nIHRvIHRoZSBLY29uZmlnIGZpbGUgaW4gYHNlY3VyaXR5L0tjb25maWdgLiBgU0VDVVJJVFlfU0VMSU5VWGAgaGFzIGEgZmV3IGRlcGVuZGVuY2llcywgYnV0IHRoYXQmIzM5O3MgYWxyZWFkeSBrbm93bi4KCkhlcmUgYXJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAKKiAgIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgCiogICBgbWVtX29wZW5gCiogICBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYAoKSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgYG1lbV9vcGVuYCBpcyB1bmlxdWUsIGJ1dCBpdCBkb2VzIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX29wZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0xNTY9c3RhdGljIGludFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzoxNTc6c3B1ZnNfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTE1OC17XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0zMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWVtX2ZvcHMgPSB7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjMwNDpcdC5vcGVuXHRcdFx0PSBzcHVmc19tZW1fb3BlbixcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA1LVx0LnJlbGVhc2VcdFx0PSBzcHVmc19tZW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTkyMD1pbnQgeGVfcGFnZW1hcF9jYWNoZV9jcmVhdGUoc3RydWN0IHhlX3RpbGUgKnRpbGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5MzYtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTkzNzpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kZXZtZW1fb3BlbihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTM4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTk3Mj1zdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2RybV9wYWdlbWFwX2Zyb21fZmQoaW50IGZkLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTk4LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE5OTk6XHRkcGFnZW1hcCA9IHhlX2Rldm1lbV9vcGVuKHRvX3hlX2RldmljZShkcm0pLCByZWdpb25faW5zdGFuY2UpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTIwMDAtXHRkcm1fZGV2X2V4aXQoaWR4KTtcbi0tXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jPTUzMT12b2lkIHVwZGF0ZV93YXRlcm1hcmtfc2V0dGluZyhzdHJ1Y3QgaXB1Nl9pc3lzICppc3lzKVxuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNTQwLVx0dTY0IGlzeXNfcGJfZGF0YXJhdGVfbWJzID0gMDtcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NTQxOlx0dTMyIG1lbV9vcGVuX3RocmVzaG9sZCA9IDA7XG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jLTU0Mi1cdHN0cnVjdCBsdHJfZGlkIGx0cmRpZDtcbi0tXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jLTYxOS1cdFx0XHQgICAgIElTRl9ETUFfVE9QX0dEQV9QUk9GRVJUWV9QQUdFX1NJWkUpID8gMSA6IDA7XG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jOjYyMDpcdFx0bWVtX29wZW5fdGhyZXNob2xkID0gaXN5cy1cdTAwM2VwZGF0YS1cdTAwM2VpcGRhdGEtXHUwMDNlbWVtb3Blbl90aHJlc2hvbGQ7XG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jOjYyMTpcdFx0bWVtX29wZW5fdGhyZXNob2xkID0gbWF4X3QodTMyLCBtZW1fb3Blbl90aHJlc2hvbGQsIHBhZ2VfbnVtKTtcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NjIyOlx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7bWVtX29wZW5fdGhyZXNob2xkOiAldVxcblwmIzM0OywgbWVtX29wZW5fdGhyZXNob2xkKTtcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNjIzLVx0XHRzZXRfaXdha2VfcmVnaXN0ZXIoaXN5cywgR0RBX01FTU9QRU5fVEhSRVNIT0xEX0lOREVYLFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo2MjQ6XHRcdFx0XHQgICBtZW1fb3Blbl90aHJlc2hvbGQpO1xuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYy02MjUtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jPTE2NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmxhc2hfZGVidWdmc19mb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMTY1OS1cdC5vd25lciAgID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYzoxNjYwOlx0Lm9wZW4gICAgPSBtZW1fb3BlbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTE2NjEtXHQucmVhZCAgICA9IGZsYXNoX3JlYWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM9MzI0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ2VfcWluZm9fZGVidWdmc19mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTMyNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYzozMjUzOmludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTMyNTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oPTY1PXZvaWQgYWRkX2RlYnVnZnNfZmlsZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmgtNjctXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbmZpbGVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oOjY4OmludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuaC02OS1cbi0tXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jPTY5PUFUVFJJQlVURV9HUk9VUFMocWNvbV9ybXRmc19tZW0pO1xuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy03MC1cbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmM6NzE6c3RhdGljIGludCBxY29tX3JtdGZzX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy03Mi17XG4tLVxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYz0xNTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWNvbV9ybXRmc19tZW1fZm9wcyA9IHtcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMTUzLVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jOjE1NDpcdC5vcGVuID0gcWNvbV9ybXRmc19tZW1fb3BlbixcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMTU1LVx0LnJlYWQgPSBxY29tX3JtdGZzX21lbV9yZWFkLFxuLS1cbmZzL3Byb2MvYmFzZS5jPTgwND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3NpbmdsZV9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtODExLS8qXG5mcy9wcm9jL2Jhc2UuYzo4MTI6ICogcHJvY19tZW1fb3BlbigpIGNhbiByZXR1cm4gZXJybm8sIE5VTEwgb3IgbW1fc3RydWN0Ki5cbmZzL3Byb2MvYmFzZS5jLTgxMy0gKlxuLS1cbmZzL3Byb2MvYmFzZS5jLTgxNy0gKi9cbmZzL3Byb2MvYmFzZS5jOjgxODpzdHJ1Y3QgbW1fc3RydWN0ICpwcm9jX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKVxuZnMvcHJvYy9iYXNlLmMtODE5LXtcbi0tXG5mcy9wcm9jL2Jhc2UuYy04MzktXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL3Byb2MvYmFzZS5jLTg0MS17XG5mcy9wcm9jL2Jhc2UuYzo4NDI6XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xuZnMvcHJvYy9iYXNlLmMtODQzLVxuLS1cbmZzL3Byb2MvYmFzZS5jPTg1Mj1zdHJ1Y3QgbWVtX3ByaXZhdGUge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTg1Ny1cbmZzL3Byb2MvYmFzZS5jOjg1ODpzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtODU5LXtcbi0tXG5mcy9wcm9jL2Jhc2UuYy04NjUtXHRcdHJldHVybiAtRUlOVkFMO1xuZnMvcHJvYy9iYXNlLmM6ODY2Olx0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG5mcy9wcm9jL2Jhc2UuYy04NjctXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2VtbSkpXG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwMDUtXHQud3JpdGVcdFx0PSBtZW1fd3JpdGUsXG5mcy9wcm9jL2Jhc2UuYzoxMDA2Olx0Lm9wZW5cdFx0PSBtZW1fb3BlbixcbmZzL3Byb2MvYmFzZS5jLTEwMDctXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAxMT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTEwMTIte1xuZnMvcHJvYy9iYXNlLmM6MTAxMzpcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcbmZzL3Byb2MvYmFzZS5jLTEwMTQtfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTEwODY9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDg3LXtcbmZzL3Byb2MvYmFzZS5jOjEwODg6XHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcbmZzL3Byb2MvYmFzZS5jLTEwODktfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTI3Njc9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjc2OS1cdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gTlVMTDtcbmZzL3Byb2MvYmFzZS5jOjI3NzA6XHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xuZnMvcHJvYy9iYXNlLmMtMjc3MS1cdHJldHVybiAwO1xuLS1cbmZzL3Byb2MvaW50ZXJuYWwuaD0zOTQ9c3RydWN0IHByb2NfbWFwc19wcml2YXRlIHtcbi0tXG5mcy9wcm9jL2ludGVybmFsLmgtNDA0LVxuZnMvcHJvYy9pbnRlcm5hbC5oOjQwNTpzdHJ1Y3QgbW1fc3RydWN0ICpwcm9jX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKTtcbmZzL3Byb2MvaW50ZXJuYWwuaC00MDYtXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTM3Nj1zdGF0aWMgaW50IHByb2NfbWFwc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zODQtXHRwcml2LVx1MDAzZWlub2RlID0gaW5vZGU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mzg1Olx0cHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX1JFQUQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTM4Ni1cdGlmIChJU19FUlIocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSkpIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTYxOT1zdGF0aWMgaW50IHNtYXBzX3JvbGx1cF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNjMyLVx0cHJpdi1cdTAwM2Vpbm9kZSA9IGlub2RlO1xuZnMvcHJvYy90YXNrX21tdS5jOjE2MzM6XHRwcml2LVx1MDAzZWxvY2tfY3R4Lm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTYzNC1cdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tKSkge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yMzk0PXN0YXRpYyBpbnQgcGFnZW1hcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMzk3LVxuZnMvcHJvYy90YXNrX21tdS5jOjIzOTg6XHRtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX1JFQUQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTIzOTktXHRpZiAoSVNfRVJSX09SX05VTEwobW0pKVxuLS1cbmZzL3Byb2MvdGFza19ub21tdS5jPTI1Mj1zdGF0aWMgaW50IG1hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNjEtXHRwcml2LVx1MDAzZWlub2RlID0gaW5vZGU7XG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoyNjI6XHRwcml2LVx1MDAzZWxvY2tfY3R4Lm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNjMtXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMzkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBDaGVsaXNvIGN4Z2I0IERyaXZlcioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgQ2hlbGlzbyBjeGdiNCBkcml2ZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGl0cyBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gSSBzcG90dGVkIGEgYG1lbV9vcGVuYCBmdW5jdGlvbiBjYWxsIHdpdGhpbiBgY3hnYjRfZGVidWdmcy5jYC4gSG1tLCB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IHVuaXF1ZSwgaXMgaXQ/IEkmIzM5O3ZlIHNlZW4gdGhhdCBuYW1lIHVzZWQgaW4gdmFyaW91cyBjb250ZXh0cy4gSXQgbWFrZXMgbWUgd2FudCB0byBsb29rIGRlZXBlci4KCkl0IG1lYW5zIHRoZSBmdW5jdGlvbiBuYW1lIGlzIGxpa2VseSBub3QgYSBwYXJ0aWN1bGFybHkgcm9idXN0IHNpZ25pZmllciBvZiBhbnl0aGluZywgdGhlcmVmb3JlIGEgZGlmZmVyZW50IG5hbWUgb3IgZnVuY3Rpb24gaGFzIHRvIGJlIHNlbGVjdGVkLgoKT2theSwgbGV0JiMzOTtzIHRyeSBhIGRpZmZlcmVudCB0YWNrLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc3BlY2lmaWMgYW5kIGxlc3MgZ2VuZXJpYyBuYW1lLiBNYXliZSBhIGZ1bmN0aW9uIHdpdGggbW9yZSBzcGVjaWFsaXplZCBwdXJwb3NlLiBXaGF0IGFib3V0IHRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmdW5jdGlvbj8gVGhhdCBuYW1lIHNvdW5kcyBtb3JlIHByb21pc2luZy4gSXQgaW1wbGllcyBhIHJlbGVhc2UgbWVjaGFuaXNtIGFzc29jaWF0ZWQgd2l0aCBwcml2YXRlIGRhdGEsIHdoaWNoIGlzIG9mdGVuIGEga2V5IGFzcGVjdCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIGJlaW5nIHVzZWQuIElzIGl0IGNvdXBsZWQgdG8gdGhlIGBtZW1fb3BlbmA/IFdoYXQga2luZCBvZiBwcml2YXRlIGRhdGEgaXMgYmVpbmcgbWFuYWdlZCBoZXJlPyBBbmQgd2hhdCYjMzk7cyBiZWluZyByZWxlYXNlZD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTk4NT1zdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTk5Mi1cbmZzL3Byb2MvYmFzZS5jOjk5MzpzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTk5NC17XG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwMDYtXHQub3Blblx0XHQ9IG1lbV9vcGVuLFxuZnMvcHJvYy9iYXNlLmM6MTAwNzpcdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcbmZzL3Byb2MvYmFzZS5jLTEwMDgtXHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjg0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeS1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBzdG9vZCBvdXQgaW5pdGlhbGx5IGFzIHNvbWV0aGluZyB1bmlxdWUuIEkgaGFkIGl0IG9uIGEgbGlzdCB3aXRoIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIEJ1dCwgdGhpbmtpbmcgYWJvdXQgaXQgYSBiaXQgbW9yZSwgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMganVzdCBhIHNpbXBsZSBtZW1vcnkgcmVsZWFzZSBmdW5jdGlvbi4gSXQmIzM5O3Mgbm90IHBhcnRpY3VsYXJseSBjb21wbGV4IG9yIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBpdCBqdXN0IGZyZWVzIG1lbW9yeS4gUHJvYmFibHkgbm90IGdvaW5nIHRvIHJldmVhbCBhbnl0aGluZyBuZXcuCgpOb3csIG15IGF0dGVudGlvbiYjMzk7cyB0dXJuZWQgdG8gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLiBXaGlsZSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgSSBzZWUgdGhhdCBgbWVtX3J3YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYm90aCBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYCwgY2FsbHMgYHByb2NfbWVtX2ZvbGxfZm9yY2VgLiBUaGlzIGlzIG11Y2ggbW9yZSBwcm9taXNpbmcuIFRoZSBjaGFpbiBvZiBjYWxscyBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBtb3JlIGNvbXBsZXggbWVtb3J5IG9wZXJhdGlvbnMsIHNvbWV0aGluZyBJIGNhbiBwb3RlbnRpYWxseSBleHBsb2l0IHRocm91Z2ggZnV6emluZyBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYCAtIHRocm91Z2ggdGhlIGluZGlyZWN0aW9ucy4gSSBzaG91bGQgY2hlY2sgaWYgYHByb2NfbWVtX2ZvbGxfZm9yY2VgIGlzIHVuaXF1ZSwgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX21lbV9mb2xsX2ZvcmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTg1OD1zdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTg3My1cbmZzL3Byb2MvYmFzZS5jOjg3NDpzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmZzL3Byb2MvYmFzZS5jLTg3NS17XG4tLVxuZnMvcHJvYy9iYXNlLmM9ODk5PXN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL2Jhc2UuYy05MjAtXHRmbGFncyA9IHdyaXRlID8gRk9MTF9XUklURSA6IDA7XG5mcy9wcm9jL2Jhc2UuYzo5MjE6XHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXG5mcy9wcm9jL2Jhc2UuYy05MjItXHRcdGZsYWdzIHw9IEZPTExfRk9SQ0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzYwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgRm9sbG93IEZvcmNlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSBiaXQgdW51c3VhbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIG9uY2Ugc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gaXQgd29uJiMzOTt0IGV2ZW4gaGF2ZSBpdHMgb3duIGRlZGljYXRlZCBzeW1ib2wgaW4gdGhlIGZpbmFsIGV4ZWN1dGFibGUsIHdoaWNoIGlzIGdvaW5nIHRvIG1ha2UgaXQgdHJpY2tpZXIgdG8gdGFyZ2V0LCBzbyBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgZnVuY3Rpb25zIGluc3RlYWQuCgpCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IG15IGFzc3VtcHRpb25zIGFyZSBzb3VuZCwgc28gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgc28gd2UgaGF2ZSBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgLgoKV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGlzIHBhdGNoIGFkZHMgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCByZXNwZWN0aXZlbHkuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBhbnkgb3RoZXIgTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGUpIGlzIGltcGxlbWVudGluZyB0aGlzIGhvb2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbiBTRUxpbnV4IHNwZWNpZmljIGhvb2suIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuZnMvcHJvYy9iYXNlLmMtODkzLVx0XHRpZiAocHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uKVxuZnMvcHJvYy9iYXNlLmM6ODk0Olx0XHRcdHJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkKSA9PSAwO1xuZnMvcHJvYy9iYXNlLmMtODk1LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0zOD1MU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjM5OkxTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC00MC1MU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0zNDA9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDozNDE6aW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTM0Mi1pbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD02NzU9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTY3OS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo2ODA6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC02ODEte1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9NTkzPWludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTU5OC0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTk5OiAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwMC0gKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDctICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjYwODppbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjA5LXtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjEwOlx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTYxMS19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNTQ9c3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTcwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNzE6c3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3Mi17XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Nzk9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU4Ni1cdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc1ODc6XHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU4OC1cdExTTV9IT09LX0lOSVQoY2FwZ2V0LCBzZWxpbnV4X2NhcGdldCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODAwCgkJCQkJCQlvdXRwdXQ6IDIzOAoJCQkJCQkJdGhvdWdodHM6IDc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYC9wcm9jL3BpZC9tZW1gIEludHJvc3BlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwcmltYXJpbHkgYW4gU0VMaW51eCB0aGluZywgYXQgbGVhc3QgaW4gdGVybXMgb2YgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRyaWdnZXJpbmcgdGhpcy4gWWVzLCBjb25maXJtZWQsIGZvdW5kIGl0IGluIGBzZWN1cml0eS9LY29uZmlnYC4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvcmUgbG9naWMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGFjY2Vzc2VkLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBhIHByb2Nlc3MgdG8gYnlwYXNzIHRoZSB1c3VhbCBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpdCBpbnRyb3NwZWN0cyBpdHMgb3duIG1lbW9yeS4gVGhpcyBieXBhc3MgaXMgZ3JhbnRlZCBvbmx5IGlmIHRoZSBuZXcgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIExTTSBob29rIGFsbG93cyBpdC4gQW5kIHRoaXMgd2hvbGUgdGhpbmcgaXMgb25seSBhY3RpdmUgaWYgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBzb3VuZHMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBwcm9jZnMgYW5kLCBjcml0aWNhbGx5LCBTRUxpbnV4LCBhZmZlY3RpbmcgaG93IG1lbW9yeSBpbnRyb3NwZWN0aW9uIHZpYSBgL3Byb2Mvc2VsZi9tZW1gIHdvcmtzLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBrZXkgc3ltYm9scyBmb3IgZnV6emluZzogYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGFuZCBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYC4gQW5kLCB0byBtYWtlIGl0IHdvcmssIEkgbmVlZCB0byBlbmFibGUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC4KCkhtbSwgSSBzZWUgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMgYSBub24taW5saW5lZCBmdW5jdGlvbiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNob3VsZCBJIGluY2x1ZGUgaXQgaW4gdGhlIGZ1enppbmcgc2NvcGU/IEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IGp1c3QgZHJvcHMgdGhlIGBtbWAgYW5kIGZyZWVzIHRoZSBgbWVtX3ByaXZhdGVgIHN0cnVjdC4KCmBgYGMKc3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCnsKCXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKCgltbWRyb3AocHJpdi0mZ3Q7bW0pOwoJa2ZyZWUocHJpdik7CglyZXR1cm4gMDsKfQpgYGAKCkhvd2V2ZXIsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIG5ldyBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgYG1lbV9wcml2YXRlYC4gRnV6emluZyB0aGlzIG1pZ2h0IHVuY292ZXIgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaG93IHRoZSBgbWVtX3ByaXZhdGVgIGlzIGFsbG9jYXRlZCBvciBkZWFsbG9jYXRlZC4gSSYjMzk7bGwgYWRkIGl0IHRvIHRoZSBsaXN0LgoKV2FpdCwgd2hhdCBhYm91dCBgbWVtX29wZW5gPyBUaGVyZSBhcmUgbXVsdGlwbGUgaW1wbGVtZW50YXRpb25zLCBpdCYjMzk7cyBlYXN5IHRvIGNyZWF0ZSBpc3N1ZXMgd2l0aCBzeXprYWxsZXIgaWYgSSBqdXN0IHB1dCBgbWVtX29wZW5gLiBTaW5jZSB0aGUgcmVsZXZhbnQgYG1lbV9vcGVuYCBpbiBgZnMvcHJvYy9iYXNlLmNgIGlzIHN0YXRpYywgSSBjYW4mIzM5O3QganVzdCBwcm92aWRlIHRoZSBmdW5jdGlvbiBuYW1lLiBJZiBJIHByb3ZpZGUgdGhlIG5hbWUsIHN5emthbGxlciBtaWdodCB0cnkgdG8gZnV6eiB0aGUgd3Jvbmcgb3IgYWxsIGluc3RhbmNlcyBvZiBgbWVtX29wZW5gLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCB3aGF0IEkgd2FudC4gU28gSSB3aWxsIGF2b2lkIGFueSBhbWJpZ3VvdXMgZnVuY3Rpb24gbmFtZXMuCgpTbywgdGhlIGRlZmluaXRpdmUgbGlzdCBmb3IgZnV6emluZyBpczoKKiAgIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYAoqICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAKKiAgIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBpcyB1bmlxdWUuIFllcywgaXQmIzM5O3MgdGhlIG9ubHkgb25lIG9mIGl0cyBuYW1lLgoKQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoZSByZWFzb25pbmcgaW50byBhIGNvbmNpc2UgYXJndW1lbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgbG9naWMgZm9yIGAvcHJvYy9waWQvbWVtYC4gU3BlY2lmaWNhbGx5LCBpdCBhbGxvd3MgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBUaGlzIGludHJvZHVjZXMgYSBuZXcgYG1lbV9wcml2YXRlYCBzdHJ1Y3QgdG8gdHJhY2sgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLiBJdCBhbHNvIGFkZHMgYSBuZXcgTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCksIHdoaWNoIGNvbnRyb2xzIHRoZSBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmF0ZWQgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBlbmFibGVkLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHByb2NmcyBhbmQgdGhlIHNlY3VyaXR5IHN1YnN5c3RlbSwgYW5kIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGZlYXR1cmUgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuCgpTb3VuZHMgc29saWQuIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBncmFzcCBvbiB0aGlzIHBhdGNoIGFuZCBhbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX01FTV9BTFdBWVNfRk9SQ0UmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O21lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19NRU1fQUxXQVlTX0ZPUkNFJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDttZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZDBkYmM2NjYxNjgwMzEwMTM4ZjU0MDM2ZDA4MjE3MWRlZWViZDEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMjI6MDk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDc4MGY4MTI1OTA1MjcuLjNkZmFlZjQ5YmI3MGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04NDgsMTUgJiM0Mzs4NDgsMzIgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqLwomIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwkvKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgYnlwYXNzZWQgZHVlIHRvIGludHJvc3BlY3Rpb24/ICovCiYjNDM7CWJvb2wgaW50cm9zcGVjdGlvbjsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS0mZ3Q7Zl9vcC0mZ3Q7Zm9wX2ZsYWdzICZhbXA7IEZPUF9VTlNJR05FRF9PRkZTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7CiYjNDM7CXByaXYtJmd0O21tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHByaXYtJmd0O21tKSkKJiM0MzsJCXJldHVybiBwcml2LSZndDttbSA/IFBUUl9FUlIocHJpdi0mZ3Q7bW0pIDogLUVTUkNIOwomIzQzOwlwcml2LSZndDtpbnRyb3NwZWN0aW9uID0gcHJpdi0mZ3Q7bW0gPT0gY3VycmVudC0mZ3Q7bW07CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJYm9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7CiAKQEAgLTg3Myw2ICYjNDM7ODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCX0KIAkJcmV0dXJuIHB0cmFjZV9hY3RpdmU7CiAJZGVmYXVsdDoKJiM0MzsJCWlmIChwcml2LSZndDtpbnRyb3NwZWN0aW9uKQomIzQzOwkJCXJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtJmd0O2ZfY3JlZCkgPT0gMDsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQpAQCAtODgwLDcgJiM0Mzs4OTksOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDttbTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvczsKIAlzc2l6ZV90IGNvcGllZDsKIAljaGFyICpwYWdlOwpAQCAtOTcwLDEyICYjNDM7OTkwLDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJbW1kcm9wKHByaXYtJmd0O21tKTsKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBtZW1fbHNlZWssCiAJLnJlYWQJCT0gbWVtX3JlYWQsCiAJLndyaXRlCQk9IG1lbV93cml0ZSwKIAkub3BlbgkJPSBtZW1fb3BlbiwKLQkucmVsZWFzZQk9IG1lbV9yZWxlYXNlLAomIzQzOwkucmVsZWFzZQk9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSwKIAkuZm9wX2ZsYWdzCT0gRk9QX1VOU0lHTkVEX09GRlNFVCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uNjc0NTJmNzFiZWRmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCSB1bnNpZ25lZCBpbnQgbW9kZSkKIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpCiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCSBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTMzOCw2ICYjNDM7MzM4LDcgQEAgaW50IHNlY3VyaXR5X2JpbmRlcl90cmFuc2Zlcl9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogCQkJCSAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpOwomIzQzO2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTsKIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCkBAIC02NzYsNiAmIzQzOzY3NywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MWFlYThmZGYwMTQyLi5kMGY3OTBhNTM0ZWIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTU5NSw2ICYjNDM7NTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkCiYjNDM7ICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIG9mIHRoZSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5LCB3aGljaAomIzQzOyAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay4KJiM0MzsgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KJiM0MzsgKi8KJiM0MztpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QpOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzCiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDE4ZGQyOGIyYmIxM2QuLjkwNTEzN2M0NzMyMTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsMzIgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCQkJICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZQomIzQzOyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS4KJiM0MzsgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5CiYjNDM7ICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS4KJiM0MzsgKgomIzQzOyAqIENyZWF0aW5nIGFuIGF1ZGl0IHJlY29yZCBvbiBkZW5pYWwgZG9lc24mIzM5O3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4mIzM5O3QKJiM0MzsgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiYjNDM7CWludCByYzsKJiM0MzsJdTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpOwomIzQzOwomIzQzOwkvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi8KJiM0MzsJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fRVhFQ01FTSwgMCwgJmFtcDthdmQpOwomIzQzOwomIzQzOwkvKiBBbHNvIGFsbG93IGlmIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIHdvdWxkIGFsbG93IGl0LiAqLwomIzQzOwlpZiAocmMpCiYjNDM7CQlyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsICZhbXA7YXZkKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIHsKQEAgLTc1NTgsNiAmIzQzOzc1ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCiAJTFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLAogCUxTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLAomIzQzOwlMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksCiAJTFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSwKIAlMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLAogCUxTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgY2xlYXJseSBhbHRlcmluZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGhhbmRsZWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGludHJvZHVjaW5nIGEgbmV3IGRhdGEgc3RydWN0dXJlLCBgc3RydWN0IG1lbV9wcml2YXRlYC4gVGhpcyBzdHJ1Y3QgaXMgZ29pbmcgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIGBtbV9zdHJ1Y3RgIGFuZCBhIGJvb2xlYW4gZmxhZyBjYWxsZWQgYGludHJvc3BlY3Rpb25gLiBJbnRlcmVzdGluZywgSSB3b25kZXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGF0IGZsYWcgaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGFsbG9jYXRpb24gaGFwcGVucyB3aXRoaW4gYG1lbV9vcGVuYCwgdXNpbmcgYGttYWxsb2Nfb2JqYC4gTm93LCBga21hbGxvY19vYmpgLi4uIHRoYXQmIzM5O3Mgbm90IHN0YW5kYXJkLCBpcyBpdD8gSSYjMzk7bSBmYW1pbGlhciB3aXRoIGBrbWFsbG9jYCwgYGt6YWxsb2NgLi4uIEkgKnN1c3BlY3QqIGl0JiMzOTtzIGEgbWFjcm8gb3IgYSB3cmFwcGVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBwcm9iYWJseSBlcXVpdmFsZW50IHRvIGBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtX3ByaXZhdGUpLCBHRlBfS0VSTkVMKWAsIGJ1dCB0aGUgc3ludGF4IGlzIHRocm93aW5nIG1lIGEgYml0LiBXYWl0LCB0aGUgY29kZSBkZWNsYXJlczogYHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtgIEFoLCB0aGUgYF9fZnJlZShrZnJlZSlgIGF0dHJpYnV0ZSBpcyBpbnRlcmVzdGluZywgdGhhdCBoZWxwcyBtZSB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IHdpbGwgYmUgZGVhbGxvY2F0ZWQuIEJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyBga21hbGxvY19vYmpgIGlzIGRlZmluZWQuIEkmIzM5O20gZ29pbmcgdG8gZ3JlcCBmb3IgaXQganVzdCB0byBtYWtlIHN1cmUuIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBhIGxvY2FsIG1hY3JvIG9mIHNvbWUgc29ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21hbGxvY19vYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE1NTAyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjAzPW5vbi1cXCBgYE5VTExgYCwgbG9ja2xlc3NseSBhY2Nlc3NpbmcgdGhlIGBgLVx1MDAzZWFgYCBhbmQgYGAtXHUwMDNlYmBgIGZpZWxkcy5cbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjA4LSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMDk6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIxMC0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjI1PXRoZWlyIHJpZ2h0cyB0byByZW9yZGVyIHRoaXMgY29kZSBhcyBmb2xsb3dzOlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzAtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIzMTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMyLSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yNjE9c2hvd3MgYW4gZXhhbXBsZSBvZiBpbnNlcnRpb246XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2Ni0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjY3OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjgtICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q9MjY3PVRoZSBSQ1UgdmVyc2lvbiBvZiBhdWRpdF91cGRfcnVsZSgpIGlzIGFzIGZvbGxvd3M6OlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI3OC1cdFx0XHRpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCBcdTAwMjZlLVx1MDAzZXJ1bGUpKSB7XG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdDoyNzk6XHRcdFx0XHRuZSA9IGttYWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yODAtXHRcdFx0XHRpZiAobmUgPT0gTlVMTClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTQ0MT11c2VzIG9mIFJDVSBtYXkgYmUgZm91bmQgaW4gbGlzdFJDVS5yc3QgYW5kIE5NSS1SQ1UucnN0LlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcwLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo0NzE6XHRcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzItXHRcdHNwaW5fbG9jayhcdTAwMjZmb29fbXV0ZXgpO1xuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NTUzPVRoZSBmb29fdXBkYXRlX2EoKSBmdW5jdGlvbiBtaWdodCB0aGVuIGJlIHdyaXR0ZW4gYXMgZm9sbG93czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzItXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjU3MzpcdFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3NC1cdFx0c3Bpbl9sb2NrKFx1MDAyNmZvb19tdXRleCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD0zOT1rcmVmX2luaXQgYXMgc286OlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDItXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjQzOiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDQtICAgICBpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD04MT10aHJlYWQgdG8gcHJvY2Vzczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDItXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjEwMzpcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwNC1cdGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTM4Mz10byBwcm90ZWN0IHRoZSBjYWNoZSBhbmQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBpdC4gSGVyZSYjMzk7cyB0aGUgY29kZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDQtXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ0NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQ5OT13aGljaCBhcmUgdGFrZW4gYXdheSwgYW5kIHRoZSBgYCYjNDM7YGAgYXJlIGxpbmVzIHdoaWNoIGFyZSBhZGRlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUxOS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTIwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MjEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk4PXdvcmtzIHBlcmZlY3RseTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAwLSAgcmF3X3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDItXG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NTA3PXByZWVtcHRpb24gb24gUFJFRU1QVF9SVCBrZXJuZWxzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDktICBzcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MTA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTExLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIHBhc3NpbmcgYSBzaXplIG9mIGEgc3RydWN0IGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ4Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zODY9bWF5IGhlbHAgd2l0aCBhbGlnbm1lbnQsIHdyYXAtYXJvdW5kLCBvciBhZGRpdGlvbmFsIGhhcmRlbmluZy4gVGhlXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6Mzg3OmttYWxsb2Nfb2JqKCktZmFtaWx5IG9mIG1hY3JvcyBwcm92aWRlIHRoaXMgaW50cm9zcGVjdGlvbiwgd2hpY2ggY2FuIGJlXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzg4LXVzZWQgZm9yIHRoZSBjb21tb24gY29kZSBwYXR0ZXJucyBmb3Igc2luZ2xlLCBhcnJheSwgYW5kIGZsZXhpYmxlIG9iamVjdFxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM5OS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDA6XHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDA1Olx0X19hdXRvX3R5cGUgcHRyID0ga21hbGxvY19vYmooc3RydWN0IGZvbyBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA2LVxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0xNzM0PWNhbGxiYWNrOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTczOS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjE3NDA6ICAgICAgICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTc0MS0gICAgICAgICAgc3Vic3RyZWFtLVx1MDAzZXJ1bnRpbWUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzMwMj1kZXN0cnVjdG9yIGZ1bmN0aW9uIGlzIHNldCBpbiB0aGUgYGBwcml2YXRlX2ZyZWVgYCBmaWVsZDo6XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwMy1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozMzA0OiAgc3RydWN0IG15ZGF0YSAqcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzA1LSAgaHctXHUwMDNlcHJpdmF0ZV9kYXRhID0gcDtcbi0tXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q9MjQyPUFuZCBTT0Mtc3BlY2lmaWMgdXRpbGl0eSBjb2RlIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6OlxuLS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTEtXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q6MjUyOlx0XHRwZGF0YTIgPSBrbWFsbG9jX29iaigqcGRhdGEyKTtcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTMtXHRcdCpwZGF0YTIgPSBwZGF0YTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00MDM9ZSB0dXR0aSBnbGkgb2dnZXR0aSBjaGUgY29udGllbmUuIEVjY28gaWwgY29kaWNlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NjU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTUxOT1zb25vIHF1ZWxsZSByaW1vc3NlLCBtZW50cmUgcXVlbGxlIGBgJiM0MztgYCBzb25vIHF1ZWxsZSBhZ2dpdW50ZS5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MzktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1NDA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01NDEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ4OD1tZW1vcmlhLiBTdSB1biBrZXJuZWwgbm9uLVBSRUVNUFRfUlQgaWwgc2VndWVudGUgY29kaWNlIGZ1bnppb25hIHBlcmZldHRhbWVudGU6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTAtICByYXdfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjQ5MTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkyLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTc9UFJFRU1QVF9SVDo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5OS0gIHNwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQyPUlsIG1vZG8gcHJlZmVyaXRvIHBlciBwYXNzYXJlIGxhIGRpbWVuc2lvbmUgZGkgdW5hIHN0cnV0dHVyYSDDqCBpbCBzZWd1ZW50ZTpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0NjpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1ND1MYSBmb3JtYSBwcmVmZXJpZGEgcGFyYSBwYXNhciBlbCB0YW1hw7FvIGRlIHVuYSBlc3RydWN0dXJhIGVzIGxhIHNpZ3VpZW50ZTpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU3LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk1ODpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NDY9a3JlZuWPr+S7peWHuueOsOWcqOaVsOaNrue7k+aehOS9k+S4reeahOS7u+S9leWcsOaWueOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6NTU6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTYtICAgICBpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NjI9S3JlZuinhOWImVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTEwOC1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjEwOTpcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMTAtXHRpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgxMD1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MTY6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE3LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MjQ9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MjktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODMwOlx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgzMS1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTg1Nz1tYXJ2ZWxfYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjMtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjg2NDpcdGFwZXIgPSBrbWFsbG9jX29iaigqYXBlcik7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2NS1cdGlmIChhcGVyID09IE5VTEwpIHJldHVybiAtRU5PTUVNO1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTAxOT1tYXJ2ZWxfYWdwX2luZm8odm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjEtXHQgKi9cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6MTA2MjpcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYzLVx0aWYgKCFhZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTU5MD10aXRhbl9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk2LVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjU5NzpcdGFwZXIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdGl0YW5fYWdwX2FwZXJ0dXJlKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTgtXHRpZiAoYXBlciA9PSBOVUxMKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz03MzE9dGl0YW5fYWdwX2luZm8odm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzYyLVx0ICovXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NzYzOlx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzY0LVx0aWYgKCFhZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9Mjk9cHJvY2Vzc19yZWxvY19mb3JfZ290KEVsZjY0X1JlbGEgKnJlbGEsXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNDgtXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo0OTpcdGcgPSBrbWFsbG9jX29iaigqZyk7XG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy01MC1cdGctXHUwMDNlbmV4dCA9IGNoYWluc1tyX3N5bV0ubmV4dDtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYz0yMTE9c3RhdGljIHZvaWQgcGRldl9zYXZlX3NybV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjMtXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYzoyMjQ6XHR0bXAgPSBrbWFsbG9jX29iaigqdG1wKTtcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyNS1cdGlmICghdG1wKSB7XG4tLVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jPTM1OT12b2lkICp1bndpbmRfYWRkX3RhYmxlKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgY29uc3Qgdm9pZCAqdGFibGVfc3RhcnQsXG4tLVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM2OC1cbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYzozNjk6XHR0YWJsZSA9IGttYWxsb2Nfb2JqKCp0YWJsZSk7XG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzcwLVx0aWYgKCF0YWJsZSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9Mjc0PXN0YXRpYyBpbnQgbG9jb21vX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI3OS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyODA6XHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IGxvY29tb19zYXZlX2RhdGEpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI4MS1cdGlmICghc2F2ZSlcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9OTY0PXN0YXRpYyBpbnQgc2ExMTExX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzEtXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6OTcyOlx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhKTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzMtXHRpZiAoIXNhdmUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jPTU3Mj1zdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmRfdGFibGVfYWRkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbi0tXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYzo1Nzc6XHRzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jX29iaigqdGFiKTtcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzgtXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM9NTM9c3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqX2dldF9wd3JkbShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM6MTAyOlx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAzLVx0aWYgKGVudHJ5KSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYz00MDY9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxMi1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM6NDEzOlx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTQtXHRpZiAoIXB3cnN0KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM9MTEzPXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jOjEzNTpcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM2LVx0aWYgKCFwd3JzdClcbi0tXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXG5hcmNoL2FybS9tbS9wZ2QuYzoyMDojZGVmaW5lIF9wZ2RfYWxsb2MobW0pXHRcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcbmFyY2gvYXJtL21tL3BnZC5jLTIxLSNkZWZpbmUgX3BnZF9mcmVlKG1tLCBwZ2QpXHRrZnJlZShwZ2QpXG4tLVxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM9NzY0PXN0YXRpYyBpbnQgY292ZXJhZ2Vfc3RhcnQoY29uc3QgdW5pb24gZGVjb2RlX2l0ZW0gKnRhYmxlKVxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY1LXtcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcdGNvdmVyYWdlLmJhc2UgPSBrbWFsbG9jX29ianMoc3RydWN0IGNvdmVyYWdlX2VudHJ5LFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY3LVx0XHRcdFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz03NzQ9dm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg2LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo3ODc6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4OC1cdGlmICghZW50cnkpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MTAyPXN0YXRpYyB2b2lkICp2Z2ljX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA2LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6MTA3Olx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwOC1cdGlmICghaXRlcilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0zNjQ9c3RhdGljIHZvaWQgKnZnaWNfaXRzX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc3LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6Mzc4Olx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3OS1cdGlmICghaXRlcilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTc0Mz12b2lkIF9faW5pdCB2Z2ljX3NldF9rdm1faW5mbyhjb25zdCBzdHJ1Y3QgZ2ljX2t2bV9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ1LVx0QlVHX09OKGdpY19rdm1faW5mbyAhPSBOVUxMKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NzQ2Olx0Z2ljX2t2bV9pbmZvID0ga21hbGxvY19vYmooKmdpY19rdm1faW5mbyk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0Ny1cdGlmIChnaWNfa3ZtX2luZm8pXG4tLVxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM9OTc9c3RhdGljIGludCBfX2luaXQgbmZoZF9pbml0X29uZShpbnQgaWQsIHUzMiBibG9ja3MsIHUzMiBic2l6ZSlcbi0tXG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTQtXG5hcmNoL202OGsvZW11L25mYmxvY2suYzoxMTU6XHRkZXYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZoZF9kZXZpY2UpO1xuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE2LVx0aWYgKCFkZXYpXG4tLVxuYXJjaC9tNjhrL21tL2ttYXAuYz0xMDg9c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF9pb19hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL202OGsvbW0va21hcC5jLTExMi1cbmFyY2gvbTY4ay9tbS9rbWFwLmM6MTEzOlx0YXJlYSA9IGttYWxsb2Nfb2JqKCphcmVhKTtcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTE0LVx0aWYgKCFhcmVhKVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTI1Mz11MzIgYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2ModTMyIHNyY2lkLCB1MzIgZGVzdGlkLFxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxMi1cdFx0XHQgKi9cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjMxMzpcdFx0XHRjdHAgPSBrbWFsbG9jX29iaihjaGFuX3RhYl90LCBHRlBfQVRPTUlDKTtcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxNC1cdFx0XHRjaGFuX3RhYl9wdHJbaV0gPSBjdHA7XG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MzkxPXUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcylcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTQtXHQgKi9cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjQxNTpcdGRlc2NfYmFzZSA9ICh1MzIpIGttYWxsb2Nfb2JqcyhhdTF4X2RkbWFfZGVzY190LCBlbnRyaWVzLFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE2LVx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbi0tXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHUzMiAqbG9jYXRpb24sIEVsZl9BZGRyIHYsXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03NC1cdCAqL1xuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYzo3NTpcdG4gPSBrbWFsbG9jX29iaigqbik7XG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc2LVx0aWYgKCFuKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM9MzExPXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHVpbnQzMl90ICpsb2NhdGlvbixcbi0tXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMC1cdCAqL1xuYXJjaC9taXBzL2tlcm5lbC92cGUuYzozMjE6XHRuID0ga21hbGxvY19vYmooKm4pO1xuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjItXHRpZiAoIW4pXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTE4OD1wYXRfcXVlcnlfbW9kdWxlKHVsb25nIHBjZWxsX2xvYywgdWxvbmcgbW9kX2luZGV4KVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTUtXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6MTk2Olx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5Ny1cdGlmICghcGFfcGRjX2NlbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XHRkZXYtXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVx1MDAzZWFkZHIsIG51bV9hZGRycyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVx0aWYoIWRldi1cdTAwM2VhZGRyKSB7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jPTgxPXN0YXRpYyBpbnQgX19pbml0IHByb2Nlc3Nvcl9wcm9iZShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTItXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM6MTEzOlx0XHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTE0LVx0XHRpZiAoIXBhX3BkY19jZWxsKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz0xNDk9dW53aW5kX3RhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE1OS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzoxNjA6XHR0YWJsZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1bndpbmRfdGFibGUsIEdGUF9VU0VSKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNjEtXHRpZiAodGFibGUgPT0gTlVMTClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9NDA2PXZvaWQgdW53aW5kX2ZyYW1lX2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMC1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzo0MTE6XHRyMiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwdF9yZWdzLCBHRlBfQVRPTUlDKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTItXHRpZiAoIXIyKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYz05ODQ9aW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzMi1cdFx0fVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jOjEwMzM6XHRcdHRtcF9wYXJ0ID0ga21hbGxvY19vYmooKnRtcF9wYXJ0KTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDM0LVx0XHRlcnIgPSAtRU5PTUVNO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz03MzE9aW50IGt2bV92Y3B1X2lvY3RsX2NvbmZpZ190bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzQtXHRcdCAgICBjZmctXHUwMDNlYXJyYXkgLyBQQUdFX1NJWkU7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6Nzc1Olx0cGFnZXMgPSBrbWFsbG9jX29ianMoKnBhZ2VzLCBudW1fcGFnZXMpO1xuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3Ni1cdGlmICghcGFnZXMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTg5OD1pbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE0LVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjkxNTpcdHZjcHVfZTUwMC1cdTAwM2VndGxiX2FyY2ggPSBrbWFsbG9jX29ianMoKnZjcHVfZTUwMC1cdTAwM2VndGxiX2FyY2gsXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE2LVx0XHRcdFx0XHQgICAgS1ZNX0U1MDBfVExCMF9TSVpFICYjNDM7IEtWTV9FNTAwX1RMQjFfU0laRSk7XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTQ1PXN0YXRpYyBpbnQgZ3JvdyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgbWF4X2Jsb2Nrcylcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTYtXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6NTc6XHRibG9jayA9IGttYWxsb2Nfb2JqcyhyaF9ibG9ja190LCBtYXhfYmxvY2tzLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01OC1cdGlmIChibG9jayA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz0yNTM9cmhfaW5mb190ICpyaF9jcmVhdGUodW5zaWduZWQgaW50IGFsaWdubWVudClcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYwLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjI2MTpcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYyLVx0aWYgKGluZm8gPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYz05NT1zdGF0aWMgaW50IGhhc2hfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtOTgtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzo5OTpcdG1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0ID0ga21hbGxvY19vYmooc3RydWN0IGhhc2hfbW1fY29udGV4dCk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMDAtXHRpZiAoIW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0KVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNS1cdFx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXHUwMDNlc3B0KSB7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzoxMjY6XHRcdFx0bW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXHUwMDNlc3B0ID0ga21hbGxvY19vYmooc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjctXHRcdFx0aWYgKCFtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NjIzPXN0YXRpYyBpbnQgZXZlbnRfdW5pcV9hZGQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubCxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUwLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjY1MTpcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUyLVx0aWYgKCFkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz03NTU9c3RhdGljIGludCBjcmVhdGVfZXZlbnRzX2Zyb21fY2F0YWxvZyhzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50c18sXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkwOC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MDk6XHRldmVudHMgPSBrbWFsbG9jX29ianMoKmV2ZW50cywgYXR0cl9tYXggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTEwLVx0aWYgKCFldmVudHMpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE0LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkxNTpcdGV2ZW50X2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNi1cdGlmICghZXZlbnRfZGVzY3MpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIwLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkyMTpcdGV2ZW50X2xvbmdfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2xvbmdfZGVzY3MsIGV2ZW50X2lkeCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjItXHRpZiAoIWV2ZW50X2xvbmdfZGVzY3MpIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jPTEyMj1zdGF0aWMgaW50IGhzdGFfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jOjE1NDpcdHBwYzR4eF9oc3RhX21zaS5pcnFfbWFwID0ga21hbGxvY19vYmpzKGludCwgaXJxX2NvdW50KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTU1LVx0aWYgKCFwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCkge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9NDQ9c3RhdGljIGludCBzcHVmc19hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy00OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6NTA6XHRhdHRyID0ga21hbGxvY19vYmooKmF0dHIpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy01MS1cdGlmICghYXR0cilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYz02Mjg9dm9pZCBxdWV1ZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBwc2VyaWVzX2hwX2Vycm9ybG9nICpocF9lcnJsb2cpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM2LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM6NjM3Olx0d29yayA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwc2VyaWVzX2hwX3dvcmssIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM4LVx0aWYgKHdvcmspIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM9MTE5PWludCBodmNzX2dldF9wYXJ0bmVyX2luZm8odWludDMyX3QgdW5pdF9hZGRyZXNzLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjItXHRcdCAqIGh2Y3NfZnJlZV9wYXJ0bmVyX2luZm8oKS4gKi9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYzoxNjM6XHRcdG5leHRfcGFydG5lcl9pbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh2Y3NfcGFydG5lcl9pbmZvLFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2NC1cdFx0XHRcdFx0XHRHRlBfQVRPTUlDKTtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jPTE0ND1zdGF0aWMgdm9pZCBzaG93X2dwY2lfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNDktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jOjE1MDpcdGJ1ZiA9IGttYWxsb2Nfb2JqKCpidWYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNTEtXHRpZiAoYnVmID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jPTQzNT1zdGF0aWMgaW50IHBzZXJpZXNfbXNpX29wc19wcmVwYXJlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQzLVx0c3RydWN0IHBzZXJpZXNfbXNpX2RldmljZSAqcHNlcmllc19kZXYgX19mcmVlKGtmcmVlKVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jOjQ0NDpcdFx0PSBrbWFsbG9jX29iaigqcHNlcmllc19kZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0NS1cdGlmICghcHNlcmllc19kZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcdHBkbi1cdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVx0aWYgKCFwZG4tXHUwMDNlcGVfbnVtX21hcClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM9MTA3Nj1zdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX3Zhc19pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwODktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM6MTA5MDpcdGh2X2NhcHMgPSBrbWFsbG9jX29iaigqaHZfY2Fwcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA5MS1cdGlmICghaHZfY2Fwcylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM9NzA1PXN0YXRpYyBpbnQgdmlvX2Ntb19idXNfcHJvYmUoc3RydWN0IHZpb19kZXYgKnZpb2Rldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ3LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jOjc0ODpcdFx0ZGV2X2VudCA9IGttYWxsb2Nfb2JqKHN0cnVjdCB2aW9fY21vX2Rldl9lbnRyeSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ5LVx0XHRpZiAoIWRldl9lbnQpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM9MzUyPXN0YXRpYyBpbnQgZnNsX2xiY19zeXNjb3JlX3N1c3BlbmQodm9pZCAqZGF0YSlcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjQtXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYzozNjU6XHRjdHJsLVx1MDAzZXNhdmVkX3JlZ3MgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZnNsX2xiY19yZWdzKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2Ni1cdGlmICghY3RybC1cdTAwM2VzYXZlZF9yZWdzKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDEtXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYzoxNjQyOlx0bXBpYy1cdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXHUwMDNlc2F2ZV9kYXRhLCBtcGljLVx1MDAzZW51bV9zb3VyY2VzKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXHRCVUdfT04obXBpYy1cdTAwM2VzYXZlX2RhdGEgPT0gTlVMTCk7XG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYz0yMz12b2lkIF9faW5pdCBvZl9pbnN0YW50aWF0ZV9ydGModm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM1LVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYzozNjpcdFx0XHRyZXMgPSBrbWFsbG9jX29iaigqcmVzKTtcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzctXHRcdFx0aWYgKCFyZXMpIHtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYz02NTQ9c3RhdGljIGludCBhZGRfcmVsb2NhdGlvbl90b19hY2N1bXVsYXRlKHN0cnVjdCBtb2R1bGUgKm1lLCBpbnQgdHlwZSxcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjUtXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo2NjY6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjctXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjk5LVx0aWYgKCFmb3VuZCkge1xuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzAwOlx0XHRyZWxfaGVhZCA9IGttYWxsb2Nfb2JqKCpyZWxfaGVhZCk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MDEtXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzExLVx0XHRcdGJ1Y2tldCA9XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MTI6XHRcdFx0XHRrbWFsbG9jX29iaihzdHJ1Y3QgdXNlZF9idWNrZXQpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzI0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTY5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2VjdXJpdHkgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGttYWxsb2Nfb2JqYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBtYWNybyBzaG9ydGhhbmQgZm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhbiBvYmplY3QgdXNpbmcgYGttYWxsb2NgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1lYW50IHRvIHJlcGxhY2UgYGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb28pLCBHRlBfS0VSTkVMKWAuICBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG5ldyBtYWNybyB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkuICBTaW5jZSBwbGFpbiBga21hbGxvY2AgZG9lc24mIzM5O3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGttYWxsb2Nfb2JqYCAqZG9lc24mIzM5O3QqIHplcm8gaXQgZWl0aGVyLiAgTXkgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBhc3N1bXB0aW9uLiBUaGlzIG1lYW5zIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIG9iamVjdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoZSBwYXRjaCBhbGxvY2F0ZXMgYSBgc3RydWN0IG1lbV9wcml2YXRlYC4gIEkgc2VlIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgYHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtgLCBhbmQgdGhlbiB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIGhvdyB0aGF0IG1lbW9yeSBpcyAqdXNlZCouIFRoZSBmaWVsZHMgYG1tYCBhbmQgYGludHJvc3BlY3Rpb25gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kLgoKTGV0JiMzOTtzIGV4YW1pbmUgdGhlIHN0cnVjdHVyZSBpdHNlbGY6IGBzdHJ1Y3QgbW1fc3RydWN0ICptbTtgIGlzIGFuIDgtYnl0ZSBwb2ludGVyLCBhbmQgYGJvb2wgaW50cm9zcGVjdGlvbjtgIGlzIDEgYnl0ZSwgc28gdGhlcmUgYXJlIDcgYnl0ZXMgb2YgcGFkZGluZy4gTXkgY29uY2VybiBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGVyZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPwoKSSBjaGVja2VkIHdoZXJlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIHVzZWQuIEl0JiMzOTtzIHN0b3JlZCBpbiBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYC4gSXQmIzM5O3MgYWNjZXNzZWQgaW4gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiAgQ3J1Y2lhbGx5LCBpdCBpcyBub3QgKmNvcGllZCogdG8gdXNlciBzcGFjZSBpbiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBhIHNlY3VyaXR5IGlzc3VlIHNpbmNlIHRoZXkgYXJlIG5vdCBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB0aGUgdXNlci4gVGhlIGZpZWxkcyBgbW1gIGFuZCBgaW50cm9zcGVjdGlvbmAgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCBpcyBzdWZmaWNpZW50LgoKT2theSwgbGV0JiMzOTtzIGJyb2FkZW4gbXkgdmlldyB0byBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2guIEkgc2VlIG5ldyBMU00gaG9va3MgYmVpbmcgaW50cm9kdWNlZC4gIFRoZSBhZGRpdGlvbiBvZiBgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaG9vayBpcyB0aGUgY3JpdGljYWwgbmV3IGFkZGl0aW9uLiBJJiMzOTttIG5vdGluZyB0aGUgbmV3IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgdGhlIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9ucy4KCk15IGludGVyZXN0IG5vdyB0dXJucyB0byBob3cgdGhlc2UgaG9va3MgYXJlIGJlaW5nIGltcGxlbWVudGVkLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiB1c2VzIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAuIFRoZSBjb2RlIGNhbGxzIGl0IHdpdGggYW4gYCZhbXA7YXZkYCBhcmd1bWVudCwgaW5kaWNhdGluZyBpdCYjMzk7cyBhIHBvaW50ZXIgdG8gYW4gYGF2X2RlY2lzaW9uYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgYXZkYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAsIGFuZCBsb29rIGludG8gdGhlIHNpZ25hdHVyZXMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXZjX2hhc19wZXJtX25vYXVkaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9hdmMuYz05NTQ9aW50IGF2Y19zc19yZXNldCh1MzIgc2Vxbm8pXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODItICpcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6OTgzOiAqIFNsb3ctcGF0aCBoZWxwZXIgZnVuY3Rpb24gZm9yIGF2Y19oYXNfcGVybV9ub2F1ZGl0LCB3aGVuIHRoZSBhdmNfbm9kZSBsb29rdXBcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtOTg0LSAqIGZhaWxzLiAgRG9uJiMzOTt0IGlubGluZSB0aGlzLCBzaW5jZSBpdCYjMzk7cyB0aGUgc2xvdy1wYXRoIGFuZCBqdXN0IHJlc3VsdHMgaW4gYVxuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTAxOT1pbnQgYXZjX2hhc19leHRlbmRlZF9wZXJtcyh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA1LSAqXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExMDY6ICogVGhpcyBpcyB0aGUgXCYjMzQ7d2UgaGF2ZSBubyBub2RlXCYjMzQ7IHBhcnQgb2YgYXZjX2hhc19wZXJtX25vYXVkaXQoKSwgd2hpY2ggaXNcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEwNy0gKiB1bmxpa2VseSBhbmQgbmVlZHMgZXh0cmEgc3RhY2sgc3BhY2UgZm9yIHRoZSBuZXcgbm9kZSB0aGF0IHdlIGdlbmVyYXRlLCBzb1xuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTExMD1zdGF0aWMgbm9pbmxpbmUgaW50IGF2Y19wZXJtX25vbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTI1LS8qKlxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTI2OiAqIGF2Y19oYXNfcGVybV9ub2F1ZGl0IC0gQ2hlY2sgcGVybWlzc2lvbnMgYnV0IHBlcmZvcm0gbm8gYXVkaXRpbmcuXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExMjctICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ0LSAqL1xuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTQ1OmlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVx0XHRcdFx0dTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExODk9aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk0LVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTk1Olx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgMCxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE5Ni1cdFx0XHRcdCAgXHUwMDI2YXZkKTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTY0MT1zdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE2NjUtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTY2NjpcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIHNjbGFzcywgYXYsIDAsIFx1MDAyNmF2ZCk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2Ny1cdGlmICghKG9wdHMgXHUwMDI2IENBUF9PUFRfTk9BVURJVCkpIHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE3MT1zdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3Ny1cdC8qIEFsbG93IGlmIHRoZSBwcm9jZXNzIGlzIGdlbmVyYWxseSBhbGxvd2VkIHRvIGhhdmUgZXhlY3V0YWJsZSBhbm9ueW1vdXMgbWVtb3J5LiAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNzg6XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcdTAwMjZhdmQpO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNzktXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODEtXHRpZiAocmMpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE4MjpcdFx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcdTAwMjZhdmQpO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODMtXHRyZXR1cm4gcmM7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMyNjk9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwNS1cdFx0LyogQ2FjaGUgbWlzcy4gKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMzA2Olx0XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgaXNlYy1cdTAwM2VzaWQsIGlzZWMtXHUwMDNlc2NsYXNzLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMDctXHRcdFx0XHRcdCAgcGVybXMsIDAsIGF2ZHApO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMDE9aW50IHNsb3dfYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwgdTMyIGF1ZGl0ZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExMC0gKiBAYXZkOiBhY2Nlc3MgdmVjdG9yIGRlY2lzaW9uc1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjExMTogKiBAcmVzdWx0OiByZXN1bHQgZnJvbSBhdmNfaGFzX3Blcm1fbm9hdWRpdFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExMi0gKiBAYTogIGF1eGlsaWFyeSBhdWRpdCBkYXRhXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExNi0gKiBhdmNfaGFzX3Blcm0oKSBhZnRlciBhIHBlcm1pc3Npb24gY2hlY2ssIGJ1dCBjYW4gYWxzbyBiZVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjExNzogKiBjYWxsZWQgZGlyZWN0bHkgYnkgY2FsbGVycyB3aG8gdXNlIGF2Y19oYXNfcGVybV9ub2F1ZGl0KClcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTgtICogaW4gb3JkZXIgdG8gc2VwYXJhdGUgdGhlIHBlcm1pc3Npb24gY2hlY2sgZnJvbSB0aGUgYXVkaXRpbmcuXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oPTEyMz1zdGF0aWMgaW5saW5lIGludCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzYtI2RlZmluZSBBVkNfRVhURU5ERURfUEVSTVMgMiAvKiB1cGRhdGUgZXh0ZW5kZWQgcGVybWlzc2lvbnMgKi9cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMzc6aW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzgtXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE2OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGEgaHlwb3RoZXRpY2FsIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgYXZjX2hhc19wZXJtX25vYXVkaXRgJiMzOTtzIEludGVyYWN0aW9uIHdpdGggYGF2ZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFNFTGludXggYWNjZXNzIHZlY3RvciBjYWNoZSAoQVZDKSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyBgYXZjX2hhc19wZXJtX25vYXVkaXRgIGluIGBzZWN1cml0eS9zZWxpbnV4L2F2Yy5jYCBhY3R1YWxseSAqdXNlcyogdGhlIGBhdmRgIHN0cnVjdHVyZS4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHVwZGF0aW5nIGl0LCBlZmZlY3RpdmVseSB3cml0aW5nIGluZm9ybWF0aW9uPyBPciBpcyBpdCBhY3R1YWxseSByZWFkaW5nIGRhdGEgZnJvbSB0aGUgYGF2ZGAgdG8gcGVyZm9ybSBzb21lIGtpbmQgb2YgY2hlY2sgb3IgZGVjaXNpb24tbWFraW5nIHByb2Nlc3M/IFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIGRhdGEgZmxvd3MgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEFWQy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbXBvcnRhbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIHRvbyEgVW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgZGF0YSBnb2VzLCBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbSBpcyBwYXJhbW91bnQgdG8gZmluZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHNjYW4sIGJ1dCBwcmVjaXNpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmxpbmUgaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgvYXZjLmM9MTExMD1zdGF0aWMgbm9pbmxpbmUgaW50IGF2Y19wZXJtX25vbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ0LSAqL1xuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTQ1OmlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVx0XHRcdFx0dTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1ODgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEFWQy5jKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHNlY3VyaXR5L3NlbGludXgvYXZjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTE0NS4gSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYWNjZXNzIHZlY3RvciBjYWNoZSAoQVZDKSBoYW5kbGluZywgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBoYXMgaGlzdG9yaWNhbGx5IGJlZW4gcHJvbmUgdG8gc3VidGxlIGlzc3VlcywgYW5kIHRoZSBzeW1wdG9tcyBJJiMzOTttIGNoYXNpbmcgYXJlIGxlYWRpbmcgbWUgaW4gdGhpcyBkaXJlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoZSBBVkMgY2FjaGUgbG9va3VwIGFuZCBpbnZhbGlkYXRpb24uIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZS4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L2F2Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTQwOlx0ICogb3RoZXIgZXJyb3JzLiAgVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGJ5IGF2Y19oYXNfcGVybSgpLFxuMTE0MTpcdCAqIGJ1dCBtYXkgYWxzbyBiZSBjYWxsZWQgZGlyZWN0bHkgdG8gc2VwYXJhdGUgcGVybWlzc2lvbiBjaGVja2luZyBmcm9tXG4xMTQyOlx0ICogYXVkaXRpbmcsIGUuZy4gaW4gY2FzZXMgd2hlcmUgYSBsb2NrIG11c3QgYmUgaGVsZCBmb3IgdGhlIGNoZWNrIGJ1dFxuMTE0MzpcdCAqIHNob3VsZCBiZSByZWxlYXNlZCBmb3IgdGhlIGF1ZGl0aW5nLlxuMTE0NDpcdCAqL1xuMTE0NTpcdGlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxuMTE0NjpcdFx0XHRcdFx0dTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbjExNDc6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncyxcbjExNDg6XHRcdFx0XHRcdHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKVxuMTE0OTpcdHtcbjExNTA6XHRcdHUzMiBkZW5pZWQ7XG4xMTUxOlx0XHRzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7XG4xMTUyOlx0XG4xMTUzOlx0XHRpZiAoV0FSTl9PTighcmVxdWVzdGVkKSlcbjExNTQ6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4xMTU1Olx0XG4xMTU2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMTU3Olx0XHRub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MpO1xuMTE1ODpcdFx0aWYgKHVubGlrZWx5KCFub2RlKSkge1xuMTE1OTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjExNjA6XHRcdFx0cmV0dXJuIGF2Y19wZXJtX25vbm9kZShzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCxcbjExNjE6XHRcdFx0XHRcdCAgICAgICBmbGFncywgYXZkKTtcbjExNjI6XHRcdH1cbjExNjM6XHRcdGRlbmllZCA9IHJlcXVlc3RlZCBcdTAwMjYgfm5vZGUtXHUwMDNlYWUuYXZkLmFsbG93ZWQ7XG4xMTY0Olx0XHRtZW1jcHkoYXZkLCBcdTAwMjZub2RlLVx1MDAzZWFlLmF2ZCwgc2l6ZW9mKCphdmQpKTtcbjExNjU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTE2NjpcdFxuMTE2NzpcdFx0aWYgKHVubGlrZWx5KGRlbmllZCkpXG4xMTY4Olx0XHRcdHJldHVybiBhdmNfZGVuaWVkKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAwLCAwLCAwLFxuMTE2OTpcdFx0XHRcdFx0ICBmbGFncywgYXZkKTtcbjExNzA6XHRcdHJldHVybiAwO1xuMTE3MTpcdH1cbjExNzI6XHRcbjExNzM6XHQvKipcbjExNzQ6XHQgKiBhdmNfaGFzX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9ucyBhbmQgcGVyZm9ybSBhbnkgYXBwcm9wcmlhdGUgYXVkaXRpbmcuXG4xMTc1Olx0ICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyXG4xMTc2Olx0ICogQHRzaWQ6IHRhcmdldCBzZWN1cml0eSBpZGVudGlmaWVyXG4xMTc3Olx0ICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzXG4xMTc4Olx0ICogQHJlcXVlc3RlZDogcmVxdWVzdGVkIHBlcm1pc3Npb25zLCBpbnRlcnByZXRlZCBiYXNlZCBvbiBAdGNsYXNzXG4xMTc5Olx0ICogQGF1ZGl0ZGF0YTogYXV4aWxpYXJ5IGF1ZGl0IGRhdGFcbjExODA6XHQgKlxuMTE4MTpcdCAqIENoZWNrIHRoZSBBVkMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYXJlIGdyYW50ZWRcbjExODI6XHQgKiBmb3IgdGhlIFNJRCBwYWlyIChAc3NpZCwgQHRzaWQpLCBpbnRlcnByZXRpbmcgdGhlIHBlcm1pc3Npb25zXG4xMTgzOlx0ICogYmFzZWQgb24gQHRjbGFzcywgYW5kIGNhbGwgdGhlIHNlY3VyaXR5IHNlcnZlciBvbiBhIGNhY2hlIG1pc3MgdG8gb2J0YWluXG4xMTg0Olx0ICogYSBuZXcgZGVjaXNpb24gYW5kIGFkZCBpdCB0byB0aGUgY2FjaGUuICBBdWRpdCB0aGUgZ3JhbnRpbmcgb3IgZGVuaWFsIG9mXG4xMTg1Olx0ICogcGVybWlzc2lvbnMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwb2xpY3kuICBSZXR1cm4gJTAgaWYgYWxsIEByZXF1ZXN0ZWRcbjExODY6XHQgKiBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZCwgLSVFQUNDRVMgaWYgYW55IHBlcm1pc3Npb25zIGFyZSBkZW5pZWQsIG9yXG4xMTg3Olx0ICogYW5vdGhlciAtZXJybm8gdXBvbiBvdGhlciBlcnJvcnMuXG4xMTg4Olx0ICovXG4xMTg5Olx0aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjU3CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgVXNlIGluIFNFTGludXgvUHJvYyBGaWxlc3lzdGVtIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYC4gTXkgcXVpY2sgc2NhbiBzaG93ZWQgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCBwb3B1bGF0aW5nIGFuIGBhdl9kZWNpc2lvbmAgc3RydWN0LCB3aGljaCBpcyBhbiBvdXRwdXQgcGFyYW1ldGVyLCBzbyB0aGF0JiMzOTtzIHBlcmZlY3RseSBmaW5lLiBXZSYjMzk7cmUgZ29vZCB0aGVyZS4KCk5vdywgdGhhdCBga21hbGxvY19vYmpgIG1hY3JvLCB0aGF0JiMzOTtzIHdoYXQgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvIGJ1dCBhcHBlYXJzIHRvIGJlIGEgcmVjZW50IGFkZGl0aW9uIHRvIHJlcGxhY2UgYGttYWxsb2Moc2l6ZW9mKC4uLikpYC4gUmlnaHQsIHNvIGl0ICphbGxvY2F0ZXMqIGJ1dCBkb2VzbiYjMzk7dCAqemVybyogbWVtb3J5LCB3aGljaCBtZWFucyB0aGVyZSBjb3VsZCBiZSBzb21lIGlzc3Vlcy4gSWYgd2UgdXNlIGl0IG9uIGEgc3RydWN0IHRoYXQgaXMgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgaXRzIGZpZWxkcyBhcmUgdXNlZCBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuCgpTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHVzZXMgYGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSlgLiBMZXQmIzM5O3MgbG9vayBhdCBgc3RydWN0IG1lbV9wcml2YXRlYC4uLiBJdCBjb250YWlucyBhIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYW5kIGEgYGJvb2wgaW50cm9zcGVjdGlvbmAuIE9rYXksIGlmIHdlIGNoZWNrIHRoZSBjb2RlIGZvciBgbWVtX29wZW5gLCB0aGV5JiMzOTtyZSBib3RoIGluaXRpYWxpemVkOiBgcHJpdi0mZ3Q7bW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpYCBhbmQgYHByaXYtJmd0O2ludHJvc3BlY3Rpb24gPSBwcml2LSZndDttbSA9PSBjdXJyZW50LSZndDttbWAuIEhvd2V2ZXIsIHRoZXJlIGlzIHBhZGRpbmcuIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIDE2IGJ5dGVzIG9uIDY0LWJpdCwgd2l0aCA4IGJ5dGVzIGZvciBgbW1gLCAxIGJ5dGUgZm9yIGBpbnRyb3NwZWN0aW9uYCwgYW5kIDcgYnl0ZXMgb2YgcGFkZGluZy4gVGhlIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZC4gQW5kIHRoZSBzdHJ1Y3QgaXNuJiMzOTt0IGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsc28sIGl0IGlzbiYjMzk7dCB1c2VkIGluIGFueSBjb25kaXRpb25hbCBsb2dpYyBleGNlcHQgdGhlIGZpZWxkIGBwcml2LSZndDtpbnRyb3NwZWN0aW9uYC4KCkJ1dCB3aGF0IGlmIGBwcm9jX21lbV9vcGVuYCByZXR1cm5zIGFuIGVycm9yPyBPa2F5LCByaWdodCwgaW4gdGhhdCBjYXNlLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGJlZm9yZSBgcHJpdi0mZ3Q7aW50cm9zcGVjdGlvbmAgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgc3RydWN0IGlzIGZyZWVkLiBTbywgbm8gbWVtb3J5IGlzIGFjY2Vzc2VkLgoKTGV0JiMzOTtzIHRyYWNlIGl0cyB1c2UuIFRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBsb29rcyBzYWZlOyBpdCBkZXJlZmVyZW5jZXMgdGhlIG1lbWJlcnMgYW5kIHRoZW4gYGtmcmVlYHMgdGhlIHN0cnVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHVzaW5nIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIGlzIGFjY291bnRlZCBmb3IuCgpDaGVja2luZyBvdGhlciB1c2VzIG9mIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLCBpbiBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIHRoZSBgaW50cm9zcGVjdGlvbmAgZmllbGQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFsc28sIGBtZW1fcndgIGlzIHNhZmUsIGFzIGl0cyBzdHJ1Y3QgdXNlcyB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzLgoKQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gYGZzL3Byb2MvYmFzZS5jYCB0aGF0IHVzZSB0aGUgYHByb2NfbWVtX29wZXJhdGlvbnNgIHN0cnVjdHVyZT8gSSBxdWlja2x5IGxvb2tlZCBhdCB0aGUgYHByb2NfbWVtX29wZXJhdGlvbnNgIHRvIGNoZWNrIGFsbCB0aGUgb3RoZXIgZmlsZSBvcGVyYXRpb25zLiBPa2F5LCBzbyBgbWVtX2xzZWVrYCBkb2VzbiYjMzk7dCB1c2UgYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAuIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGNhbGxzIGBtZW1fcndgLCB3aGljaCB1c2VzIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLCBhcyB3ZSBoYXZlIHNlZW4sIHNvIHRoZXkmIzM5O3JlIHNhZmUuCgpJIGFsc28gY2hlY2tlZCBvdGhlciByZWxhdGVkIHRoaW5ncyBsaWtlIGBlbnZpcm9uX3JlYWRgLCBidXQgaXQgdXNlcyBhIGRpZmZlcmVudCBvcGVyYXRpb24gc3RydWN0dXJlLiBUaGUgYG1lbV9yZWxlYXNlYCBpcyBzdGlsbCB0aGVyZSwgZm9yIG90aGVyIHRoaW5ncywgYnV0IHVzZXMgYSBkaWZmZXJlbnQgYHByaXZhdGVfZGF0YWAuIE5vdywgSSYjMzk7bSBjb21mb3J0YWJsZSB0aGF0IEkmIzM5O3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgcGxhY2UgdGhhdCB1c2VzIHRoZSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBHb29kLCB3ZSYjMzk7cmUgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9yZWxlYXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMzg4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTE3MD1zdGF0aWMgaW50XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjE3MTpzcHVmc19tZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMTcyLXtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTMwMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19tZW1fZm9wcyA9IHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA0LVx0Lm9wZW5cdFx0XHQ9IHNwdWZzX21lbV9vcGVuLFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzozMDU6XHQucmVsZWFzZVx0XHQ9IHNwdWZzX21lbV9yZWxlYXNlLFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy0zMDYtXHQucmVhZFx0XHRcdD0gc3B1ZnNfbWVtX3JlYWQsXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jPTE2MD1zdHJ1Y3QgaGxfY2JfbW1hcF9tZW1fYWxsb2NfYXJncyB7XG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jLTE2Ny1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYzoxNjg6c3RhdGljIHZvaWQgaGxfY2JfbW1hcF9tZW1fcmVsZWFzZShzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmICpidWYpXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMTY5LXtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmM9MjU4PXN0YXRpYyBzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmX2JlaGF2aW9yIGNiX2JlaGF2aW9yID0ge1xuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYy0yNjEtXHQuYWxsb2MgPSBobF9jYl9tbWFwX21lbV9hbGxvYyxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYzoyNjI6XHQucmVsZWFzZSA9IGhsX2NiX21tYXBfbWVtX3JlbGVhc2UsXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMjYzLVx0Lm1tYXAgPSBobF9jYl9tbWFwLFxuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTM2OT1zdGF0aWMgaW50IGZpZm9faW5pdChzdHJ1Y3QgeGlsbHlmaWZvICpmaWZvLFxuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTQzMi1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjQzMzpzdGF0aWMgdm9pZCBmaWZvX21lbV9yZWxlYXNlKHN0cnVjdCB4aWxseWZpZm8gKmZpZm8pXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy00MzQte1xuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTQ2Nz1zdGF0aWMgdm9pZCBlbmRwb2ludF9kZWFsbG9jKHN0cnVjdCB4aWxseXVzYl9lbmRwb2ludCAqZXApXG4tLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtNDcwLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6NDcxOlx0Zmlmb19tZW1fcmVsZWFzZShcdTAwMjZlcC1cdTAwM2VmaWZvKTtcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTQ3Mi1cbi0tXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYz0xMjM2PXN0YXRpYyBpbnQgeGlsbHl1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xMzk2LVx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MTM5NzpcdGZpZm9fbWVtX3JlbGVhc2UoaW5fZmlmbyk7XG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xMzk4LVx0a2ZyZWUoaW5fZmlmbyk7XG4tLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM9MTcwNj1zdGF0aWMgaW50IHhpbGx5dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMTczNC1cdFx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MTczNTpcdFx0Zmlmb19tZW1fcmVsZWFzZShpbl9maWZvKTtcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTE3MzYtXHRcdGtmcmVlKGluX2ZpZm8pO1xuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTIwMDE9c3RhdGljIGludCB4aWxseXVzYl9kaXNjb3Zlcnkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSlcbi0tXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0yMTIxLVxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MjEyMjpcdGZpZm9fbWVtX3JlbGVhc2UoXHUwMDI2aWR0X2ZpZm8pO1xuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMjEyMy1cdGtmcmVlKGNoYW4pO1xuLS1cbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxNDAtXHRzYWZlbHlfYXNzaWduX2luX2ZpZm8oY2hhbiwgTlVMTCk7XG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYzoyMTQxOlx0Zmlmb19tZW1fcmVsZWFzZShcdTAwMjZpZHRfZmlmbyk7XG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0yMTQyLVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM9NjUyPXN0YXRpYyBpbnQgYWxsb2NfaHBhKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTY5Ny1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6Njk4OnN0YXRpYyB2b2lkIGN4bF9yZWdpb25faW9tZW1fcmVsZWFzZShzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscilcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtNjk5LXtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jPTcxNj1zdGF0aWMgaW50IGZyZWVfaHBhKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtNzI5LVxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYzo3MzA6XHRjeGxfcmVnaW9uX2lvbWVtX3JlbGVhc2UoY3hscik7XG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTczMS1cdHAtXHUwMDNlc3RhdGUgPSBDWExfQ09ORklHX0lETEU7XG4tLVxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYz0yNTYyPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4MC1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6MjU4MTpcdGN4bF9yZWdpb25faW9tZW1fcmVsZWFzZShjeGxyKTtcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4Mi1cdHB1dF9kZXZpY2UoXHUwMDI2Y3hsci1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM9MzY3NT1zdGF0aWMgaW50IF9fY29uc3RydWN0X3JlZ2lvbihzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTM3MjYtXHRcdCAqIFBsYXRmb3JtLWZpcm13YXJlIG1heSBub3QgaGF2ZSBzcGxpdCByZXNvdXJjZXMgbGlrZSBcJiMzNDtTeXN0ZW1cbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6MzcyNzpcdFx0ICogUkFNXCYjMzQ7IG9uIENYTCB3aW5kb3cgYm91bmRhcmllcyBzZWUgY3hsX3JlZ2lvbl9pb21lbV9yZWxlYXNlKClcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMzcyOC1cdFx0ICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM9MTU5PUVYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fY3JlYXRlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xNjEtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoxNjI6ICogX19kcm1fZ2VtX3NobWVtX3JlbGVhc2Vfc2d0X2xvY2tlZCAtIFVucGluIGFuZCBETUEgdW5tYXAgcGFnZXMsIGFuZCByZWxlYXNlIHRoZVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTYzLSAqIGNhY2hlZCBzY2F0dGVyL2dhdGhlciB0YWJsZSBmb3IgYW4gc2htZW0gR0VNIG9iamVjdC5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYz0xODM9RVhQT1JUX1NZTUJPTF9HUEwoX19kcm1fZ2VtX3NobWVtX2ZyZWVfc2d0X2xvY2tlZCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTg1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM6MTg2OiAqIGRybV9nZW1fc2htZW1fcmVsZWFzZSAtIFJlbGVhc2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHNobWVtIEdFTSBvYmplY3QuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xODctICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTkxLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM6MTkyOnZvaWQgZHJtX2dlbV9zaG1lbV9yZWxlYXNlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xOTMte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIxNS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoyMTY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9yZWxlYXNlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIxNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYz0yMjU9dm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIyNi17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoyMjc6XHRkcm1fZ2VtX3NobWVtX3JlbGVhc2Uoc2htZW0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMjI4LVx0a2ZyZWUoc2htZW0pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyOD1zdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF96ZGRfZGVzdHJveShzdHJ1Y3Qga3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNi1cdFx0Y29tcGxldGVfYWxsKFx1MDAyNmRldm1lbS1cdTAwM2VkZXRhY2hlZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzc6XHRcdGlmIChkZXZtZW0tXHUwMDNlb3BzLVx1MDAzZWRldm1lbV9yZWxlYXNlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM4Olx0XHRcdGRldm1lbS1cdTAwM2VvcHMtXHUwMDNlZGV2bWVtX3JlbGVhc2UoZGV2bWVtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzOS1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz02MTY9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg0MS1lcnJfb3V0OlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODQyOlx0ZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlb3BzLVx1MDAzZWRldm1lbV9yZWxlYXNlKGRldm1lbV9hbGxvY2F0aW9uKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg0My1cdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYz00NjY9dm9pZCBldG5hdml2X2dlbV9kZXNjcmliZV9vYmplY3RzKHN0cnVjdCBldG5hdml2X2RybV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDg3LVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYzo0ODg6c3RhdGljIHZvaWQgZXRuYXZpdl9nZW1fc2htZW1fcmVsZWFzZShzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iailcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDg5LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jPTQ5ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0bmF2aXZfZ2VtX29wcyBldG5hdml2X2dlbV9zaG1lbV9vcHMgPSB7XG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ5NS1cdC5nZXRfcGFnZXMgPSBldG5hdml2X2dlbV9zaG1lbV9nZXRfcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjQ5NjpcdC5yZWxlYXNlID0gZXRuYXZpdl9nZW1fc2htZW1fcmVsZWFzZSxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDk3LVx0LnZtYXAgPSBldG5hdml2X2dlbV92bWFwX2ltcGwsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9NDcxPXNobWVtX3ByZWFkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDc5LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM6NDgwOnN0YXRpYyB2b2lkIHNobWVtX3JlbGVhc2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jLTQ4MS17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9NDg4PWNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9zaG1lbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDk5LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM6NTAwOlx0LnJlbGVhc2UgPSBzaG1lbV9yZWxlYXNlLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTAxLX07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYz0xMTY9c3RhdGljIGludFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYzoxMTc6cmVnaW9uX2xtZW1fcmVsZWFzZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYy0xMTgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmM9MTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgaW50ZWxfcmVnaW9uX2xtZW1fb3BzID0ge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYy0xNTAtXHQuaW5pdCA9IHJlZ2lvbl9sbWVtX2luaXQsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZWdpb25fbG1lbS5jOjE1MTpcdC5yZWxlYXNlID0gcmVnaW9uX2xtZW1fcmVsZWFzZSxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmMtMTUyLVx0LmluaXRfb2JqZWN0ID0gX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmM9MTU0ND12YzRfZHNpX2luaXRfcGh5X2Nsb2NrcyhzdHJ1Y3QgdmM0X2RzaSAqZHNpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2MDYtXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYzoxNjA3OnN0YXRpYyB2b2lkIHZjNF9kc2lfZG1hX21lbV9yZWxlYXNlKHZvaWQgKnB0cilcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2MDgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jPTE2MzE9c3RhdGljIGludCB2YzRfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMtMTY3OC1cbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jOjE2Nzk6XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHZjNF9kc2lfZG1hX21lbV9yZWxlYXNlLCBkc2kpO1xuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMtMTY4MC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9NzU2PXN0YXRpYyBzdHJ1Y3QgeGVfYm8gKnRvX3hlX2JvKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy03NjAtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6NzYxOnN0YXRpYyB2b2lkIHhlX3N2bV9kZXZtZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy03NjIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIGRwYWdlbWFwX2Rldm1lbV9vcHMgPSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6ODA3Olx0LmRldm1lbV9yZWxlYXNlID0geGVfc3ZtX2Rldm1lbV9yZWxlYXNlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTgwOC1cdC5wb3B1bGF0ZV9kZXZtZW1fcGZuID0geGVfc3ZtX3BvcHVsYXRlX2Rldm1lbV9wZm4sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTQ5LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjUwOnN0YXRpYyB2b2lkIF9faWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sIGludCBkaXJ0eSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy01MS17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jPTE2Mj1zdGF0aWMgc3RydWN0IGliX3VtZW0gKl9faWJfdW1lbV9nZXRfdmEoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNDYtXHRcdFx0cmV0ID0gcGlubmVkO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI0NzpcdFx0XHRnb3RvIHVtZW1fcmVsZWFzZTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNDgtXHRcdH1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjU3LVx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhwYWdlX2xpc3QsIHBpbm5lZCwgMCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjU4Olx0XHRcdGdvdG8gdW1lbV9yZWxlYXNlO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI1OS1cdFx0fVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNjQtXHRpZiAocmV0KVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI2NTpcdFx0Z290byB1bWVtX3JlbGVhc2U7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjY2LVx0Z290byBvdXQ7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjY3LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI2ODp1bWVtX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY5Olx0X19pYl91bWVtX3JlbGVhc2UoZGV2aWNlLCB1bWVtLCAwKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNzAtXHRhdG9taWM2NF9zdWIoaWJfdW1lbV9udW1fcGFnZXModW1lbSksIFx1MDAyNm1tLVx1MDAzZXBpbm5lZF92bSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jPTM3Nj1pYl91bWVtX2dldF9kZXNjX2NoZWNrKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMzg1LVx0aWYgKHVtZW0tXHUwMDNlbGVuZ3RoIFx1MDAzYyBtaW5fc2l6ZSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjM4NjpcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTM4Ny1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jPTYxMj1FWFBPUlRfU1lNQk9MKGliX3VtZW1fZ2V0X2NxX2J1Zl9vcl92YSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYxNC0vKipcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzo2MTU6ICogaWJfdW1lbV9yZWxlYXNlIC0gcmVsZWFzZSBwaW5uZWQgbWVtb3J5XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjE2LSAqIEB1bWVtOiB1bWVtIHN0cnVjdCB0byByZWxlYXNlXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjE3LSAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYxODp2b2lkIGliX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfdW1lbSAqdW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MTkte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MjYtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6NjI3Olx0X19pYl91bWVtX3JlbGVhc2UodW1lbS1cdTAwM2VpYmRldiwgdW1lbSwgMSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjI4LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MzItfVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYzMzpFWFBPUlRfU1lNQk9MKGliX3VtZW1fcmVsZWFzZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjM0LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmM9MjE0PWliX3VtZW1fZG1hYnVmX2dldF9waW5uZWRfYW5kX2xvY2soc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjQyLVx0ZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jOjI0MzpcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjQ0LVx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jPTI2Mz1FWFBPUlRfU1lNQk9MKGliX3VtZW1fZG1hYnVmX2dldF9waW5uZWRfd2l0aF9kbWFfZGV2aWNlKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jLTI4Ny0gKiBJZiBzdWNjZXNzZnVsLCB0aGVuIHRoZSByZXZva2UgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2lsbFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYzoyODg6ICogYWxzbyBiZSBjYWxsZWQgYXV0b21hdGljYWxseSB1cG9uIGliX3VtZW1fcmVsZWFzZSAoc2VyaWFsaXplZCkuIFRoZSByZXZva2VcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjg5LSAqIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9uZSB0aW1lIGF0IG1vc3QuXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0xMDAxPXN0YXRpYyB2b2lkIGJueHRfcmVfcXBfZnJlZV91bWVtKHN0cnVjdCBibnh0X3JlX3FwICpxcClcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTAwMi17XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjEwMDM6XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlcnVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoxMDA0Olx0aWJfdW1lbV9yZWxlYXNlKHFwLVx1MDAzZXN1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTAwNS19XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0xMTk3PXN0YXRpYyBpbnQgYm54dF9yZV9pbml0X3VzZXJfcXAoc3RydWN0IGJueHRfcmVfZGV2ICpyZGV2LCBzdHJ1Y3QgYm54dF9yZV9wZCAqcGQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0xMjU1LXJxZmFpbDpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTI1NjpcdGliX3VtZW1fcmVsZWFzZShxcC1cdTAwM2VydW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNTctXHRxcC1cdTAwM2VydW1lbSA9IE5VTEw7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0xMjU5LWZhaWw6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjEyNjA6XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlc3VtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0xMjYxLVx0cXAtXHUwMDNlc3VtZW0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MjE0Mz1pbnQgYm54dF9yZV9kZXN0cm95X3NycShzdHJ1Y3QgaWJfc3JxICppYl9zcnEsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0yMTU5LVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3JxLVx1MDAzZXVjdHhfc3JxX3BhZ2UpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoyMTYwOlx0aWJfdW1lbV9yZWxlYXNlKHNycS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMjE2MS1cdGF0b21pY19kZWMoXHUwMDI2cmRldi1cdTAwM2VzdGF0cy5yZXMuc3JxX2NvdW50KTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTIxOTk9aW50IGJueHRfcmVfY3JlYXRlX3NycShzdHJ1Y3QgaWJfc3JxICppYl9zcnEsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0yMjg4LWZhaWw6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjIyODk6XHRpYl91bWVtX3JlbGVhc2Uoc3JxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0yMjkwLWV4aXQ6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0zNDYxPWludCBibnh0X3JlX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYl9jcSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM0ODctXHRrZnJlZShjcS1cdTAwM2VjcWwpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNDg4Olx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNDg5LVx0cmV0dXJuIGliX3Jlc3BvbmRfZW1wdHlfdWRhdGEodWRhdGEpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MzQ5Mj1pbnQgYm54dF9yZV9jcmVhdGVfdXNlcl9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGNvbnN0IHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgKmF0dHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNTgwLWZyZWVfdW1lbTpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzU4MTpcdGliX3VtZW1fcmVsZWFzZShjcS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzU4Mi1cdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2Mzc9c3RhdGljIHZvaWQgYm54dF9yZV9yZXNpemVfY3FfY29tcGxldGUoc3RydWN0IGJueHRfcmVfY3EgKmNxKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzY0NC1cdGlmIChjcS1cdTAwM2VyZXNpemVfdW1lbSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNjQ1Olx0XHRpYl91bWVtX3JlbGVhc2UoY3EtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM2NDYtXHRcdGNxLVx1MDAzZXVtZW0gPSBjcS1cdTAwM2VyZXNpemVfdW1lbTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2NTI9aW50IGJueHRfcmVfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgdW5zaWduZWQgaW50IGNxZSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM3MjMtXHRpZiAoY3EtXHUwMDNlcmVzaXplX3VtZW0pIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzcyNDpcdFx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXJlc2l6ZV91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzcyNS1cdFx0Y3EtXHUwMDNlcmVzaXplX3VtZW0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDQ0Nj1pbnQgYm54dF9yZV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDQ2OC1cdH1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDQ2OTpcdGliX3VtZW1fcmVsZWFzZShtci1cdTAwM2VpYl91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDQ3MC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTQ2ODg9c3RydWN0IGliX21yICpibnh0X3JlX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqaWJfcGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQ3MTEtXHRpZiAoSVNfRVJSKGliX21yKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDcxMjpcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzEzLVx0cmV0dXJuIGliX21yO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDcxNj1zdHJ1Y3QgaWJfbXIgKmJueHRfcmVfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJfcGQsIHU2NCBzdGFydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQ3MzktXHRpZiAoSVNfRVJSKGliX21yKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDc0MDpcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzQxLVx0cmV0dXJuIGliX21yO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYz00OTE9c3RydWN0IGliX21yICpjNGl3X3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMtNTQxLVx0aWYgKGVycilcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYzo1NDI6XHRcdGdvdG8gZXJyX3VtZW1fcmVsZWFzZTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01NDMtXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTU5MC1cdFx0XHQgICAgICBtaHAtXHUwMDNlYXR0ci5wYmxfc2l6ZSBcdTAwM2NcdTAwM2MgMyk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NTkxOmVycl91bWVtX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NTkyOlx0aWJfdW1lbV9yZWxlYXNlKG1ocC1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01OTMtZXJyX2ZyZWVfc2tiOlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYz03MDQ9aW50IGM0aXdfZGVyZWdfbXIoc3RydWN0IGliX21yICppYl9tciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMtNzI1LVx0XHRrZnJlZSgodm9pZCAqKSAodW5zaWduZWQgbG9uZykgbWhwLVx1MDAzZWt2YSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NzI2Olx0aWJfdW1lbV9yZWxlYXNlKG1ocC1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy03MjctXHRwcl9kZWJ1ZyhcJiMzNDttbWlkIDB4JXggcHRyICVwXFxuXCYjMzQ7LCBtbWlkLCBtaHApO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM9MTA1NT1pbnQgZWZhX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYmNxLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTA3My1cdFx0ZWZhX2ZyZWVfbWFwcGVkKGRldiwgY3EtXHUwMDNlY3B1X2FkZHIsIGNxLVx1MDAzZWRtYV9hZGRyLCBjcS1cdTAwM2VzaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxMDc0Olx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xMDc1LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xMTEzPWludCBlZmFfY3JlYXRlX3VzZXJfY3Eoc3RydWN0IGliX2NxICppYmNxLCBjb25zdCBzdHJ1Y3QgaWJfY3FfaW5pdF9hdHRyICphdHRyLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTI2NS1lcnJfcmVsZWFzZV91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxMjY2Olx0aWJfdW1lbV9yZWxlYXNlKGNxLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xMjY3LWVycl9vdXQ6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xNzEwPXN0cnVjdCBpYl9tciAqZWZhX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3NDgtZXJyX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjE3NDk6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3NTAtZXJyX2ZyZWU6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xNzU3PXN0cnVjdCBpYl9tciAqZWZhX3JlZ19tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3OTItZXJyX3JlbGVhc2U6XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjE3OTM6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3OTQtZXJyX2ZyZWU6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xODM0PWludCBlZmFfZGVyZWdfbXIoc3RydWN0IGliX21yICppYm1yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTg0Ny1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM6MTg0ODpcdGliX3VtZW1fcmVsZWFzZShtci1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTg0OS1cdGtmcmVlKG1yKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYz04MzE9c3RhdGljIGludCBnZXRfbXR0X2VudHJpZXMoc3RydWN0IGVyZG1hX2RldiAqZGV2LCBzdHJ1Y3QgZXJkbWFfbWVtICptZW0sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtODYyLVx0aWYgKG1lbS1cdTAwM2V1bWVtKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYzo4NjM6XHRcdGliX3VtZW1fcmVsZWFzZShtZW0tXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYy04NjQtXHRcdG1lbS1cdTAwM2V1bWVtID0gTlVMTDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYz04NzA9c3RhdGljIHZvaWQgcHV0X210dF9lbnRyaWVzKHN0cnVjdCBlcmRtYV9kZXYgKmRldiwgc3RydWN0IGVyZG1hX21lbSAqbWVtKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg3NS1cdGlmIChtZW0tXHUwMDNldW1lbSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6ODc2Olx0XHRpYl91bWVtX3JlbGVhc2UobWVtLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtODc3LVx0XHRtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9OTI2PWVyZG1hX3VubWFwX3VzZXJfZGJyZWNvcmRzKHN0cnVjdCBlcmRtYV91Y29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTkzNC1cdFx0bGlzdF9kZWwoXHUwMDI2KCpkYnJfcGFnZSktXHUwMDNlbGlzdCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYzo5MzU6XHRcdGliX3VtZW1fcmVsZWFzZSgoKmRicl9wYWdlKS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTkzNi1cdFx0a2ZyZWUoKmRicl9wYWdlKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmM9NTU9dm9pZCBobnNfcm9jZV9kYl91bm1hcF91c2VyKHN0cnVjdCBobnNfcm9jZV91Y29udGV4dCAqY29udGV4dCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmMtNjItXHRcdGxpc3RfZGVsKFx1MDAyNmRiLVx1MDAzZXUudXNlcl9wYWdlLVx1MDAzZWxpc3QpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kYi5jOjYzOlx0XHRpYl91bWVtX3JlbGVhc2UoZGItXHUwMDNldS51c2VyX3BhZ2UtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmMtNjQtXHRcdGtmcmVlKGRiLVx1MDAzZXUudXNlcl9wYWdlKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmM9NTcyPXN0YXRpYyB2b2lkIG10cl9mcmVlX2J1ZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2LCBzdHJ1Y3QgaG5zX3JvY2VfbXRyICptdHIpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tci5jLTU3NS1cdGlmIChtdHItXHUwMDNldW1lbSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tci5jOjU3NjpcdFx0aWJfdW1lbV9yZWxlYXNlKG10ci1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbXIuYy01NzctXHRcdG10ci1cdTAwM2V1bWVtID0gTlVMTDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz03Nj1pbnQgaW9uaWNfY3JlYXRlX2NxX2NvbW1vbihzdHJ1Y3QgaW9uaWNfdmNxICp2Y3EsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTY0LVx0aWYgKGNxLVx1MDAzZXVtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoxNjU6XHRcdGliX3VtZW1fcmVsZWFzZShjcS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE2Ni1lcnJfcWRlc2M6XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MTc0PXZvaWQgaW9uaWNfZGVzdHJveV9jcV9jb21tb24oc3RydWN0IGlvbmljX2liZGV2ICpkZXYsIHN0cnVjdCBpb25pY19jcSAqY3EpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTg0LVx0aWYgKGNxLVx1MDAzZXVtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoxODU6XHRcdGliX3VtZW1fcmVsZWFzZShjcS1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE4Ni1cdGVsc2Vcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz04NzA9c3RydWN0IGliX21yICppb25pY19yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy05MjYtZXJyX3BndGJsOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM6OTI3Olx0aWJfdW1lbV9yZWxlYXNlKG1yLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtOTI4LWVycl91bWVtOlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTkzNT1zdHJ1Y3QgaWJfbXIgKmlvbmljX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBvZmZzZXQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtOTk2LWVycl9wZ3RibDpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjk5NzpcdGliX3VtZW1fcmVsZWFzZShtci1cdTAwM2V1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTk5OC1lcnJfdW1lbTpcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz0xMDA1PWludCBpb25pY19kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTAyMi1cdGlmIChtci1cdTAwM2V1bWVtKVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM6MTAyMzpcdFx0aWJfdW1lbV9yZWxlYXNlKG1yLVx1MDAzZXVtZW0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTAyNC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz0xNzgwPXN0YXRpYyBpbnQgaW9uaWNfcXBfc3FfaW5pdChzdHJ1Y3QgaW9uaWNfaWJkZXYgKmRldiwgc3RydWN0IGlvbmljX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MDgtXHRpZiAocXAtXHUwMDNlc3FfdW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5MDk6XHRcdGliX3VtZW1fcmVsZWFzZShxcC1cdTAwM2VzcV91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MTAtXHRlbHNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MTkxNT1zdGF0aWMgdm9pZCBpb25pY19xcF9zcV9kZXN0cm95KHN0cnVjdCBpb25pY19pYmRldiAqZGV2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MjctXHRpZiAocXAtXHUwMDNlc3FfdW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5Mjg6XHRcdGliX3VtZW1fcmVsZWFzZShxcC1cdTAwM2VzcV91bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MjktXHRlbHNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MjAwNj1zdGF0aWMgaW50IGlvbmljX3FwX3JxX2luaXQoc3RydWN0IGlvbmljX2liZGV2ICpkZXYsIHN0cnVjdCBpb25pY19jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTE2LVx0aWYgKHFwLVx1MDAzZXJxX3VtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTE3Olx0XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlcnFfdW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTE4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTIxMjM9c3RhdGljIHZvaWQgaW9uaWNfcXBfcnFfZGVzdHJveShzdHJ1Y3QgaW9uaWNfaWJkZXYgKmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTM0LVx0aWYgKHFwLVx1MDAzZXJxX3VtZW0pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTM1Olx0XHRpYl91bWVtX3JlbGVhc2UocXAtXHUwMDNlcnFfdW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTM2LVx0ZWxzZVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM1MDY9c3RhdGljIHN0cnVjdCBpYl9tciAqaXJkbWFfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1MzUtXHRpZiAoaWJfY29weV9mcm9tX3VkYXRhKFx1MDAyNnJlcSwgdWRhdGEsIG1pbihzaXplb2YocmVxKSwgdWRhdGEtXHUwMDNlaW5sZW4pKSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6MzUzNjpcdFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTM3LVx0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTQxLVx0aWYgKElTX0VSUihpd21yKSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6MzU0MjpcdFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTQzLVx0XHRyZXR1cm4gKHN0cnVjdCBpYl9tciAqKWl3bXI7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzU3Ni1lcnJvcjpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1Nzc6XHRpYl91bWVtX3JlbGVhc2UocmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1NzgtXHRpcmRtYV9mcmVlX2l3bXIoaXdtcik7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9MzYxMz1zdGF0aWMgc3RydWN0IGliX21yICppcmRtYV9yZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM2NjItXHQgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM2NjM6XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNjY0LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM3MjA9c3RhdGljIGludCBpcmRtYV9yZXJlZ19tcl90cmFucyhzdHJ1Y3QgaXJkbWFfbXIgKml3bXIsIHU2NCBzdGFydCwgdTY0IGxlbixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNzU0LWVycjpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM3NTU6XHRpYl91bWVtX3JlbGVhc2UocmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM3NTYtXHRpd21yLVx1MDAzZXJlZ2lvbiA9IE5VTEw7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9Mzc3NT1zdGF0aWMgc3RydWN0IGliX21yICppcmRtYV9yZXJlZ191c2VyX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIGludCBmbGFncyxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zODQyLVx0XHRpZiAoaXdtci1cdTAwM2VyZWdpb24pIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM4NDM6XHRcdFx0aWJfdW1lbV9yZWxlYXNlKGl3bXItXHUwMDNlcmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM4NDQtXHRcdFx0aXdtci1cdTAwM2VyZWdpb24gPSBOVUxMO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM5NzQ9c3RhdGljIGludCBpcmRtYV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTQwMDItXHRpZiAoaXdtci1cdTAwM2VyZWdpb24pXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYzo0MDAzOlx0XHQvKiBGb3IgZG1hYnVmIE1ScywgaWJfdW1lbV9yZWxlYXNlIHdpbGwgdHJpZ2dlciBhIHN5bmNocm9ub3VzXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDA0LVx0XHQgKiBjYWxsIHRvIHRoZSByZXZva2UgY2FsbGJhY2sgd2hpY2ggd2lsbCBwZXJmb3JtIHRoZSBhY3R1YWwgSFdcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDA4LVx0XHQgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjQwMDk6XHRcdGliX3VtZW1fcmVsZWFzZShpd21yLVx1MDAzZXJlZ2lvbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDEwLVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYz0yNTU9aW50IG1hbmFfaWJfY3JlYXRlX3F1ZXVlKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgdTY0IGFkZHIsIHUzMiBzaXplLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy0yODEtZnJlZV91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jOjI4MjpcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy0yODMtXHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYz0yODY9dm9pZCBtYW5hX2liX2Rlc3Ryb3lfcXVldWUoc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCBzdHJ1Y3QgbWFuYV9pYl9xdWV1ZSAqcXVldWUpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jLTI5MS1cdG1hbmFfaWJfZ2RfZGVzdHJveV9kbWFfcmVnaW9uKG1kZXYsIHF1ZXVlLVx1MDAzZWdkbWFfcmVnaW9uKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYzoyOTI6XHRpYl91bWVtX3JlbGVhc2UocXVldWUtXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjkzLVx0aWYgKHF1ZXVlLVx1MDAzZWttZW0pXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYz0xMDA9c3RydWN0IGliX21yICptYW5hX2liX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqaWJwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMTc5LWVycl91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYzoxODA6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTE4MS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jPTE4Nz1zdHJ1Y3QgaWJfbXIgKm1hbmFfaWJfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMjUzLWVycl91bWVtOlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYzoyNTQ6XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTI1NS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jPTM0Mj1pbnQgbWFuYV9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYy0zNTUtXHRpZiAobXItXHUwMDNldW1lbSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM6MzU2Olx0XHRpYl91bWVtX3JlbGVhc2UobXItXHUwMDNldW1lbSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTM1Ny1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1fcmVsZWFzZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSBzZWUgYG1lbV9yZWxlYXNlYCBiZWluZyB1c2VkLCBvciBhdCBsZWFzdCAqcmVmZXJlbmNlZCosIGluIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jYCwgYnV0IHRoYXQmIzM5O3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgYHNwdWZzX21lbV9yZWxlYXNlYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGdlbmVyYWwgb25lIGluIGBmcy9wcm9jL2Jhc2UuY2AuIEkgcmVjYWxsIHRoYXQgdGhlIGBtZW1fcmVsZWFzZWAgZnVuY3Rpb24gaW4gdGhhdCBmaWxlIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIG5vdCBzaW1wbHkgdW51c2VkIHdpdGhpbiB0aGUgZmlsZSBub3cuIEkmIzM5O2xsIGNoZWNrIGl0cyB1c2FnZSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYC4KCkFoYSEgTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBsaWtlIGBtZW1fcmVsZWFzZWAgKmlzKiBzdGlsbCBwcmVzZW50LCBhdCBsZWFzdCBpbiB0aGUgb3JpZ2luYWwgZm9ybSwgYnV0IGl0JiMzOTtzIGJlZW4gdXBkYXRlZC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgaXQmIzM5O3MgYWN0dWFsbHkgYmVlbiByZXBsYWNlZCBpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AuIFRoZSBgcmVsZWFzZWAgZmllbGQgaW4gYHByb2NfbWVtX29wZXJhdGlvbnNgIHVzZWQgdG8gcG9pbnQgdG8gYG1lbV9yZWxlYXNlYCwgYnV0IG5vdyBpdCBwb2ludHMgdG8gYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAuIFRoZSBvcmlnaW5hbCBgbWVtX3JlbGVhc2VgIGlzIHN0aWxsIHRoZXJlLCBqdXN0IG5vdCB1c2VkIGluIHRoYXQgY29udGV4dCBhbnkgbG9uZ2VyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHNhZmUgd2l0aGluIHRoZSBmaWxlLCBhbmQgdGhhdCBhbnkgY29kZSByZWx5aW5nIG9uIHRoYXQgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmdW5jdGlvbi4KCkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBiZWluZyBjYWxsZWQgZWxzZXdoZXJlIGluIGBmcy9wcm9jL2Jhc2UuY2AgdXNpbmcgdGhlIG9sZCBmdW5jdGlvbiBuYW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTk2OT1sb2ZmX3QgbWVtX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZylcbi0tXG5mcy9wcm9jL2Jhc2UuYy05ODQtXG5mcy9wcm9jL2Jhc2UuYzo5ODU6c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTk4Ni17XG4tLVxuZnMvcHJvYy9iYXNlLmMtOTkyLVxuZnMvcHJvYy9iYXNlLmM6OTkzOnN0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtOTk0LXtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMTAwNi1cdC5vcGVuXHRcdD0gbWVtX29wZW4sXG5mcy9wcm9jL2Jhc2UuYzoxMDA3Olx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxuZnMvcHJvYy9iYXNlLmMtMTAwOC1cdC5mb3BfZmxhZ3NcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwODItXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjEwODM6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTEwODQtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfYXV4dl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTExMDktXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjExMTA6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTExMTEtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0yODUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX2F0dHJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0yODU3LVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5mcy9wcm9jL2Jhc2UuYzoyODU4Olx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG5mcy9wcm9jL2Jhc2UuYy0yODU5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgbWVtX3JlbGVhc2VgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzOiBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLCBgcHJvY19hdXh2X29wZXJhdGlvbnNgLCBhbmQgYHByb2NfcGlkX2F0dHJfb3BlcmF0aW9uc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHRob3NlIGFyZSBhbGwgcmVsYXRlZCB0byBwcm9jZXNzIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIHRob3VnaC4gSSB3b25kZXIgaWYgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgdGllZCB0byBgbWVtX29wZW5gIGluIGFueSB3YXk/IEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtZW1vcnkgbGlmZWN5Y2xlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLiBJJiMzOTtsbCBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZW52aXJvbl9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MTAxNj1zdGF0aWMgc3NpemVfdCBlbnZpcm9uX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMTA3OC1cbmZzL3Byb2MvYmFzZS5jOjEwNzk6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XG5mcy9wcm9jL2Jhc2UuYy0xMDgwLVx0Lm9wZW5cdFx0PSBlbnZpcm9uX29wZW4sXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzMxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzE5LSNlbmRpZlxuZnMvcHJvYy9iYXNlLmM6MzMyMDpcdFJFRyhcJiMzNDtlbnZpcm9uXCYjMzQ7LCAgICBTX0lSVVNSLCBwcm9jX2Vudmlyb25fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzIxLVx0UkVHKFwmIzM0O2F1eHZcJiMzNDssICAgICAgIFNfSVJVU1IsIHByb2NfYXV4dl9vcGVyYXRpb25zKSxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzY3Ni0jZW5kaWZcbmZzL3Byb2MvYmFzZS5jOjM2Nzc6XHRSRUcoXCYjMzQ7ZW52aXJvblwmIzM0OywgICBTX0lSVVNSLCBwcm9jX2Vudmlyb25fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zNjc4LVx0UkVHKFwmIzM0O2F1eHZcJiMzNDssICAgICAgU19JUlVTUiwgcHJvY19hdXh2X29wZXJhdGlvbnMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIwMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBgZW52aXJvbl9vcGVuYCoqCgpPa2F5LCBzbyB0aGV5JiMzOTtyZSB1c2luZyBgZW52aXJvbl9vcGVuYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIGZpZWxkIGdldHMgc2V0LCBsaWtlbHkgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHByb2JhYmx5IGBtbWAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcywgc2hhbGwgd2U/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGVudmlyb25fb3BlbmAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzICpyZWFsbHkqIGRvaW5nIHVuZGVyIHRoZSBob29kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgbWFuYWdpbmcgdGhlIGFzc29jaWF0ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnZpcm9uX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz0xMDAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMTAxMC1cbmZzL3Byb2MvYmFzZS5jOjEwMTE6c3RhdGljIGludCBlbnZpcm9uX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLXtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xuZnMvcHJvYy9iYXNlLmM6MTA4MDpcdC5vcGVuXHRcdD0gZW52aXJvbl9vcGVuLFxuZnMvcHJvYy9iYXNlLmMtMTA4MS1cdC5yZWFkXHRcdD0gZW52aXJvbl9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZW52aXJvbl9vcGVuYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGVudmlyb25fb3BlbmAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBhbnkgb2J2aW91cyBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCwgd2hhdCBpdCBkb2VzIGluIGEgYmFzaWMgc2Vuc2UsIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhcmUgdGhhdCByZXF1aXJlIGF0dGVudGlvbi4gSSYjMzk7bGwgYmUgZm9jdXNlZCwgZXNwZWNpYWxseSwgb24gYW55IGVycm9yIHBhdGhzIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBJcyBpdCByZWFkaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseSwgb3IgaXMgaXQgZ29pbmcgdGhyb3VnaCBzb21lIGtpbmQgb2YgYWJzdHJhY3Rpb24gbGF5ZXI/IERvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB0cnlpbmcgdG8gYWNjZXNzIG9yIG1vZGlmeSB0aGUgZW52aXJvbm1lbnQgY29uY3VycmVudGx5PyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzaWducyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBmb3JtYXQgc3RyaW5nIGJ1Z3MsIGVzcGVjaWFsbHkgaWYgaXQgaW50ZXJhY3RzIHdpdGggdXNlci1wcm92aWRlZCBpbnB1dCwgb3IgZGF0YSByZWFkIGZyb20gZGlzay4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHN0YW5kYXJkLCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIHByb2plY3QsIHRoYXQgbWlnaHQgbmVlZCBjbG9zZXIgc2NydXRpbnkgaWYgaXQgaXNuJiMzOTt0IHNvbWV0aGluZyB3ZWxsIGtub3duLiBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgY29udGV4dCBpcyBlc3NlbnRpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxMDpcdFxuMTAxMTpcdHN0YXRpYyBpbnQgZW52aXJvbl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuMTAxMjpcdHtcbjEwMTM6XHRcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcbjEwMTQ6XHR9XG4xMDE1Olx0XG4xMDE2Olx0c3RhdGljIHNzaXplX3QgZW52aXJvbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuMTAxNzpcdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuMTAxODpcdHtcbjEwMTk6XHRcdGNoYXIgKnBhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaWdnaW5nIGludG8gTWVtb3J5IE1hcHBpbmcqKgoKQWxyaWdodCwgc28gYGVudmlyb25fb3BlbmAgdXNlcyBgX19tZW1fb3BlbmAg4oCTIHN0YW5kYXJkIHByb2NlZHVyZS4gVGhlIGZ1bmN0aW9uIGNhbGwgaXMgYF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX1JFQUQpYC4gT2theSwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIFRoZSBgaW5vZGVgIGlzIGxpa2VseSB0aGUgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWxlLCBgZmlsZWAgd291bGQgYmUgdGhlIGZpbGUgc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZSBgUFRSQUNFX01PREVfUkVBRGAgaXMgb2J2aW91c2x5IGFib3V0IHJlYWQgYWNjZXNzIGZvciBwb3RlbnRpYWwgdHJhY2luZy4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBfX21lbV9vcGVuYC4gR290dGEgc2VlIGhvdyB0aGF0IG1lbW9yeSBtYXBwaW5nIGlzIGJlaW5nIHNldCB1cC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhY2Nlc3NpbmcgdGhlIHByb2Nlc3MmIzM5O3MgbWVtb3J5IHdpbGwgYmUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG1ldGhvZG9sb2d5LCBpZGVudGlmeSBhbmQgY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSB0aGlzIG1lZXRzIG15IHN0YW5kYXJkcyBmb3Igc2VjdXJlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiA4NDE6XHR7XG4gODQyOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcbiA4NDU6XHRcdFx0cmV0dXJuIG1tID8gUFRSX0VSUihtbSkgOiAtRVNSQ0g7XG4gODQ2Olx0XG4gODQ3Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG1tO1xuIDg0ODpcdFx0cmV0dXJuIDA7XG4gODQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQzMwoJCQkJCQkJb3V0cHV0OiAzNjgKCQkJCQkJCXRob3VnaHRzOiAzNzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2g6IEtNU0FOIFVubmVjZXNzYXJ5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGludm9sdmVzIG1hbmFnaW5nIGEgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgZm9yIGAvcHJvYy9waWQvbWVtYCBmaWxlIG9wZXJhdGlvbnMuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMgdGhhdCByZXF1aXJlIEtNU0FOLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBzdHJ1Y3QgdGhhdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAsIHdoaWNoICpkb2VzbiYjMzk7dCogemVybyBtZW1vcnkuIEl0IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBgaW50cm9zcGVjdGlvbmAgZmxhZy4KClRoZSBjcml0aWNhbCB0aGluZyB0byByZW1lbWJlciBpcyB0aGF0IGBfX21lbV9vcGVuYCBzZXRzIGBmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBtbTtgLCBhbmQgYG1lbV9yZWxlYXNlYCBjYWxscyBgbW1kcm9wKGZpbGUtJmd0O3ByaXZhdGVfZGF0YSlgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmb3IgdGhlIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYC4gVGhlIGBpbnRyb3NwZWN0aW9uYCBmbGFnIGlzIGluaXRpYWxpemVkICphZnRlciogYHByb2NfbWVtX29wZW5gIGlzIGNhbGxlZCBhbmQgaXRzIHJlc3VsdCBjaGVja2VkLiBJZiBgcHJvY19tZW1fb3BlbmAgZmFpbHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBJZiBga21hbGxvY19vYmpgIGZhaWxzLCBpdCByZXR1cm5zIGAtRU5PTUVNYC4gVGhlcmVmb3JlIHRoZSBgc3RydWN0IG1lbV9wcml2YXRlYCBpcyBub3QgdXNlZCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLgoKVGhlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIGFsbG9jYXRlZCwgYnV0IGl0cyBmaWVsZHMgYXJlIGFsbCBpbml0aWFsaXplZCAqYmVmb3JlKiBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCBpcyBzZXQuIFRoZSBzdHJ1Y3QgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3MgcG90ZW50aWFsIGZvciBwYWRkaW5nIGluIHRoZSBzdHJ1Y3QsIGJ1dCB0aGlzIGlzIGlycmVsZXZhbnQgYmVjYXVzZSBwYWRkaW5nIGlzIG5vdCB2aXNpYmxlIHRvIHVzZXJzcGFjZSwgdGhlcmVmb3JlIGl0JiMzOTtzIG5vdCBhIHNvdXJjZSBvZiBhbnkgaW5mb3JtYXRpb24gbGVhay4KClRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBMU00gaG9vayBhbHNvIG5lZWRzIGluc3BlY3Rpb24uIFRoaXMgaG9vayBnZXRzIGNhbGxlZCwgYW5kIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGF2ZGAgaXMgcGFzc2VkIGFzIGFuICpvdXRwdXQqIHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAuIFRoZSBmdW5jdGlvbiBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAgcG9wdWxhdGVzIGBhdmRgLiBUaGUgY29udGVudHMgb2YgYGF2ZGAgYXJlICpub3QqIGV2ZW4gdXNlZCBieSBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKClgLiBUaGVyZWZvcmUsIHdoZXRoZXIgYGF2ZGAgaXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gaXRzIHVzZSBpcyBjb21wbGV0ZWx5IGlycmVsZXZhbnQuCgpJdCBpcyBhbHNvIGltcG9ydGFudCB0byBjb25zaWRlciBpZiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBsZWF2ZXMgYW55IHBvdGVudGlhbCB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIGZpbGUgb3BlcmF0aW9ucyBjYW4gb25seSBiZSBkb25lIGFmdGVyIHN1Y2Nlc3NmdWwgb3BlbmluZyBvZiBhIGZpbGUgZGVzY3JpcHRvciwgYW5kIGBpbnRyb3NwZWN0aW9uYCBpcyBmdWxseSBpbml0aWFsaXplZCBhdCB0aGlzIHRpbWUuIFRoZSBWRlMgbGF5ZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY3JlZGVudGlhbHMuIFRoZXJlJiMzOTtzIG5vIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlIHNpbmNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXNuJiMzOTt0IHZpc2libGUgdW50aWwgYG9wZW5gIHJldHVybnMuCgpJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgYGttYWxsb2Nfb2JqYCBhbmQgY29uZmlybWVkIHRoYXQgaXQmIzM5O3MgYSB3cmFwcGVyIGFyb3VuZCBga21hbGxvY2AgYW5kIGlzIGNvbXBsZXRlbHkgc2FmZS4gVGhlIGBfX2ZyZWVgIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5IGZyZWVzIGl0IHdoZW4gYG1lbV9vcGVuYCByZXR1cm5zLiBTbywgaXQgaXMgc2FmZSB0byB1c2UuCgpJbiBzdW1tYXJ5OiB0aGUgcGF0Y2ggZXhwbGljaXRseSBpbml0aWFsaXplcyBhbGwgcmVsZXZhbnQgZmllbGRzLiBUaGUgc3RydWN0IGlzIG5ldmVyIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXMgZmFyIGFzIEkgY2FuIHRlbGwuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MuCgpUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cblxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxuXG5TaW5jZSBhbGwgaW50cm9kdWNlZCBtZW1vcnkgaXMgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgdXNlZCBzdHJpY3RseSBhcyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOToyMC44OTAwNDc4MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyMTU1OTQ4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwic2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgL3Byb2MvcGlkL21lbWAgb3BlbiBhbmQgcmVhZC93cml0ZSBsb2dpYyB0byB0cmFjayB3aGV0aGVyIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIHdhcyBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbiAoYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSkuIEl0IGludHJvZHVjZXMgYSBuZXcgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgdG8gaG9sZCB0aGUgYG1tX3N0cnVjdGAgcG9pbnRlciBhbmQgYSBib29sZWFuIGBpbnRyb3NwZWN0aW9uYCBmbGFnLiBUaGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYnV0IGJvdGggb2YgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbWVtX29wZW4oKWAuIFRoZSBzdHJ1Y3QgaXMgb25seSB1c2VkIGludGVybmFsbHkgd2l0aGluIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgZG8gbm90IHBvc2UgYW4gaW5mby1sZWFrIHJpc2suXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxcblxcblNpbmNlIGFsbCBpbnRyb2R1Y2VkIG1lbW9yeSBpcyBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciB1c2VkIHN0cmljdGx5IGFzIG91dHB1dCBwYXJhbWV0ZXJzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGJ5dGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjIwLjg5MDA1MzUyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2Mzk5Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGQwZGJjNjY2MTY4MDMxMDEzOGY1NDAzNmQwODIxNzFkZWVlYmQxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjowOToxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXFxuaW5kZXggNzgwZjgxMjU5MDUyNy4uM2RmYWVmNDliYjcwYiAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xcbisrKyBiL2ZzL3Byb2MvYmFzZS5jXFxuQEAgLTg0OCwxNSArODQ4LDMyIEBAIHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cXG4rc3RydWN0IG1lbV9wcml2YXRlIHtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdC8qIFdhcyB0aGUgcHRyYWNlIGFjY2VzcyBjaGVjayBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbj8gKi9cXG4rXFx0Ym9vbCBpbnRyb3NwZWN0aW9uO1xcbit9O1xcbitcXG4gc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7XFxuK1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XFxuK1xcdHByaXYtXFx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXFx1MDAzZW1tKSlcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZW1tID8gUFRSX0VSUihwcml2LVxcdTAwM2VtbSkgOiAtRVNSQ0g7XFxuK1xcdHByaXYtXFx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVxcdTAwM2VtbSA9PSBjdXJyZW50LVxcdTAwM2VtbTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4gXFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XFxuIFxcbkBAIC04NzMsNiArODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XFxuIFxcdGRlZmF1bHQ6XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VpbnRyb3NwZWN0aW9uKVxcbitcXHRcXHRcXHRyZXR1cm4gc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShmaWxlLVxcdTAwM2VmX2NyZWQpID09IDA7XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIH1cXG5AQCAtODgwLDcgKzg5OSw4IEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXFxuIHtcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVxcdTAwM2VtbTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XFxuIFxcdHNzaXplX3QgY29waWVkO1xcbiBcXHRjaGFyICpwYWdlO1xcbkBAIC05NzAsMTIgKzk5MCwyMSBAQCBzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXG4rXFx0bW1kcm9wKHByaXYtXFx1MDAzZW1tKTtcXG4rXFx0a2ZyZWUocHJpdik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xcbiBcXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssXFxuIFxcdC5yZWFkXFx0XFx0PSBtZW1fcmVhZCxcXG4gXFx0LndyaXRlXFx0XFx0PSBtZW1fd3JpdGUsXFxuIFxcdC5vcGVuXFx0XFx0PSBtZW1fb3BlbixcXG4tXFx0LnJlbGVhc2VcXHQ9IG1lbV9yZWxlYXNlLFxcbitcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxcbiBcXHQuZm9wX2ZsYWdzXFx0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjY3NDUyZjcxYmVkZmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC0zNiw2ICszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsXFxuIFxcdCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfdHJhY2VtZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuK0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcXG4gTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcXG4gaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTtcXG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpO1xcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbiBcXHRcXHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdFxcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxcbkBAIC02NzYsNiArNjc3LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbiBcXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcXG4gXFx0XFx0XFx0XFx0ICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdFxcdFxcdFxcdCAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZDBmNzkwYTUzNGViMCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC01OTUsNiArNTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4gXFx0cmV0dXJuIGNhbGxfaW50X2hvb2socHRyYWNlX3RyYWNlbWUsIHBhcmVudCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBpbnRyb3NwZWN0aXZlIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XFxuKyAqXFxuKyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSwgd2hpY2hcXG4rICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxcbisgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy5cXG4rICpcXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbisgKi9cXG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuK3tcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3NcXG4gICogQHRhcmdldDogdGFyZ2V0IHByb2Nlc3NcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggMThkZDI4YjJiYjEzZC4uOTA1MTM3YzQ3MzIxNyAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjE1Nyw2ICsyMTU3LDMyIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4gXFx0XFx0XFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuKyAqIFRoaXMgb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHlcXG4rICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuXFxuKyAqXFxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxcbisgKlxcbisgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJ3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4ndFxcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxcbit7XFxuK1xcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XFxuK1xcdGludCByYztcXG4rXFx0dTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpO1xcbitcXG4rXFx0LyogQWxsb3cgaWYgdGhlIHByb2Nlc3MgaXMgZ2VuZXJhbGx5IGFsbG93ZWQgdG8gaGF2ZSBleGVjdXRhYmxlIGFub255bW91cyBtZW1vcnkuICovXFxuK1xcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX0VYRUNNRU0sIDAsIFxcdTAwMjZhdmQpO1xcbitcXG4rXFx0LyogQWxzbyBhbGxvdyBpZiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSB3b3VsZCBhbGxvdyBpdC4gKi9cXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsIFxcdTAwMjZhdmQpO1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHRcXHRcXHQgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxcbiB7XFxuQEAgLTc1NTgsNiArNzU4NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcbiBcXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXFxuIFxcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxcbitcXHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXFxuIFxcdExTTV9IT09LX0lOSVQoY2FwZ2V0LCBzZWxpbnV4X2NhcGdldCksXFxuIFxcdExTTV9IT09LX0lOSVQoY2Fwc2V0LCBzZWxpbnV4X2NhcHNldCksXFxuIFxcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MDk6MjEuMzk3MzM4NTE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQyMzMzNzg1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwic2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQwZGJjNjY2MTY4MDMxMDEzOGY1NDAzNmQwODIxNzFkZWVlYmQxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDIyOjA5OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuY1xuaW5kZXggNzgwZjgxMjU5MDUyNy4uM2RmYWVmNDliYjcwYiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvYmFzZS5jXG4rKysgYi9mcy9wcm9jL2Jhc2UuY1xuQEAgLTg0OCwxNSArODQ4LDMyIEBAIHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXG4rc3RydWN0IG1lbV9wcml2YXRlIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0LyogV2FzIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uPyAqL1xuK1x0Ym9vbCBpbnRyb3NwZWN0aW9uO1xuK307XG4rXG4gc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7XG4rXG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmb3BfZmxhZ3MgXHUwMDI2IEZPUF9VTlNJR05FRF9PRkZTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcbitcdHByaXYtXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXHUwMDNlbW0pKVxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cdTAwM2VtbSkgOiAtRVNSQ0g7XG4rXHRwcml2LVx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODczLDYgKzg5MCw4IEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHR9XG4gXHRcdHJldHVybiBwdHJhY2VfYWN0aXZlO1xuIFx0ZGVmYXVsdDpcbitcdFx0aWYgKHByaXYtXHUwMDNlaW50cm9zcGVjdGlvbilcbitcdFx0XHRyZXR1cm4gc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShmaWxlLVx1MDAzZWZfY3JlZCkgPT0gMDtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gfVxuQEAgLTg4MCw3ICs4OTksOCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcbiB7XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXHUwMDNlbW07XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcbiBcdHNzaXplX3QgY29waWVkO1xuIFx0Y2hhciAqcGFnZTtcbkBAIC05NzAsMTIgKzk5MCwyMSBAQCBzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1xuK1x0bW1kcm9wKHByaXYtXHUwMDNlbW0pO1xuK1x0a2ZyZWUocHJpdik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBtZW1fbHNlZWssXG4gXHQucmVhZFx0XHQ9IG1lbV9yZWFkLFxuIFx0LndyaXRlXHRcdD0gbWVtX3dyaXRlLFxuIFx0Lm9wZW5cdFx0PSBtZW1fb3Blbixcbi1cdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlLFxuK1x0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxuIFx0LmZvcF9mbGFnc1x0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uNjc0NTJmNzFiZWRmYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTM2LDYgKzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLFxuIFx0IHVuc2lnbmVkIGludCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuK0xTTV9IT09LKGludCwgMCwgaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmY4NDgzYmU1OGJjOGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpO1xuK2ludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KTtcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuIFx0XHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxuQEAgLTY3Niw2ICs2NzcsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZDBmNzkwYTUzNGViMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiArNTk1LDIxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xuIH1cbiBcbisvKipcbisgKiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBpbnRyb3NwZWN0aXZlIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxuKyAqIEBzdWJqZWN0OiBjcmVkZW50aWFscyBvZiB0aGUgcHJvY2VzcyBhY2Nlc3NpbmcgaXRzIG93biBtZW1vcnlcbisgKlxuKyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSwgd2hpY2hcbisgKiBieXBhc3NlcyB0aGUgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjaygpIGhvb2suXG4rICogVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMuXG4rICpcbisgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4rICovXG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4re1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi45MDUxMzdjNDczMjE3IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgKzIxNTcsMzIgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0XHRcdCAgICBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxuKyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS5cbisgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5XG4rICogdHJpZ2dlcnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8gc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkuXG4rICpcbisgKiBUaGlzIGFsbG93cyBhIHByb2Nlc3MgdG8gb3ZlcndyaXRlIHJlYWQtb25seSBjb2RlIGluIGl0cyBvd24gYWRkcmVzcyBzcGFjZS5cbisgKlxuKyAqIENyZWF0aW5nIGFuIGF1ZGl0IHJlY29yZCBvbiBkZW5pYWwgZG9lc24ndCBtYWtlIHNlbnNlIGhlcmUsIHNpbmNlIHdlIGNhbid0XG4rICogdGVsbCB3aGV0aGVyIEZPTExfRk9SQ0UgbWF0dGVycyBmb3IgdGhlIGFjY2Vzc2VkIFZNQXMuXG4rICovXG4rc3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXG4re1xuK1x0c3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtcbitcdGludCByYztcbitcdHUzMiBzaWQgPSBjcmVkX3NpZChzdWJqZWN0KTtcbitcbitcdC8qIEFsbG93IGlmIHRoZSBwcm9jZXNzIGlzIGdlbmVyYWxseSBhbGxvd2VkIHRvIGhhdmUgZXhlY3V0YWJsZSBhbm9ueW1vdXMgbWVtb3J5LiAqL1xuK1x0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fRVhFQ01FTSwgMCwgXHUwMDI2YXZkKTtcbitcbitcdC8qIEFsc28gYWxsb3cgaWYgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgd291bGQgYWxsb3cgaXQuICovXG4rXHRpZiAocmMpXG4rXHRcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbitcdHJldHVybiByYztcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICs3NTg0LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSxcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuK1x0TFNNX0hPT0tfSU5JVChpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2Fwc2V0LCBzZWxpbnV4X2NhcHNldCksXG4gXHRMU01fSE9PS19JTklUKGNhcGFibGUsIHNlbGludXhfY2FwYWJsZSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOToyMS4zOTczNDA0NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTYwOTAxOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIGAvcHJvYy9waWQvbWVtYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgaG93IGAvcHJvYy9waWQvbWVtYCBpcyBhY2Nlc3NlZC4gSXQncyBhZGRpbmcgYW4gTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCwgY2hlY2tpbmcgZm9yIGBGT0xMX0ZPUkNFYC4gIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIGFuZCBjbGVhcmx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuICBJJ20gc2VlaW5nIG5ldyBzdHJ1Y3R1cmVzLCBgc3RydWN0IG1lbV9wcml2YXRlYCwgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgbGlrZSBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAuIEFuZCBpdCBob29rcyB0aGUgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaW4gU0VMaW51eCB0b28uXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgZmluZGluZyB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIExldCdzIHNlZS4uLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIEkgbm90ZWQ6XG5cbiogICBgbWVtX29wZW5gIOKAkyBzdGF0aWMsIGJ1dCBwb3RlbnRpYWxseSByZWFjaGFibGUgdGhyb3VnaCBgcHJvY19tZW1fb3BlcmF0aW9ucy5vcGVuYC4gV29ydGggbG9va2luZyBhdC5cbiogICBgcHJvY19tZW1fZm9sbF9mb3JjZWAg4oCTIHN0YXRpYywgY2FsbGVkIGZyb20gYG1lbV9yd2AuXG4qICAgYG1lbV9yd2Ag4oCTIHN0YXRpYywgY2FsbGVkIGZyb20gYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAuXG4qICAgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIOKAkyBUaGlzIGlzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiAgSXQncyBnbG9iYWwhIEhpZ2ggcHJpb3JpdHkuXG4qICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAg4oCTIHN0YXRpYywgYnV0IGhvb2tlZC5cblxuSG1tLCBva2F5LCBzbyBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGFuZCBgbWVtX3J3YCBhcmUgYWxsICpzdGF0aWMqLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXkncmUgY2FsbGVkLCBhbmQgd2hhdCB0aGUgVkZTIGludGVyYWN0aW9uIGxvb2tzIGxpa2UuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAgYXJlIGFjdHVhbGx5IHVzZWQuXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYCBhcmUgaW4gYHByb2NfbWVtX29wZXJhdGlvbnNgLiAgQW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGlzIHRoZXJlIHRvby4gIE5vdywgdGhlIHJlYWwgZ2VtIGhlcmUgaXMgdGhhdCBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgaXMgKmV4cG9ydGVkKiDigJMgdGhhdCdzIG11Y2ggYmV0dGVyIGZvciBmdXp6aW5nLiBJIGNvbmZpcm1lZCBpdCdzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC5cblxuT2theSwgYmFjayB0byBgZnMvcHJvYy9iYXNlLmNgLiBDb25maXJtZWQg4oCTIGBtZW1fb3BlbmAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgYXJlIGFsbCBzdGF0aWMuICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbnMgYXJlIGxlc3MgbGlrZWx5IHRvIGJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgYmVpbmcgY2FsbGVkIGRpcmVjdGx5LiBXZSB1c3VhbGx5IHdhbnQgdG8gZmluZCBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBhcyBBUElzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIFZGUyBsYXllci4gU28sIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBsb29rcyBwcmltZSwgYnV0IEkgc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVkZTIGNhbGxzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHBhdGNoIHN1Z2dlc3RzIHRoZSBuZXcgZnVuY3Rpb24ncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuXG5cbkknbSBhbHNvIHNlZWluZyBhIGNvbW1lbnQgYWJvdXQgYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoaXMgaXMgYSAqY3JpdGljYWwqIHBpZWNlLiAgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBBIGNvbmRpdGlvbmFsIHBhdGggaXMgYSBiaWcgcmVkIGZsYWcgdGhhdCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhvcm91Z2hseSB3aXRoIGZ1enppbmcuIExldCdzIGRvIGEgZ3JlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjMxLjM1ODI0NTQ5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4NzE5OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfTUVNX0ZPUkNFX0FMV0FZU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz0xMjE9ZW51bSBwcm9jX21lbV9mb3JjZSB7XFxuZnMvcHJvYy9iYXNlLmM6MTIyOlxcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcXG5mcy9wcm9jL2Jhc2UuYy0xMjMtXFx0UFJPQ19NRU1fRk9SQ0VfUFRSQUNFLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTI3PXN0YXRpYyBlbnVtIHByb2NfbWVtX2ZvcmNlIHByb2NfbWVtX2ZvcmNlX292ZXJyaWRlIF9fcm9fYWZ0ZXJfaW5pdCA9XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMjktXFx0SVNfRU5BQkxFRChDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFKSA/IFBST0NfTUVNX0ZPUkNFX1BUUkFDRSA6XFxuZnMvcHJvYy9iYXNlLmM6MTMwOlxcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUztcXG5mcy9wcm9jL2Jhc2UuYy0xMzEtXFxuZnMvcHJvYy9iYXNlLmM9MTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgcHJvY19tZW1fZm9yY2VfdGFibGVbXSBfX2luaXRjb25zdCA9IHtcXG5mcy9wcm9jL2Jhc2UuYzoxMzM6XFx0eyBcXFwiYWx3YXlzXFxcIiwgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTIH0sXFxuZnMvcHJvYy9iYXNlLmMtMTM0LVxcdHsgXFxcInB0cmFjZVxcXCIsIFBST0NfTUVNX0ZPUkNFX1BUUkFDRSB9LFxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDMtICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjA0OiAqIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjA1LSAqXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE1ND1zdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2Mi0gKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNjM6ICogVGhpcyBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLCBhbmQgb25seVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTY0LSAqIHRyaWdnZXJzIG9uIGFjY2Vzc2VzIHRoYXQgYXJlIG5vdCB2aXNpYmxlIHRvIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOTozMy4wNzY5NzQ5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjUyODk0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLZXJuZWwgTWVtb3J5IEFjY2VzcyBDb250cm9sKipcblxuUmlnaHQsIHNvIEkgc2VlIGBQUk9DX01FTV9GT1JDRV9BTFdBWVNgLiBPa2F5LCBlbnVtIHZhbHVlLiBBbmQgdGhhdCdzIGxpa2VseSBjb25uZWN0ZWQgdG8gYSBrZXJuZWwgY29uZmlnIG9wdGlvbiBsaWtlIGBDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFYCBvciBzb21ldGhpbmcgc2ltaWxhciwgZGVhbGluZyB3aXRoIGhvdyBgcHJvY2ZzYCBoYW5kbGVzIG1lbW9yeSBhY2Nlc3MuIEdpdmVuIEknbSBzZWVpbmcgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQuIExldCdzIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBzdG9yeSBsaXZlcy4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGBQUk9DX01FTV9GT1JDRWAgZmFtaWx5IG9mIG9wdGlvbnMgYWN0dWFsbHkgKmRvZXMqLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyaXR5LCBkZWJ1Z2dpbmcsIGFuZCBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkgdG8gYXNzZXNzIGl0cyBpbXBhY3QuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIG15IG5leHQgc3RvcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjM2LjcwMjI2Nzg3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3Mzk3OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfTUVNX0ZPUkNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcXG5mcy9wcm9jL2Jhc2UuYzoxMjI6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTLFxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcXHRQUk9DX01FTV9GT1JDRV9QVFJBQ0UsXFxuZnMvcHJvYy9iYXNlLmM6MTI0OlxcdFBST0NfTUVNX0ZPUkNFX05FVkVSXFxuZnMvcHJvYy9iYXNlLmMtMTI1LX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cXG5mcy9wcm9jL2Jhc2UuYzoxMjg6XFx0SVNfRU5BQkxFRChDT05GSUdfUFJPQ19NRU1fTk9fRk9SQ0UpID8gUFJPQ19NRU1fRk9SQ0VfTkVWRVIgOlxcbmZzL3Byb2MvYmFzZS5jOjEyOTpcXHRJU19FTkFCTEVEKENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0UpID8gUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIDpcXG5mcy9wcm9jL2Jhc2UuYzoxMzA6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xcbmZzL3Byb2MvYmFzZS5jLTEzMS1cXG5mcy9wcm9jL2Jhc2UuYz0xMzI9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBwcm9jX21lbV9mb3JjZV90YWJsZVtdIF9faW5pdGNvbnN0ID0ge1xcbmZzL3Byb2MvYmFzZS5jOjEzMzpcXHR7IFxcXCJhbHdheXNcXFwiLCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcXG5mcy9wcm9jL2Jhc2UuYzoxMzQ6XFx0eyBcXFwicHRyYWNlXFxcIiwgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIH0sXFxuZnMvcHJvYy9iYXNlLmM6MTM1OlxcdHsgXFxcIm5ldmVyXFxcIiwgUFJPQ19NRU1fRk9SQ0VfTkVWRVIgfSxcXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXFx0eyB9XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04ODAtXFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xcbmZzL3Byb2MvYmFzZS5jOjg4MTpcXHRjYXNlIFBST0NfTUVNX0ZPUkNFX05FVkVSOlxcbmZzL3Byb2MvYmFzZS5jLTg4Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuZnMvcHJvYy9iYXNlLmM6ODgzOlxcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxcbmZzL3Byb2MvYmFzZS5jLTg4NC1cXHRcXHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9MjI9Y2hvaWNlXFxuc2VjdXJpdHkvS2NvbmZpZy0yMy1cXHRwcm9tcHQgXFxcIkFsbG93IC9wcm9jL3BpZC9tZW0gYWNjZXNzIG92ZXJyaWRlXFxcIlxcbnNlY3VyaXR5L0tjb25maWc6MjQ6XFx0ZGVmYXVsdCBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG5zZWN1cml0eS9LY29uZmlnLTI1LVxcdGhlbHBcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9MzM9Y29uZmlnIFBST0NfTUVNX0FMV0FZU19GT1JDRVxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0zOC1cXG5zZWN1cml0eS9LY29uZmlnOjM5OmNvbmZpZyBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG5zZWN1cml0eS9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIlJlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MDMtICogYnlwYXNzZXMgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NjA0OiAqIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNjA1LSAqXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjE1ND1zdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE2Mi0gKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNjM6ICogVGhpcyBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGggUFJPQ19NRU1fRk9SQ0VfQUxXQVlTLCBhbmQgb25seVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTY0LSAqIHRyaWdnZXJzIG9uIGFjY2Vzc2VzIHRoYXQgYXJlIG5vdCB2aXNpYmxlIHRvIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOTozOC41Mjk2NzE0MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc3ODA3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB0aGUgb25lIGhhdmluZyBpdDpcblxuKipDb25maWd1cmF0aW9uIENvbmZ1c2lvbiBhbmQgVmVyaWZpY2F0aW9uKipcblxuSG1tLCBsZXQgbWUgc2VlLi4uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBQUk9DX01FTV9BTFdBWVNfRk9SQ0VgLi4uIG9yIHdhcyBpdCBgUFJPQ19NRU1fRk9SQ0VfQUxXQVlTYD8gSXQncyBlYXN5IHRvIGdldCB0aG9zZSBtaXhlZCB1cCBzb21ldGltZXMuIEJlc3QgdG8gYmUgc3VyZS4gQWxyaWdodCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gaW4gYHNlY3VyaXR5L0tjb25maWdgLiBDYW4ndCB0cnVzdCBteSBtZW1vcnkgb24gdGhlc2UgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWNoIGNyaXRpY2FsIHNlY3VyaXR5LXJlbGF0ZWQgc2V0dGluZ3MuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBhbHdheXMsIHRvIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSB3aGVuIHRoZXJlJ3MgZXZlbiBhIGZsaWNrZXIgb2YgZG91YnQgYWJvdXQgdGhlIGV4YWN0IG5hbWUgb3IgbWVhbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjQxLjkwNzQ4MjQwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjaG9pY2VcXG4gIDIzOlxcdFxcdHByb21wdCBcXFwiQWxsb3cgL3Byb2MvcGlkL21lbSBhY2Nlc3Mgb3ZlcnJpZGVcXFwiXFxuICAyNDpcXHRcXHRkZWZhdWx0IFBST0NfTUVNX0ZPUkNFX1BUUkFDRVxcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBUcmFkaXRpb25hbGx5IC9wcm9jL3BpZC9tZW0gYWxsb3dzIHVzZXJzIHRvIG92ZXJyaWRlIG1lbW9yeVxcbiAgMjc6XFx0XFx0ICBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgbGlrZSBwdHJhY2UsIGFzc3VtaW5nIHRoZXkgaGF2ZSBwdHJhY2VcXG4gIDI4OlxcdFxcdCAgY2FwYWJpbGl0eS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbGltaXQgdGhhdCAtIGVpdGhlciBuZXZlciBvdmVycmlkZSwgb3JcXG4gIDMxOlxcdFxcdCAgcmVxdWlyZSBhY3R1YWwgYWN0aXZlIHB0cmFjZSBhdHRhY2htZW50IChkZWZhdWx0KS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIFBST0NfTUVNX0FMV0FZU19GT1JDRVxcbiAgMzQ6XFx0XFx0Ym9vbCBcXFwiVHJhZGl0aW9uYWwgL3Byb2MvcGlkL21lbSBiZWhhdmlvclxcXCJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBhbGxvd3MgL3Byb2MvcGlkL21lbSBhY2Nlc3NlcyB0byBvdmVycmlkZSBtZW1vcnkgbWFwcGluZ1xcbiAgMzc6XFx0XFx0ICBwZXJtaXNzaW9ucyBpZiB5b3UgaGF2ZSBwdHJhY2UgYWNjZXNzIHJpZ2h0cy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIFBST0NfTUVNX0ZPUkNFX1BUUkFDRVxcbiAgNDA6XFx0XFx0Ym9vbCBcXFwiUmVxdWlyZSBhY3RpdmUgcHRyYWNlKCkgdXNlIGZvciBhY2Nlc3Mgb3ZlcnJpZGVcXFwiXFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcXG4gIDQzOlxcdFxcdCAgcGVybWlzc2lvbnMgZm9yIGFjdGl2ZSBwdHJhY2VycyBsaWtlIGdkYi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnIFBST0NfTUVNX05PX0ZPUkNFXFxuICA0NjpcXHRcXHRib29sIFxcXCJOZXZlclxcXCJcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgTmV2ZXIgb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmcgcGVybWlzc2lvbnNcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0ZW5kY2hvaWNlXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBNU0VBTF9TWVNURU1fTUFQUElOR1NcXG4gIDUzOlxcdFxcdGJvb2wgXFxcIm1zZWFsIHN5c3RlbSBtYXBwaW5nc1xcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gNjRCSVRcXG4gIDU1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gIUNIRUNLUE9JTlRfUkVTVE9SRVxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBBcHBseSBtc2VhbCBvbiBzeXN0ZW0gbWFwcGluZ3MuXFxuICA1OTpcXHRcXHQgIFRoZSBzeXN0ZW0gbWFwcGluZ3MgaW5jbHVkZXMgdmRzbywgdnZhciwgdnZhcl92Y2xvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjQxLjkwNzU1NjY5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDQ0MTQ2MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBBIEZvY3VzZWQgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uOiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYC4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBgZnMvcHJvYy9iYXNlLmNgLCBpZiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBzZXQsIG5laXRoZXIgYENPTkZJR19QUk9DX01FTV9OT19GT1JDRWAgbm9yIGBDT05GSUdfUFJPQ19NRU1fRk9SQ0VfUFRSQUNFYCBpcyBlbmFibGVkLCBhbmQgaXQgZGVmYXVsdHMgdG8gYFBST0NfTUVNX0ZPUkNFX0FMV0FZU2AuIFRoZXJlZm9yZSwgZW5hYmxpbmcgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBwYXRoIGZvciB0ZXN0aW5nLlxuXG5JIG5lZWQgdG8gcmVtZW1iZXIgU0VMaW51eCBpcyBpbnZvbHZlZC4gU28sIGBTRUNVUklUWV9TRUxJTlVYYCBpcyBhbHNvIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUuIEknbSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AsIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBpbiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zLiBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgbG9va3MgcHJvbWlzaW5nIOKAkyBpdCdzIGFuIGV4cG9ydGVkLCBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50IGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gQWxzbywgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgc2VlbXMgbGlrZSBhbm90aGVyIGdyZWF0IHRhcmdldCwgZm91bmQgaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGFueXRoaW5nIGVsc2UgaXMgdmlhYmxlLiBgbWVtX29wZW5gIGlzIHN0YXRpYywgYnV0IGJlY2F1c2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBwcm9jX21lbV9vcGVyYXRpb25zYCwgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoaXMgbWVhbnMgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFuZCB3b24ndCBiZSBmdWxseSBpbmxpbmVkLiBUaGVyZWZvcmUsIGBtZW1fb3BlbmAgY291bGQgYWxzbyBiZSBjb25zaWRlcmVkIGZvciBmdXp6aW5nLiBUaGUgc2FtZSBsb2dpYyBob2xkcyB0cnVlIGZvciBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYC4gSG93ZXZlciwgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGlzIHRoZSBiZXR0ZXIgY2hvaWNlIGJlY2F1c2UgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGBtZW1fb3BlbmAgKmlzKiBzdGF0aWMsIGFuZCBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKmlzKiBleHBvcnRlZC5cblxuU28sIGluIHN1bW1hcnksIEknbGwgbmVlZCB0byBlbmFibGUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgZG9lc24ndCBkZXBlbmQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBhY2NvcmRpbmcgdG8gdGhlIEtjb25maWcgZmlsZSBpbiBgc2VjdXJpdHkvS2NvbmZpZ2AuIGBTRUNVUklUWV9TRUxJTlVYYCBoYXMgYSBmZXcgZGVwZW5kZW5jaWVzLCBidXQgdGhhdCdzIGFscmVhZHkga25vd24uXG5cbkhlcmUgYXJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgXG4qICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWBcbiogICBgbWVtX29wZW5gXG4qICAgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWBcblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgYG1lbV9vcGVuYCBpcyB1bmlxdWUsIGJ1dCBpdCBkb2VzIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwNSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjowOTo1My45NTE3MDU5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNDk3ODQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTE1Nj1zdGF0aWMgaW50XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzoxNTc6c3B1ZnNfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy0xNTgte1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0zMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWVtX2ZvcHMgPSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzozMDQ6XFx0Lm9wZW5cXHRcXHRcXHQ9IHNwdWZzX21lbV9vcGVuLFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA1LVxcdC5yZWxlYXNlXFx0XFx0PSBzcHVmc19tZW1fcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTIwPWludCB4ZV9wYWdlbWFwX2NhY2hlX2NyZWF0ZShzdHJ1Y3QgeGVfdGlsZSAqdGlsZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTM2LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxOTM3OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2Rldm1lbV9vcGVuKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xOTM4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTcyPXN0cnVjdCBkcm1fcGFnZW1hcCAqeGVfZHJtX3BhZ2VtYXBfZnJvbV9mZChpbnQgZmQsIHUzMiByZWdpb25faW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTk5OC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTk5OTpcXHRkcGFnZW1hcCA9IHhlX2Rldm1lbV9vcGVuKHRvX3hlX2RldmljZShkcm0pLCByZWdpb25faW5zdGFuY2UpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0yMDAwLVxcdGRybV9kZXZfZXhpdChpZHgpO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYz01MzE9dm9pZCB1cGRhdGVfd2F0ZXJtYXJrX3NldHRpbmcoc3RydWN0IGlwdTZfaXN5cyAqaXN5cylcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNTQwLVxcdHU2NCBpc3lzX3BiX2RhdGFyYXRlX21icyA9IDA7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo1NDE6XFx0dTMyIG1lbV9vcGVuX3RocmVzaG9sZCA9IDA7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYy01NDItXFx0c3RydWN0IGx0cl9kaWQgbHRyZGlkO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYy02MTktXFx0XFx0XFx0ICAgICBJU0ZfRE1BX1RPUF9HREFfUFJPRkVSVFlfUEFHRV9TSVpFKSA/IDEgOiAwO1xcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NjIwOlxcdFxcdG1lbV9vcGVuX3RocmVzaG9sZCA9IGlzeXMtXFx1MDAzZXBkYXRhLVxcdTAwM2VpcGRhdGEtXFx1MDAzZW1lbW9wZW5fdGhyZXNob2xkO1xcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmM6NjIxOlxcdFxcdG1lbV9vcGVuX3RocmVzaG9sZCA9IG1heF90KHUzMiwgbWVtX29wZW5fdGhyZXNob2xkLCBwYWdlX251bSk7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo2MjI6XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJtZW1fb3Blbl90aHJlc2hvbGQ6ICV1XFxcXG5cXFwiLCBtZW1fb3Blbl90aHJlc2hvbGQpO1xcbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni1pc3lzLmMtNjIzLVxcdFxcdHNldF9pd2FrZV9yZWdpc3Rlcihpc3lzLCBHREFfTUVNT1BFTl9USFJFU0hPTERfSU5ERVgsXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LWlzeXMuYzo2MjQ6XFx0XFx0XFx0XFx0ICAgbWVtX29wZW5fdGhyZXNob2xkKTtcXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYtaXN5cy5jLTYyNS1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM9MTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmbGFzaF9kZWJ1Z2ZzX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMTY1OS1cXHQub3duZXIgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jOjE2NjA6XFx0Lm9wZW4gICAgPSBtZW1fb3BlbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYy0xNjYxLVxcdC5yZWFkICAgID0gZmxhc2hfcmVhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jPTMyNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dlX3FpbmZvX2RlYnVnZnNfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTMyNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM6MzI1MzppbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMzI1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuaD02NT12b2lkIGFkZF9kZWJ1Z2ZzX2ZpbGVzKHN0cnVjdCBhZGFwdGVyICphZGFwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmgtNjctXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuZmlsZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oOjY4OmludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmgtNjktXFxuLS1cXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jPTY5PUFUVFJJQlVURV9HUk9VUFMocWNvbV9ybXRmc19tZW0pO1xcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtNzAtXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYzo3MTpzdGF0aWMgaW50IHFjb21fcm10ZnNfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy03Mi17XFxuLS1cXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jPTE1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxY29tX3JtdGZzX21lbV9mb3BzID0ge1xcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMTUzLVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmM6MTU0OlxcdC5vcGVuID0gcWNvbV9ybXRmc19tZW1fb3BlbixcXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jLTE1NS1cXHQucmVhZCA9IHFjb21fcm10ZnNfbWVtX3JlYWQsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zaW5nbGVfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtODExLS8qXFxuZnMvcHJvYy9iYXNlLmM6ODEyOiAqIHByb2NfbWVtX29wZW4oKSBjYW4gcmV0dXJuIGVycm5vLCBOVUxMIG9yIG1tX3N0cnVjdCouXFxuZnMvcHJvYy9iYXNlLmMtODEzLSAqXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04MTctICovXFxuZnMvcHJvYy9iYXNlLmM6ODE4OnN0cnVjdCBtbV9zdHJ1Y3QgKnByb2NfbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG1vZGUpXFxuZnMvcHJvYy9iYXNlLmMtODE5LXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTgzOS1cXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9wcm9jL2Jhc2UuYy04NDEte1xcbmZzL3Byb2MvYmFzZS5jOjg0MjpcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xcbmZzL3Byb2MvYmFzZS5jLTg0My1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTg1Mj1zdHJ1Y3QgbWVtX3ByaXZhdGUge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtODU3LVxcbmZzL3Byb2MvYmFzZS5jOjg1ODpzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvYmFzZS5jLTg1OS17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04NjUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMvcHJvYy9iYXNlLmM6ODY2OlxcdHByaXYtXFx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcXG5mcy9wcm9jL2Jhc2UuYy04NjctXFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXFx1MDAzZW1tKSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMDUtXFx0LndyaXRlXFx0XFx0PSBtZW1fd3JpdGUsXFxuZnMvcHJvYy9iYXNlLmM6MTAwNjpcXHQub3BlblxcdFxcdD0gbWVtX29wZW4sXFxuZnMvcHJvYy9iYXNlLmMtMTAwNy1cXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAxMT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDEzOlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDE0LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwODY9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy9iYXNlLmMtMTA4Ny17XFxuZnMvcHJvYy9iYXNlLmM6MTA4ODpcXHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDg5LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTI3Njc9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0yNzY5LVxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XFxuZnMvcHJvYy9iYXNlLmM6Mjc3MDpcXHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xcbmZzL3Byb2MvYmFzZS5jLTI3NzEtXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmg9Mzk0PXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSB7XFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmgtNDA0LVxcbmZzL3Byb2MvaW50ZXJuYWwuaDo0MDU6c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuZnMvcHJvYy9pbnRlcm5hbC5oLTQwNi1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zNzY9c3RhdGljIGludCBwcm9jX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zODQtXFx0cHJpdi1cXHUwMDNlaW5vZGUgPSBpbm9kZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mzg1OlxcdHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTM4Ni1cXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tKSkge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE2MTk9c3RhdGljIGludCBzbWFwc19yb2xsdXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNjMyLVxcdHByaXYtXFx1MDAzZWlub2RlID0gaW5vZGU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE2MzM6XFx0cHJpdi1cXHUwMDNlbG9ja19jdHgubW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTYzNC1cXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cXHUwMDNlbG9ja19jdHgubW0pKSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjM5ND1zdGF0aWMgaW50IHBhZ2VtYXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzk3LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMzk4OlxcdG1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfUkVBRCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIzOTktXFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jPTI1Mj1zdGF0aWMgaW50IG1hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jLTI2MS1cXHRwcml2LVxcdTAwM2Vpbm9kZSA9IGlub2RlO1xcbmZzL3Byb2MvdGFza19ub21tdS5jOjI2MjpcXHRwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX1JFQUQpO1xcbmZzL3Byb2MvdGFza19ub21tdS5jLTI2My1cXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cXHUwMDNlbG9ja19jdHgubW0pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjA5OjU1LjQ3NjY5MjIwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAxMjg3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBDaGVsaXNvIGN4Z2I0IERyaXZlcioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIENoZWxpc28gY3hnYjQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMuIEkgc3BvdHRlZCBhIGBtZW1fb3BlbmAgZnVuY3Rpb24gY2FsbCB3aXRoaW4gYGN4Z2I0X2RlYnVnZnMuY2AuIEhtbSwgdGhhdCdzIG5vdCBleGFjdGx5IHVuaXF1ZSwgaXMgaXQ/IEkndmUgc2VlbiB0aGF0IG5hbWUgdXNlZCBpbiB2YXJpb3VzIGNvbnRleHRzLiBJdCBtYWtlcyBtZSB3YW50IHRvIGxvb2sgZGVlcGVyLlxuXG5JdCBtZWFucyB0aGUgZnVuY3Rpb24gbmFtZSBpcyBsaWtlbHkgbm90IGEgcGFydGljdWxhcmx5IHJvYnVzdCBzaWduaWZpZXIgb2YgYW55dGhpbmcsIHRoZXJlZm9yZSBhIGRpZmZlcmVudCBuYW1lIG9yIGZ1bmN0aW9uIGhhcyB0byBiZSBzZWxlY3RlZC5cblxuT2theSwgbGV0J3MgdHJ5IGEgZGlmZmVyZW50IHRhY2suIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMgYW5kIGxlc3MgZ2VuZXJpYyBuYW1lLiBNYXliZSBhIGZ1bmN0aW9uIHdpdGggbW9yZSBzcGVjaWFsaXplZCBwdXJwb3NlLiBXaGF0IGFib3V0IHRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmdW5jdGlvbj8gVGhhdCBuYW1lIHNvdW5kcyBtb3JlIHByb21pc2luZy4gSXQgaW1wbGllcyBhIHJlbGVhc2UgbWVjaGFuaXNtIGFzc29jaWF0ZWQgd2l0aCBwcml2YXRlIGRhdGEsIHdoaWNoIGlzIG9mdGVuIGEga2V5IGFzcGVjdCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0J3MgYmVpbmcgdXNlZC4gSXMgaXQgY291cGxlZCB0byB0aGUgYG1lbV9vcGVuYD8gV2hhdCBraW5kIG9mIHByaXZhdGUgZGF0YSBpcyBiZWluZyBtYW5hZ2VkIGhlcmU/IEFuZCB3aGF0J3MgYmVpbmcgcmVsZWFzZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MDk6NTkuMjc3OTgyNjA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk5MDI2NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz05ODU9c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTk5Mi1cXG5mcy9wcm9jL2Jhc2UuYzo5OTM6c3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy9iYXNlLmMtOTk0LXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMDYtXFx0Lm9wZW5cXHRcXHQ9IG1lbV9vcGVuLFxcbmZzL3Byb2MvYmFzZS5jOjEwMDc6XFx0LnJlbGVhc2VcXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcXG5mcy9wcm9jL2Jhc2UuYy0xMDA4LVxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjAwLjk3NzAxNTg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODA3NTc5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE1lbW9yeSBNYW5hZ2VtZW50IEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeS1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBzdG9vZCBvdXQgaW5pdGlhbGx5IGFzIHNvbWV0aGluZyB1bmlxdWUuIEkgaGFkIGl0IG9uIGEgbGlzdCB3aXRoIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIEJ1dCwgdGhpbmtpbmcgYWJvdXQgaXQgYSBiaXQgbW9yZSwgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMganVzdCBhIHNpbXBsZSBtZW1vcnkgcmVsZWFzZSBmdW5jdGlvbi4gSXQncyBub3QgcGFydGljdWxhcmx5IGNvbXBsZXggb3IgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGl0IGp1c3QgZnJlZXMgbWVtb3J5LiBQcm9iYWJseSBub3QgZ29pbmcgdG8gcmV2ZWFsIGFueXRoaW5nIG5ldy5cblxuTm93LCBteSBhdHRlbnRpb24ncyB0dXJuZWQgdG8gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLiBXaGlsZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBJIHNlZSB0aGF0IGBtZW1fcndgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgLCBjYWxscyBgcHJvY19tZW1fZm9sbF9mb3JjZWAuIFRoaXMgaXMgbXVjaCBtb3JlIHByb21pc2luZy4gVGhlIGNoYWluIG9mIGNhbGxzIHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gbW9yZSBjb21wbGV4IG1lbW9yeSBvcGVyYXRpb25zLCBzb21ldGhpbmcgSSBjYW4gcG90ZW50aWFsbHkgZXhwbG9pdCB0aHJvdWdoIGZ1enppbmcgYG1lbV9yZWFkYCBhbmQgYG1lbV93cml0ZWAgLSB0aHJvdWdoIHRoZSBpbmRpcmVjdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGlmIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBpcyB1bmlxdWUsIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2ODQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MDUuNTU3Nzc2MjM1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzMDQ3Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfbWVtX2ZvbGxfZm9yY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9iYXNlLmM9ODU4PXN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04NzMtXFxuZnMvcHJvYy9iYXNlLmM6ODc0OnN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmZzL3Byb2MvYmFzZS5jLTg3NS17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04OTk9c3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtOTIwLVxcdGZsYWdzID0gd3JpdGUgPyBGT0xMX1dSSVRFIDogMDtcXG5mcy9wcm9jL2Jhc2UuYzo5MjE6XFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxcbmZzL3Byb2MvYmFzZS5jLTkyMi1cXHRcXHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDowNy4xMDA4MzE3NjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMjUyMDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZvbGxvdyBGb3JjZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHByb2NfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgYml0IHVudXN1YWwuIFRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIG9uY2Ugc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCdzIGxpa2VseSB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGl0IHdvbid0IGV2ZW4gaGF2ZSBpdHMgb3duIGRlZGljYXRlZCBzeW1ib2wgaW4gdGhlIGZpbmFsIGV4ZWN1dGFibGUsIHdoaWNoIGlzIGdvaW5nIHRvIG1ha2UgaXQgdHJpY2tpZXIgdG8gdGFyZ2V0LCBzbyBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgZnVuY3Rpb25zIGluc3RlYWQuXG5cbkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLCBzbyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQsIHNvIHdlIGhhdmUgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgYW5kIGBTRUNVUklUWV9TRUxJTlVYYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGlzIHBhdGNoIGFkZHMgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCByZXNwZWN0aXZlbHkuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBhbnkgb3RoZXIgTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGUpIGlzIGltcGxlbWVudGluZyB0aGlzIGhvb2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbiBTRUxpbnV4IHNwZWNpZmljIGhvb2suIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDoxMS42MTMzNTQ0MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI2NTczMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04NzQ9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04OTMtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWludHJvc3BlY3Rpb24pXFxuZnMvcHJvYy9iYXNlLmM6ODk0OlxcdFxcdFxcdHJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtXFx1MDAzZWZfY3JlZCkgPT0gMDtcXG5mcy9wcm9jL2Jhc2UuYy04OTUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0zOD1MU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaDozOTpMU01fSE9PSyhpbnQsIDAsIGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTQwLUxTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MzQwPWludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjM0MTppbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTM0Mi1pbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTY3NT1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC02NzktXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjY4MDpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0KVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC02ODEte1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz01OTM9aW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy01OTgtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo1OTk6ICogc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSgpIC0gQ2hlY2sgaWYgaW50cm9zcGVjdGl2ZSBGT0xMX0ZPUkNFIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwMC0gKiBAc3ViamVjdDogY3JlZGVudGlhbHMgb2YgdGhlIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwNy0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjYwODppbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcXG5zZWN1cml0eS9zZWN1cml0eS5jLTYwOS17XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo2MTA6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc3ViamVjdCk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy02MTEtfVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNTQ9c3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNzAtICovXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjIxNzE6c3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxNzIte1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Nzk9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTg2LVxcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NTg3OlxcdExTTV9IT09LX0lOSVQoaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU4OC1cXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDoxMy4zNjYwMTc1OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxODExMzk1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGAvcHJvYy9waWQvbWVtYCBJbnRyb3NwZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIHByaW1hcmlseSBhbiBTRUxpbnV4IHRoaW5nLCBhdCBsZWFzdCBpbiB0ZXJtcyBvZiB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdHJpZ2dlcmluZyB0aGlzLiBZZXMsIGNvbmZpcm1lZCwgZm91bmQgaXQgaW4gYHNlY3VyaXR5L0tjb25maWdgLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvcmUgbG9naWMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGFjY2Vzc2VkLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBhIHByb2Nlc3MgdG8gYnlwYXNzIHRoZSB1c3VhbCBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpdCBpbnRyb3NwZWN0cyBpdHMgb3duIG1lbW9yeS4gVGhpcyBieXBhc3MgaXMgZ3JhbnRlZCBvbmx5IGlmIHRoZSBuZXcgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIExTTSBob29rIGFsbG93cyBpdC4gQW5kIHRoaXMgd2hvbGUgdGhpbmcgaXMgb25seSBhY3RpdmUgaWYgYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBzb3VuZHMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBwcm9jZnMgYW5kLCBjcml0aWNhbGx5LCBTRUxpbnV4LCBhZmZlY3RpbmcgaG93IG1lbW9yeSBpbnRyb3NwZWN0aW9uIHZpYSBgL3Byb2Mvc2VsZi9tZW1gIHdvcmtzLlxuXG5JJ3ZlIGlkZW50aWZpZWQga2V5IHN5bWJvbHMgZm9yIGZ1enppbmc6IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIEFuZCwgdG8gbWFrZSBpdCB3b3JrLCBJIG5lZWQgdG8gZW5hYmxlIGBQUk9DX01FTV9BTFdBWVNfRk9SQ0VgIGFuZCBgU0VDVVJJVFlfU0VMSU5VWGAuXG5cbkhtbSwgSSBzZWUgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaXMgYSBub24taW5saW5lZCBmdW5jdGlvbiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNob3VsZCBJIGluY2x1ZGUgaXQgaW4gdGhlIGZ1enppbmcgc2NvcGU/IEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQganVzdCBkcm9wcyB0aGUgYG1tYCBhbmQgZnJlZXMgdGhlIGBtZW1fcHJpdmF0ZWAgc3RydWN0LlxuXG5gYGBjXG5zdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbntcblx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5cblx0bW1kcm9wKHByaXYtXHUwMDNlbW0pO1xuXHRrZnJlZShwcml2KTtcblx0cmV0dXJuIDA7XG59XG5gYGBcblxuSG93ZXZlciwgaXQncyBwYXJ0IG9mIHRoZSBuZXcgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIGBtZW1fcHJpdmF0ZWAuIEZ1enppbmcgdGhpcyBtaWdodCB1bmNvdmVyIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyBpZiB0aGVyZSdzIGFuIGlzc3VlIHdpdGggaG93IHRoZSBgbWVtX3ByaXZhdGVgIGlzIGFsbG9jYXRlZCBvciBkZWFsbG9jYXRlZC4gSSdsbCBhZGQgaXQgdG8gdGhlIGxpc3QuXG5cbldhaXQsIHdoYXQgYWJvdXQgYG1lbV9vcGVuYD8gVGhlcmUgYXJlIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucywgaXQncyBlYXN5IHRvIGNyZWF0ZSBpc3N1ZXMgd2l0aCBzeXprYWxsZXIgaWYgSSBqdXN0IHB1dCBgbWVtX29wZW5gLiBTaW5jZSB0aGUgcmVsZXZhbnQgYG1lbV9vcGVuYCBpbiBgZnMvcHJvYy9iYXNlLmNgIGlzIHN0YXRpYywgSSBjYW4ndCBqdXN0IHByb3ZpZGUgdGhlIGZ1bmN0aW9uIG5hbWUuIElmIEkgcHJvdmlkZSB0aGUgbmFtZSwgc3l6a2FsbGVyIG1pZ2h0IHRyeSB0byBmdXp6IHRoZSB3cm9uZyBvciBhbGwgaW5zdGFuY2VzIG9mIGBtZW1fb3BlbmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQgSSB3YW50LiBTbyBJIHdpbGwgYXZvaWQgYW55IGFtYmlndW91cyBmdW5jdGlvbiBuYW1lcy5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIGZ1enppbmcgaXM6XG4qICAgYHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgXG4qICAgYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWBcbiogICBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYFxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGlzIHVuaXF1ZS4gWWVzLCBpdCdzIHRoZSBvbmx5IG9uZSBvZiBpdHMgbmFtZS5cblxuQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoZSByZWFzb25pbmcgaW50byBhIGNvbmNpc2UgYXJndW1lbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgbG9naWMgZm9yIGAvcHJvYy9waWQvbWVtYC4gU3BlY2lmaWNhbGx5LCBpdCBhbGxvd3MgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBUaGlzIGludHJvZHVjZXMgYSBuZXcgYG1lbV9wcml2YXRlYCBzdHJ1Y3QgdG8gdHJhY2sgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLiBJdCBhbHNvIGFkZHMgYSBuZXcgTFNNIGhvb2ssIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCksIHdoaWNoIGNvbnRyb2xzIHRoZSBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmF0ZWQgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBlbmFibGVkLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHByb2NmcyBhbmQgdGhlIHNlY3VyaXR5IHN1YnN5c3RlbSwgYW5kIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGZlYXR1cmUgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuXG5cblNvdW5kcyBzb2xpZC4gSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhpcyBwYXRjaCBhbmQgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwMCwiT3V0cHV0VG9rZW5zIjoyMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MjUuNTQ3MTYwMjA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1NTMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfTUVNX0FMV0FZU19GT1JDRVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VcIixcbiAgICBcInNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFjY2VzcyBsb2dpYyBmb3IgYC9wcm9jL3BpZC9tZW1gIHRvIGFsbG93IGEgcHJvY2VzcyB0byBieXBhc3MgYHB0cmFjZV9hY2Nlc3NfY2hlY2tgIHdoZW4gaW50cm9zcGVjdGluZyBpdHMgb3duIG1lbW9yeS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtX3ByaXZhdGVgIHN0cnVjdCB0byB0cmFjayB0aGUgYG1tX3N0cnVjdGAgYW5kIGEgYm9vbGVhbiBmbGFnIGZvciBpbnRyb3NwZWN0aW9uLCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgKGltcGxlbWVudGVkIGJ5IFNFTGludXgpIHRvIGNvbnRyb2wgYEZPTExfRk9SQ0VgIHVzYWdlIGR1cmluZyBzZWxmLWludHJvc3BlY3Rpb24uIFRoaXMgYmVoYXZpb3IgaXMgYWN0aXZlIHdoZW4gYFBST0NfTUVNX0FMV0FZU19GT1JDRWAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgcHJvY2ZzIGFuZCB0aGUgc2VjdXJpdHkgc3Vic3lzdGVtLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgcmVhZGluZy93cml0aW5nIGAvcHJvYy9zZWxmL21lbWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwic2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWNjZXNzIGxvZ2ljIGZvciBgL3Byb2MvcGlkL21lbWAgdG8gYWxsb3cgYSBwcm9jZXNzIHRvIGJ5cGFzcyBgcHRyYWNlX2FjY2Vzc19jaGVja2Agd2hlbiBpbnRyb3NwZWN0aW5nIGl0cyBvd24gbWVtb3J5LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1fcHJpdmF0ZWAgc3RydWN0IHRvIHRyYWNrIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGZsYWcgZm9yIGludHJvc3BlY3Rpb24sIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCAoaW1wbGVtZW50ZWQgYnkgU0VMaW51eCkgdG8gY29udHJvbCBgRk9MTF9GT1JDRWAgdXNhZ2UgZHVyaW5nIHNlbGYtaW50cm9zcGVjdGlvbi4gVGhpcyBiZWhhdmlvciBpcyBhY3RpdmUgd2hlbiBgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBwcm9jZnMgYW5kIHRoZSBzZWN1cml0eSBzdWJzeXN0ZW0sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgYC9wcm9jL3NlbGYvbWVtYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MjUuNjMwNzIxMDUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTQ3NDkxMTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjI1LjYzMTM4NDE4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NTQ3NDI0NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cXG5cXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgaXRzIFNFTGludXggaW1wbGVtZW50YXRpb24gYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IGlzIHBhc3NlZCBwdXJlbHkgYXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIHdoaWNoIHBvcHVsYXRlcyBpdC4gVGhlIGNvbnRlbnRzIG9mIGBhdmRgIGFyZSBub3QgZXZlbiByZWFkIGJ5IHRoZSBjYWxsZXIuXFxuXFxuU2luY2UgYWxsIGludHJvZHVjZWQgbWVtb3J5IGlzIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHVzZWQgc3RyaWN0bHkgYXMgb3V0cHV0IHBhcmFtZXRlcnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDBkYmM2NjYxNjgwMzEwMTM4ZjU0MDM2ZDA4MjE3MWRlZWViZDEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6MDk6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXG5pbmRleCA3ODBmODEyNTkwNTI3Li4zZGZhZWY0OWJiNzBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcbisrKyBiL2ZzL3Byb2MvYmFzZS5jXG5AQCAtODQ4LDE1ICs4NDgsMzIgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cbitzdHJ1Y3QgbWVtX3ByaXZhdGUge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHQvKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgYnlwYXNzZWQgZHVlIHRvIGludHJvc3BlY3Rpb24/ICovXG4rXHRib29sIGludHJvc3BlY3Rpb247XG4rfTtcbitcbiBzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtcbitcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuK1x0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2VtbSkpXG4rXHRcdHJldHVybiBwcml2LVx1MDAzZW1tID8gUFRSX0VSUihwcml2LVx1MDAzZW1tKSA6IC1FU1JDSDtcbitcdHByaXYtXHUwMDNlaW50cm9zcGVjdGlvbiA9IHByaXYtXHUwMDNlbW0gPT0gY3VycmVudC1cdTAwM2VtbTtcbitcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4gXHRib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTtcbiBcbkBAIC04NzMsNiArODkwLDggQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdH1cbiBcdFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAocHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uKVxuK1x0XHRcdHJldHVybiBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkKSA9PSAwO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiB9XG5AQCAtODgwLDcgKzg5OSw4IEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywgaW50IHdyaXRlKVxuIHtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2VtbTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xuIFx0c3NpemVfdCBjb3BpZWQ7XG4gXHRjaGFyICpwYWdlO1xuQEAgLTk3MCwxMiArOTkwLDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXG4rXHRtbWRyb3AocHJpdi1cdTAwM2VtbSk7XG4rXHRrZnJlZShwcml2KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuIFx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlayxcbiBcdC5yZWFkXHRcdD0gbWVtX3JlYWQsXG4gXHQud3JpdGVcdFx0PSBtZW1fd3JpdGUsXG4gXHQub3Blblx0XHQ9IG1lbV9vcGVuLFxuLVx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG4rXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4gXHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li42NzQ1MmY3MWJlZGZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMzYsNiArMzYsNyBAQCBMU01fSE9PSyhpbnQsIDAsIGJpbmRlcl90cmFuc2Zlcl9maWxlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsXG4gXHQgdW5zaWduZWQgaW50IG1vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfdHJhY2VtZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4rTFNNX0hPT0soaW50LCAwLCBpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0IGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxuIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uZjg0ODNiZTU4YmM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtMzM4LDYgKzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XG4raW50IHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgKzY3NywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0XHQgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCA3MWFlYThmZGYwMTQyLi5kMGY3OTBhNTM0ZWIwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTU5NSw2ICs1OTUsMjEgQEAgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0cmV0dXJuIGNhbGxfaW50X2hvb2socHRyYWNlX3RyYWNlbWUsIHBhcmVudCk7XG4gfVxuIFxuKy8qKlxuKyAqIHNlY3VyaXR5X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIGludHJvc3BlY3RpdmUgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIG9mIHRoZSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeVxuKyAqXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5LCB3aGljaFxuKyAqIGJ5cGFzc2VzIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vay5cbisgKiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUy5cbisgKlxuKyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbisgKi9cbitpbnQgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbit7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0KTtcbit9XG4rXG4gLyoqXG4gICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzXG4gICogQHRhcmdldDogdGFyZ2V0IHByb2Nlc3NcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDE4ZGQyOGIyYmIxM2QuLjkwNTEzN2M0NzMyMTcgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTIxNTcsNiArMjE1NywzMiBAQCBzdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRcdFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XG4gfVxuIFxuKy8qXG4rICogRGVjaWRlIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlYWQgbm9uLXJlYWRhYmxlIFZNQXMgYW5kIHdyaXRlXG4rICogbm9uLXdyaXRhYmxlIFZNQXMgdmlhIC9wcm9jL3NlbGYvbWVtLlxuKyAqIFRoaXMgb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHlcbisgKiB0cmlnZ2VycyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0byBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKS5cbisgKlxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuKyAqXG4rICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2Vzbid0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJ3RcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbisgKi9cbitzdGF0aWMgaW50IHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdClcbit7XG4rXHRzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkO1xuK1x0aW50IHJjO1xuK1x0dTMyIHNpZCA9IGNyZWRfc2lkKHN1YmplY3QpO1xuK1xuK1x0LyogQWxsb3cgaWYgdGhlIHByb2Nlc3MgaXMgZ2VuZXJhbGx5IGFsbG93ZWQgdG8gaGF2ZSBleGVjdXRhYmxlIGFub255bW91cyBtZW1vcnkuICovXG4rXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcdTAwMjZhdmQpO1xuK1xuK1x0LyogQWxzbyBhbGxvdyBpZiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSB3b3VsZCBhbGxvdyBpdC4gKi9cbitcdGlmIChyYylcbitcdFx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcdTAwMjZhdmQpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbiBzdGF0aWMgaW50IHNlbGludXhfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0XHQgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxuIHtcbkBAIC03NTU4LDYgKzc1ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuIFxuIFx0TFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLFxuIFx0TFNNX0hPT0tfSU5JVChwdHJhY2VfdHJhY2VtZSwgc2VsaW51eF9wdHJhY2VfdHJhY2VtZSksXG4rXHRMU01fSE9PS19JTklUKGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjI1LjYzMTM4NTE2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUyNzk3NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYC9wcm9jL3BpZC9tZW1gIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgY2xlYXJseSBhbHRlcmluZyBob3cgYC9wcm9jL3BpZC9tZW1gIGlzIGhhbmRsZWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGludHJvZHVjaW5nIGEgbmV3IGRhdGEgc3RydWN0dXJlLCBgc3RydWN0IG1lbV9wcml2YXRlYC4gVGhpcyBzdHJ1Y3QgaXMgZ29pbmcgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIGBtbV9zdHJ1Y3RgIGFuZCBhIGJvb2xlYW4gZmxhZyBjYWxsZWQgYGludHJvc3BlY3Rpb25gLiBJbnRlcmVzdGluZywgSSB3b25kZXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGF0IGZsYWcgaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGFsbG9jYXRpb24gaGFwcGVucyB3aXRoaW4gYG1lbV9vcGVuYCwgdXNpbmcgYGttYWxsb2Nfb2JqYC4gTm93LCBga21hbGxvY19vYmpgLi4uIHRoYXQncyBub3Qgc3RhbmRhcmQsIGlzIGl0PyBJJ20gZmFtaWxpYXIgd2l0aCBga21hbGxvY2AsIGBremFsbG9jYC4uLiBJICpzdXNwZWN0KiBpdCdzIGEgbWFjcm8gb3IgYSB3cmFwcGVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHByb2JhYmx5IGVxdWl2YWxlbnQgdG8gYGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZW1fcHJpdmF0ZSksIEdGUF9LRVJORUwpYCwgYnV0IHRoZSBzeW50YXggaXMgdGhyb3dpbmcgbWUgYSBiaXQuIFdhaXQsIHRoZSBjb2RlIGRlY2xhcmVzOiBgc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO2AgQWgsIHRoZSBgX19mcmVlKGtmcmVlKWAgYXR0cmlidXRlIGlzIGludGVyZXN0aW5nLCB0aGF0IGhlbHBzIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgd2lsbCBiZSBkZWFsbG9jYXRlZC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IGBrbWFsbG9jX29iamAgaXMgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGl0IGp1c3QgdG8gbWFrZSBzdXJlLiBJJ20gYmV0dGluZyBpdCdzIGEgbG9jYWwgbWFjcm8gb2Ygc29tZSBzb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDIwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MzAuNTg0MTg1NTc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNjQ0MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU1MDIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMDM9bm9uLVxcXFwgYGBOVUxMYGAsIGxvY2tsZXNzbHkgYWNjZXNzaW5nIHRoZSBgYC1cXHUwMDNlYWBgIGFuZCBgYC1cXHUwMDNlYmBgIGZpZWxkcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMDgtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMDk6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMTAtICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjI1PXRoZWlyIHJpZ2h0cyB0byByZW9yZGVyIHRoaXMgY29kZSBhcyBmb2xsb3dzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMC0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIzMTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMi0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yNjE9c2hvd3MgYW4gZXhhbXBsZSBvZiBpbnNlcnRpb246XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY2LSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjY3OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY4LSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q9MjY3PVRoZSBSQ1UgdmVyc2lvbiBvZiBhdWRpdF91cGRfcnVsZSgpIGlzIGFzIGZvbGxvd3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjc4LVxcdFxcdFxcdGlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsIFxcdTAwMjZlLVxcdTAwM2VydWxlKSkge1xcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0OjI3OTpcXHRcXHRcXHRcXHRuZSA9IGttYWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjgwLVxcdFxcdFxcdFxcdGlmIChuZSA9PSBOVUxMKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD00NDE9dXNlcyBvZiBSQ1UgbWF5IGJlIGZvdW5kIGluIGxpc3RSQ1UucnN0IGFuZCBOTUktUkNVLnJzdC5cXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcwLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NDcxOlxcdFxcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcyLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Zm9vX211dGV4KTtcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NTUzPVRoZSBmb29fdXBkYXRlX2EoKSBmdW5jdGlvbiBtaWdodCB0aGVuIGJlIHdyaXR0ZW4gYXMgZm9sbG93czo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3Mi1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjU3MzpcXHRcXHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3NC1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmZvb19tdXRleCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTM5PWtyZWZfaW5pdCBhcyBzbzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQyLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6NDM6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDQtICAgICBpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTgxPXRocmVhZCB0byBwcm9jZXNzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTAyLVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjEwMzpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTA0LVxcdGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9MzgzPXRvIHByb3RlY3QgdGhlIGNhY2hlIGFuZCBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGl0LiBIZXJlJ3MgdGhlIGNvZGU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDQtXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NDU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00OTk9d2hpY2ggYXJlIHRha2VuIGF3YXksIGFuZCB0aGUgYGArYGAgYXJlIGxpbmVzIHdoaWNoIGFyZSBhZGRlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTE5LVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTIwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTIxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk4PXdvcmtzIHBlcmZlY3RseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDAtICByYXdfc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTUwNz1wcmVlbXB0aW9uIG9uIFBSRUVNUFRfUlQga2VybmVsczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDktICBzcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUxMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTExLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIHBhc3NpbmcgYSBzaXplIG9mIGEgc3RydWN0IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ4OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTg9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGFuIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTYyOlxcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM4Nj1tYXkgaGVscCB3aXRoIGFsaWdubWVudCwgd3JhcC1hcm91bmQsIG9yIGFkZGl0aW9uYWwgaGFyZGVuaW5nLiBUaGVcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6Mzg3OmttYWxsb2Nfb2JqKCktZmFtaWx5IG9mIG1hY3JvcyBwcm92aWRlIHRoaXMgaW50cm9zcGVjdGlvbiwgd2hpY2ggY2FuIGJlXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM4OC11c2VkIGZvciB0aGUgY29tbW9uIGNvZGUgcGF0dGVybnMgZm9yIHNpbmdsZSwgYXJyYXksIGFuZCBmbGV4aWJsZSBvYmplY3RcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zOTktXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMDpcXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAxLVxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDA1OlxcdF9fYXV0b190eXBlIHB0ciA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmb28gWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MTczND1jYWxsYmFjazo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTczOS0gICAgICAgICAgLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoxNzQwOiAgICAgICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzQxLSAgICAgICAgICBzdWJzdHJlYW0tXFx1MDAzZXJ1bnRpbWUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IGRhdGE7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzMwMj1kZXN0cnVjdG9yIGZ1bmN0aW9uIGlzIHNldCBpbiB0aGUgYGBwcml2YXRlX2ZyZWVgYCBmaWVsZDo6XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDMtXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjMzMDQ6ICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzA1LSAgaHctXFx1MDAzZXByaXZhdGVfZGF0YSA9IHA7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q9MjQyPUFuZCBTT0Mtc3BlY2lmaWMgdXRpbGl0eSBjb2RlIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1MS1cXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3Q6MjUyOlxcdFxcdHBkYXRhMiA9IGttYWxsb2Nfb2JqKCpwZGF0YTIpO1xcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTMtXFx0XFx0KnBkYXRhMiA9IHBkYXRhO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDAzPWUgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGNvbnRpZW5lLiBFY2NvIGlsIGNvZGljZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDY1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD01MTk9c29ubyBxdWVsbGUgcmltb3NzZSwgbWVudHJlIHF1ZWxsZSBgYCtgYCBzb25vIHF1ZWxsZSBhZ2dpdW50ZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUzOS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1NDA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTQxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ4OD1tZW1vcmlhLiBTdSB1biBrZXJuZWwgbm9uLVBSRUVNUFRfUlQgaWwgc2VndWVudGUgY29kaWNlIGZ1bnppb25hIHBlcmZldHRhbWVudGU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5MC0gIHJhd19zcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo0OTE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk3PVBSRUVNUFRfUlQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5OS0gIHNwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDI9SWwgbW9kbyBwcmVmZXJpdG8gcGVyIHBhc3NhcmUgbGEgZGltZW5zaW9uZSBkaSB1bmEgc3RydXR0dXJhIMOoIGlsIHNlZ3VlbnRlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ2OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1ND1MYSBmb3JtYSBwcmVmZXJpZGEgcGFyYSBwYXNhciBlbCB0YW1hw7FvIGRlIHVuYSBlc3RydWN0dXJhIGVzIGxhIHNpZ3VpZW50ZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTctXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk1ODpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTQ2PWtyZWblj6/ku6Xlh7rnjrDlnKjmlbDmja7nu5PmnoTkvZPkuK3nmoTku7vkvZXlnLDmlrnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjU1OiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01Ni0gICAgIGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTYyPUtyZWbop4TliJlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTEwOC1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6MTA5OlxcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTEwLVxcdGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MTA9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODE2OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgyND1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODI5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MzA6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MzEtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTg1Nz1tYXJ2ZWxfYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2My1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjg2NDpcXHRhcGVyID0ga21hbGxvY19vYmooKmFwZXIpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODY1LVxcdGlmIChhcGVyID09IE5VTEwpIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz0xMDE5PW1hcnZlbF9hZ3BfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYxLVxcdCAqL1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6MTA2MjpcXHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjMtXFx0aWYgKCFhZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NTkwPXRpdGFuX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5Ni1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NTk3OlxcdGFwZXIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdGl0YW5fYWdwX2FwZXJ0dXJlKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk4LVxcdGlmIChhcGVyID09IE5VTEwpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NzMxPXRpdGFuX2FncF9pbmZvKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzYyLVxcdCAqL1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo3NjM6XFx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2NC1cXHRpZiAoIWFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTI5PXByb2Nlc3NfcmVsb2NfZm9yX2dvdChFbGY2NF9SZWxhICpyZWxhLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNDgtXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6NDk6XFx0ZyA9IGttYWxsb2Nfb2JqKCpnKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy01MC1cXHRnLVxcdTAwM2VuZXh0ID0gY2hhaW5zW3Jfc3ltXS5uZXh0O1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9MjExPXN0YXRpYyB2b2lkIHBkZXZfc2F2ZV9zcm1fY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjMtXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6MjI0OlxcdHRtcCA9IGttYWxsb2Nfb2JqKCp0bXApO1xcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyNS1cXHRpZiAoIXRtcCkge1xcbi0tXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jPTM1OT12b2lkICp1bndpbmRfYWRkX3RhYmxlKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgY29uc3Qgdm9pZCAqdGFibGVfc3RhcnQsXFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzY4LVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYzozNjk6XFx0dGFibGUgPSBrbWFsbG9jX29iaigqdGFibGUpO1xcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNzAtXFx0aWYgKCF0YWJsZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yNzQ9c3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yNzktXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjI4MDpcXHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IGxvY29tb19zYXZlX2RhdGEpO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yODEtXFx0aWYgKCFzYXZlKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTk2ND1zdGF0aWMgaW50IHNhMTExMV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzEtXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjk3MjpcXHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IHNhMTExMV9zYXZlX2RhdGEpO1xcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy05NzMtXFx0aWYgKCFzYXZlKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jPTU3Mj1zdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmRfdGFibGVfYWRkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzYtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM6NTc3OlxcdHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYiA9IGttYWxsb2Nfb2JqKCp0YWIpO1xcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzgtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYz01Mz1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfZ2V0X3B3cmRtKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYzoxMDI6XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMy1cXHRpZiAoZW50cnkpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxMi1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jOjQxMzpcXHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTQtXFx0aWYgKCFwd3JzdClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM9MTEzPXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jOjEzNTpcXHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzYtXFx0aWYgKCFwd3JzdClcXG4tLVxcbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcXG5hcmNoL2FybS9tbS9wZ2QuYzoyMDojZGVmaW5lIF9wZ2RfYWxsb2MobW0pXFx0XFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxcbmFyY2gvYXJtL21tL3BnZC5jLTIxLSNkZWZpbmUgX3BnZF9mcmVlKG1tLCBwZ2QpXFx0a2ZyZWUocGdkKVxcbi0tXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM9NzY0PXN0YXRpYyBpbnQgY292ZXJhZ2Vfc3RhcnQoY29uc3QgdW5pb24gZGVjb2RlX2l0ZW0gKnRhYmxlKVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2OlxcdGNvdmVyYWdlLmJhc2UgPSBrbWFsbG9jX29ianMoc3RydWN0IGNvdmVyYWdlX2VudHJ5LFxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cXHRcXHRcXHRcXHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9Nzc0PXZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg2LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6Nzg3OlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4OC1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MTAyPXN0YXRpYyB2b2lkICp2Z2ljX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDYtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6MTA3OlxcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA4LVxcdGlmICghaXRlcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTM2ND1zdGF0aWMgdm9pZCAqdmdpY19pdHNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzozNzg6XFx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzktXFx0aWYgKCFpdGVyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz03NDM9dm9pZCBfX2luaXQgdmdpY19zZXRfa3ZtX2luZm8oY29uc3Qgc3RydWN0IGdpY19rdm1faW5mbyAqaW5mbylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ1LVxcdEJVR19PTihnaWNfa3ZtX2luZm8gIT0gTlVMTCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo3NDY6XFx0Z2ljX2t2bV9pbmZvID0ga21hbGxvY19vYmooKmdpY19rdm1faW5mbyk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDctXFx0aWYgKGdpY19rdm1faW5mbylcXG4tLVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jPTk3PXN0YXRpYyBpbnQgX19pbml0IG5maGRfaW5pdF9vbmUoaW50IGlkLCB1MzIgYmxvY2tzLCB1MzIgYnNpemUpXFxuLS1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTQtXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM6MTE1OlxcdGRldiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZmhkX2RldmljZSk7XFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE2LVxcdGlmICghZGV2KVxcbi0tXFxuYXJjaC9tNjhrL21tL2ttYXAuYz0xMDg9c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF9pb19hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTEyLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmM6MTEzOlxcdGFyZWEgPSBrbWFsbG9jX29iaigqYXJlYSk7XFxuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTQtXFx0aWYgKCFhcmVhKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MjUzPXUzMiBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyh1MzIgc3JjaWQsIHUzMiBkZXN0aWQsXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTItXFx0XFx0XFx0ICovXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6MzEzOlxcdFxcdFxcdGN0cCA9IGttYWxsb2Nfb2JqKGNoYW5fdGFiX3QsIEdGUF9BVE9NSUMpO1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxNC1cXHRcXHRcXHRjaGFuX3RhYl9wdHJbaV0gPSBjdHA7XFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjQxNTpcXHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM9NTk9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdTMyICpsb2NhdGlvbiwgRWxmX0FkZHIgdixcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzQtXFx0ICovXFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYzo3NTpcXHRuID0ga21hbGxvY19vYmooKm4pO1xcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzYtXFx0aWYgKCFuKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYz0zMTE9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdWludDMyX3QgKmxvY2F0aW9uLFxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjAtXFx0ICovXFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYzozMjE6XFx0biA9IGttYWxsb2Nfb2JqKCpuKTtcXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMi1cXHRpZiAoIW4pXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9MTg4PXBhdF9xdWVyeV9tb2R1bGUodWxvbmcgcGNlbGxfbG9jLCB1bG9uZyBtb2RfaW5kZXgpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk1LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzoxOTY6XFx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTctXFx0aWYgKCFwYV9wZGNfY2VsbClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz01MzI9YWRkX3N5c3RlbV9tYXBfYWRkcmVzc2VzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsIGludCBudW1fYWRkcnMsIFxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6NTM5OlxcdGRldi1cXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVxcdTAwM2VhZGRyLCBudW1fYWRkcnMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXFx0aWYoIWRldi1cXHUwMDNlYWRkcikge1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jPTgxPXN0YXRpYyBpbnQgX19pbml0IHByb2Nlc3Nvcl9wcm9iZShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExMi1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM6MTEzOlxcdFxcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTE0LVxcdFxcdGlmICghcGFfcGRjX2NlbGwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9MTQ5PXVud2luZF90YWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIFxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE1OS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6MTYwOlxcdHRhYmxlID0ga21hbGxvY19vYmooc3RydWN0IHVud2luZF90YWJsZSwgR0ZQX1VTRVIpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNjEtXFx0aWYgKHRhYmxlID09IE5VTEwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9NDA2PXZvaWQgdW53aW5kX2ZyYW1lX2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEwLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzo0MTE6XFx0cjIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHRfcmVncywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMi1cXHRpZiAoIXIyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jPTk4ND1pbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzItXFx0XFx0fVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYzoxMDMzOlxcdFxcdHRtcF9wYXJ0ID0ga21hbGxvY19vYmooKnRtcF9wYXJ0KTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzNC1cXHRcXHRlcnIgPSAtRU5PTUVNO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc0LVxcdFxcdCAgICBjZmctXFx1MDAzZWFycmF5IC8gUEFHRV9TSVpFO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XFx0cGFnZXMgPSBrbWFsbG9jX29ianMoKnBhZ2VzLCBudW1fcGFnZXMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzYtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz04OTg9aW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo5MTU6XFx0dmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2ggPSBrbWFsbG9jX29ianMoKnZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoLFxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXFx0XFx0XFx0XFx0XFx0ICAgIEtWTV9FNTAwX1RMQjBfU0laRSArIEtWTV9FNTAwX1RMQjFfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU2LVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcXHRibG9jayA9IGttYWxsb2Nfb2JqcyhyaF9ibG9ja190LCBtYXhfYmxvY2tzLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTgtXFx0aWYgKGJsb2NrID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9MjUzPXJoX2luZm9fdCAqcmhfY3JlYXRlKHVuc2lnbmVkIGludCBhbGlnbm1lbnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYwLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzoyNjE6XFx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtMjYyLVxcdGlmIChpbmZvID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYz05NT1zdGF0aWMgaW50IGhhc2hfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy05OC1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzo5OTpcXHRtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaGFzaF9tbV9jb250ZXh0KTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMDAtXFx0aWYgKCFtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjUtXFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0KSB7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6MTI2OlxcdFxcdFxcdG1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0ID0ga21hbGxvY19vYmooc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI3LVxcdFxcdFxcdGlmICghbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVxcdTAwM2VzcHQpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz02MjM9c3RhdGljIGludCBldmVudF91bmlxX2FkZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1MC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6NjUxOlxcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1Mi1cXHRpZiAoIWRhdGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NzU1PXN0YXRpYyBpbnQgY3JlYXRlX2V2ZW50c19mcm9tX2NhdGFsb2coc3RydWN0IGF0dHJpYnV0ZSAqKipldmVudHNfLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkwOC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTA5OlxcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXFx0aWYgKCFldmVudHMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkxNTpcXHRldmVudF9kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTYtXFx0aWYgKCFldmVudF9kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlxcdGV2ZW50X2xvbmdfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2xvbmdfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjItXFx0aWYgKCFldmVudF9sb25nX2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jPTEyMj1zdGF0aWMgaW50IGhzdGFfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jOjE1NDpcXHRwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCA9IGttYWxsb2Nfb2JqcyhpbnQsIGlycV9jb3VudCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXFx0aWYgKCFwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz00ND1zdGF0aWMgaW50IHNwdWZzX2F0dHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNDktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzo1MDpcXHRhdHRyID0ga21hbGxvY19vYmooKmF0dHIpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNTEtXFx0aWYgKCFhdHRyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM9NjI4PXZvaWQgcXVldWVfaG90cGx1Z19ldmVudChzdHJ1Y3QgcHNlcmllc19ocF9lcnJvcmxvZyAqaHBfZXJybG9nKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM2LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jOjYzNzpcXHR3b3JrID0ga21hbGxvY19vYmooc3RydWN0IHBzZXJpZXNfaHBfd29yaywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMtNjM4LVxcdGlmICh3b3JrKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM9MTE5PWludCBodmNzX2dldF9wYXJ0bmVyX2luZm8odWludDMyX3QgdW5pdF9hZGRyZXNzLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2Mi1cXHRcXHQgKiBodmNzX2ZyZWVfcGFydG5lcl9pbmZvKCkuICovXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jOjE2MzpcXHRcXHRuZXh0X3BhcnRuZXJfaW5mbyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBodmNzX3BhcnRuZXJfaW5mbyxcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTY0LVxcdFxcdFxcdFxcdFxcdFxcdEdGUF9BVE9NSUMpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYz0xNDQ9c3RhdGljIHZvaWQgc2hvd19ncGNpX2RhdGEoc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNDktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYzoxNTA6XFx0YnVmID0ga21hbGxvY19vYmooKmJ1Zik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYy0xNTEtXFx0aWYgKGJ1ZiA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jPTQzNT1zdGF0aWMgaW50IHBzZXJpZXNfbXNpX29wc19wcmVwYXJlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDMtXFx0c3RydWN0IHBzZXJpZXNfbXNpX2RldmljZSAqcHNlcmllc19kZXYgX19mcmVlKGtmcmVlKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYzo0NDQ6XFx0XFx0PSBrbWFsbG9jX29iaigqcHNlcmllc19kZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDUtXFx0aWYgKCFwc2VyaWVzX2RldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYz0xMjA9c3RhdGljIGludCBwc2VyaWVzX3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBudW1fdmZzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cXHRwZG4gPSBwY2lfZ2V0X3BkbihwZGV2KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM6MTQ0OlxcdHBkbi1cXHUwMDNlcGVfbnVtX21hcCA9IGttYWxsb2Nfb2JqcygqcGRuLVxcdTAwM2VwZV9udW1fbWFwLCBudW1fdmZzKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVxcdGlmICghcGRuLVxcdTAwM2VwZV9udW1fbWFwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jPTEwNzY9c3RhdGljIGludCBfX2luaXQgcHNlcmllc192YXNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwODktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jOjEwOTA6XFx0aHZfY2FwcyA9IGttYWxsb2Nfb2JqKCpodl9jYXBzKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA5MS1cXHRpZiAoIWh2X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM9NzA1PXN0YXRpYyBpbnQgdmlvX2Ntb19idXNfcHJvYmUoc3RydWN0IHZpb19kZXYgKnZpb2RldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDctXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jOjc0ODpcXHRcXHRkZXZfZW50ID0ga21hbGxvY19vYmooc3RydWN0IHZpb19jbW9fZGV2X2VudHJ5KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ5LVxcdFxcdGlmICghZGV2X2VudClcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jPTM1Mj1zdGF0aWMgaW50IGZzbF9sYmNfc3lzY29yZV9zdXNwZW5kKHZvaWQgKmRhdGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjQtXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM6MzY1OlxcdGN0cmwtXFx1MDAzZXNhdmVkX3JlZ3MgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZnNsX2xiY19yZWdzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjYtXFx0aWYgKCFjdHJsLVxcdTAwM2VzYXZlZF9yZWdzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM9MTU0OT12b2lkIF9faW5pdCBtcGljX2luaXQoc3RydWN0IG1waWMgKm1waWMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVxcdC8qIGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIG1waWMgc3RhdGUgKi9cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYzoxNjQyOlxcdG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9IGttYWxsb2Nfb2JqcygqbXBpYy1cXHUwMDNlc2F2ZV9kYXRhLCBtcGljLVxcdTAwM2VudW1fc291cmNlcyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0My1cXHRCVUdfT04obXBpYy1cXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYz0yMz12b2lkIF9faW5pdCBvZl9pbnN0YW50aWF0ZV9ydGModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzUtXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYzozNjpcXHRcXHRcXHRyZXMgPSBrbWFsbG9jX29iaigqcmVzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM3LVxcdFxcdFxcdGlmICghcmVzKSB7XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYz02NTQ9c3RhdGljIGludCBhZGRfcmVsb2NhdGlvbl90b19hY2N1bXVsYXRlKHN0cnVjdCBtb2R1bGUgKm1lLCBpbnQgdHlwZSxcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2NS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo2NjY6XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2Ny1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY5OS1cXHRpZiAoIWZvdW5kKSB7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzAwOlxcdFxcdHJlbF9oZWFkID0ga21hbGxvY19vYmooKnJlbF9oZWFkKTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MDEtXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MTEtXFx0XFx0XFx0YnVja2V0ID1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MTI6XFx0XFx0XFx0XFx0a21hbGxvY19vYmooc3RydWN0IHVzZWRfYnVja2V0KTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6MzIuMjk2ODQ3MjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NDQ1MTI0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGttYWxsb2Nfb2JqYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBtYWNybyBzaG9ydGhhbmQgZm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhbiBvYmplY3QgdXNpbmcgYGttYWxsb2NgLiBJdCBsb29rcyBsaWtlIGl0J3MgbWVhbnQgdG8gcmVwbGFjZSBga21hbGxvYyhzaXplb2Yoc3RydWN0IGZvbyksIEdGUF9LRVJORUwpYC4gIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbmV3IG1hY3JvIHplcm9lcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gIFNpbmNlIHBsYWluIGBrbWFsbG9jYCBkb2Vzbid0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrbWFsbG9jX29iamAgKmRvZXNuJ3QqIHplcm8gaXQgZWl0aGVyLiAgTXkgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBhc3N1bXB0aW9uLiBUaGlzIG1lYW5zIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIG9iamVjdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuTm93LCBsZXQncyBsb29rIGF0IGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoZSBwYXRjaCBhbGxvY2F0ZXMgYSBgc3RydWN0IG1lbV9wcml2YXRlYC4gIEkgc2VlIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgYHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtgLCBhbmQgdGhlbiB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIGhvdyB0aGF0IG1lbW9yeSBpcyAqdXNlZCouIFRoZSBmaWVsZHMgYG1tYCBhbmQgYGludHJvc3BlY3Rpb25gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kLlxuXG5MZXQncyBleGFtaW5lIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmOiBgc3RydWN0IG1tX3N0cnVjdCAqbW07YCBpcyBhbiA4LWJ5dGUgcG9pbnRlciwgYW5kIGBib29sIGludHJvc3BlY3Rpb247YCBpcyAxIGJ5dGUsIHNvIHRoZXJlIGFyZSA3IGJ5dGVzIG9mIHBhZGRpbmcuIE15IGNvbmNlcm4gaGVyZSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZD9cblxuSSBjaGVja2VkIHdoZXJlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIHVzZWQuIEl0J3Mgc3RvcmVkIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIEl0J3MgYWNjZXNzZWQgaW4gYHByb2NfbWVtX2ZvbGxfZm9yY2VgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgLiAgQ3J1Y2lhbGx5LCBpdCBpcyBub3QgKmNvcGllZCogdG8gdXNlciBzcGFjZSBpbiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBhIHNlY3VyaXR5IGlzc3VlIHNpbmNlIHRoZXkgYXJlIG5vdCBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB0aGUgdXNlci4gVGhlIGZpZWxkcyBgbW1gIGFuZCBgaW50cm9zcGVjdGlvbmAgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCBpcyBzdWZmaWNpZW50LlxuXG5Pa2F5LCBsZXQncyBicm9hZGVuIG15IHZpZXcgdG8gb3RoZXIgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLiBJIHNlZSBuZXcgTFNNIGhvb2tzIGJlaW5nIGludHJvZHVjZWQuICBUaGUgYWRkaXRpb24gb2YgYGludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaXMgdGhlIGNyaXRpY2FsIG5ldyBhZGRpdGlvbi4gSSdtIG5vdGluZyB0aGUgbmV3IGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgdGhlIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9ucy5cblxuTXkgaW50ZXJlc3Qgbm93IHR1cm5zIHRvIGhvdyB0aGVzZSBob29rcyBhcmUgYmVpbmcgaW1wbGVtZW50ZWQuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIHVzZXMgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YC4gVGhlIGNvZGUgY2FsbHMgaXQgd2l0aCBhbiBgXHUwMDI2YXZkYCBhcmd1bWVudCwgaW5kaWNhdGluZyBpdCdzIGEgcG9pbnRlciB0byBhbiBgYXZfZGVjaXNpb25gIHN0cnVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBhdmRgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCwgYW5kIGxvb2sgaW50byB0aGUgc2lnbmF0dXJlcyBhbmQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMyNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6NDUuMjQxMzYzMzY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI1MDMzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF2Y19oYXNfcGVybV9ub2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvYXZjLmM9OTU0PWludCBhdmNfc3NfcmVzZXQodTMyIHNlcW5vKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODItICpcXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjk4MzogKiBTbG93LXBhdGggaGVscGVyIGZ1bmN0aW9uIGZvciBhdmNfaGFzX3Blcm1fbm9hdWRpdCwgd2hlbiB0aGUgYXZjX25vZGUgbG9va3VwXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODQtICogZmFpbHMuICBEb24ndCBpbmxpbmUgdGhpcywgc2luY2UgaXQncyB0aGUgc2xvdy1wYXRoIGFuZCBqdXN0IHJlc3VsdHMgaW4gYVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMDE5PWludCBhdmNfaGFzX2V4dGVuZGVkX3Blcm1zKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEwNS0gKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEwNjogKiBUaGlzIGlzIHRoZSBcXFwid2UgaGF2ZSBubyBub2RlXFxcIiBwYXJ0IG9mIGF2Y19oYXNfcGVybV9ub2F1ZGl0KCksIHdoaWNoIGlzXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA3LSAqIHVubGlrZWx5IGFuZCBuZWVkcyBleHRyYSBzdGFjayBzcGFjZSBmb3IgdGhlIG5ldyBub2RlIHRoYXQgd2UgZ2VuZXJhdGUsIHNvXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExMTA9c3RhdGljIG5vaW5saW5lIGludCBhdmNfcGVybV9ub25vZGUodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTI1LS8qKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEyNjogKiBhdmNfaGFzX3Blcm1fbm9hdWRpdCAtIENoZWNrIHBlcm1pc3Npb25zIGJ1dCBwZXJmb3JtIG5vIGF1ZGl0aW5nLlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEyNy0gKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE0NC0gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExNDU6aW5saW5lIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVxcdFxcdFxcdFxcdHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExODk9aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExOTQtXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTk1OlxcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIDAsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk2LVxcdFxcdFxcdFxcdCAgXFx1MDAyNmF2ZCk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTY0MT1zdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTY2NjpcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2Ny1cXHRpZiAoIShvcHRzIFxcdTAwMjYgQ0FQX09QVF9OT0FVRElUKSkge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNzE9c3RhdGljIGludCBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3Ny1cXHQvKiBBbGxvdyBpZiB0aGUgcHJvY2VzcyBpcyBnZW5lcmFsbHkgYWxsb3dlZCB0byBoYXZlIGV4ZWN1dGFibGUgYW5vbnltb3VzIG1lbW9yeS4gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE3ODpcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE3OS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTgxLVxcdGlmIChyYylcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE4MjpcXHRcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsIFxcdTAwMjZhdmQpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTgzLVxcdHJldHVybiByYztcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMjY5PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwNS1cXHRcXHQvKiBDYWNoZSBtaXNzLiAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMzA2OlxcdFxcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBpc2VjLVxcdTAwM2VzaWQsIGlzZWMtXFx1MDAzZXNjbGFzcyxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwNy1cXHRcXHRcXHRcXHRcXHQgIHBlcm1zLCAwLCBhdmRwKTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMDE9aW50IHNsb3dfYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwgdTMyIGF1ZGl0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTEwLSAqIEBhdmQ6IGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjExMTogKiBAcmVzdWx0OiByZXN1bHQgZnJvbSBhdmNfaGFzX3Blcm1fbm9hdWRpdFxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTItICogQGE6ICBhdXhpbGlhcnkgYXVkaXQgZGF0YVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExNi0gKiBhdmNfaGFzX3Blcm0oKSBhZnRlciBhIHBlcm1pc3Npb24gY2hlY2ssIGJ1dCBjYW4gYWxzbyBiZVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTc6ICogY2FsbGVkIGRpcmVjdGx5IGJ5IGNhbGxlcnMgd2hvIHVzZSBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExOC0gKiBpbiBvcmRlciB0byBzZXBhcmF0ZSB0aGUgcGVybWlzc2lvbiBjaGVjayBmcm9tIHRoZSBhdWRpdGluZy5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMjM9c3RhdGljIGlubGluZSBpbnQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzYtI2RlZmluZSBBVkNfRVhURU5ERURfUEVSTVMgMiAvKiB1cGRhdGUgZXh0ZW5kZWQgcGVybWlzc2lvbnMgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg6MTM3OmludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTEzOC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjQ2Ljg2NjQwODIwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyOTUwMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBoeXBvdGhldGljYWwgZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBgYXZjX2hhc19wZXJtX25vYXVkaXRgJ3MgSW50ZXJhY3Rpb24gd2l0aCBgYXZkYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFNFTGludXggYWNjZXNzIHZlY3RvciBjYWNoZSAoQVZDKSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyBgYXZjX2hhc19wZXJtX25vYXVkaXRgIGluIGBzZWN1cml0eS9zZWxpbnV4L2F2Yy5jYCBhY3R1YWxseSAqdXNlcyogdGhlIGBhdmRgIHN0cnVjdHVyZS4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHVwZGF0aW5nIGl0LCBlZmZlY3RpdmVseSB3cml0aW5nIGluZm9ybWF0aW9uPyBPciBpcyBpdCBhY3R1YWxseSByZWFkaW5nIGRhdGEgZnJvbSB0aGUgYGF2ZGAgdG8gcGVyZm9ybSBzb21lIGtpbmQgb2YgY2hlY2sgb3IgZGVjaXNpb24tbWFraW5nIHByb2Nlc3M/IFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIGRhdGEgZmxvd3MgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEFWQy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbXBvcnRhbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIHRvbyEgVW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgZGF0YSBnb2VzLCBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbSBpcyBwYXJhbW91bnQgdG8gZmluZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHNjYW4sIGJ1dCBwcmVjaXNpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE2OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjEwOjUwLjQxOTM2MTUxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMjQ2OTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmxpbmUgaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTExMD1zdGF0aWMgbm9pbmxpbmUgaW50IGF2Y19wZXJtX25vbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExNDQtICovXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTQ1OmlubGluZSBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLFxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE0Ni1cXHRcXHRcXHRcXHR1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDo1Mi4xMjE4MzgyNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NzA2Nzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBBVkMuYyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgc2VjdXJpdHkvc2VsaW51eC9hdmMuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTQ1LiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIGFjY2VzcyB2ZWN0b3IgY2FjaGUgKEFWQykgaGFuZGxpbmcsIG1heWJlIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gVGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gaGFzIGhpc3RvcmljYWxseSBiZWVuIHByb25lIHRvIHN1YnRsZSBpc3N1ZXMsIGFuZCB0aGUgc3ltcHRvbXMgSSdtIGNoYXNpbmcgYXJlIGxlYWRpbmcgbWUgaW4gdGhpcyBkaXJlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoZSBBVkMgY2FjaGUgbG9va3VwIGFuZCBpbnZhbGlkYXRpb24uIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZS4gSSdsbCBmb2N1cyBvbiB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTA6NTUuNjA4OTA5Mzg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzZWN1cml0eS9zZWxpbnV4L2F2Yy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0ICogb3RoZXIgZXJyb3JzLiAgVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGJ5IGF2Y19oYXNfcGVybSgpLFxcbjExNDE6XFx0ICogYnV0IG1heSBhbHNvIGJlIGNhbGxlZCBkaXJlY3RseSB0byBzZXBhcmF0ZSBwZXJtaXNzaW9uIGNoZWNraW5nIGZyb21cXG4xMTQyOlxcdCAqIGF1ZGl0aW5nLCBlLmcuIGluIGNhc2VzIHdoZXJlIGEgbG9jayBtdXN0IGJlIGhlbGQgZm9yIHRoZSBjaGVjayBidXRcXG4xMTQzOlxcdCAqIHNob3VsZCBiZSByZWxlYXNlZCBmb3IgdGhlIGF1ZGl0aW5nLlxcbjExNDQ6XFx0ICovXFxuMTE0NTpcXHRpbmxpbmUgaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCxcXG4xMTQ2OlxcdFxcdFxcdFxcdFxcdHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZClcXG4xMTQ5OlxcdHtcXG4xMTUwOlxcdFxcdHUzMiBkZW5pZWQ7XFxuMTE1MTpcXHRcXHRzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7XFxuMTE1MjpcXHRcXG4xMTUzOlxcdFxcdGlmIChXQVJOX09OKCFyZXF1ZXN0ZWQpKVxcbjExNTQ6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTE1NTpcXHRcXG4xMTU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMTU3OlxcdFxcdG5vZGUgPSBhdmNfbG9va3VwKHNzaWQsIHRzaWQsIHRjbGFzcyk7XFxuMTE1ODpcXHRcXHRpZiAodW5saWtlbHkoIW5vZGUpKSB7XFxuMTE1OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMTYwOlxcdFxcdFxcdHJldHVybiBhdmNfcGVybV9ub25vZGUoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsXFxuMTE2MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MsIGF2ZCk7XFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXHRkZW5pZWQgPSByZXF1ZXN0ZWQgXFx1MDAyNiB+bm9kZS1cXHUwMDNlYWUuYXZkLmFsbG93ZWQ7XFxuMTE2NDpcXHRcXHRtZW1jcHkoYXZkLCBcXHUwMDI2bm9kZS1cXHUwMDNlYWUuYXZkLCBzaXplb2YoKmF2ZCkpO1xcbjExNjU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmICh1bmxpa2VseShkZW5pZWQpKVxcbjExNjg6XFx0XFx0XFx0cmV0dXJuIGF2Y19kZW5pZWQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIDAsIDAsIDAsXFxuMTE2OTpcXHRcXHRcXHRcXHRcXHQgIGZsYWdzLCBhdmQpO1xcbjExNzA6XFx0XFx0cmV0dXJuIDA7XFxuMTE3MTpcXHR9XFxuMTE3MjpcXHRcXG4xMTczOlxcdC8qKlxcbjExNzQ6XFx0ICogYXZjX2hhc19wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbnMgYW5kIHBlcmZvcm0gYW55IGFwcHJvcHJpYXRlIGF1ZGl0aW5nLlxcbjExNzU6XFx0ICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyXFxuMTE3NjpcXHQgKiBAdHNpZDogdGFyZ2V0IHNlY3VyaXR5IGlkZW50aWZpZXJcXG4xMTc3OlxcdCAqIEB0Y2xhc3M6IHRhcmdldCBzZWN1cml0eSBjbGFzc1xcbjExNzg6XFx0ICogQHJlcXVlc3RlZDogcmVxdWVzdGVkIHBlcm1pc3Npb25zLCBpbnRlcnByZXRlZCBiYXNlZCBvbiBAdGNsYXNzXFxuMTE3OTpcXHQgKiBAYXVkaXRkYXRhOiBhdXhpbGlhcnkgYXVkaXQgZGF0YVxcbjExODA6XFx0ICpcXG4xMTgxOlxcdCAqIENoZWNrIHRoZSBBVkMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYXJlIGdyYW50ZWRcXG4xMTgyOlxcdCAqIGZvciB0aGUgU0lEIHBhaXIgKEBzc2lkLCBAdHNpZCksIGludGVycHJldGluZyB0aGUgcGVybWlzc2lvbnNcXG4xMTgzOlxcdCAqIGJhc2VkIG9uIEB0Y2xhc3MsIGFuZCBjYWxsIHRoZSBzZWN1cml0eSBzZXJ2ZXIgb24gYSBjYWNoZSBtaXNzIHRvIG9idGFpblxcbjExODQ6XFx0ICogYSBuZXcgZGVjaXNpb24gYW5kIGFkZCBpdCB0byB0aGUgY2FjaGUuICBBdWRpdCB0aGUgZ3JhbnRpbmcgb3IgZGVuaWFsIG9mXFxuMTE4NTpcXHQgKiBwZXJtaXNzaW9ucyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHBvbGljeS4gIFJldHVybiAlMCBpZiBhbGwgQHJlcXVlc3RlZFxcbjExODY6XFx0ICogcGVybWlzc2lvbnMgYXJlIGdyYW50ZWQsIC0lRUFDQ0VTIGlmIGFueSBwZXJtaXNzaW9ucyBhcmUgZGVuaWVkLCBvclxcbjExODc6XFx0ICogYW5vdGhlciAtZXJybm8gdXBvbiBvdGhlciBlcnJvcnMuXFxuMTE4ODpcXHQgKi9cXG4xMTg5OlxcdGludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMDo1NS42MDkwNDE2NzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3MTkwOTUzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFVzZSBpbiBTRUxpbnV4L1Byb2MgRmlsZXN5c3RlbSBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBNeSBxdWljayBzY2FuIHNob3dlZCBgYXZjX2hhc19wZXJtX25vYXVkaXRgIHBvcHVsYXRpbmcgYW4gYGF2X2RlY2lzaW9uYCBzdHJ1Y3QsIHdoaWNoIGlzIGFuIG91dHB1dCBwYXJhbWV0ZXIsIHNvIHRoYXQncyBwZXJmZWN0bHkgZmluZS4gV2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCB0aGF0IGBrbWFsbG9jX29iamAgbWFjcm8sIHRoYXQncyB3aGF0IGNhdWdodCBteSBhdHRlbnRpb24uIEl0J3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvIGJ1dCBhcHBlYXJzIHRvIGJlIGEgcmVjZW50IGFkZGl0aW9uIHRvIHJlcGxhY2UgYGttYWxsb2Moc2l6ZW9mKC4uLikpYC4gUmlnaHQsIHNvIGl0ICphbGxvY2F0ZXMqIGJ1dCBkb2Vzbid0ICp6ZXJvKiBtZW1vcnksIHdoaWNoIG1lYW5zIHRoZXJlIGNvdWxkIGJlIHNvbWUgaXNzdWVzLiBJZiB3ZSB1c2UgaXQgb24gYSBzdHJ1Y3QgdGhhdCBpcyBwYXNzZWQgdG8gdXNlcnNwYWNlLCBvciBpdHMgZmllbGRzIGFyZSB1c2VkIGluIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB1c2VzIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYC4gTGV0J3MgbG9vayBhdCBgc3RydWN0IG1lbV9wcml2YXRlYC4uLiBJdCBjb250YWlucyBhIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYW5kIGEgYGJvb2wgaW50cm9zcGVjdGlvbmAuIE9rYXksIGlmIHdlIGNoZWNrIHRoZSBjb2RlIGZvciBgbWVtX29wZW5gLCB0aGV5J3JlIGJvdGggaW5pdGlhbGl6ZWQ6IGBwcml2LVx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKWAgYW5kIGBwcml2LVx1MDAzZWludHJvc3BlY3Rpb24gPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW1gLiBIb3dldmVyLCB0aGVyZSBpcyBwYWRkaW5nLiBgc3RydWN0IG1lbV9wcml2YXRlYCBpcyAxNiBieXRlcyBvbiA2NC1iaXQsIHdpdGggOCBieXRlcyBmb3IgYG1tYCwgMSBieXRlIGZvciBgaW50cm9zcGVjdGlvbmAsIGFuZCA3IGJ5dGVzIG9mIHBhZGRpbmcuIFRoZSBwYWRkaW5nIGlzIG5ldmVyIHJlYWQuIEFuZCB0aGUgc3RydWN0IGlzbid0IGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsc28sIGl0IGlzbid0IHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGV4Y2VwdCB0aGUgZmllbGQgYHByaXYtXHUwMDNlaW50cm9zcGVjdGlvbmAuXG5cbkJ1dCB3aGF0IGlmIGBwcm9jX21lbV9vcGVuYCByZXR1cm5zIGFuIGVycm9yPyBPa2F5LCByaWdodCwgaW4gdGhhdCBjYXNlLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGJlZm9yZSBgcHJpdi1cdTAwM2VpbnRyb3NwZWN0aW9uYCBpcyBpbml0aWFsaXplZCwgYnV0IHRoZSBzdHJ1Y3QgaXMgZnJlZWQuIFNvLCBubyBtZW1vcnkgaXMgYWNjZXNzZWQuXG5cbkxldCdzIHRyYWNlIGl0cyB1c2UuIFRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBsb29rcyBzYWZlOyBpdCBkZXJlZmVyZW5jZXMgdGhlIG1lbWJlcnMgYW5kIHRoZW4gYGtmcmVlYHMgdGhlIHN0cnVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHVzaW5nIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgaXMgYWNjb3VudGVkIGZvci5cblxuQ2hlY2tpbmcgb3RoZXIgdXNlcyBvZiBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLCBpbiBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIHRoZSBgaW50cm9zcGVjdGlvbmAgZmllbGQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFsc28sIGBtZW1fcndgIGlzIHNhZmUsIGFzIGl0cyBzdHJ1Y3QgdXNlcyB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgZnMvcHJvYy9iYXNlLmNgIHRoYXQgdXNlIHRoZSBgcHJvY19tZW1fb3BlcmF0aW9uc2Agc3RydWN0dXJlPyBJIHF1aWNrbHkgbG9va2VkIGF0IHRoZSBgcHJvY19tZW1fb3BlcmF0aW9uc2AgdG8gY2hlY2sgYWxsIHRoZSBvdGhlciBmaWxlIG9wZXJhdGlvbnMuIE9rYXksIHNvIGBtZW1fbHNlZWtgIGRvZXNuJ3QgdXNlIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgIGNhbGxzIGBtZW1fcndgLCB3aGljaCB1c2VzIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAsIGFzIHdlIGhhdmUgc2Vlbiwgc28gdGhleSdyZSBzYWZlLlxuXG5JIGFsc28gY2hlY2tlZCBvdGhlciByZWxhdGVkIHRoaW5ncyBsaWtlIGBlbnZpcm9uX3JlYWRgLCBidXQgaXQgdXNlcyBhIGRpZmZlcmVudCBvcGVyYXRpb24gc3RydWN0dXJlLiBUaGUgYG1lbV9yZWxlYXNlYCBpcyBzdGlsbCB0aGVyZSwgZm9yIG90aGVyIHRoaW5ncywgYnV0IHVzZXMgYSBkaWZmZXJlbnQgYHByaXZhdGVfZGF0YWAuIE5vdywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IHBsYWNlIHRoYXQgdXNlcyB0aGUgYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBHb29kLCB3ZSdyZSBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NTcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MDkuMzI4MTM5Njg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5MjA5NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9yZWxlYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTM4OCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz0xNzA9c3RhdGljIGludFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6MTcxOnNwdWZzX21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMTcyLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9MzAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX21lbV9mb3BzID0ge1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtMzA0LVxcdC5vcGVuXFx0XFx0XFx0PSBzcHVmc19tZW1fb3BlbixcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjMwNTpcXHQucmVsZWFzZVxcdFxcdD0gc3B1ZnNfbWVtX3JlbGVhc2UsXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy0zMDYtXFx0LnJlYWRcXHRcXHRcXHQ9IHNwdWZzX21lbV9yZWFkLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jPTE2MD1zdHJ1Y3QgaGxfY2JfbW1hcF9tZW1fYWxsb2NfYXJncyB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMTY3LVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9idWZmZXIuYzoxNjg6c3RhdGljIHZvaWQgaGxfY2JfbW1hcF9tZW1fcmVsZWFzZShzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmICpidWYpXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jLTE2OS17XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmM9MjU4PXN0YXRpYyBzdHJ1Y3QgaGxfbW1hcF9tZW1fYnVmX2JlaGF2aW9yIGNiX2JlaGF2aW9yID0ge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX2J1ZmZlci5jLTI2MS1cXHQuYWxsb2MgPSBobF9jYl9tbWFwX21lbV9hbGxvYyxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmM6MjYyOlxcdC5yZWxlYXNlID0gaGxfY2JfbW1hcF9tZW1fcmVsZWFzZSxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfYnVmZmVyLmMtMjYzLVxcdC5tbWFwID0gaGxfY2JfbW1hcCxcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTM2OT1zdGF0aWMgaW50IGZpZm9faW5pdChzdHJ1Y3QgeGlsbHlmaWZvICpmaWZvLFxcbi0tXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtNDMyLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjQzMzpzdGF0aWMgdm9pZCBmaWZvX21lbV9yZWxlYXNlKHN0cnVjdCB4aWxseWZpZm8gKmZpZm8pXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtNDM0LXtcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTQ2Nz1zdGF0aWMgdm9pZCBlbmRwb2ludF9kZWFsbG9jKHN0cnVjdCB4aWxseXVzYl9lbmRwb2ludCAqZXApXFxuLS1cXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy00NzAtXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6NDcxOlxcdGZpZm9fbWVtX3JlbGVhc2UoXFx1MDAyNmVwLVxcdTAwM2VmaWZvKTtcXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy00NzItXFxuLS1cXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYz0xMjM2PXN0YXRpYyBpbnQgeGlsbHl1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTEzOTYtXFx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjEzOTc6XFx0Zmlmb19tZW1fcmVsZWFzZShpbl9maWZvKTtcXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xMzk4LVxcdGtmcmVlKGluX2ZpZm8pO1xcbi0tXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM9MTcwNj1zdGF0aWMgaW50IHhpbGx5dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYy0xNzM0LVxcdFxcdHNhZmVseV9hc3NpZ25faW5fZmlmbyhjaGFuLCBOVUxMKTtcXG5kcml2ZXJzL2NoYXIveGlsbHlidXMveGlsbHl1c2IuYzoxNzM1OlxcdFxcdGZpZm9fbWVtX3JlbGVhc2UoaW5fZmlmbyk7XFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMTczNi1cXHRcXHRrZnJlZShpbl9maWZvKTtcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jPTIwMDE9c3RhdGljIGludCB4aWxseXVzYl9kaXNjb3Zlcnkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxMjEtXFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmM6MjEyMjpcXHRmaWZvX21lbV9yZWxlYXNlKFxcdTAwMjZpZHRfZmlmbyk7XFxuZHJpdmVycy9jaGFyL3hpbGx5YnVzL3hpbGx5dXNiLmMtMjEyMy1cXHRrZnJlZShjaGFuKTtcXG4tLVxcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxNDAtXFx0c2FmZWx5X2Fzc2lnbl9pbl9maWZvKGNoYW4sIE5VTEwpO1xcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jOjIxNDE6XFx0Zmlmb19tZW1fcmVsZWFzZShcXHUwMDI2aWR0X2ZpZm8pO1xcbmRyaXZlcnMvY2hhci94aWxseWJ1cy94aWxseXVzYi5jLTIxNDItXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jPTY1Mj1zdGF0aWMgaW50IGFsbG9jX2hwYShzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hsciwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTY5Ny1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jOjY5ODpzdGF0aWMgdm9pZCBjeGxfcmVnaW9uX2lvbWVtX3JlbGVhc2Uoc3RydWN0IGN4bF9yZWdpb24gKmN4bHIpXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYy02OTkte1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYz03MTY9c3RhdGljIGludCBmcmVlX2hwYShzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscilcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtNzI5LVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM6NzMwOlxcdGN4bF9yZWdpb25faW9tZW1fcmVsZWFzZShjeGxyKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jLTczMS1cXHRwLVxcdTAwM2VzdGF0ZSA9IENYTF9DT05GSUdfSURMRTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmM9MjU2Mj1zdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3QgY3hsX3JlZ2lvbiAqY3hscilcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4MC1cXG5kcml2ZXJzL2N4bC9jb3JlL3JlZ2lvbi5jOjI1ODE6XFx0Y3hsX3JlZ2lvbl9pb21lbV9yZWxlYXNlKGN4bHIpO1xcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMjU4Mi1cXHRwdXRfZGV2aWNlKFxcdTAwMjZjeGxyLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYz0zNjc1PXN0YXRpYyBpbnQgX19jb25zdHJ1Y3RfcmVnaW9uKHN0cnVjdCBjeGxfcmVnaW9uICpjeGxyLFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYy0zNzI2LVxcdFxcdCAqIFBsYXRmb3JtLWZpcm13YXJlIG1heSBub3QgaGF2ZSBzcGxpdCByZXNvdXJjZXMgbGlrZSBcXFwiU3lzdGVtXFxuZHJpdmVycy9jeGwvY29yZS9yZWdpb24uYzozNzI3OlxcdFxcdCAqIFJBTVxcXCIgb24gQ1hMIHdpbmRvdyBib3VuZGFyaWVzIHNlZSBjeGxfcmVnaW9uX2lvbWVtX3JlbGVhc2UoKVxcbmRyaXZlcnMvY3hsL2NvcmUvcmVnaW9uLmMtMzcyOC1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jPTE1OT1FWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX2NyZWF0ZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xNjEtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM6MTYyOiAqIF9fZHJtX2dlbV9zaG1lbV9yZWxlYXNlX3NndF9sb2NrZWQgLSBVbnBpbiBhbmQgRE1BIHVubWFwIHBhZ2VzLCBhbmQgcmVsZWFzZSB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xNjMtICogY2FjaGVkIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIGZvciBhbiBzaG1lbSBHRU0gb2JqZWN0Llxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmM9MTgzPUVYUE9SVF9TWU1CT0xfR1BMKF9fZHJtX2dlbV9zaG1lbV9mcmVlX3NndF9sb2NrZWQpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMTg1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jOjE4NjogKiBkcm1fZ2VtX3NobWVtX3JlbGVhc2UgLSBSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBzaG1lbSBHRU0gb2JqZWN0LlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTE4Ny0gKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3RcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTE5MS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoxOTI6dm9pZCBkcm1fZ2VtX3NobWVtX3JlbGVhc2Uoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0xOTMte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMtMjE1LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYzoyMTY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9yZWxlYXNlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0yMTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYz0yMjU9dm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYy0yMjYte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jOjIyNzpcXHRkcm1fZ2VtX3NobWVtX3JlbGVhc2Uoc2htZW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jLTIyOC1cXHRrZnJlZShzaG1lbSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMjg9c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfemRkX2Rlc3Ryb3koc3RydWN0IGtyZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNi1cXHRcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmRldm1lbS1cXHUwMDNlZGV0YWNoZWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzNzpcXHRcXHRpZiAoZGV2bWVtLVxcdTAwM2VvcHMtXFx1MDAzZWRldm1lbV9yZWxlYXNlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzODpcXHRcXHRcXHRkZXZtZW0tXFx1MDAzZW9wcy1cXHUwMDNlZGV2bWVtX3JlbGVhc2UoZGV2bWVtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzktXFx0fVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjE2PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg0MS1lcnJfb3V0OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg0MjpcXHRkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNlb3BzLVxcdTAwM2VkZXZtZW1fcmVsZWFzZShkZXZtZW1fYWxsb2NhdGlvbik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODQzLVxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jPTQ2Nj12b2lkIGV0bmF2aXZfZ2VtX2Rlc2NyaWJlX29iamVjdHMoc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ4Ny1cXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jOjQ4ODpzdGF0aWMgdm9pZCBldG5hdml2X2dlbV9zaG1lbV9yZWxlYXNlKHN0cnVjdCBldG5hdml2X2dlbV9vYmplY3QgKmV0bmF2aXZfb2JqKVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMtNDg5LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM9NDk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRuYXZpdl9nZW1fb3BzIGV0bmF2aXZfZ2VtX3NobWVtX29wcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ5NS1cXHQuZ2V0X3BhZ2VzID0gZXRuYXZpdl9nZW1fc2htZW1fZ2V0X3BhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmM6NDk2OlxcdC5yZWxlYXNlID0gZXRuYXZpdl9nZW1fc2htZW1fcmVsZWFzZSxcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jLTQ5Ny1cXHQudm1hcCA9IGV0bmF2aXZfZ2VtX3ZtYXBfaW1wbCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jPTQ3MT1zaG1lbV9wcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDc5LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jOjQ4MDpzdGF0aWMgdm9pZCBzaG1lbV9yZWxlYXNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDgxLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jPTQ4OD1jb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fc2htZW1fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNDk5LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jOjUwMDpcXHQucmVsZWFzZSA9IHNobWVtX3JlbGVhc2UsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTAxLX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZWdpb25fbG1lbS5jPTExNj1zdGF0aWMgaW50XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYzoxMTc6cmVnaW9uX2xtZW1fcmVsZWFzZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmMtMTE4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmM9MTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgaW50ZWxfcmVnaW9uX2xtZW1fb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlZ2lvbl9sbWVtLmMtMTUwLVxcdC5pbml0ID0gcmVnaW9uX2xtZW1faW5pdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZWdpb25fbG1lbS5jOjE1MTpcXHQucmVsZWFzZSA9IHJlZ2lvbl9sbWVtX3JlbGVhc2UsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYy0xNTItXFx0LmluaXRfb2JqZWN0ID0gX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYz0xNTQ0PXZjNF9kc2lfaW5pdF9waHlfY2xvY2tzKHN0cnVjdCB2YzRfZHNpICpkc2kpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYy0xNjA2LVxcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jOjE2MDc6c3RhdGljIHZvaWQgdmM0X2RzaV9kbWFfbWVtX3JlbGVhc2Uodm9pZCAqcHRyKVxcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2MDgte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmM9MTYzMT1zdGF0aWMgaW50IHZjNF9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jLTE2NzgtXFxuZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmM6MTY3OTpcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB2YzRfZHNpX2RtYV9tZW1fcmVsZWFzZSwgZHNpKTtcXG5kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYy0xNjgwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9NzU2PXN0YXRpYyBzdHJ1Y3QgeGVfYm8gKnRvX3hlX2JvKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTc2MC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6NzYxOnN0YXRpYyB2b2lkIHhlX3N2bV9kZXZtZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtNzYyLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz04MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIGRwYWdlbWFwX2Rldm1lbV9vcHMgPSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjgwNzpcXHQuZGV2bWVtX3JlbGVhc2UgPSB4ZV9zdm1fZGV2bWVtX3JlbGVhc2UsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTgwOC1cXHQucG9wdWxhdGVfZGV2bWVtX3BmbiA9IHhlX3N2bV9wb3B1bGF0ZV9kZXZtZW1fcGZuLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTQ5LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzo1MDpzdGF0aWMgdm9pZCBfX2liX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLCBpbnQgZGlydHkpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTUxLXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYz0xNjI9c3RhdGljIHN0cnVjdCBpYl91bWVtICpfX2liX3VtZW1fZ2V0X3ZhKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNDYtXFx0XFx0XFx0cmV0ID0gcGlubmVkO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzoyNDc6XFx0XFx0XFx0Z290byB1bWVtX3JlbGVhc2U7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI0OC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjU3LVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhwYWdlX2xpc3QsIHBpbm5lZCwgMCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjI1ODpcXHRcXHRcXHRnb3RvIHVtZW1fcmVsZWFzZTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMjU5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNjQtXFx0aWYgKHJldClcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY1OlxcdFxcdGdvdG8gdW1lbV9yZWxlYXNlO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0yNjYtXFx0Z290byBvdXQ7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI2Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY4OnVtZW1fcmVsZWFzZTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6MjY5OlxcdF9faWJfdW1lbV9yZWxlYXNlKGRldmljZSwgdW1lbSwgMCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTI3MC1cXHRhdG9taWM2NF9zdWIoaWJfdW1lbV9udW1fcGFnZXModW1lbSksIFxcdTAwMjZtbS1cXHUwMDNlcGlubmVkX3ZtKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYz0zNzY9aWJfdW1lbV9nZXRfZGVzY19jaGVjayhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtMzg1LVxcdGlmICh1bWVtLVxcdTAwM2VsZW5ndGggXFx1MDAzYyBtaW5fc2l6ZSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYzozODY6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy0zODctXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM9NjEyPUVYUE9SVF9TWU1CT0woaWJfdW1lbV9nZXRfY3FfYnVmX29yX3ZhKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MTQtLyoqXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYxNTogKiBpYl91bWVtX3JlbGVhc2UgLSByZWxlYXNlIHBpbm5lZCBtZW1vcnlcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjE2LSAqIEB1bWVtOiB1bWVtIHN0cnVjdCB0byByZWxlYXNlXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYxNy0gKi9cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6NjE4OnZvaWQgaWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl91bWVtICp1bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYy02MTkte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYyNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmM6NjI3OlxcdF9faWJfdW1lbV9yZWxlYXNlKHVtZW0tXFx1MDAzZWliZGV2LCB1bWVtLCAxKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMtNjI4LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYzMi19XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jOjYzMzpFWFBPUlRfU1lNQk9MKGliX3VtZW1fcmVsZWFzZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jLTYzNC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmM9MjE0PWliX3VtZW1fZG1hYnVmX2dldF9waW5uZWRfYW5kX2xvY2soc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYy0yNDItXFx0ZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLVxcdTAwM2VhdHRhY2gtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYzoyNDM6XFx0aWJfdW1lbV9yZWxlYXNlKFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYy0yNDQtXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmM9MjYzPUVYUE9SVF9TWU1CT0woaWJfdW1lbV9kbWFidWZfZ2V0X3Bpbm5lZF93aXRoX2RtYV9kZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9kbWFidWYuYy0yODctICogSWYgc3VjY2Vzc2Z1bCwgdGhlbiB0aGUgcmV2b2tlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpbGxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX2RtYWJ1Zi5jOjI4ODogKiBhbHNvIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHVwb24gaWJfdW1lbV9yZWxlYXNlIChzZXJpYWxpemVkKS4gVGhlIHJldm9rZVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fZG1hYnVmLmMtMjg5LSAqIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9uZSB0aW1lIGF0IG1vc3QuXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTEwMDE9c3RhdGljIHZvaWQgYm54dF9yZV9xcF9mcmVlX3VtZW0oc3RydWN0IGJueHRfcmVfcXAgKnFwKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTAwMi17XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoxMDAzOlxcdGliX3VtZW1fcmVsZWFzZShxcC1cXHUwMDNlcnVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTAwNDpcXHRpYl91bWVtX3JlbGVhc2UocXAtXFx1MDAzZXN1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEwMDUtfVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0xMTk3PXN0YXRpYyBpbnQgYm54dF9yZV9pbml0X3VzZXJfcXAoc3RydWN0IGJueHRfcmVfZGV2ICpyZGV2LCBzdHJ1Y3QgYm54dF9yZV9wZCAqcGQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNTUtcnFmYWlsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTI1NjpcXHRpYl91bWVtX3JlbGVhc2UocXAtXFx1MDAzZXJ1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNTctXFx0cXAtXFx1MDAzZXJ1bWVtID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMTI1OS1mYWlsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MTI2MDpcXHRpYl91bWVtX3JlbGVhc2UocXAtXFx1MDAzZXN1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTEyNjEtXFx0cXAtXFx1MDAzZXN1bWVtID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MjE0Mz1pbnQgYm54dF9yZV9kZXN0cm95X3NycShzdHJ1Y3QgaWJfc3JxICppYl9zcnEsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTIxNTktXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNycS1cXHUwMDNldWN0eF9zcnFfcGFnZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzoyMTYwOlxcdGliX3VtZW1fcmVsZWFzZShzcnEtXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMjE2MS1cXHRhdG9taWNfZGVjKFxcdTAwMjZyZGV2LVxcdTAwM2VzdGF0cy5yZXMuc3JxX2NvdW50KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MjE5OT1pbnQgYm54dF9yZV9jcmVhdGVfc3JxKHN0cnVjdCBpYl9zcnEgKmliX3NycSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMjI4OC1mYWlsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MjI4OTpcXHRpYl91bWVtX3JlbGVhc2Uoc3JxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTIyOTAtZXhpdDpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MzQ2MT1pbnQgYm54dF9yZV9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqaWJfY3EsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM0ODctXFx0a2ZyZWUoY3EtXFx1MDAzZWNxbCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNDg4OlxcdGliX3VtZW1fcmVsZWFzZShjcS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNDg5LVxcdHJldHVybiBpYl9yZXNwb25kX2VtcHR5X3VkYXRhKHVkYXRhKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9MzQ5Mj1pbnQgYm54dF9yZV9jcmVhdGVfdXNlcl9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGNvbnN0IHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM1ODAtZnJlZV91bWVtOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzU4MTpcXHRpYl91bWVtX3JlbGVhc2UoY3EtXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzU4Mi1cXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2Mzc9c3RhdGljIHZvaWQgYm54dF9yZV9yZXNpemVfY3FfY29tcGxldGUoc3RydWN0IGJueHRfcmVfY3EgKmNxKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zNjQ0LVxcdGlmIChjcS1cXHUwMDNlcmVzaXplX3VtZW0pIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjM2NDU6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTM2NDYtXFx0XFx0Y3EtXFx1MDAzZXVtZW0gPSBjcS1cXHUwMDNlcmVzaXplX3VtZW07XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTM2NTI9aW50IGJueHRfcmVfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgdW5zaWduZWQgaW50IGNxZSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzcyMy1cXHRpZiAoY3EtXFx1MDAzZXJlc2l6ZV91bWVtKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzozNzI0OlxcdFxcdGliX3VtZW1fcmVsZWFzZShjcS1cXHUwMDNlcmVzaXplX3VtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzcyNS1cXHRcXHRjcS1cXHUwMDNlcmVzaXplX3VtZW0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00NDQ2PWludCBibnh0X3JlX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQ0NjgtXFx0fVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDQ2OTpcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZWliX3VtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDQ3MC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDY4OD1zdHJ1Y3QgaWJfbXIgKmJueHRfcmVfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICppYl9wZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzExLVxcdGlmIChJU19FUlIoaWJfbXIpKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDcxMjpcXHRcXHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00NzEzLVxcdHJldHVybiBpYl9tcjtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM9NDcxNj1zdHJ1Y3QgaWJfbXIgKmJueHRfcmVfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJfcGQsIHU2NCBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDczOS1cXHRpZiAoSVNfRVJSKGliX21yKSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjQ3NDA6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDc0MS1cXHRyZXR1cm4gaWJfbXI7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM9NDkxPXN0cnVjdCBpYl9tciAqYzRpd19yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMtNTQxLVxcdGlmIChlcnIpXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jOjU0MjpcXHRcXHRnb3RvIGVycl91bWVtX3JlbGVhc2U7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTU0My1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01OTAtXFx0XFx0XFx0ICAgICAgbWhwLVxcdTAwM2VhdHRyLnBibF9zaXplIFxcdTAwM2NcXHUwMDNjIDMpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYzo1OTE6ZXJyX3VtZW1fcmVsZWFzZTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmM6NTkyOlxcdGliX3VtZW1fcmVsZWFzZShtaHAtXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYy01OTMtZXJyX2ZyZWVfc2tiOlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jPTcwND1pbnQgYzRpd19kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTcyNS1cXHRcXHRrZnJlZSgodm9pZCAqKSAodW5zaWduZWQgbG9uZykgbWhwLVxcdTAwM2VrdmEpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYzo3MjY6XFx0aWJfdW1lbV9yZWxlYXNlKG1ocC1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jLTcyNy1cXHRwcl9kZWJ1ZyhcXFwibW1pZCAweCV4IHB0ciAlcFxcXFxuXFxcIiwgbW1pZCwgbWhwKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM9MTA1NT1pbnQgZWZhX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYmNxLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xMDczLVxcdFxcdGVmYV9mcmVlX21hcHBlZChkZXYsIGNxLVxcdTAwM2VjcHVfYWRkciwgY3EtXFx1MDAzZWRtYV9hZGRyLCBjcS1cXHUwMDNlc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjEwNzQ6XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTEwNzUtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jPTExMTM9aW50IGVmYV9jcmVhdGVfdXNlcl9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGNvbnN0IHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTEyNjUtZXJyX3JlbGVhc2VfdW1lbTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjEyNjY6XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTEyNjctZXJyX291dDpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmM9MTcxMD1zdHJ1Y3QgaWJfbXIgKmVmYV9yZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICppYnBkLCB1NjQgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3NDgtZXJyX3JlbGVhc2U6XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxNzQ5OlxcdGliX3VtZW1fcmVsZWFzZShtci1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xNzUwLWVycl9mcmVlOlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYz0xNzU3PXN0cnVjdCBpYl9tciAqZWZhX3JlZ19tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvZWZhX3ZlcmJzLmMtMTc5Mi1lcnJfcmVsZWFzZTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jOjE3OTM6XFx0aWJfdW1lbV9yZWxlYXNlKG1yLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE3OTQtZXJyX2ZyZWU6XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jPTE4MzQ9aW50IGVmYV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL2VmYV92ZXJicy5jLTE4NDctXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYzoxODQ4OlxcdGliX3VtZW1fcmVsZWFzZShtci1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9lZmFfdmVyYnMuYy0xODQ5LVxcdGtmcmVlKG1yKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jPTgzMT1zdGF0aWMgaW50IGdldF9tdHRfZW50cmllcyhzdHJ1Y3QgZXJkbWFfZGV2ICpkZXYsIHN0cnVjdCBlcmRtYV9tZW0gKm1lbSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg2Mi1cXHRpZiAobWVtLVxcdTAwM2V1bWVtKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6ODYzOlxcdFxcdGliX3VtZW1fcmVsZWFzZShtZW0tXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg2NC1cXHRcXHRtZW0tXFx1MDAzZXVtZW0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9ODcwPXN0YXRpYyB2b2lkIHB1dF9tdHRfZW50cmllcyhzdHJ1Y3QgZXJkbWFfZGV2ICpkZXYsIHN0cnVjdCBlcmRtYV9tZW0gKm1lbSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg3NS1cXHRpZiAobWVtLVxcdTAwM2V1bWVtKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6ODc2OlxcdFxcdGliX3VtZW1fcmVsZWFzZShtZW0tXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTg3Ny1cXHRcXHRtZW0tXFx1MDAzZXVtZW0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9OTI2PWVyZG1hX3VubWFwX3VzZXJfZGJyZWNvcmRzKHN0cnVjdCBlcmRtYV91Y29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtOTM0LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjYoKmRicl9wYWdlKS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM6OTM1OlxcdFxcdGliX3VtZW1fcmVsZWFzZSgoKmRicl9wYWdlKS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtOTM2LVxcdFxcdGtmcmVlKCpkYnJfcGFnZSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmM9NTU9dm9pZCBobnNfcm9jZV9kYl91bm1hcF91c2VyKHN0cnVjdCBobnNfcm9jZV91Y29udGV4dCAqY29udGV4dCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGIuYy02Mi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2ZGItXFx1MDAzZXUudXNlcl9wYWdlLVxcdTAwM2VsaXN0KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RiLmM6NjM6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGRiLVxcdTAwM2V1LnVzZXJfcGFnZS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kYi5jLTY0LVxcdFxcdGtmcmVlKGRiLVxcdTAwM2V1LnVzZXJfcGFnZSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmM9NTcyPXN0YXRpYyB2b2lkIG10cl9mcmVlX2J1ZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2LCBzdHJ1Y3QgaG5zX3JvY2VfbXRyICptdHIpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmMtNTc1LVxcdGlmIChtdHItXFx1MDAzZXVtZW0pIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21yLmM6NTc2OlxcdFxcdGliX3VtZW1fcmVsZWFzZShtdHItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbXIuYy01NzctXFx0XFx0bXRyLVxcdTAwM2V1bWVtID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTc2PWludCBpb25pY19jcmVhdGVfY3FfY29tbW9uKHN0cnVjdCBpb25pY192Y3EgKnZjcSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE2NC1cXHRpZiAoY3EtXFx1MDAzZXVtZW0pXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM6MTY1OlxcdFxcdGliX3VtZW1fcmVsZWFzZShjcS1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTY2LWVycl9xZGVzYzpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTE3ND12b2lkIGlvbmljX2Rlc3Ryb3lfY3FfY29tbW9uKHN0cnVjdCBpb25pY19pYmRldiAqZGV2LCBzdHJ1Y3QgaW9uaWNfY3EgKmNxKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMTg0LVxcdGlmIChjcS1cXHUwMDNldW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoxODU6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGNxLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xODYtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9ODcwPXN0cnVjdCBpYl9tciAqaW9uaWNfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICppYnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy05MjYtZXJyX3BndGJsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjkyNzpcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTkyOC1lcnJfdW1lbTpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTkzNT1zdHJ1Y3QgaWJfbXIgKmlvbmljX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBvZmZzZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy05OTYtZXJyX3BndGJsOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjk5NzpcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTk5OC1lcnJfdW1lbTpcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTEwMDU9aW50IGlvbmljX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJtciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTEwMjItXFx0aWYgKG1yLVxcdTAwM2V1bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjEwMjM6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKG1yLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xMDI0LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmM9MTc4MD1zdGF0aWMgaW50IGlvbmljX3FwX3NxX2luaXQoc3RydWN0IGlvbmljX2liZGV2ICpkZXYsIHN0cnVjdCBpb25pY19jdHggKmN0eCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MDgtXFx0aWYgKHFwLVxcdTAwM2VzcV91bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5MDk6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHFwLVxcdTAwM2VzcV91bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xOTEwLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTE5MTU9c3RhdGljIHZvaWQgaW9uaWNfcXBfc3FfZGVzdHJveShzdHJ1Y3QgaW9uaWNfaWJkZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jLTE5MjctXFx0aWYgKHFwLVxcdTAwM2VzcV91bWVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jOjE5Mjg6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHFwLVxcdTAwM2VzcV91bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0xOTI5LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19jb250cm9scGF0aC5jPTIwMDY9c3RhdGljIGludCBpb25pY19xcF9ycV9pbml0KHN0cnVjdCBpb25pY19pYmRldiAqZGV2LCBzdHJ1Y3QgaW9uaWNfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTE2LVxcdGlmIChxcC1cXHUwMDNlcnFfdW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTE3OlxcdFxcdGliX3VtZW1fcmVsZWFzZShxcC1cXHUwMDNlcnFfdW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMjExOC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYz0yMTIzPXN0YXRpYyB2b2lkIGlvbmljX3FwX3JxX2Rlc3Ryb3koc3RydWN0IGlvbmljX2liZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYy0yMTM0LVxcdGlmIChxcC1cXHUwMDNlcnFfdW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfY29udHJvbHBhdGguYzoyMTM1OlxcdFxcdGliX3VtZW1fcmVsZWFzZShxcC1cXHUwMDNlcnFfdW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2NvbnRyb2xwYXRoLmMtMjEzNi1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYz0zNTA2PXN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmlyZG1hX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHU2NCBzdGFydCwgdTY0IGxlbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1MzUtXFx0aWYgKGliX2NvcHlfZnJvbV91ZGF0YShcXHUwMDI2cmVxLCB1ZGF0YSwgbWluKHNpemVvZihyZXEpLCB1ZGF0YS1cXHUwMDNlaW5sZW4pKSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1MzY6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzUzNy1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM1NDEtXFx0aWYgKElTX0VSUihpd21yKSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1NDI6XFx0XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzU0My1cXHRcXHRyZXR1cm4gKHN0cnVjdCBpYl9tciAqKWl3bXI7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNTc2LWVycm9yOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM1Nzc6XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzU3OC1cXHRpcmRtYV9mcmVlX2l3bXIoaXdtcik7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYz0zNjEzPXN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmlyZG1hX3JlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0zNjYyLVxcdCAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM2NjM6XFx0aWJfdW1lbV9yZWxlYXNlKFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzY2NC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTM3MjA9c3RhdGljIGludCBpcmRtYV9yZXJlZ19tcl90cmFucyhzdHJ1Y3QgaXJkbWFfbXIgKml3bXIsIHU2NCBzdGFydCwgdTY0IGxlbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM3NTQtZXJyOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM3NTU6XFx0aWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzc1Ni1cXHRpd21yLVxcdTAwM2VyZWdpb24gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9Mzc3NT1zdGF0aWMgc3RydWN0IGliX21yICppcmRtYV9yZXJlZ191c2VyX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIGludCBmbGFncyxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTM4NDItXFx0XFx0aWYgKGl3bXItXFx1MDAzZXJlZ2lvbikge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjM4NDM6XFx0XFx0XFx0aWJfdW1lbV9yZWxlYXNlKGl3bXItXFx1MDAzZXJlZ2lvbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtMzg0NC1cXHRcXHRcXHRpd21yLVxcdTAwM2VyZWdpb24gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM9Mzk3ND1zdGF0aWMgaW50IGlyZG1hX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDAyLVxcdGlmIChpd21yLVxcdTAwM2VyZWdpb24pXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6NDAwMzpcXHRcXHQvKiBGb3IgZG1hYnVmIE1ScywgaWJfdW1lbV9yZWxlYXNlIHdpbGwgdHJpZ2dlciBhIHN5bmNocm9ub3VzXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmMtNDAwNC1cXHRcXHQgKiBjYWxsIHRvIHRoZSByZXZva2UgY2FsbGJhY2sgd2hpY2ggd2lsbCBwZXJmb3JtIHRoZSBhY3R1YWwgSFdcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTQwMDgtXFx0XFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6NDAwOTpcXHRcXHRpYl91bWVtX3JlbGVhc2UoaXdtci1cXHUwMDNlcmVnaW9uKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy00MDEwLVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jPTI1NT1pbnQgbWFuYV9pYl9jcmVhdGVfcXVldWUoc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCB1NjQgYWRkciwgdTMyIHNpemUsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjgxLWZyZWVfdW1lbTpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM6MjgyOlxcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjgzLVxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM9Mjg2PXZvaWQgbWFuYV9pYl9kZXN0cm95X3F1ZXVlKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jLTI5MS1cXHRtYW5hX2liX2dkX2Rlc3Ryb3lfZG1hX3JlZ2lvbihtZGV2LCBxdWV1ZS1cXHUwMDNlZ2RtYV9yZWdpb24pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYzoyOTI6XFx0aWJfdW1lbV9yZWxlYXNlKHF1ZXVlLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMtMjkzLVxcdGlmIChxdWV1ZS1cXHUwMDNla21lbSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM9MTAwPXN0cnVjdCBpYl9tciAqbWFuYV9pYl9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMTc5LWVycl91bWVtOlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM6MTgwOlxcdGliX3VtZW1fcmVsZWFzZShtci1cXHUwMDNldW1lbSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYy0xODEtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jPTE4Nz1zdHJ1Y3QgaWJfbXIgKm1hbmFfaWJfcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqaWJwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYy0yNTMtZXJyX3VtZW06XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYzoyNTQ6XFx0aWJfdW1lbV9yZWxlYXNlKG1yLVxcdTAwM2V1bWVtKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmM9MzQyPWludCBtYW5hX2liX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJtciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMzU1LVxcdGlmIChtci1cXHUwMDNldW1lbSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jOjM1NjpcXHRcXHRpYl91bWVtX3JlbGVhc2UobXItXFx1MDAzZXVtZW0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21yLmMtMzU3LVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToxMS4wMDczNTU2ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5Njg3MDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtZW1fcmVsZWFzZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgbWVtX3JlbGVhc2VgIGJlaW5nIHVzZWQsIG9yIGF0IGxlYXN0ICpyZWZlcmVuY2VkKiwgaW4gYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNgLCBidXQgdGhhdCdzIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGBzcHVmc19tZW1fcmVsZWFzZWAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBnZW5lcmFsIG9uZSBpbiBgZnMvcHJvYy9iYXNlLmNgLiBJIHJlY2FsbCB0aGF0IHRoZSBgbWVtX3JlbGVhc2VgIGZ1bmN0aW9uIGluIHRoYXQgZmlsZSBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCdzIG5vdCBzaW1wbHkgdW51c2VkIHdpdGhpbiB0aGUgZmlsZSBub3cuIEknbGwgY2hlY2sgaXRzIHVzYWdlIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLlxuXG5BaGEhIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgbG9va3MgbGlrZSBgbWVtX3JlbGVhc2VgICppcyogc3RpbGwgcHJlc2VudCwgYXQgbGVhc3QgaW4gdGhlIG9yaWdpbmFsIGZvcm0sIGJ1dCBpdCdzIGJlZW4gdXBkYXRlZC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgaXQncyBhY3R1YWxseSBiZWVuIHJlcGxhY2VkIGluIGBwcm9jX21lbV9vcGVyYXRpb25zYC4gVGhlIGByZWxlYXNlYCBmaWVsZCBpbiBgcHJvY19tZW1fb3BlcmF0aW9uc2AgdXNlZCB0byBwb2ludCB0byBgbWVtX3JlbGVhc2VgLCBidXQgbm93IGl0IHBvaW50cyB0byBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYC4gVGhlIG9yaWdpbmFsIGBtZW1fcmVsZWFzZWAgaXMgc3RpbGwgdGhlcmUsIGp1c3Qgbm90IHVzZWQgaW4gdGhhdCBjb250ZXh0IGFueSBsb25nZXIuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgc2FmZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB0aGF0IGFueSBjb2RlIHJlbHlpbmcgb24gdGhhdCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGZ1bmN0aW9uLlxuXG5JIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSBpdCdzIG5vdCBiZWluZyBjYWxsZWQgZWxzZXdoZXJlIGluIGBmcy9wcm9jL2Jhc2UuY2AgdXNpbmcgdGhlIG9sZCBmdW5jdGlvbiBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI3MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToxNy4zMDQyMjgxMzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE5MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTk2OT1sb2ZmX3QgbWVtX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZylcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTk4NC1cXG5mcy9wcm9jL2Jhc2UuYzo5ODU6c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy05ODYte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtOTkyLVxcbmZzL3Byb2MvYmFzZS5jOjk5MzpzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy05OTQte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMTAwNi1cXHQub3BlblxcdFxcdD0gbWVtX29wZW4sXFxuZnMvcHJvYy9iYXNlLmM6MTAwNzpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxcbmZzL3Byb2MvYmFzZS5jLTEwMDgtXFx0LmZvcF9mbGFnc1xcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMDgyLVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuZnMvcHJvYy9iYXNlLmM6MTA4MzpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuZnMvcHJvYy9iYXNlLmMtMTA4NC19O1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2F1eHZfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTExMDktXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5mcy9wcm9jL2Jhc2UuYzoxMTEwOlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZSxcXG5mcy9wcm9jL2Jhc2UuYy0xMTExLX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0yODUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX2F0dHJfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI4NTctXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5mcy9wcm9jL2Jhc2UuYzoyODU4OlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZSxcXG5mcy9wcm9jL2Jhc2UuYy0yODU5LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjExOjE3LjM1MTk1NjcwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ5OTE1NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbWVtX3JlbGVhc2VgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzOiBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLCBgcHJvY19hdXh2X29wZXJhdGlvbnNgLCBhbmQgYHByb2NfcGlkX2F0dHJfb3BlcmF0aW9uc2AuIFRoYXQncyBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGFsbCByZWxhdGVkIHRvIHByb2Nlc3MgaW5mb3JtYXRpb24gYW5kIG1ldGFkYXRhLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgdGhvdWdoLiBJIHdvbmRlciBpZiB0aGVzZSBvcGVyYXRpb25zIGFyZSB0aWVkIHRvIGBtZW1fb3BlbmAgaW4gYW55IHdheT8gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbWVtb3J5IGxpZmVjeWNsZS4gTGV0J3Mgc3RhcnQgd2l0aCBgcHJvY19lbnZpcm9uX29wZXJhdGlvbnNgLiBJJ2xsIGRlbHZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyMS43MDE4NzQ3OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzE0NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZW52aXJvbl9vcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEwMTY9c3RhdGljIHNzaXplX3QgZW52aXJvbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMTA3OC1cXG5mcy9wcm9jL2Jhc2UuYzoxMDc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xcbmZzL3Byb2MvYmFzZS5jLTEwODAtXFx0Lm9wZW5cXHRcXHQ9IGVudmlyb25fb3BlbixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTMzMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zMzE5LSNlbmRpZlxcbmZzL3Byb2MvYmFzZS5jOjMzMjA6XFx0UkVHKFxcXCJlbnZpcm9uXFxcIiwgICAgU19JUlVTUiwgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzMjEtXFx0UkVHKFxcXCJhdXh2XFxcIiwgICAgICAgU19JUlVTUiwgcHJvY19hdXh2X29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3Ni0jZW5kaWZcXG5mcy9wcm9jL2Jhc2UuYzozNjc3OlxcdFJFRyhcXFwiZW52aXJvblxcXCIsICAgU19JUlVTUiwgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTM2NzgtXFx0UkVHKFxcXCJhdXh2XFxcIiwgICAgICBTX0lSVVNSLCBwcm9jX2F1eHZfb3BlcmF0aW9ucyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjExOjIxLjc1MTU5MjcwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgwMDA0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgZW52aXJvbl9vcGVuYCoqXG5cbk9rYXksIHNvIHRoZXkncmUgdXNpbmcgYGVudmlyb25fb3BlbmAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIGZpZWxkIGdldHMgc2V0LCBsaWtlbHkgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHByb2JhYmx5IGBtbWAuIExldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLCBzaGFsbCB3ZT8gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZW52aXJvbl9vcGVuYCBhbmQgc2VlIHdoYXQgaXQncyAqcmVhbGx5KiBkb2luZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIG1hbmFnaW5nIHRoZSBhc3NvY2lhdGVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyNS40MzE2MDA5MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyOTE4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW52aXJvbl9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMTAtXFxuZnMvcHJvYy9iYXNlLmM6MTAxMTpzdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XFxuZnMvcHJvYy9iYXNlLmM6MTA4MDpcXHQub3BlblxcdFxcdD0gZW52aXJvbl9vcGVuLFxcbmZzL3Byb2MvYmFzZS5jLTEwODEtXFx0LnJlYWRcXHRcXHQ9IGVudmlyb25fcmVhZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MjUuNDgwOTAzODY5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODU4MDIyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGVudmlyb25fb3BlbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgZW52aXJvbl9vcGVuYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgYW55IG9idmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkLCB3aGF0IGl0IGRvZXMgaW4gYSBiYXNpYyBzZW5zZSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFyZSB0aGF0IHJlcXVpcmUgYXR0ZW50aW9uLiBJJ2xsIGJlIGZvY3VzZWQsIGVzcGVjaWFsbHksIG9uIGFueSBlcnJvciBwYXRocyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSXMgaXQgcmVhZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHksIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggc29tZSBraW5kIG9mIGFic3RyYWN0aW9uIGxheWVyPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgdHJ5aW5nIHRvIGFjY2VzcyBvciBtb2RpZnkgdGhlIGVudmlyb25tZW50IGNvbmN1cnJlbnRseT8gSSdsbCBiZSBsb29raW5nIGZvciBzaWducyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBmb3JtYXQgc3RyaW5nIGJ1Z3MsIGVzcGVjaWFsbHkgaWYgaXQgaW50ZXJhY3RzIHdpdGggdXNlci1wcm92aWRlZCBpbnB1dCwgb3IgZGF0YSByZWFkIGZyb20gZGlzay4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgc3RhbmRhcmQsIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGlzIHBhcnRpY3VsYXIgcHJvamVjdCwgdGhhdCBtaWdodCBuZWVkIGNsb3NlciBzY3J1dGlueSBpZiBpdCBpc24ndCBzb21ldGhpbmcgd2VsbCBrbm93bi4gVW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIGNvbnRleHQgaXMgZXNzZW50aWFsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyOS4wNjY3MDk1NDFaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMTA6XFx0XFxuMTAxMTpcXHRzdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4xMDEyOlxcdHtcXG4xMDEzOlxcdFxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG4xMDE0OlxcdH1cXG4xMDE1OlxcdFxcbjEwMTY6XFx0c3RhdGljIHNzaXplX3QgZW52aXJvbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbjEwMTc6XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuMTAxODpcXHR7XFxuMTAxOTpcXHRcXHRjaGFyICpwYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMToyOS4wNjY5MDk2MjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4ODcxMjc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IE1hcHBpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgZW52aXJvbl9vcGVuYCB1c2VzIGBfX21lbV9vcGVuYCDigJMgc3RhbmRhcmQgcHJvY2VkdXJlLiBUaGUgZnVuY3Rpb24gY2FsbCBpcyBgX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRClgLiBPa2F5LCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLiBUaGUgYGlub2RlYCBpcyBsaWtlbHkgdGhlIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlsZSwgYGZpbGVgIHdvdWxkIGJlIHRoZSBmaWxlIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCB0aGUgYFBUUkFDRV9NT0RFX1JFQURgIGlzIG9idmlvdXNseSBhYm91dCByZWFkIGFjY2VzcyBmb3IgcG90ZW50aWFsIHRyYWNpbmcuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBfX21lbV9vcGVuYC4gR290dGEgc2VlIGhvdyB0aGF0IG1lbW9yeSBtYXBwaW5nIGlzIGJlaW5nIHNldCB1cC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhY2Nlc3NpbmcgdGhlIHByb2Nlc3MncyBtZW1vcnkgd2lsbCBiZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgbWV0aG9kb2xvZ3ksIGlkZW50aWZ5IGFuZCBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoaXMgbWVldHMgbXkgc3RhbmRhcmRzIGZvciBzZWN1cmUgYWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MzIuOTU1NjI1ODg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL2Jhc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4gODQxOlxcdHtcXG4gODQyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgbW9kZSk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChtbSkpXFxuIDg0NTpcXHRcXHRcXHRyZXR1cm4gbW0gPyBQVFJfRVJSKG1tKSA6IC1FU1JDSDtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbW07XFxuIDg0ODpcXHRcXHRyZXR1cm4gMDtcXG4gODQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MTE6MzIuOTU1ODIyNDA1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTQ5Nzc5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgL3Byb2MvcGlkL21lbWAgUGF0Y2g6IEtNU0FOIFVubmVjZXNzYXJ5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBtYW5hZ2luZyBhIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGZvciBgL3Byb2MvcGlkL21lbWAgZmlsZSBvcGVyYXRpb25zLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIHRoYXQgcmVxdWlyZSBLTVNBTi4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgc3RydWN0IHRoYXQncyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAsIHdoaWNoICpkb2Vzbid0KiB6ZXJvIG1lbW9yeS4gSXQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBgbW1fc3RydWN0YCBhbmQgYSBib29sZWFuIGBpbnRyb3NwZWN0aW9uYCBmbGFnLlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgdG8gcmVtZW1iZXIgaXMgdGhhdCBgX19tZW1fb3BlbmAgc2V0cyBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBtbTtgLCBhbmQgYG1lbV9yZWxlYXNlYCBjYWxscyBgbW1kcm9wKGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKWAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGZvciB0aGUgbmV3IGBzdHJ1Y3QgbWVtX3ByaXZhdGVgLiBUaGUgYGludHJvc3BlY3Rpb25gIGZsYWcgaXMgaW5pdGlhbGl6ZWQgKmFmdGVyKiBgcHJvY19tZW1fb3BlbmAgaXMgY2FsbGVkIGFuZCBpdHMgcmVzdWx0IGNoZWNrZWQuIElmIGBwcm9jX21lbV9vcGVuYCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIElmIGBrbWFsbG9jX29iamAgZmFpbHMsIGl0IHJldHVybnMgYC1FTk9NRU1gLiBUaGVyZWZvcmUgdGhlIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGlzIG5vdCB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXG5cblRoZSBgc3RydWN0IG1lbV9wcml2YXRlYCBpcyBhbGxvY2F0ZWQsIGJ1dCBpdHMgZmllbGRzIGFyZSBhbGwgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCBpcyBzZXQuIFRoZSBzdHJ1Y3QgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUncyBwb3RlbnRpYWwgZm9yIHBhZGRpbmcgaW4gdGhlIHN0cnVjdCwgYnV0IHRoaXMgaXMgaXJyZWxldmFudCBiZWNhdXNlIHBhZGRpbmcgaXMgbm90IHZpc2libGUgdG8gdXNlcnNwYWNlLCB0aGVyZWZvcmUgaXQncyBub3QgYSBzb3VyY2Ugb2YgYW55IGluZm9ybWF0aW9uIGxlYWsuXG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBMU00gaG9vayBhbHNvIG5lZWRzIGluc3BlY3Rpb24uIFRoaXMgaG9vayBnZXRzIGNhbGxlZCwgYW5kIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGF2ZGAgaXMgcGFzc2VkIGFzIGFuICpvdXRwdXQqIHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAuIFRoZSBmdW5jdGlvbiBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAgcG9wdWxhdGVzIGBhdmRgLiBUaGUgY29udGVudHMgb2YgYGF2ZGAgYXJlICpub3QqIGV2ZW4gdXNlZCBieSBgc2VsaW51eF9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlKClgLiBUaGVyZWZvcmUsIHdoZXRoZXIgYGF2ZGAgaXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gaXRzIHVzZSBpcyBjb21wbGV0ZWx5IGlycmVsZXZhbnQuXG5cbkl0IGlzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyIGlmIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGxlYXZlcyBhbnkgcG90ZW50aWFsIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgZmlsZSBvcGVyYXRpb25zIGNhbiBvbmx5IGJlIGRvbmUgYWZ0ZXIgc3VjY2Vzc2Z1bCBvcGVuaW5nIG9mIGEgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYGludHJvc3BlY3Rpb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkIGF0IHRoaXMgdGltZS4gVGhlIFZGUyBsYXllciBwcm92aWRlcyB0aGUgY29ycmVjdCBjcmVkZW50aWFscy4gVGhlcmUncyBubyBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZSBzaW5jZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzbid0IHZpc2libGUgdW50aWwgYG9wZW5gIHJldHVybnMuXG5cbkkndmUgYWxzbyBjaGVja2VkIGBrbWFsbG9jX29iamAgYW5kIGNvbmZpcm1lZCB0aGF0IGl0J3MgYSB3cmFwcGVyIGFyb3VuZCBga21hbGxvY2AgYW5kIGlzIGNvbXBsZXRlbHkgc2FmZS4gVGhlIGBfX2ZyZWVgIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5IGZyZWVzIGl0IHdoZW4gYG1lbV9vcGVuYCByZXR1cm5zLiBTbywgaXQgaXMgc2FmZSB0byB1c2UuXG5cbkluIHN1bW1hcnk6IHRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCByZWxldmFudCBmaWVsZHMuIFRoZSBzdHJ1Y3QgaXMgbmV2ZXIgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDMzLCJPdXRwdXRUb2tlbnMiOjM2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoxMjowMS4xMDU2MDUzNDdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgL3Byb2MvcGlkL21lbWAgb3BlbiBhbmQgcmVhZC93cml0ZSBsb2dpYyB0byB0cmFjayB3aGV0aGVyIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIHdhcyBieXBhc3NlZCBkdWUgdG8gaW50cm9zcGVjdGlvbiAoYSBwcm9jZXNzIGFjY2Vzc2luZyBpdHMgb3duIG1lbW9yeSkuIEl0IGludHJvZHVjZXMgYSBuZXcgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgdG8gaG9sZCB0aGUgYG1tX3N0cnVjdGAgcG9pbnRlciBhbmQgYSBib29sZWFuIGBpbnRyb3NwZWN0aW9uYCBmbGFnLiBUaGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYnV0IGJvdGggb2YgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbWVtX29wZW4oKWAuIFRoZSBzdHJ1Y3QgaXMgb25seSB1c2VkIGludGVybmFsbHkgd2l0aGluIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgZG8gbm90IHBvc2UgYW4gaW5mby1sZWFrIHJpc2suXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgc2VjdXJpdHlfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAgYW5kIGl0cyBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGBzZWxpbnV4X2ludHJvc3BlY3RfbWVtX2ZvbGxfZm9yY2VgLiBUaGUgU0VMaW51eCBpbXBsZW1lbnRhdGlvbiBhbGxvY2F0ZXMgYSBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCBpcyBwYXNzZWQgcHVyZWx5IGFzIGFuIG91dHB1dCBwYXJhbWV0ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCB3aGljaCBwb3B1bGF0ZXMgaXQuIFRoZSBjb250ZW50cyBvZiBgYXZkYCBhcmUgbm90IGV2ZW4gcmVhZCBieSB0aGUgY2FsbGVyLlxcblxcblNpbmNlIGFsbCBpbnRyb2R1Y2VkIG1lbW9yeSBpcyBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciB1c2VkIHN0cmljdGx5IGFzIG91dHB1dCBwYXJhbWV0ZXJzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGJ5dGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAvcHJvYy9waWQvbWVtYCBvcGVuIGFuZCByZWFkL3dyaXRlIGxvZ2ljIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgd2FzIGJ5cGFzc2VkIGR1ZSB0byBpbnRyb3NwZWN0aW9uIChhIHByb2Nlc3MgYWNjZXNzaW5nIGl0cyBvd24gbWVtb3J5KS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgc3RydWN0IG1lbV9wcml2YXRlYCB0byBob2xkIHRoZSBgbW1fc3RydWN0YCBwb2ludGVyIGFuZCBhIGJvb2xlYW4gYGludHJvc3BlY3Rpb25gIGZsYWcuIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBidXQgYm90aCBvZiBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBtZW1fb3BlbigpYC4gVGhlIHN0cnVjdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgc28gYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBkbyBub3QgcG9zZSBhbiBpbmZvLWxlYWsgcmlzay5cXG5cXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBzZWN1cml0eV9pbnRyb3NwZWN0X21lbV9mb2xsX2ZvcmNlYCBhbmQgaXRzIFNFTGludXggaW1wbGVtZW50YXRpb24gYHNlbGludXhfaW50cm9zcGVjdF9tZW1fZm9sbF9mb3JjZWAuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IGlzIHBhc3NlZCBwdXJlbHkgYXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIHdoaWNoIHBvcHVsYXRlcyBpdC4gVGhlIGNvbnRlbnRzIG9mIGBhdmRgIGFyZSBub3QgZXZlbiByZWFkIGJ5IHRoZSBjYWxsZXIuXFxuXFxuU2luY2UgYWxsIGludHJvZHVjZWQgbWVtb3J5IGlzIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHVzZWQgc3RyaWN0bHkgYXMgb3V0cHV0IHBhcmFtZXRlcnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[1] Phase: Succeeded StartedAt: 2026-08-18 22:12:13 +0000 UTC FinishedAt: 2026-08-18 22:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 22:12:13 +0000 UTC FinishedAt: 2026-08-18 22:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2] Phase: Succeeded StartedAt: 2026-08-18 22:12:13 +0000 UTC FinishedAt: 2026-08-19 01:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 22:12:13 +0000 UTC FinishedAt: 2026-08-19 01:58:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 22:12:13 +0000 UTC FinishedAt: 2026-08-18 22:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 22:12:13 +0000 UTC FinishedAt: 2026-08-18 22:12:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkvtb9/series-workflowkvtb9-convert-artifact-2127257950/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 22:12:23 +0000 UTC FinishedAt: 2026-08-18 22:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 22:12:23 +0000 UTC FinishedAt: 2026-08-18 22:30:03 +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:*0c8f5a4e-41cc-4ff0-94a9-fea6cf516574,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-workflowkvtb9/series-workflowkvtb9-convert-artifact-2127257950/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": "a188b9e5-228b-417c-b1fd-0c4ca5f373a0", "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-workflowkvtb9/series-workflowkvtb9-build-action-1413972548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 22:12:23 +0000 UTC FinishedAt: 2026-08-18 22:29:53 +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:*0c8f5a4e-41cc-4ff0-94a9-fea6cf516574,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-workflowkvtb9/series-workflowkvtb9-convert-artifact-2127257950/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": "a188b9e5-228b-417c-b1fd-0c4ca5f373a0", "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-workflowkvtb9/series-workflowkvtb9-build-action-1413972548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 22:30:03 +0000 UTC FinishedAt: 2026-08-18 22:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 22:30:03 +0000 UTC FinishedAt: 2026-08-18 22:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 22:30:03 +0000 UTC FinishedAt: 2026-08-18 22:30:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 22:30:03 +0000 UTC FinishedAt: 2026-08-18 22:30:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkvtb9/series-workflowkvtb9-convert-artifact-3500642321/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 22:30:13 +0000 UTC FinishedAt: 2026-08-18 22:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 22:30:13 +0000 UTC FinishedAt: 2026-08-18 22:32:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a188b9e5-228b-417c-b1fd-0c4ca5f373a0,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-workflowkvtb9/series-workflowkvtb9-build-action-1413972548/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-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 22:32:14 +0000 UTC FinishedAt: 2026-08-18 22:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 22:32:14 +0000 UTC FinishedAt: 2026-08-18 22:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 22:32:14 +0000 UTC FinishedAt: 2026-08-18 22:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 22:32:14 +0000 UTC FinishedAt: 2026-08-18 22:52:01 +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:*0c8f5a4e-41cc-4ff0-94a9-fea6cf516574,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-workflowkvtb9/series-workflowkvtb9-convert-artifact-3500642321/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": "77e51272-f298-40b9-8f0e-638f644a786b", "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-workflowkvtb9/series-workflowkvtb9-build-action-2260631517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 22:32:14 +0000 UTC FinishedAt: 2026-08-18 22:51:38 +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:*0c8f5a4e-41cc-4ff0-94a9-fea6cf516574,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-workflowkvtb9/series-workflowkvtb9-convert-artifact-3500642321/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": "77e51272-f298-40b9-8f0e-638f644a786b", "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-workflowkvtb9/series-workflowkvtb9-build-action-2260631517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 22:52:01 +0000 UTC FinishedAt: 2026-08-18 22:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 22:52:01 +0000 UTC FinishedAt: 2026-08-18 22:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 22:52:01 +0000 UTC FinishedAt: 2026-08-18 22:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 22:52:01 +0000 UTC FinishedAt: 2026-08-18 22:54:23 +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:*77e51272-f298-40b9-8f0e-638f644a786b,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-workflowkvtb9/series-workflowkvtb9-build-action-2260631517/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-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 22:54:33 +0000 UTC FinishedAt: 2026-08-19 01:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 22:54:33 +0000 UTC FinishedAt: 2026-08-19 01:58:43 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"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:*a188b9e5-228b-417c-b1fd-0c4ca5f373a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77e51272-f298-40b9-8f0e-638f644a786b,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-workflowkvtb9/series-workflowkvtb9-build-action-1413972548/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-workflowkvtb9/series-workflowkvtb9-build-action-2260631517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 22:54:33 +0000 UTC FinishedAt: 2026-08-18 22:54:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 22:54:33 +0000 UTC FinishedAt: 2026-08-18 22:54:51 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"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-workflowkvtb9/series-workflowkvtb9-convert-artifact-2554733638/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 22:54:33 +0000 UTC FinishedAt: 2026-08-18 22:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 22:54:33 +0000 UTC FinishedAt: 2026-08-18 22:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 22:54:33 +0000 UTC FinishedAt: 2026-08-18 22:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 22:54:59 +0000 UTC FinishedAt: 2026-08-19 01:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvtb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["security_introspect_mem_foll_force","selinux_introspect_mem_foll_force","mem_release_with_private"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_MEM_ALWAYS_FORCE","SECURITY_SELINUX"],"series_id":"a6361e55-581b-4ca3-8d32-20f0d0ae60a4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 22:54:59 +0000 UTC FinishedAt: 2026-08-19 01:58:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a188b9e5-228b-417c-b1fd-0c4ca5f373a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77e51272-f298-40b9-8f0e-638f644a786b,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-workflowkvtb9/series-workflowkvtb9-build-action-1413972548/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-workflowkvtb9/series-workflowkvtb9-build-action-2260631517/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-workflowkvtb9/series-workflowkvtb9-convert-artifact-2554733638/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,}