Name: series-workflowd7znt Phase: Succeeded StartedAt: 2026-09-04 12:41:40 +0000 UTC FinishedAt: 2026-09-04 16:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[0] Phase: Succeeded StartedAt: 2026-09-04 12:41:40 +0000 UTC FinishedAt: 2026-09-04 12:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 12:41:40 +0000 UTC FinishedAt: 2026-09-04 12:45:11 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO", "NET_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO", "NET_SCHED" ], "series_id": "643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "taprio_min_interval", "fill_sched_entry", "parse_taprio_schedule", "taprio_change" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19taW5faW50ZXJ2YWwmIzM0OywKICAgICYjMzQ7ZmlsbF9zY2hlZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCAxMHVzKSBmb3IgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgd2hlbiBvcGVyYXRpbmcgaW4gc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4pIHRvIHByZXZlbnQgQ1BVIHN0YXJ2YXRpb24gYW5kIHRpbWVyIGludGVycnVwdCBzdG9ybXMuIEl0IGludHJvZHVjZXMgdGhlIGhlbHBlciBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCBhbmQgYWRqdXN0cyB0aGUgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGluIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBmb3Igc29mdHdhcmUtZHJpdmVuIChocnRpbWVyLWJhc2VkKSB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB0byBwcmV2ZW50IGhydGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIHRhcHJpbyBxZGlzYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0ZGV2IGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMjRiZTRlNTY3ZmYxNGRkN2VlNjU2MTBlMDJhYmIxZmY0ZTU2NjkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggMzlhYzViOTdhYTNhZi4uMzg5MGNkYmZjYjRmMSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC00OCw2ICYjNDM7NDgsMTAgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xuICAqIDYwICogMTcgXHUwMDNlIFBTRUNfUEVSX05TRUMgKDEwMDApXG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4mIzQzOy8qIE1pbmltdW0gaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuIGFkdmFuY2Vfc2NoZWQpIHRvXG4mIzQzOyAqIGF2b2lkIGhydGltZXIgaW50ZXJydXB0IHN0b3JtcyBhbmQgQ1BVIHN0YXJ2YXRpb24uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwICogTlNFQ19QRVJfVVNFQylcbiBcbiBzdHJ1Y3Qgc2NoZWRfZW50cnkge1xuIFx0LyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlXG5AQCAtMjU5LDYgJiM0MzsyNjMsMTcgQEAgc3RhdGljIGludCBsZW5ndGhfdG9fZHVyYXRpb24oc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgaW50IGxlbilcbiBcdHJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoXHUwMDI2cS1cdTAwM2VwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIVRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG4ge1xuIFx0cmV0dXJuIGRpdl91NjQoZHVyYXRpb24gKiBQU0VDX1BFUl9OU0VDLCBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcbkBAIC0xMDM5LDcgJiM0MzsxMDU0LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuJiM0MztcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0dTMyIGludGVydmFsID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXG5AQCAtMTEzMCw2ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XG5AQCAtMTE2Nyw3ICYjNDM7MTE4Myw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0bmV3LVx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcbiBcdH1cbiBcbi1cdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkge1xuJiM0MztcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiBtaW5fZHVyYXRpb24pIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGxcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fbWluX2ludGVydmFsJiMzNDssCiAgICAmIzM0O2ZpbGxfc2NoZWRfZW50cnkmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI0YmU0ZTU2N2ZmMTRkZDdlZTY1NjEwZTAyYWJiMWZmNGU1NjY5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTI6NDM6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwppbmRleCAzOWFjNWI5N2FhM2FmLi4zODkwY2RiZmNiNGYxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKQEAgLTQ4LDYgJiM0Mzs0OCwxMCBAQCBzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87CiAgKiA2MCAqIDE3ICZndDsgUFNFQ19QRVJfTlNFQyAoMTAwMCkKICAqLwogI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3CiYjNDM7LyogTWluaW11bSBpbnRlcnZhbCBmb3Igc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4gYWR2YW5jZV9zY2hlZCkgdG8KJiM0MzsgKiBhdm9pZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIENQVSBzdGFydmF0aW9uLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAgKiBOU0VDX1BFUl9VU0VDKQogCiBzdHJ1Y3Qgc2NoZWRfZW50cnkgewogCS8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZQpAQCAtMjU5LDYgJiM0MzsyNjMsMTcgQEAgc3RhdGljIGludCBsZW5ndGhfdG9fZHVyYXRpb24oc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgaW50IGxlbikKIAlyZXR1cm4gZGl2X3U2NChsZW4gKiBhdG9taWM2NF9yZWFkKCZhbXA7cS0mZ3Q7cGljb3NfcGVyX2J5dGUpLCBQU0VDX1BFUl9OU0VDKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKQomIzQzO3sKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7CiYjNDM7CiYjNDM7CWlmICghRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgICFUWFRJTUVfQVNTSVNUX0lTX0VOQUJMRUQocS0mZ3Q7ZmxhZ3MpKQomIzQzOwkJbWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpOwomIzQzOwomIzQzOwlyZXR1cm4gbWluX2R1cmF0aW9uOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbikKIHsKIAlyZXR1cm4gZGl2X3U2NChkdXJhdGlvbiAqIFBTRUNfUEVSX05TRUMsIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSkpOwpAQCAtMTAzOSw3ICYjNDM7MTA1NCw3IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJCQkgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwKIAkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0JaW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7CiYjNDM7CWludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpOwogCXUzMiBpbnRlcnZhbCA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKQpAQCAtMTEzMCw2ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCQkgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LAogCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CWludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpOwogCWludCBlcnIgPSAwOwogCiAJaWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7CkBAIC0xMTY3LDcgJiM0MzsxMTgzLDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQluZXctJmd0O2N5Y2xlX3RpbWUgPSBjeWNsZTsKIAl9CiAKLQlpZiAobmV3LSZndDtjeWNsZV90aW1lICZsdDsgbmV3LSZndDtudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHsKJiM0MzsJaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IChzNjQpbmV3LSZndDtudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIHNtYWxsJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIGEgbWVudGFsIGNoZWNrbGlzdC4gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBldmVuICp3b3J0aCogc3BlbmRpbmcgZnV6emluZyBjeWNsZXMgb24/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29kZSBjaGFuZ2VzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIC0gbWVtb3J5IGNvcnJ1cHRpb24sIGludGVnZXIgb3ZlcmZsb3dzLCByYWNlIGNvbmRpdGlvbnMsIHRoYXQgc29ydCBvZiB0aGluZy4gSWYgaXQgc2VlbXMgcHJvbWlzaW5nLCB0aGVuIGl0JiMzOTtzIHRpbWUgdG8gbWFwIG91dCBhIGZ1enppbmcgc3RyYXRlZ3kuIFRoYXQgbWVhbnMgZmlndXJpbmcgb3V0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gZXhlcmNpc2UgdGhlIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBwb2ludCBpbiBzcGlubmluZyB3aGVlbHMgaWYgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGRpc2FibGVkIGR1ZSB0byBhIG1pc2NvbmZpZ3VyYXRpb24uCgpUaGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aG9zZSBmb2N1cyBzeW1ib2xzLiBXaGVyZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IHByb2Nlc3MgdGhlIG1vc3QgJiMzNDtpbnRlcmVzdGluZyYjMzQ7IGRhdGE/IEkmIzM5O2xsIG5lZWQgYSBzb2xpZCBsaXN0IG9mIHRob3NlIGZ1bmN0aW9ucyB0byBndWlkZSB0aGUgZnV6emluZyBwcm9jZXNzIGFuZCBlbnN1cmUgbWF4aW11bSBjb2RlIGNvdmVyYWdlLgoKQXMgZm9yIHVuY292ZXJpbmcgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdGFwcmlvIGltcGxlbWVudGF0aW9uLCBJJiMzOTtsbCBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBhbmQgdGhlIHR5cGljYWwgdG9vbHMuIEkmIzM5O2xsIGxpa2VseSB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhcyB0aGF0IHRlbmRzIHRvIGJlIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBiaXJkJiMzOTtzIGV5ZSB2aWV3LiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayBgbmV0L3NjaGVkL0tjb25maWdgIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgdGhhdCB0eXBlIG9mIGNvbmZpZ3VyYXRpb24sIGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1NDSF9UQVBSSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTcxLVxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xubmV0L3NjaGVkL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7VGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVx0JiM0Mzs9IHNjaF9ldGYub1xubmV0L3NjaGVkL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19ORVRfU0NIX1RBUFJJTylcdCYjNDM7PSBzY2hfdGFwcmlvLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUX1NDSF9CUEYpXHQmIzQzOz0gYnBmX3FkaXNjLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkuIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE3Mi4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGJlY2F1c2UgSSBjYW4gdXN1YWxseSBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgd2l0aGluIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiBhIEtjb25maWcgZmlsZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgbW9kdWxlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBvciBpbXBhY3RlZCBieSB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzaG91bGQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ldGYuXG4gMTY2Olx0XG4gMTY3Olx0Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxuIDE2ODpcdFx0dHJpc3RhdGVcbiAxNjk6XHRcdGhlbHBcbiAxNzA6XHRcdCAgQ29tbW9uIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBtcXByaW8gcXVldWUgY29uZmlndXJhdGlvbnMuXG4gMTcxOlx0XG4gMTcyOlx0Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG4gMTczOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclwmIzM0O1xuIDE3NDpcdFx0c2VsZWN0IE5FVF9TQ0hfTVFQUklPX0xJQlxuIDE3NTpcdFx0aGVscFxuIDE3NjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBwYWNrZXRcbiAxNzc6XHRcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMTc4Olx0XG4gMTc5Olx0XHQgIFNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF90YXByaW8uY1x1MDAzZSBmb3IgbW9yZSBkZXRhaWxzLlxuIDE4MDpcdFxuIDE4MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTgyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfdGFwcmlvLlxuIDE4MzpcdFxuIDE4NDpcdGNvbmZpZyBORVRfU0NIX0dSRURcbiAxODU6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcJiMzNDtcbiAxODY6XHRcdGhlbHBcbiAxODc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvblxuIDE4ODpcdFx0ICAoR1JFRCkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGZvciBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzXG4gMTg5Olx0XHQgIChzZWUgdGhlIHRvcCBvZiBcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfcmVkLmNcdTAwM2UgZm9yIGRldGFpbHMgYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggYW5hbHl6aW5nIHRoZSByZWNlbnQgY2hhbmdlcyBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2A6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgVGFwcmlvIENoYW5nZXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiB1cGRhdGVkIGluIHRoZSBUYXByaW8gc2NoZWR1bGVyLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIHBhdGNoIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gSSB3YW50IHRvIHNlZSB0aGUgZGlmZnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIGVmZmVjdGl2ZWx5IHJldmlldyB0aGVtOiBnaXQgZGlmZiwgY29kZSBjb21wYXJpc29uLCB3aGF0ZXZlciBpdCB0YWtlcy4gT25jZSBJIGhhdmUgdGhlIGNoYW5nZWQgbGluZXMsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyB0aGF0IHNlY3Rpb24gb2YgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBObyBuZWVkIHRvIHJlYWQgdGhlIGVudGlyZSBmaWxlLCBqdXN0IHdoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbi4gSSYjMzk7bGwgbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgY2hhbmdlcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFzIHdlbGwgYXMgdGhlICp3aGF0Ki4gV2hhdCBjb2RlIGFyZSB0aGV5IHRvdWNoaW5nIGFuZCB3aGF0IHdlcmUgdGhlIHJlYXNvbnMuIElzIHRoaXMgYSBidWcgZml4PyBBbiBvcHRpbWl6YXRpb24/IEEgbmV3IGZlYXR1cmU/IEFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgZG9lcyBpdCBhZmZlY3QgdGhlIHNjaGVkdWxpbmcgZGVjaXNpb25zPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdFxuMTAzMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uX3NpZ25lZCB0YXByaW9fY3ljbGVfdGltZV9yYW5nZSA9IHtcbjEwMzI6XHRcdC5taW4gPSAwLFxuMTAzMzpcdFx0Lm1heCA9IElOVF9NQVgsXG4xMDM0Olx0fTtcbjEwMzU6XHRcbjEwMzY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuMTAzNzpcdFx0W1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXVx0ICAgICAgID0ge1xuMTAzODpcdFx0XHQubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19tcXByaW9fcW9wdClcbjEwMzk6XHRcdH0sXG4xMDQwOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQxOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0gICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzY0IH0sXG4xMDQyOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0gICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQzOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NMT0NLSURdICAgICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4xMDQ0Olx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdICAgICAgICAgICA9XG4xMDQ1Olx0XHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRV9TSUdORUQoTkxBX1M2NCwgXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxuMTA0NjpcdFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxuMTA0NzpcdFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxuMTA0ODpcdFx0XHROTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgVEFQUklPX1NVUFBPUlRFRF9GTEFHUyksXG4xMDQ5Olx0XHRbVENBX1RBUFJJT19BVFRSX1RYVElNRV9ERUxBWV1cdFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xMDUwOlx0XHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVx0XHQgICAgID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbjEwNTE6XHR9O1xuMTA1MjpcdFxuMTA1MzpcdHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4xMDU0Olx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4xMDU1Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEwNTY6XHR7XG4xMDU3Olx0XHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbjEwNTg6XHRcdHUzMiBpbnRlcnZhbCA9IDA7XG4xMDU5Olx0XG4xMDYwOlx0XHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKVxuMTA2MTpcdFx0XHRlbnRyeS1cdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcbjEwNjI6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pO1xuMTA2MzpcdFxuMTA2NDpcdFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfR0FURV9NQVNLXSlcbjEwNjU6XHRcdFx0ZW50cnktXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXG4xMDY2Olx0XHRcdFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9HQVRFX01BU0tdKTtcbjEwNjc6XHRcbjEwNjg6XHRcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSlcbjEwNjk6XHRcdFx0aW50ZXJ2YWwgPSBubGFfZ2V0X3UzMihcbjEwNzA6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSk7XG4xMDcxOlx0XG4xMDcyOlx0XHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XG4xMDczOlx0XHQgKiBmcmFtZSB0byBnbyBvdXQuXG4xMDc0Olx0XHQgKi9cbjEwNzU6XHRcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4xMDc2Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcJiMzNDspO1xuMTA3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwNzg6XHRcdH1cbjEwNzk6XHRcbjEwODA6XHRcdGVudHJ5LVx1MDAzZWludGVydmFsID0gaW50ZXJ2YWw7XG4xMDgxOlx0XG4xMDgyOlx0XHRyZXR1cm4gMDtcbjEwODM6XHR9XG4xMDg0Olx0XG4xMDg1Olx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpuLFxuMTA4NjpcdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxuMTA4NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTA4ODpcdHtcbjEwODk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfTUFYICYjNDM7IDFdID0geyB9O1xuMTA5MDpcdFx0aW50IGVycjtcbjEwOTE6XHRcbjEwOTI6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9NQVgsIG4sXG4xMDkzOlx0XHRcdFx0XHRcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcbjEwOTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwOTU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XCYjMzQ7KTtcbjEwOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlbnRyeS1cdTAwM2VpbmRleCA9IGluZGV4O1xuMTEwMDpcdFxuMTEwMTpcdFx0cmV0dXJuIGZpbGxfc2NoZWRfZW50cnkocSwgdGIsIGVudHJ5LCBleHRhY2spO1xuMTEwMjpcdH1cbjExMDM6XHRcbjExMDQ6XHRzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbjExMDU6XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG4xMTA2Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjExMDc6XHR7XG4xMTA4Olx0XHRzdHJ1Y3QgbmxhdHRyICpuO1xuMTEwOTpcdFx0aW50IGVyciwgcmVtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYmVlbiB0d2Vha2VkIHJlY2VudGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNlZW4gZGlyZWN0IG1vZGlmaWNhdGlvbi4gSSBzZWUgYHRhcHJpb19taW5faW50ZXJ2YWxgLCBhIG5ldyBzdGF0aWMgaGVscGVyLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBBbHNvLCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGFyZSBvbiB0aGUgbGlzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdC4gV2hlcmUgaXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYmVpbmcgaW52b2tlZD8gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBzY2hfdGFwcmlvLmNgIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyB0aGUgb3ZlcmFsbCBzY2hlZHVsaW5nIGxvZ2ljIGFuZCB3aGV0aGVyIEkgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExMDQ9c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTQzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTQ0OnN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0NS1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODM4PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkzMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkzMzpcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTM0LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcHJpbyBTY2hlZHVsZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgYHRhcHJpb19jaGFuZ2VgIGZ1bmN0aW9uIGNhbGxzIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBOb3csIGB0YXByaW9fY2hhbmdlYCBpcyB0aGUgY3J1Y2lhbCBjYWxsYmFjayBmb3IgY2hhbmdlcyBpbiB0aGUgYHRhcHJpb19xZGlzY19vcHNgIHN0cnVjdHVyZS4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgY29kZSwgcGFydGljdWxhcmx5IGBzY2hfdGFwcmlvYCwgYmUgcmVhY2hlZCBpbiB0aGUgZGl2ZXJzZSBlbnZpcm9ubWVudHMgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoLCBsaWtlIHZpcnR1YWwgbWFjaGluZXMgb3Igc3RhbmRhcmQgbmV0bGluayBjb25maWd1cmF0aW9ucz8gVGhlIGFuc3dlciBpcyBhIHNvbGlkIHllcy4gTmV0bGluaywgdmlhIGB0YyBxZGlzYyBhZGQgZGV2IGxvIC4uLiB0YXByaW8gLi4uYCBvciBldmVuIGFueSBuZXRkZXZpY2UgdXNpbmcgcnRuZXRsaW5rIChgUlRNX05FV1FESVNDYCAvIGBSVE1fQ0hBTkdFUURJU0NgKSwgcHJvdmlkZXMgdGhlIHBhdGguIFdlIGFsc28ga25vdyBTeXprYWxsZXIgZnJlcXVlbnRseSB0YXJnZXRzIFRDIHFkaXNjcyBpbmNsdWRpbmcgdGFwcmlvLiBHb29kLCB3ZSBoYXZlIHJlYWNoYWJpbGl0eS4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSAqbW9kaWZpZWQqIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBleGVjdXRhYmxlLiBJbmRlZWQsIG5ldGxpbmsgY29tbWFuZHMgdGhhdCBjb25maWd1cmUgdGhlIHRhcHJpbyBzY2hlZHVsZXIgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgdGhlIHNlcXVlbmNlOiBgdGFwcmlvX2NoYW5nZWAgLSZndDsgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgLSZndDsgYGZpbGxfc2NoZWRfZW50cnlgIC0mZ3Q7IGB0YXByaW9fbWluX2ludGVydmFsYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5mb3JjZXMgdGhlIG1pbmltdW0gc2NoZWR1bGUgaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCA9IDEwIHVzID0gMTAwMDAgbnMpIHdoZW4gZnVsbCBvZmZsb2FkIGFuZCB0eHRpbWUgYXNzaXN0IGFyZSAqbm90KiBlbmFibGVkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUsIG9mIGNvdXJzZSwgaXMgdG8gcHJldmVudCB0aGUgZHJlYWRlZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIHN1YnNlcXVlbnQgQ1BVIHN0YXJ2YXRpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGFwcHJvcHJpYXRlIEZvY3VzU3ltYm9scyBmb3IgYW5hbHlzaXMuIFRoZSBtb3N0IHJlbGV2YW50IG9uZXMgd291bGQgYmU6Ci0gYHRhcHJpb19taW5faW50ZXJ2YWxgCi0gYGZpbGxfc2NoZWRfZW50cnlgCi0gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAKLSBgdGFwcmlvX2NoYW5nZWAKCk5vdyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHRhcHJpb19pbml0YCBvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiBgc2NoX3RhcHJpby5jYCBhbHNvIGNhbGwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgb3IgYHRhcHJpb19jaGFuZ2VgIHRvIGVuc3VyZSB0aGUgY292ZXJhZ2UgaXMgY29tcHJlaGVuc2l2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODE0PXN0YXRpYyBpbnQgdGFwcmlvX21xcHJpb19jbXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzctXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4Mzg6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzktXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwODc9c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMC1cdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEwMTpcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMDItXHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDk6XHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE1MC19XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTYyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NjYtXHQuaW5pdFx0XHQ9IHRhcHJpb19pbml0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTY3Olx0LmNoYW5nZVx0XHQ9IHRhcHJpb19jaGFuZ2UsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NjgtXHQuZGVzdHJveVx0PSB0YXByaW9fZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIxOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBGaXJzdCB1cCwgSSBzaG91bGQgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX1NDSF9UQVBSSU9gIGlzIHByb3Blcmx5IHNldC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBhIHJlbGF0ZWQgcXVlc3Rpb24gaXMgd2hldGhlciBgQ09ORklHX05FVF9TQ0hFRGAgaXMgYSBwcmVyZXF1aXNpdGUuIFRvIGZpZ3VyZSB0aGF0IG91dCwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgaXMgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3NwoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBBc3Nlc3NtZW50IG9mIHRoZSBUQVBSSU8gTmV0d29yayBTY2hlZHVsZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgTkVUX1NDSF9UQVBSSU9gIGFuZCBgTkVUX1NDSEVEYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBHb29kLCBhbmQgc2luY2UgYE5FVF9TQ0hfVEFQUklPYCBwdWxscyBpbiBgTkVUX1NDSF9NUVBSSU9fTElCYCwgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCB0b28uIE5vdywgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPwoKWWVzLCBpdCBpcyEgVGhpcyBjb2RlIG1vZGlmaWVzIHBhcmFtZXRlciB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgVEFQUklPIHF1ZXVpbmcgZGlzY2lwbGluZS4gVGhhdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2AgYW5kIGBSVE1fQ0hBTkdFUURJU0NgLiBUaGF0JiMzOTtzIGEgZ3JlYXQgdmVjdG9yIGZvciBmdXp6aW5nLgoKTmV4dCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCBhIHN0cm9uZyBsaXN0IGhlcmU6IGB0YXByaW9fbWluX2ludGVydmFsYCwgYGZpbGxfc2NoZWRfZW50cnlgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIGB0YXByaW9fY2hhbmdlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKTXkgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgYE5FVF9TQ0hfVEFQUklPYCBhbmQgYE5FVF9TQ0hFRGAuCgpBIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0gbXkgYXNzZXNzbWVudC4gRXZlcnl0aGluZyBsb29rcyBnb29kOiB0aGUgZnV6emluZyB0YXJnZXQgaXMgdmFsaWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBub24tdWJpcXVpdG91cywgZGlyZWN0bHkgYWx0ZXJlZCwgb3IgY2FsbGVyczogYHRhcHJpb19taW5faW50ZXJ2YWxgLCBgZmlsbF9zY2hlZF9lbnRyeWAsIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBhbmQgYHRhcHJpb19jaGFuZ2VgLiBUaGUgZW5hYmxlIGNvbmZpZ3MgY2hlY2sgb3V0LCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBjb3JyZWN0LiBOb3csIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCYjMzk7cyBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fbWluX2ludGVydmFsJiMzNDssCiAgICAmIzM0O2ZpbGxfc2NoZWRfZW50cnkmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fbWluX2ludGVydmFsJiMzNDssCiAgICAmIzM0O2ZpbGxfc2NoZWRfZW50cnkmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIDEwdXMpIGZvciB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbikgdG8gcHJldmVudCBDUFUgc3RhcnZhdGlvbiBhbmQgdGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gSXQgaW50cm9kdWNlcyB0aGUgaGVscGVyIGB0YXByaW9fbWluX2ludGVydmFsKClgIGFuZCBhZGp1c3RzIHRoZSBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAuXG5cblRoZXNlIGNoYW5nZXMgb25seSB0aWdodGVuIGlucHV0IHZhbGlkYXRpb24gb24gc2NoZWR1bGUgaW50ZXJ2YWxzIGFuZCBjeWNsZSB0aW1lcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJ1ZmZlciBpbmRleC9sZW5ndGggYWx0ZXJhdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMjRiZTRlNTY3ZmYxNGRkN2VlNjU2MTBlMDJhYmIxZmY0ZTU2NjkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDM5YWM1Yjk3YWEzYWYuLjM4OTBjZGJmY2I0ZjEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtNDgsNiAmIzQzOzQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbzsKICAqIDYwICogMTcgJmd0OyBQU0VDX1BFUl9OU0VDICgxMDAwKQogICovCiAjZGVmaW5lIFRBUFJJT19QSUNPU19QRVJfQllURV9NSU4gMTcKJiM0MzsvKiBNaW5pbXVtIGludGVydmFsIGZvciBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbiBhZHZhbmNlX3NjaGVkKSB0bwomIzQzOyAqIGF2b2lkIGhydGltZXIgaW50ZXJydXB0IHN0b3JtcyBhbmQgQ1BVIHN0YXJ2YXRpb24uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TICgxMCAqIE5TRUNfUEVSX1VTRUMpCiAKIHN0cnVjdCBzY2hlZF9lbnRyeSB7CiAJLyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlCkBAIC0yNTksNiAmIzQzOzI2MywxNyBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKQogCXJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpOwogfQogCiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpCiYjNDM7ewomIzQzOwlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsKJiM0MzsJaWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLSZndDtmbGFncykgJmFtcDsmYW1wOwomIzQzOwkgICAgIVRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRChxLSZndDtmbGFncykpCiYjNDM7CQltaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fZHVyYXRpb247CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKQogewogCXJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZCgmYW1wO3EtJmd0O3BpY29zX3Blcl9ieXRlKSk7CkBAIC0xMDM5LDcgJiM0MzsxMDU0LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCSAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJdTMyIGludGVydmFsID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pCkBAIC0xMTMwLDYgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQkJCSBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsCiAJCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHsKQEAgLTExNjcsNyAmIzQzOzExODMsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJCW5ldy0mZ3Q7Y3ljbGVfdGltZSA9IGN5Y2xlOwogCX0KIAotCWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyBuZXctJmd0O251bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkgewomIzQzOwlpZiAobmV3LSZndDtjeWNsZV90aW1lICZsdDsgKHM2NCluZXctJmd0O251bV9lbnRyaWVzICogbWluX2R1cmF0aW9uKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGwmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZnV6emluZy4gRmlyc3QsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IGAjZGVmaW5lYCBmb3IgdGhlIG1pbmltdW0gc29mdHdhcmUgaW50ZXJ2YWw6IGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCB3aGljaCBpcyBzZXQgdG8gMTAgbWljcm9zZWNvbmRzLiBUaGV5JiMzOTt2ZSBhbHNvIGRlZmluZWQgYSBoZWxwZXIgZnVuY3Rpb24sIGB0YXByaW9fbWluX2ludGVydmFsYCwgdGhhdCBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIGR1cmF0aW9uIGZvciB0YXByaW8gc2NoZWR1bGUgaW50ZXJ2YWxzLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgbm90ZSBhYm91dCBzb2Z0d2FyZSBtb2RlIGFuZCBocnRpbWVycy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBocnRpbWVyIHN0b3JtcyBvciBDUFUgc3RhcnZhdGlvbiBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIDEwdXMgaW50ZXJ2YWwuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgdGhleeKAmXZlIG1vZGlmaWVkIHR3byBrZXkgZnVuY3Rpb25zOiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4gSW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBsZW5ndGhfdG9fZHVyYXRpb25gIHdpdGggYHRhcHJpb19taW5faW50ZXJ2YWxgLiAgVGhpcyBzdWdnZXN0cyB0aGUgbWluaW11bSBkdXJhdGlvbiBjYWxjdWxhdGlvbiBpcyBub3cgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZC4gIFRoZW4sIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAsIHRoZXnigJl2ZSBzd2FwcGVkIG91dCBhIGhhcmRjb2RlZCBtaW5pbXVtIHdpdGggYSBjYWxsIHRvIHRoZSBuZXcgYG1pbl9kdXJhdGlvbmAgdmFyaWFibGUuIFRoaXMgZnVydGhlciByZWluZm9yY2VzIHRoZSBkeW5hbWljIG1pbmltdW0gZHVyYXRpb24uCgpUaGUgY2hhbmdlIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgbG9va3MgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgYXMgaXQgbm93IGNvbXBhcmVzIGBjeWNsZV90aW1lYCB3aXRoIHRoZSBjYWxjdWxhdGVkIGBtaW5fZHVyYXRpb25gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cyBpbiB0aGVzZSBuZXcgY2FsY3VsYXRpb25zLCBlc3BlY2lhbGx5IHdpdGggdGhlIGAoczY0KWAgY2FzdD8gV2UgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZC4KCk5vdywgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NoZWR1bGVyIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgY2FsY3VsYXRlZCBkdXJhdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEkmIzM5O2xsIHRoZW4gZGVjaWRlIGlmIHdlIHNob3VsZCBydW4gdGhlIEtNU0FOIGZ1enplciB0byBsb29rIGZvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9zY2hlZF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0YXByaW9fcG9saWN5W1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDUyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDUzOnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwNTQtXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg1PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMDAtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMDE6XHRyZXR1cm4gZmlsbF9zY2hlZF9lbnRyeShxLCB0YiwgZW50cnksIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMDItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmb3IgU2NoZWR1bGluZyBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFRoZSBjb3JlIGZvY3VzIGhlcmUgaXMgdW5kb3VidGVkbHkgc2NoZWR1bGluZyBhbmQgaG93IHdlJiMzOTtyZSB0cmFuc2xhdGluZyBhIFRBUFJJTyBzY2hlZHVsZSBpbnRvIHNvbWV0aGluZyB1c2FibGUgd2l0aGluIHRoZSBzeXN0ZW0uIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaG93IGBmaWxsX3NjaGVkX2VudHJ5YCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgc2NoZWR1bGVyJiMzOTtzIGRhdGEgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBhcmUgd2UgYnVpbGRpbmcgYSBzdHJhaWdodGZvcndhcmQgbGlzdCBvZiB0aW1lLWJvdW5kIGV2ZW50cywgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBkYXRhIGRlcGVuZGVuY2llcyBiZWluZyBlbmNvZGVkPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgVEFQUklPIHNjaGVkdWxlcyBjYW4gaW52b2x2ZSBzb3BoaXN0aWNhdGVkIHByaW9yaXRpZXMsIHByZWVtcHRpb24gcnVsZXMsIGFuZCBwb3NzaWJseSBldmVuIHJlc291cmNlIGFsbG9jYXRpb24uIFNvLCBJJiMzOTttIHRyeWluZyB0byBzZWUgaWYgdGhhdCBjb21wbGV4aXR5IGlzIHJlZmxlY3RlZCwgYW5kIGlmIHNvLCBob3cgaXQmIzM5O3MgaGFuZGxlZC4gSXMgaXQgdGhyb3VnaCBuZXN0ZWQgc3RydWN0dXJlcywgYml0bWFwcywgb3Igc29tZXRoaW5nIG1vcmUgZWxlZ2FudD8gSSBhbnRpY2lwYXRlIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbnRlcnByZXRpbmcgdGhlIFRBUFJJTyBzY2hlZHVsZSBpdHNlbGYuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSBwYXJzaW5nIHRoZSBUQVBSSU8gZm9ybWF0LCB2YWxpZGF0aW9uLCBhbmQgc29tZSBkZWdyZWUgb2Ygc2VtYW50aWMgYW5hbHlzaXMuIFdlIHNob3VsZCBoYXZlIGVycm9yIGhhbmRsaW5nIGhlcmUsIGdpdmVuIHRoYXQgVEFQUklPIHNjaGVkdWxlcyBjYW4gYmUgcXVpdGUgaW50cmljYXRlIGFuZCBwb3RlbnRpYWxseSBlcnJvbmVvdXMgaW4gaW5wdXQuIElzIHRoaXMgcGFyc2VyIHJvYnVzdD8gRG9lcyBpdCBjaGVjayBmb3IgY29uZmxpY3RpbmcgZGVhZGxpbmVzLCByZXNvdXJjZSBvdmVyLWFsbG9jYXRpb24sIGFuZCBvdGhlciBwb3RlbnRpYWwgcGl0ZmFsbHM/IEFsc28sIGhvdyBkb2VzIGl0IGhhbmRsZSBjb3JuZXIgY2FzZXMgbGlrZSBlbXB0eSBzY2hlZHVsZXMgb3IgaW52YWxpZGx5IGZvcm1hdHRlZCBlbnRyaWVzPyBBIGNyaXRpY2FsIHBvaW50IHRvIGV4YW1pbmUgaXMgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIERvZXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgY29uc3RydWN0IGEgdGVtcG9yYXJ5IHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlbiBgZmlsbF9zY2hlZF9lbnRyeWAgdHJhbnNsYXRlcyB0aGlzIHRvIGEgZm9ybWF0IHRoZSBzY2hlZHVsZXIgdW5kZXJzdGFuZHMsIG9yIGlzIGl0IGEgbW9yZSBpbnRlZ3JhdGVkIHByb2Nlc3M/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGVuZC10by1lbmQgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjaGVkdWxlciYjMzk7cyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgaG93IGEgVEFQUklPIHNjaGVkdWxlIGdldHMgY29udmVydGVkIGludG8gaXQsIGFuZCB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlc3VsdGluZyBlbnRyeS4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6IElzIHRoaXMgc2NoZWR1bGluZyBhbGdvcml0aG0gZWZmaWNpZW50PyBIb3cgZG9lcyB0aGUgc2NoZWR1bGVyIGhhbmRsZSB1cGRhdGVzIHRvIHRoZSBUQVBSSU8gc2NoZWR1bGU/IEFyZSB3ZSBnb2luZyB0byBzZWUgcG90ZW50aWFsIGZvciByZWFsLXRpbWUgaXNzdWVzLCBpZiB0aGUgc2NoZWR1bGVzIGNoYW5nZSBkeW5hbWljYWxseT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDQwOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQxOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0gICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzY0IH0sXG4xMDQyOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0gICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQzOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NMT0NLSURdICAgICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4xMDQ0Olx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdICAgICAgICAgICA9XG4xMDQ1Olx0XHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRV9TSUdORUQoTkxBX1M2NCwgXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxuMTA0NjpcdFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxuMTA0NzpcdFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxuMTA0ODpcdFx0XHROTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgVEFQUklPX1NVUFBPUlRFRF9GTEFHUyksXG4xMDQ5Olx0XHRbVENBX1RBUFJJT19BVFRSX1RYVElNRV9ERUxBWV1cdFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xMDUwOlx0XHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVx0XHQgICAgID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbjEwNTE6XHR9O1xuMTA1MjpcdFxuMTA1MzpcdHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4xMDU0Olx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4xMDU1Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEwNTY6XHR7XG4xMDU3Olx0XHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbjEwNTg6XHRcdHUzMiBpbnRlcnZhbCA9IDA7XG4xMDU5Olx0XG4xMDYwOlx0XHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKVxuMTA2MTpcdFx0XHRlbnRyeS1cdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcbjEwNjI6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pO1xuMTA2MzpcdFxuMTA2NDpcdFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfR0FURV9NQVNLXSlcbjEwNjU6XHRcdFx0ZW50cnktXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXG4xMDY2Olx0XHRcdFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9HQVRFX01BU0tdKTtcbjEwNjc6XHRcbjEwNjg6XHRcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSlcbjEwNjk6XHRcdFx0aW50ZXJ2YWwgPSBubGFfZ2V0X3UzMihcbjEwNzA6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSk7XG4xMDcxOlx0XG4xMDcyOlx0XHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XG4xMDczOlx0XHQgKiBmcmFtZSB0byBnbyBvdXQuXG4xMDc0Olx0XHQgKi9cbjEwNzU6XHRcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4xMDc2Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcJiMzNDspO1xuMTA3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwNzg6XHRcdH1cbjEwNzk6XHRcbjEwODA6XHRcdGVudHJ5LVx1MDAzZWludGVydmFsID0gaW50ZXJ2YWw7XG4xMDgxOlx0XG4xMDgyOlx0XHRyZXR1cm4gMDtcbjEwODM6XHR9XG4xMDg0Olx0XG4xMDg1Olx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpuLFxuMTA4NjpcdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxuMTA4NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTA4ODpcdHtcbjEwODk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfTUFYICYjNDM7IDFdID0geyB9O1xuMTA5MDpcdFx0aW50IGVycjtcbjEwOTE6XHRcbjEwOTI6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9NQVgsIG4sXG4xMDkzOlx0XHRcdFx0XHRcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcbjEwOTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwOTU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XCYjMzQ7KTtcbjEwOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlbnRyeS1cdTAwM2VpbmRleCA9IGluZGV4O1xuMTEwMDpcdFxuMTEwMTpcdFx0cmV0dXJuIGZpbGxfc2NoZWRfZW50cnkocSwgdGIsIGVudHJ5LCBleHRhY2spO1xuMTEwMjpcdH1cbjExMDM6XHRcbjExMDQ6XHRzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbjExMDU6XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG4xMTA2Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjExMDc6XHR7XG4xMTA4Olx0XHRzdHJ1Y3QgbmxhdHRyICpuO1xuMTEwOTpcdFx0aW50IGVyciwgcmVtO1xuMTExMDpcdFx0aW50IGkgPSAwO1xuMTExMTpcdFxuMTExMjpcdFx0aWYgKCFsaXN0KVxuMTExMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMTQ6XHRcbjExMTU6XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQobiwgbGlzdCwgcmVtKSB7XG4xMTE2Olx0XHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4xMTE3Olx0XG4xMTE4Olx0XHRcdGlmIChubGFfdHlwZShuKSAhPSBUQ0FfVEFQUklPX1NDSEVEX0VOVFJZKSB7XG4xMTE5Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBdHRyaWJ1dGUgaXMgbm90IG9mIHR5cGUgJiMzOTtlbnRyeSYjMzk7XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc2NoZWR1bGUgcGFyc2luZy4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgY29yZSBsb2dpYywgYnV0IGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBoYXZlIGEgcXVpY2sgZ2xhbmNlIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gVGhlIHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGVuc3VyaW5nIHRoZSBvdXRwdXQgZm9ybWF0IGlzIGNvcnJlY3QgYW5kIHRoYXQgaXQgd2lsbCBpbnRlZ3JhdGUgcHJvcGVybHkgd2l0aCB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbi4KCkkgd2FudCB0byBzZWUgaWYgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyBhbGlnbiB3aXRoIHRoZSBhc3N1bXB0aW9ucyBJJiMzOTttIG1ha2luZyBpbiB0aGUgcGFydCBJJiMzOTttIHdvcmtpbmcgb24uIFNwZWNpZmljYWxseSwgYXJlIHRoZXJlIGFueSBlZGdlIGNhc2VzIGhhbmRsZWQgdGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IERvZXMgaXQgcGVyZm9ybSBhbnkga2luZCBvZiBpbnB1dCB2YWxpZGF0aW9uIG9yIHByZS1wcm9jZXNzaW5nIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBkYXRhIEkmIzM5O20gdXNpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHByZXZlbnRpbmcgYnVncyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBkb2NzdHJpbmdzIGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgbG9naWMgZm9yIGFueSByZWQgZmxhZ3Mgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmZsaWN0LiBIb3BlZnVsbHksIGV2ZXJ5dGhpbmcmIzM5O3MgY2xlYW4sIGFuZCBJIGNhbiBqdXN0IG1vdmUgZm9yd2FyZC4gQnV0IGl0JiMzOTtzIGFsd2F5cyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzY2hlZHVsZXMgYW5kIHRoZWlyIGNvbXBsZXhpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTQwOlx0XG4xMTQxOlx0XHRyZXR1cm4gaTtcbjExNDI6XHR9XG4xMTQzOlx0XG4xMTQ0Olx0c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuMTE0NTpcdFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbjExNDY6XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xMTQ3Olx0e1xuMTE0ODpcdFx0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4xMTQ5Olx0XHRpbnQgZXJyID0gMDtcbjExNTA6XHRcbjExNTE6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuMTE1MjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0FkZGluZyBhIHNpbmdsZSBlbnRyeSBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjExNTM6XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbjExNTQ6XHRcdH1cbjExNTU6XHRcbjExNTY6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcbjExNTc6XHRcdFx0bmV3LVx1MDAzZWJhc2VfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdKTtcbjExNTg6XHRcbjExNTk6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKVxuMTE2MDpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcbjExNjE6XHRcbjExNjI6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV0pXG4xMTYzOlx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKTtcbjExNjQ6XHRcbjExNjU6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXG4xMTY2Olx0XHRcdGVyciA9IHBhcnNlX3NjaGVkX2xpc3QocSwgdGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdLFxuMTE2NzpcdFx0XHRcdFx0ICAgICAgIG5ldywgZXh0YWNrKTtcbjExNjg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMTY5Olx0XHRcdHJldHVybiBlcnI7XG4xMTcwOlx0XG4xMTcxOlx0XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4xMTcyOlx0XHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4xMTczOlx0XHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuMTE3NDpcdFxuMTE3NTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbjExNzY6XHRcdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuMTE3NzpcdFxuMTE3ODpcdFx0XHRpZiAoY3ljbGUgXHUwMDNjIDAgfHwgY3ljbGUgXHUwMDNlIElOVF9NQVgpIHtcbjExNzk6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWdcJiMzNDspO1xuMTE4MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTE4MTpcdFx0XHR9XG4xMTgyOlx0XG4xMTgzOlx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4xMTg0Olx0XHR9XG4xMTg1Olx0XG4xMTg2Olx0XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIChzNjQpbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbWluX2R1cmF0aW9uKSB7XG4xMTg3Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIHNtYWxsXCYjMzQ7KTtcbjExODg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTg5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTIKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQVBSSU8gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNjaGVkdWxpbmcgYW5kIHRpbWluZy4gU28sIEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlIG1ldGljdWxvdXNseS4KCkZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIHNldHRpbmcgaXQgdG8gMTAgbWljcm9zZWNvbmRzLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbWluaW11bS4gVGhlbiwgaXQgaW1wbGVtZW50cyBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYC4gRXNzZW50aWFsbHksIHRoaXMgZnVuY3Rpb24gKmVuZm9yY2VzKiBhIDEwdXMgbWluaW11bSBgbWluX2R1cmF0aW9uYCB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlLCBtZWFuaW5nIG5laXRoZXIgZnVsbCBvZmZsb2FkIG5vciBUWFRJTUVfQVNTSVNUIGFyZSBlbmFibGVkLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBzYWZldHkgbmV0IOKAkyBwcmV2ZW50aW5nIHVzZXJzIGZyb20gc3BlY2lmeWluZyByaWRpY3Vsb3VzbHkgc2hvcnQgaW50ZXJ2YWxzLCB3aGljaCBjb3VsZCB3cmVhayBoYXZvYyB3aXRoIGhydGltZXJzIGFuZCBwb3NzaWJseSBsb2NrIHRoaW5ncyB1cCBvciBzdGFydmUgdGhlIENQVS4gR29vZC4KCk5leHQsIEkgc2VlIHRoYXQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCBub3cgY2FzdHMgYG5ldy0mZ3Q7bnVtX2VudHJpZXNgIHRvIGBzNjRgLiBUaGlzIGlzIHNtYXJ0OyBpdCYjMzk7cyBhIHByZWVtcHRpdmUgc3RyaWtlIGFnYWluc3QgcG90ZW50aWFsIG92ZXJmbG93IGlzc3VlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0b3RhbCBzY2hlZHVsZSBkdXJhdGlvbjogYChzNjQpbmV3LSZndDtudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbmAuIFByZXZlbnRpbmcgb3ZlcmZsb3cgaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiB0aW1lLWNyaXRpY2FsIHN5c3RlbXMuCgpGaW5hbGx5LCBgZmlsbF9zY2hlZF9lbnRyeSgpYCBlbnN1cmVzIHRoZSBgaW50ZXJ2YWxgIGlzICphbHdheXMqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbWluX2R1cmF0aW9uYC4gQW5vdGhlciBsYXllciBvZiBwcm90ZWN0aW9uLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbnM6IERvZXMgdGhpcyBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBtaWdodCBsZWF2ZSBmaWVsZHMgdW5pbml0aWFsaXplZD8gTm8sIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBpdC4gTm8gY2hhbmdlcyB0byB0aGUgc3RydWN0cy4gSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZSwgdGhlIGNvZGUgcmVsaWVzIG9uIGluaXRpYWxpemVkIGZsYWdzIGFuZCBjb25zdGFudHMuIEFueXRoaW5nIG5ldyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgdGhhdCBtaWdodCBpbnRyb2R1Y2Ugcmlza3M/IE5vIG5ldyBhbGxvY2F0aW9uczsgdGhpcyBpcyBhYm91dCBjb25zdHJhaW5pbmcgKmV4aXN0aW5nKiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMuIERvZXMgaXQgaW50cm9kdWNlIGFueSBib3VuZHMgY2hlY2sgZmxhd3MgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBleGlzdGluZyBidWZmZXJzPyBObywgaXQmIzM5O3MgYSAqdGlnaHRlbmluZyogb2YgdGhlIGNoZWNrLCBlbnN1cmluZyBwYXJhbWV0ZXJzIG1lZXQgYSAqbWluaW11bSogdGhyZXNob2xkLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIGV4YW1pbmF0aW9uLCBJIHNlZSBubyBpbW1lZGlhdGUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgY2F0Y2ggYW55dGhpbmcgZWxzZSBtZW1vcnkgc2FmZXR5IHJlbGF0ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGlzc3VlIGlzIHByZXNlbnQgaGVyZS4KCkkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBgZmFsc2VgLCBhbmQgSSB3aWxsIHByb3ZpZGUgdGhpcyBkZXRhaWxlZCByZWFzb25pbmcgYXMgdGhlIGp1c3RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCAxMHVzKSBmb3IgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgd2hlbiBvcGVyYXRpbmcgaW4gc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4pIHRvIHByZXZlbnQgQ1BVIHN0YXJ2YXRpb24gYW5kIHRpbWVyIGludGVycnVwdCBzdG9ybXMuIEl0IGludHJvZHVjZXMgdGhlIGhlbHBlciBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCBhbmQgYWRqdXN0cyB0aGUgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGluIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIDEwdXMpIGZvciB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbikgdG8gcHJldmVudCBDUFUgc3RhcnZhdGlvbiBhbmQgdGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gSXQgaW50cm9kdWNlcyB0aGUgaGVscGVyIGB0YXByaW9fbWluX2ludGVydmFsKClgIGFuZCBhZGp1c3RzIHRoZSBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAuXG5cblRoZXNlIGNoYW5nZXMgb25seSB0aWdodGVuIGlucHV0IHZhbGlkYXRpb24gb24gc2NoZWR1bGUgaW50ZXJ2YWxzIGFuZCBjeWNsZSB0aW1lcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJ1ZmZlciBpbmRleC9sZW5ndGggYWx0ZXJhdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjQ3LjE5MTM0OTkxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODU0NzM3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCIsXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXByaW9fbWluX2ludGVydmFsXCIsXG4gICAgXCJmaWxsX3NjaGVkX2VudHJ5XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIixcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCAxMHVzKSBmb3IgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgd2hlbiBvcGVyYXRpbmcgaW4gc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4pIHRvIHByZXZlbnQgQ1BVIHN0YXJ2YXRpb24gYW5kIHRpbWVyIGludGVycnVwdCBzdG9ybXMuIEl0IGludHJvZHVjZXMgdGhlIGhlbHBlciBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCBhbmQgYWRqdXN0cyB0aGUgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGluIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSB0aWdodGVuIGlucHV0IHZhbGlkYXRpb24gb24gc2NoZWR1bGUgaW50ZXJ2YWxzIGFuZCBjeWNsZSB0aW1lcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJ1ZmZlciBpbmRleC9sZW5ndGggYWx0ZXJhdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0Mzo0Ny4xOTEzNTYyODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTUwNjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyNGJlNGU1NjdmZjE0ZGQ3ZWU2NTYxMGUwMmFiYjFmZjRlNTY2OTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjM4OTBjZGJmY2I0ZjEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5AQCAtNDgsNiArNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xcbiAgKiA2MCAqIDE3IFxcdTAwM2UgUFNFQ19QRVJfTlNFQyAoMTAwMClcXG4gICovXFxuICNkZWZpbmUgVEFQUklPX1BJQ09TX1BFUl9CWVRFX01JTiAxN1xcbisvKiBNaW5pbXVtIGludGVydmFsIGZvciBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbiBhZHZhbmNlX3NjaGVkKSB0b1xcbisgKiBhdm9pZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIENQVSBzdGFydmF0aW9uLlxcbisgKi9cXG4rI2RlZmluZSBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TICgxMCAqIE5TRUNfUEVSX1VTRUMpXFxuIFxcbiBzdHJ1Y3Qgc2NoZWRfZW50cnkge1xcbiBcXHQvKiBEdXJhdGlvbnMgYmV0d2VlbiB0aGlzIEdDTCBlbnRyeSBhbmQgdGhlIEdDTCBlbnRyeSB3aGVyZSB0aGVcXG5AQCAtMjU5LDYgKzI2MywxNyBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxcbiBcXHRyZXR1cm4gZGl2X3U2NChsZW4gKiBhdG9taWM2NF9yZWFkKFxcdTAwMjZxLVxcdTAwM2VwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHRhcHJpb19taW5faW50ZXJ2YWwoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG4re1xcbitcXHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcXG4rXFxuK1xcdGlmICghRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhVFhUSU1FX0FTU0lTVF9JU19FTkFCTEVEKHEtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0bWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpO1xcbitcXG4rXFx0cmV0dXJuIG1pbl9kdXJhdGlvbjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxcbiB7XFxuIFxcdHJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZChcXHUwMDI2cS1cXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcXG5AQCAtMTAzOSw3ICsxMDU0LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0aW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7XFxuK1xcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbiBcXHR1MzIgaW50ZXJ2YWwgPSAwO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcXG5AQCAtMTEzMCw2ICsxMTQ1LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbkBAIC0xMTY3LDcgKzExODMsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobmV3LVxcdTAwM2VjeWNsZV90aW1lIFxcdTAwM2MgbmV3LVxcdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcXG4rXFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIChzNjQpbmV3LVxcdTAwM2VudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjQ3LjU5MzU1ODU4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM0OTAxNzM0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9UQVBSSU9cIixcbiAgICBcIk5FVF9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19taW5faW50ZXJ2YWxcIixcbiAgICBcImZpbGxfc2NoZWRfZW50cnlcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICAgIFwidGFwcmlvX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGZvciBzb2Z0d2FyZS1kcml2ZW4gKGhydGltZXItYmFzZWQpIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHRvIHByZXZlbnQgaHJ0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRkZXYgY29uZmlndXJhdGlvbiBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMjRiZTRlNTY3ZmYxNGRkN2VlNjU2MTBlMDJhYmIxZmY0ZTU2NjkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5pbmRleCAzOWFjNWI5N2FhM2FmLi4zODkwY2RiZmNiNGYxIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuKysrIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuQEAgLTQ4LDYgKzQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbztcbiAgKiA2MCAqIDE3IFx1MDAzZSBQU0VDX1BFUl9OU0VDICgxMDAwKVxuICAqL1xuICNkZWZpbmUgVEFQUklPX1BJQ09TX1BFUl9CWVRFX01JTiAxN1xuKy8qIE1pbmltdW0gaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuIGFkdmFuY2Vfc2NoZWQpIHRvXG4rICogYXZvaWQgaHJ0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zIGFuZCBDUFUgc3RhcnZhdGlvbi5cbisgKi9cbisjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwICogTlNFQ19QRVJfVVNFQylcbiBcbiBzdHJ1Y3Qgc2NoZWRfZW50cnkge1xuIFx0LyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlXG5AQCAtMjU5LDYgKzI2MywxNyBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxuIFx0cmV0dXJuIGRpdl91NjQobGVuICogYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxuK3tcbitcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1xuK1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhVFhUSU1FX0FTU0lTVF9JU19FTkFCTEVEKHEtXHUwMDNlZmxhZ3MpKVxuK1x0XHRtaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7XG4rXG4rXHRyZXR1cm4gbWluX2R1cmF0aW9uO1xuK31cbitcbiBzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG4ge1xuIFx0cmV0dXJuIGRpdl91NjQoZHVyYXRpb24gKiBQU0VDX1BFUl9OU0VDLCBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcbkBAIC0xMDM5LDcgKzEwNTQsNyBAQCBzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0aW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7XG4rXHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbiBcdHUzMiBpbnRlcnZhbCA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKVxuQEAgLTExMzAsNiArMTE0NSw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbkBAIC0xMTY3LDcgKzExODMsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4gXHR9XG4gXG4tXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbitcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiBtaW5fZHVyYXRpb24pIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIidjeWNsZV90aW1lJyBpcyB0b28gc21hbGxcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NDcuNTkzNTYwOTI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3OTI3NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgYSBtZW50YWwgY2hlY2tsaXN0LiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqd29ydGgqIHNwZW5kaW5nIGZ1enppbmcgY3ljbGVzIG9uPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvZGUgY2hhbmdlcyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyAtIG1lbW9yeSBjb3JydXB0aW9uLCBpbnRlZ2VyIG92ZXJmbG93cywgcmFjZSBjb25kaXRpb25zLCB0aGF0IHNvcnQgb2YgdGhpbmcuIElmIGl0IHNlZW1zIHByb21pc2luZywgdGhlbiBpdCdzIHRpbWUgdG8gbWFwIG91dCBhIGZ1enppbmcgc3RyYXRlZ3kuIFRoYXQgbWVhbnMgZmlndXJpbmcgb3V0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gZXhlcmNpc2UgdGhlIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBwb2ludCBpbiBzcGlubmluZyB3aGVlbHMgaWYgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGRpc2FibGVkIGR1ZSB0byBhIG1pc2NvbmZpZ3VyYXRpb24uXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRob3NlIGZvY3VzIHN5bWJvbHMuIFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgcHJvY2VzcyB0aGUgbW9zdCBcImludGVyZXN0aW5nXCIgZGF0YT8gSSdsbCBuZWVkIGEgc29saWQgbGlzdCBvZiB0aG9zZSBmdW5jdGlvbnMgdG8gZ3VpZGUgdGhlIGZ1enppbmcgcHJvY2VzcyBhbmQgZW5zdXJlIG1heGltdW0gY29kZSBjb3ZlcmFnZS5cblxuQXMgZm9yIHVuY292ZXJpbmcgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdGFwcmlvIGltcGxlbWVudGF0aW9uLCBJJ2xsIGxldmVyYWdlIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGFuZCB0aGUgdHlwaWNhbCB0b29scy4gSSdsbCBsaWtlbHkgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXMgdGhhdCB0ZW5kcyB0byBiZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzIGV5ZSB2aWV3LiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZGlyZWN0bHkuIFRoYXQncyB1c3VhbGx5IHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIHRoYXQgdHlwZSBvZiBjb25maWd1cmF0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0Mzo1My4zNzI4NDA4NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTQ0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1NDSF9UQVBSSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0xNjc9Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMTcxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjE3Mjpjb25maWcgTkVUX1NDSF9UQVBSSU9cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIlRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcXHQrPSBzY2hfZXRmLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX05FVF9TQ0hfVEFQUklPKVxcdCs9IHNjaF90YXByaW8ub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUX1NDSF9CUEYpXFx0Kz0gYnBmX3FkaXNjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NTMuNDIxNzYwNDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMDQxNTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5LiBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIExldCdzIGNvbmZpcm0gdGhhdCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMTcyLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiZWNhdXNlIEkgY2FuIHVzdWFsbHkgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHdpdGhpbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgYSBLY29uZmlnIGZpbGUuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgbW9kdWxlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBvciBpbXBhY3RlZCBieSB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzaG91bGQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjU1LjYyMjIwMzM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ldGYuXFxuIDE2NjpcXHRcXG4gMTY3OlxcdGNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcXG4gMTY4OlxcdFxcdHRyaXN0YXRlXFxuIDE2OTpcXHRcXHRoZWxwXFxuIDE3MDpcXHRcXHQgIENvbW1vbiBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgbXFwcmlvIHF1ZXVlIGNvbmZpZ3VyYXRpb25zLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgTkVUX1NDSF9UQVBSSU9cXG4gMTczOlxcdFxcdHRyaXN0YXRlIFxcXCJUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclxcXCJcXG4gMTc0OlxcdFxcdHNlbGVjdCBORVRfU0NIX01RUFJJT19MSUJcXG4gMTc1OlxcdFxcdGhlbHBcXG4gMTc2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgcGFja2V0XFxuIDE3NzpcXHRcXHQgIHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxODI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG4gMTgzOlxcdFxcbiAxODQ6XFx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxcbiAxODU6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcXFwiXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBHZW5lcmljIFJhbmRvbSBFYXJseSBEZXRlY3Rpb25cXG4gMTg4OlxcdFxcdCAgKEdSRUQpIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobSBmb3Igc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlc1xcbiAxODk6XFx0XFx0ICAoc2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1xcdTAwM2UgZm9yIGRldGFpbHMgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjU1LjYyMjI5MTc0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTcyNTI2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBhbmFseXppbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFRhcHJpbyBDaGFuZ2VzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIHVwZGF0ZWQgaW4gdGhlIFRhcHJpbyBzY2hlZHVsZXIuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgcGF0Y2ggbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBJIHdhbnQgdG8gc2VlIHRoZSBkaWZmcy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBlZmZlY3RpdmVseSByZXZpZXcgdGhlbTogZ2l0IGRpZmYsIGNvZGUgY29tcGFyaXNvbiwgd2hhdGV2ZXIgaXQgdGFrZXMuIE9uY2UgSSBoYXZlIHRoZSBjaGFuZ2VkIGxpbmVzLCBJJ20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyB0aGF0IHNlY3Rpb24gb2YgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBObyBuZWVkIHRvIHJlYWQgdGhlIGVudGlyZSBmaWxlLCBqdXN0IHdoYXQncyByZWxldmFudCB0byB0aGUgbW9kaWZpY2F0aW9uLiBJJ2xsIGxvb2sgYXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGNoYW5nZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhcyB3ZWxsIGFzIHRoZSAqd2hhdCouIFdoYXQgY29kZSBhcmUgdGhleSB0b3VjaGluZyBhbmQgd2hhdCB3ZXJlIHRoZSByZWFzb25zLiBJcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBBIG5ldyBmZWF0dXJlPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGRvZXMgaXQgYWZmZWN0IHRoZSBzY2hlZHVsaW5nIGRlY2lzaW9ucz9cblxuXG4iLCJJbnB1dFRva2VucyI6NDcyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NTkuMDM5NTQ3NDA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzMDpcXHRcXG4xMDMxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uX3NpZ25lZCB0YXByaW9fY3ljbGVfdGltZV9yYW5nZSA9IHtcXG4xMDMyOlxcdFxcdC5taW4gPSAwLFxcbjEwMzM6XFx0XFx0Lm1heCA9IElOVF9NQVgsXFxuMTAzNDpcXHR9O1xcbjEwMzU6XFx0XFxuMTAzNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICsgMV0gPSB7XFxuMTAzNzpcXHRcXHRbVENBX1RBUFJJT19BVFRSX1BSSU9NQVBdXFx0ICAgICAgID0ge1xcbjEwMzg6XFx0XFx0XFx0LmxlbiA9IHNpemVvZihzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQpXFxuMTAzOTpcXHRcXHR9LFxcbjEwNDA6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDE6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDI6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDM6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DTE9DS0lEXSAgICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1MzMiB9LFxcbjEwNDQ6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSAgICAgICAgICAgPVxcbjEwNDU6XFx0XFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFX1NJR05FRChOTEFfUzY0LCBcXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxcbjEwNDY6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDc6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxcbjEwNDg6XFx0XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIFRBUFJJT19TVVBQT1JURURfRkxBR1MpLFxcbjEwNDk6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9UWFRJTUVfREVMQVldXFx0XFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuMTA1MDpcXHRcXHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVxcdFxcdCAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNTE6XFx0fTtcXG4xMDUyOlxcdFxcbjEwNTM6XFx0c3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMDU0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbjEwNTU6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMDU2OlxcdHtcXG4xMDU3OlxcdFxcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbjEwNTg6XFx0XFx0dTMyIGludGVydmFsID0gMDtcXG4xMDU5OlxcdFxcbjEwNjA6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcXG4xMDYxOlxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcXG4xMDYyOlxcdFxcdFxcdFxcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSk7XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pXFxuMTA2NTpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXFxuMTA2NjpcXHRcXHRcXHRcXHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pXFxuMTA2OTpcXHRcXHRcXHRpbnRlcnZhbCA9IG5sYV9nZXRfdTMyKFxcbjEwNzA6XFx0XFx0XFx0XFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XFxuMTA3MzpcXHRcXHQgKiBmcmFtZSB0byBnbyBvdXQuXFxuMTA3NDpcXHRcXHQgKi9cXG4xMDc1OlxcdFxcdGlmIChpbnRlcnZhbCBcXHUwMDNjIG1pbl9kdXJhdGlvbikge1xcbjEwNzY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcXFwiKTtcXG4xMDc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwNzg6XFx0XFx0fVxcbjEwNzk6XFx0XFxuMTA4MDpcXHRcXHRlbnRyeS1cXHUwMDNlaW50ZXJ2YWwgPSBpbnRlcnZhbDtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0cmV0dXJuIDA7XFxuMTA4MzpcXHR9XFxuMTA4NDpcXHRcXG4xMDg1OlxcdHN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcXG4xMDg2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxcbjEwODc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCArIDFdID0geyB9O1xcbjEwOTA6XFx0XFx0aW50IGVycjtcXG4xMDkxOlxcdFxcbjEwOTI6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCwgbixcXG4xMDkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcXG4xMDk0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTA5NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XFxcIik7XFxuMTA5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDk3OlxcdFxcdH1cXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0ZW50cnktXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJldHVybiBmaWxsX3NjaGVkX2VudHJ5KHEsIHRiLCBlbnRyeSwgZXh0YWNrKTtcXG4xMTAyOlxcdH1cXG4xMTAzOlxcdFxcbjExMDQ6XFx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxuMTEwNTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxuMTEwNjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMDc6XFx0e1xcbjExMDg6XFx0XFx0c3RydWN0IG5sYXR0ciAqbjtcXG4xMTA5OlxcdFxcdGludCBlcnIsIHJlbTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NTkuMDM5OTg3ODg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1MzA4NzA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVlbiB0d2Vha2VkIHJlY2VudGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNlZW4gZGlyZWN0IG1vZGlmaWNhdGlvbi4gSSBzZWUgYHRhcHJpb19taW5faW50ZXJ2YWxgLCBhIG5ldyBzdGF0aWMgaGVscGVyLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBBbHNvLCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGFyZSBvbiB0aGUgbGlzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdC4gV2hlcmUgaXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYmVpbmcgaW52b2tlZD8gSSdsbCBoZWFkIG92ZXIgdG8gYHNjaF90YXByaW8uY2AgdG8gdHJhY2UgaXRzIHVzYWdlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW1wYWN0aW5nIHRoZSBvdmVyYWxsIHNjaGVkdWxpbmcgbG9naWMgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0NDowMS4wOTMwNzgwNzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjc3Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEwND1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNDQ6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0NS1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODM4PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTMyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkzMzpcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MzQtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjAxLjE0NDc2NDI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNzMxMTIzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXByaW8gU2NoZWR1bGVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBgdGFwcmlvX2NoYW5nZWAgZnVuY3Rpb24gY2FsbHMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIE5vdywgYHRhcHJpb19jaGFuZ2VgIGlzIHRoZSBjcnVjaWFsIGNhbGxiYWNrIGZvciBjaGFuZ2VzIGluIHRoZSBgdGFwcmlvX3FkaXNjX29wc2Agc3RydWN0dXJlLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBjb2RlLCBwYXJ0aWN1bGFybHkgYHNjaF90YXByaW9gLCBiZSByZWFjaGVkIGluIHRoZSBkaXZlcnNlIGVudmlyb25tZW50cyB3ZSdyZSBjb25jZXJuZWQgd2l0aCwgbGlrZSB2aXJ0dWFsIG1hY2hpbmVzIG9yIHN0YW5kYXJkIG5ldGxpbmsgY29uZmlndXJhdGlvbnM/IFRoZSBhbnN3ZXIgaXMgYSBzb2xpZCB5ZXMuIE5ldGxpbmssIHZpYSBgdGMgcWRpc2MgYWRkIGRldiBsbyAuLi4gdGFwcmlvIC4uLmAgb3IgZXZlbiBhbnkgbmV0ZGV2aWNlIHVzaW5nIHJ0bmV0bGluayAoYFJUTV9ORVdRRElTQ2AgLyBgUlRNX0NIQU5HRVFESVNDYCksIHByb3ZpZGVzIHRoZSBwYXRoLiBXZSBhbHNvIGtub3cgU3l6a2FsbGVyIGZyZXF1ZW50bHkgdGFyZ2V0cyBUQyBxZGlzY3MgaW5jbHVkaW5nIHRhcHJpby4gR29vZCwgd2UgaGF2ZSByZWFjaGFiaWxpdHkuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSAqbW9kaWZpZWQqIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBleGVjdXRhYmxlLiBJbmRlZWQsIG5ldGxpbmsgY29tbWFuZHMgdGhhdCBjb25maWd1cmUgdGhlIHRhcHJpbyBzY2hlZHVsZXIgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgdGhlIHNlcXVlbmNlOiBgdGFwcmlvX2NoYW5nZWAgLVx1MDAzZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAtXHUwMDNlIGBmaWxsX3NjaGVkX2VudHJ5YCAtXHUwMDNlIGB0YXByaW9fbWluX2ludGVydmFsYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5mb3JjZXMgdGhlIG1pbmltdW0gc2NoZWR1bGUgaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCA9IDEwIHVzID0gMTAwMDAgbnMpIHdoZW4gZnVsbCBvZmZsb2FkIGFuZCB0eHRpbWUgYXNzaXN0IGFyZSAqbm90KiBlbmFibGVkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUsIG9mIGNvdXJzZSwgaXMgdG8gcHJldmVudCB0aGUgZHJlYWRlZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIHN1YnNlcXVlbnQgQ1BVIHN0YXJ2YXRpb24uXG5cbkZpbmFsbHksIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYXBwcm9wcmlhdGUgRm9jdXNTeW1ib2xzIGZvciBhbmFseXNpcy4gVGhlIG1vc3QgcmVsZXZhbnQgb25lcyB3b3VsZCBiZTpcbi0gYHRhcHJpb19taW5faW50ZXJ2YWxgXG4tIGBmaWxsX3NjaGVkX2VudHJ5YFxuLSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYFxuLSBgdGFwcmlvX2NoYW5nZWBcblxuTm93IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgdGFwcmlvX2luaXRgIG9yIGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBzY2hfdGFwcmlvLmNgIGFsc28gY2FsbCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBvciBgdGFwcmlvX2NoYW5nZWAgdG8gZW5zdXJlIHRoZSBjb3ZlcmFnZSBpcyBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjA2LjQxNzg4MDk3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjQ2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwcmlvX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTgxND1zdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxODM4OnN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgzOS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDg3PXN0YXRpYyBpbnQgdGFwcmlvX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMC1cXHQvKiBXZSBvbmx5IHN1cHBvcnQgc3RhdGljIGNsb2NraWRzLiBVc2UgYW4gaW52YWxpZCB2YWx1ZSBhcyBkZWZhdWx0XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTAxOlxcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTAyLVxcdCAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTQ4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjE0OTpcXHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNTAtfVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTYyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU2Ni1cXHQuaW5pdFxcdFxcdD0gdGFwcmlvX2luaXQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTY3OlxcdC5jaGFuZ2VcXHRcXHQ9IHRhcHJpb19jaGFuZ2UsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTY4LVxcdC5kZXN0cm95XFx0PSB0YXByaW9fZGVzdHJveSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MDYuNDY2NjExMjk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzUyNDQyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBGaXJzdCB1cCwgSSBzaG91bGQgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX1NDSF9UQVBSSU9gIGlzIHByb3Blcmx5IHNldC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIGEgcmVsYXRlZCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBDT05GSUdfTkVUX1NDSEVEYCBpcyBhIHByZXJlcXVpc2l0ZS4gVG8gZmlndXJlIHRoYXQgb3V0LCB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBpcyB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjA5LjA0MTg1ODUwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5MjQ4NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjA5LjMzMTExMzAzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTY2NzQ1OTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEFzc2Vzc21lbnQgb2YgdGhlIFRBUFJJTyBOZXR3b3JrIFNjaGVkdWxlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgTkVUX1NDSF9UQVBSSU9gIGFuZCBgTkVUX1NDSEVEYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBHb29kLCBhbmQgc2luY2UgYE5FVF9TQ0hfVEFQUklPYCBwdWxscyBpbiBgTkVUX1NDSF9NUVBSSU9fTElCYCwgdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIHRvby4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/XG5cblllcywgaXQgaXMhIFRoaXMgY29kZSBtb2RpZmllcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIFRBUFJJTyBxdWV1aW5nIGRpc2NpcGxpbmUuIFRoYXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2AgYW5kIGBSVE1fQ0hBTkdFUURJU0NgLiBUaGF0J3MgYSBncmVhdCB2ZWN0b3IgZm9yIGZ1enppbmcuXG5cbk5leHQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBJJ3ZlIGdvdCBhIHN0cm9uZyBsaXN0IGhlcmU6IGB0YXByaW9fbWluX2ludGVydmFsYCwgYGZpbGxfc2NoZWRfZW50cnlgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIGB0YXByaW9fY2hhbmdlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LlxuXG5NeSBjb3JlIGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX1NDSF9UQVBSSU9gIGFuZCBgTkVUX1NDSEVEYC5cblxuQSBxdWljayBjaGVjayB0byBjb25maXJtIG15IGFzc2Vzc21lbnQuIEV2ZXJ5dGhpbmcgbG9va3MgZ29vZDogdGhlIGZ1enppbmcgdGFyZ2V0IGlzIHZhbGlkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgbm9uLXViaXF1aXRvdXMsIGRpcmVjdGx5IGFsdGVyZWQsIG9yIGNhbGxlcnM6IGB0YXByaW9fbWluX2ludGVydmFsYCwgYGZpbGxfc2NoZWRfZW50cnlgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIGB0YXByaW9fY2hhbmdlYC4gVGhlIGVuYWJsZSBjb25maWdzIGNoZWNrIG91dCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgY29ycmVjdC4gTm93LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCdzIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3NywiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MjAuOTk4NTc1NzIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxNTI0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCIsXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXByaW9fbWluX2ludGVydmFsXCIsXG4gICAgXCJmaWxsX3NjaGVkX2VudHJ5XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIixcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBmb3Igc29mdHdhcmUtZHJpdmVuIChocnRpbWVyLWJhc2VkKSB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB0byBwcmV2ZW50IGhydGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIHRhcHJpbyBxZGlzYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0ZGV2IGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9UQVBSSU9cIixcbiAgICBcIk5FVF9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19taW5faW50ZXJ2YWxcIixcbiAgICBcImZpbGxfc2NoZWRfZW50cnlcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICAgIFwidGFwcmlvX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGZvciBzb2Z0d2FyZS1kcml2ZW4gKGhydGltZXItYmFzZWQpIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHRvIHByZXZlbnQgaHJ0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRkZXYgY29uZmlndXJhdGlvbiBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MjEuMDgzNzM2NjA0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk2MjM0MDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjIxLjA4NDIxNjI4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4OTYxODU2Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBhIG1pbmltdW0gaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCwgMTB1cykgZm9yIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHdoZW4gb3BlcmF0aW5nIGluIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuKSB0byBwcmV2ZW50IENQVSBzdGFydmF0aW9uIGFuZCB0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBJdCBpbnRyb2R1Y2VzIHRoZSBoZWxwZXIgYHRhcHJpb19taW5faW50ZXJ2YWwoKWAgYW5kIGFkanVzdHMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBpbiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyNGJlNGU1NjdmZjE0ZGQ3ZWU2NTYxMGUwMmFiYjFmZjRlNTY2OTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEyOjQzOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjM4OTBjZGJmY2I0ZjEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtNDgsNiArNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xuICAqIDYwICogMTcgXHUwMDNlIFBTRUNfUEVSX05TRUMgKDEwMDApXG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4rLyogTWluaW11bSBpbnRlcnZhbCBmb3Igc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4gYWR2YW5jZV9zY2hlZCkgdG9cbisgKiBhdm9pZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIENQVSBzdGFydmF0aW9uLlxuKyAqL1xuKyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAgKiBOU0VDX1BFUl9VU0VDKVxuIFxuIHN0cnVjdCBzY2hlZF9lbnRyeSB7XG4gXHQvKiBEdXJhdGlvbnMgYmV0d2VlbiB0aGlzIEdDTCBlbnRyeSBhbmQgdGhlIEdDTCBlbnRyeSB3aGVyZSB0aGVcbkBAIC0yNTksNiArMjYzLDE3IEBAIHN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXG4gXHRyZXR1cm4gZGl2X3U2NChsZW4gKiBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpLCBQU0VDX1BFUl9OU0VDKTtcbiB9XG4gXG4rc3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG4re1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7XG4rXG4rXHRpZiAoIUZVTExfT0ZGTE9BRF9JU19FTkFCTEVEKHEtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFUWFRJTUVfQVNTSVNUX0lTX0VOQUJMRUQocS1cdTAwM2VmbGFncykpXG4rXHRcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcbitcbitcdHJldHVybiBtaW5fZHVyYXRpb247XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbilcbiB7XG4gXHRyZXR1cm4gZGl2X3U2NChkdXJhdGlvbiAqIFBTRUNfUEVSX05TRUMsIGF0b21pYzY0X3JlYWQoXHUwMDI2cS1cdTAwM2VwaWNvc19wZXJfYnl0ZSkpO1xuQEAgLTEwMzksNyArMTA1NCw3IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcbitcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0dTMyIGludGVydmFsID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXG5AQCAtMTEzMCw2ICsxMTQ1LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNjcsNyArMTE4Myw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0bmV3LVx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcbiBcdH1cbiBcbi1cdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkge1xuK1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyAoczY0KW5ldy1cdTAwM2VudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBzbWFsbFwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0NDoyMS4wODQyMTczNTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxNDg0ODUwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIGZ1enppbmcuIEZpcnN0LCBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgbmV3IGAjZGVmaW5lYCBmb3IgdGhlIG1pbmltdW0gc29mdHdhcmUgaW50ZXJ2YWw6IGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCB3aGljaCBpcyBzZXQgdG8gMTAgbWljcm9zZWNvbmRzLiBUaGV5J3ZlIGFsc28gZGVmaW5lZCBhIGhlbHBlciBmdW5jdGlvbiwgYHRhcHJpb19taW5faW50ZXJ2YWxgLCB0aGF0IGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gZHVyYXRpb24gZm9yIHRhcHJpbyBzY2hlZHVsZSBpbnRlcnZhbHMuIFRoZSBpbXBvcnRhbnQgcGFydCBoZXJlIGlzIHRoZSBub3RlIGFib3V0IHNvZnR3YXJlIG1vZGUgYW5kIGhydGltZXJzLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgaHJ0aW1lciBzdG9ybXMgb3IgQ1BVIHN0YXJ2YXRpb24gYnkgZW5mb3JjaW5nIGEgbWluaW11bSAxMHVzIGludGVydmFsLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgdGhleeKAmXZlIG1vZGlmaWVkIHR3byBrZXkgZnVuY3Rpb25zOiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4gSW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIHRoZXkndmUgcmVwbGFjZWQgYGxlbmd0aF90b19kdXJhdGlvbmAgd2l0aCBgdGFwcmlvX21pbl9pbnRlcnZhbGAuICBUaGlzIHN1Z2dlc3RzIHRoZSBtaW5pbXVtIGR1cmF0aW9uIGNhbGN1bGF0aW9uIGlzIG5vdyBkeW5hbWljYWxseSBkZXRlcm1pbmVkLiAgVGhlbiwgaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCwgdGhleeKAmXZlIHN3YXBwZWQgb3V0IGEgaGFyZGNvZGVkIG1pbmltdW0gd2l0aCBhIGNhbGwgdG8gdGhlIG5ldyBgbWluX2R1cmF0aW9uYCB2YXJpYWJsZS4gVGhpcyBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIGR5bmFtaWMgbWluaW11bSBkdXJhdGlvbi5cblxuVGhlIGNoYW5nZSBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGxvb2tzIGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcsIGFzIGl0IG5vdyBjb21wYXJlcyBgY3ljbGVfdGltZWAgd2l0aCB0aGUgY2FsY3VsYXRlZCBgbWluX2R1cmF0aW9uYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MgaW4gdGhlc2UgbmV3IGNhbGN1bGF0aW9ucywgZXNwZWNpYWxseSB3aXRoIHRoZSBgKHM2NClgIGNhc3Q/IFdlIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQuXG5cbk5vdywgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NoZWR1bGVyIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgY2FsY3VsYXRlZCBkdXJhdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEknbGwgdGhlbiBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJ1biB0aGUgS01TQU4gZnV6emVyIHRvIGxvb2sgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MzQuMjMyNzA1NjczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5NjY3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9zY2hlZF9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTAzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwNTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDUzOnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDU0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg1PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMDE6XFx0cmV0dXJuIGZpbGxfc2NoZWRfZW50cnkocSwgdGIsIGVudHJ5LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjM0LjQxMDY4MTE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Mzg4MzExOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZm9yIFNjaGVkdWxpbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgc3Vycm91bmRpbmcgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gVGhlIGNvcmUgZm9jdXMgaGVyZSBpcyB1bmRvdWJ0ZWRseSBzY2hlZHVsaW5nIGFuZCBob3cgd2UncmUgdHJhbnNsYXRpbmcgYSBUQVBSSU8gc2NoZWR1bGUgaW50byBzb21ldGhpbmcgdXNhYmxlIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaG93IGBmaWxsX3NjaGVkX2VudHJ5YCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgc2NoZWR1bGVyJ3MgZGF0YSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIGFyZSB3ZSBidWlsZGluZyBhIHN0cmFpZ2h0Zm9yd2FyZCBsaXN0IG9mIHRpbWUtYm91bmQgZXZlbnRzLCBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGRhdGEgZGVwZW5kZW5jaWVzIGJlaW5nIGVuY29kZWQ/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBUQVBSSU8gc2NoZWR1bGVzIGNhbiBpbnZvbHZlIHNvcGhpc3RpY2F0ZWQgcHJpb3JpdGllcywgcHJlZW1wdGlvbiBydWxlcywgYW5kIHBvc3NpYmx5IGV2ZW4gcmVzb3VyY2UgYWxsb2NhdGlvbi4gU28sIEknbSB0cnlpbmcgdG8gc2VlIGlmIHRoYXQgY29tcGxleGl0eSBpcyByZWZsZWN0ZWQsIGFuZCBpZiBzbywgaG93IGl0J3MgaGFuZGxlZC4gSXMgaXQgdGhyb3VnaCBuZXN0ZWQgc3RydWN0dXJlcywgYml0bWFwcywgb3Igc29tZXRoaW5nIG1vcmUgZWxlZ2FudD8gSSBhbnRpY2lwYXRlIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbnRlcnByZXRpbmcgdGhlIFRBUFJJTyBzY2hlZHVsZSBpdHNlbGYuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSBwYXJzaW5nIHRoZSBUQVBSSU8gZm9ybWF0LCB2YWxpZGF0aW9uLCBhbmQgc29tZSBkZWdyZWUgb2Ygc2VtYW50aWMgYW5hbHlzaXMuIFdlIHNob3VsZCBoYXZlIGVycm9yIGhhbmRsaW5nIGhlcmUsIGdpdmVuIHRoYXQgVEFQUklPIHNjaGVkdWxlcyBjYW4gYmUgcXVpdGUgaW50cmljYXRlIGFuZCBwb3RlbnRpYWxseSBlcnJvbmVvdXMgaW4gaW5wdXQuIElzIHRoaXMgcGFyc2VyIHJvYnVzdD8gRG9lcyBpdCBjaGVjayBmb3IgY29uZmxpY3RpbmcgZGVhZGxpbmVzLCByZXNvdXJjZSBvdmVyLWFsbG9jYXRpb24sIGFuZCBvdGhlciBwb3RlbnRpYWwgcGl0ZmFsbHM/IEFsc28sIGhvdyBkb2VzIGl0IGhhbmRsZSBjb3JuZXIgY2FzZXMgbGlrZSBlbXB0eSBzY2hlZHVsZXMgb3IgaW52YWxpZGx5IGZvcm1hdHRlZCBlbnRyaWVzPyBBIGNyaXRpY2FsIHBvaW50IHRvIGV4YW1pbmUgaXMgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIERvZXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgY29uc3RydWN0IGEgdGVtcG9yYXJ5IHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlbiBgZmlsbF9zY2hlZF9lbnRyeWAgdHJhbnNsYXRlcyB0aGlzIHRvIGEgZm9ybWF0IHRoZSBzY2hlZHVsZXIgdW5kZXJzdGFuZHMsIG9yIGlzIGl0IGEgbW9yZSBpbnRlZ3JhdGVkIHByb2Nlc3M/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGVuZC10by1lbmQgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjaGVkdWxlcidzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBob3cgYSBUQVBSSU8gc2NoZWR1bGUgZ2V0cyBjb252ZXJ0ZWQgaW50byBpdCwgYW5kIHdoYXQgaGFwcGVucyB0byB0aGUgcmVzdWx0aW5nIGVudHJ5LiBUaGUga2V5IHF1ZXN0aW9ucyBpbiBteSBtaW5kIGFyZTogSXMgdGhpcyBzY2hlZHVsaW5nIGFsZ29yaXRobSBlZmZpY2llbnQ/IEhvdyBkb2VzIHRoZSBzY2hlZHVsZXIgaGFuZGxlIHVwZGF0ZXMgdG8gdGhlIFRBUFJJTyBzY2hlZHVsZT8gQXJlIHdlIGdvaW5nIHRvIHNlZSBwb3RlbnRpYWwgZm9yIHJlYWwtdGltZSBpc3N1ZXMsIGlmIHRoZSBzY2hlZHVsZXMgY2hhbmdlIGR5bmFtaWNhbGx5P1xuXG5cbiIsIklucHV0VG9rZW5zIjozNzkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MzkuMjQ5NTE2ODg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNDA6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDE6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDI6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDM6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DTE9DS0lEXSAgICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1MzMiB9LFxcbjEwNDQ6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSAgICAgICAgICAgPVxcbjEwNDU6XFx0XFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFX1NJR05FRChOTEFfUzY0LCBcXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxcbjEwNDY6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDc6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxcbjEwNDg6XFx0XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIFRBUFJJT19TVVBQT1JURURfRkxBR1MpLFxcbjEwNDk6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9UWFRJTUVfREVMQVldXFx0XFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuMTA1MDpcXHRcXHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVxcdFxcdCAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNTE6XFx0fTtcXG4xMDUyOlxcdFxcbjEwNTM6XFx0c3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMDU0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbjEwNTU6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMDU2OlxcdHtcXG4xMDU3OlxcdFxcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbjEwNTg6XFx0XFx0dTMyIGludGVydmFsID0gMDtcXG4xMDU5OlxcdFxcbjEwNjA6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcXG4xMDYxOlxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcXG4xMDYyOlxcdFxcdFxcdFxcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSk7XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pXFxuMTA2NTpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXFxuMTA2NjpcXHRcXHRcXHRcXHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pXFxuMTA2OTpcXHRcXHRcXHRpbnRlcnZhbCA9IG5sYV9nZXRfdTMyKFxcbjEwNzA6XFx0XFx0XFx0XFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XFxuMTA3MzpcXHRcXHQgKiBmcmFtZSB0byBnbyBvdXQuXFxuMTA3NDpcXHRcXHQgKi9cXG4xMDc1OlxcdFxcdGlmIChpbnRlcnZhbCBcXHUwMDNjIG1pbl9kdXJhdGlvbikge1xcbjEwNzY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcXFwiKTtcXG4xMDc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwNzg6XFx0XFx0fVxcbjEwNzk6XFx0XFxuMTA4MDpcXHRcXHRlbnRyeS1cXHUwMDNlaW50ZXJ2YWwgPSBpbnRlcnZhbDtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0cmV0dXJuIDA7XFxuMTA4MzpcXHR9XFxuMTA4NDpcXHRcXG4xMDg1OlxcdHN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcXG4xMDg2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxcbjEwODc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCArIDFdID0geyB9O1xcbjEwOTA6XFx0XFx0aW50IGVycjtcXG4xMDkxOlxcdFxcbjEwOTI6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCwgbixcXG4xMDkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcXG4xMDk0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTA5NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XFxcIik7XFxuMTA5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDk3OlxcdFxcdH1cXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0ZW50cnktXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJldHVybiBmaWxsX3NjaGVkX2VudHJ5KHEsIHRiLCBlbnRyeSwgZXh0YWNrKTtcXG4xMTAyOlxcdH1cXG4xMTAzOlxcdFxcbjExMDQ6XFx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxuMTEwNTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxuMTEwNjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMDc6XFx0e1xcbjExMDg6XFx0XFx0c3RydWN0IG5sYXR0ciAqbjtcXG4xMTA5OlxcdFxcdGludCBlcnIsIHJlbTtcXG4xMTEwOlxcdFxcdGludCBpID0gMDtcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0aWYgKCFsaXN0KVxcbjExMTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQobiwgbGlzdCwgcmVtKSB7XFxuMTExNjpcXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRcXHRpZiAobmxhX3R5cGUobikgIT0gVENBX1RBUFJJT19TQ0hFRF9FTlRSWSkge1xcbjExMTk6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQXR0cmlidXRlIGlzIG5vdCBvZiB0eXBlICdlbnRyeSdcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MzkuMjQ5NzA4NDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODEyMzM4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNjaGVkdWxlIHBhcnNpbmcuIEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgY29yZSBsb2dpYywgYnV0IGl0J3MgYWx3YXlzIHNtYXJ0IHRvIGhhdmUgYSBxdWljayBnbGFuY2UgYXQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIFRoZSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBlbnN1cmluZyB0aGUgb3V0cHV0IGZvcm1hdCBpcyBjb3JyZWN0IGFuZCB0aGF0IGl0IHdpbGwgaW50ZWdyYXRlIHByb3Blcmx5IHdpdGggdGhlIGxhcmdlciBzeXN0ZW0uIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24uXG5cbkkgd2FudCB0byBzZWUgaWYgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyBhbGlnbiB3aXRoIHRoZSBhc3N1bXB0aW9ucyBJJ20gbWFraW5nIGluIHRoZSBwYXJ0IEknbSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgZWRnZSBjYXNlcyBoYW5kbGVkIHRoZXJlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBEb2VzIGl0IHBlcmZvcm0gYW55IGtpbmQgb2YgaW5wdXQgdmFsaWRhdGlvbiBvciBwcmUtcHJvY2Vzc2luZyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgZGF0YSBJJ20gdXNpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHByZXZlbnRpbmcgYnVncyBkb3duIHRoZSBsaW5lLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGRvY3N0cmluZ3MgYW5kIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljIGZvciBhbnkgcmVkIGZsYWdzIG9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25mbGljdC4gSG9wZWZ1bGx5LCBldmVyeXRoaW5nJ3MgY2xlYW4sIGFuZCBJIGNhbiBqdXN0IG1vdmUgZm9yd2FyZC4gQnV0IGl0J3MgYWx3YXlzIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnksIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggc2NoZWR1bGVzIGFuZCB0aGVpciBjb21wbGV4aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjQxLjkzMDk0NTIzOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdFxcbjExNDE6XFx0XFx0cmV0dXJuIGk7XFxuMTE0MjpcXHR9XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMTQ1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuMTE0NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExNDc6XFx0e1xcbjExNDg6XFx0XFx0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XFxuMTE0OTpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XFxuMTE1MjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJBZGRpbmcgYSBzaW5nbGUgZW50cnkgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbjExNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4xMTU0OlxcdFxcdH1cXG4xMTU1OlxcdFxcbjExNTY6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdKVxcbjExNTc6XFx0XFx0XFx0bmV3LVxcdTAwM2ViYXNlX3RpbWUgPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSk7XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKVxcbjExNjA6XFx0XFx0XFx0bmV3LVxcdTAwM2VjeWNsZV90aW1lX2V4dGVuc2lvbiA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0pO1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKVxcbjExNjM6XFx0XFx0XFx0bmV3LVxcdTAwM2VjeWNsZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKTtcXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSlcXG4xMTY2OlxcdFxcdFxcdGVyciA9IHBhcnNlX3NjaGVkX2xpc3QocSwgdGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdLFxcbjExNjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5ldywgZXh0YWNrKTtcXG4xMTY4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjExNjk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTcwOlxcdFxcbjExNzE6XFx0XFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpIHtcXG4xMTcyOlxcdFxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuMTE3MzpcXHRcXHRcXHRrdGltZV90IGN5Y2xlID0gMDtcXG4xMTc0OlxcdFxcbjExNzU6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNm5ldy1cXHUwMDNlZW50cmllcywgbGlzdClcXG4xMTc2OlxcdFxcdFxcdFxcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cXHUwMDNlaW50ZXJ2YWwpO1xcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHRcXHRpZiAoY3ljbGUgXFx1MDAzYyAwIHx8IGN5Y2xlIFxcdTAwM2UgSU5UX01BWCkge1xcbjExNzk6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcXFwiKTtcXG4xMTgwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExODE6XFx0XFx0XFx0fVxcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4xMTg0OlxcdFxcdH1cXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIChzNjQpbmV3LVxcdTAwM2VudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikge1xcbjExODc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBzbWFsbFxcXCIpO1xcbjExODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE4OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjQxLjkzMTEyMDU3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODExNDkyNTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEFQUklPIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc2NoZWR1bGluZyBhbmQgdGltaW5nLiBTbywgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBjaGFuZ2UgbWV0aWN1bG91c2x5LlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCBzZXR0aW5nIGl0IHRvIDEwIG1pY3Jvc2Vjb25kcy4gTWFrZXMgc2Vuc2UsIHRoYXQncyBhIHJlYXNvbmFibGUgbWluaW11bS4gVGhlbiwgaXQgaW1wbGVtZW50cyBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYC4gRXNzZW50aWFsbHksIHRoaXMgZnVuY3Rpb24gKmVuZm9yY2VzKiBhIDEwdXMgbWluaW11bSBgbWluX2R1cmF0aW9uYCB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlLCBtZWFuaW5nIG5laXRoZXIgZnVsbCBvZmZsb2FkIG5vciBUWFRJTUVfQVNTSVNUIGFyZSBlbmFibGVkLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBzYWZldHkgbmV0IOKAkyBwcmV2ZW50aW5nIHVzZXJzIGZyb20gc3BlY2lmeWluZyByaWRpY3Vsb3VzbHkgc2hvcnQgaW50ZXJ2YWxzLCB3aGljaCBjb3VsZCB3cmVhayBoYXZvYyB3aXRoIGhydGltZXJzIGFuZCBwb3NzaWJseSBsb2NrIHRoaW5ncyB1cCBvciBzdGFydmUgdGhlIENQVS4gR29vZC5cblxuTmV4dCwgSSBzZWUgdGhhdCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIG5vdyBjYXN0cyBgbmV3LVx1MDAzZW51bV9lbnRyaWVzYCB0byBgczY0YC4gVGhpcyBpcyBzbWFydDsgaXQncyBhIHByZWVtcHRpdmUgc3RyaWtlIGFnYWluc3QgcG90ZW50aWFsIG92ZXJmbG93IGlzc3VlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0b3RhbCBzY2hlZHVsZSBkdXJhdGlvbjogYChzNjQpbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbWluX2R1cmF0aW9uYC4gUHJldmVudGluZyBvdmVyZmxvdyBpcyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIHRpbWUtY3JpdGljYWwgc3lzdGVtcy5cblxuRmluYWxseSwgYGZpbGxfc2NoZWRfZW50cnkoKWAgZW5zdXJlcyB0aGUgYGludGVydmFsYCBpcyAqYWx3YXlzKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYG1pbl9kdXJhdGlvbmAuIEFub3RoZXIgbGF5ZXIgb2YgcHJvdGVjdGlvbi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbnM6IERvZXMgdGhpcyBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBtaWdodCBsZWF2ZSBmaWVsZHMgdW5pbml0aWFsaXplZD8gTm8sIGRvZXNuJ3Qgc2VlbSBsaWtlIGl0LiBObyBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3RzLiBJcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB0aGUgY29kZSByZWxpZXMgb24gaW5pdGlhbGl6ZWQgZmxhZ3MgYW5kIGNvbnN0YW50cy4gQW55dGhpbmcgbmV3IGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB0aGF0IG1pZ2h0IGludHJvZHVjZSByaXNrcz8gTm8gbmV3IGFsbG9jYXRpb25zOyB0aGlzIGlzIGFib3V0IGNvbnN0cmFpbmluZyAqZXhpc3RpbmcqIHNjaGVkdWxpbmcgcGFyYW1ldGVycy4gRG9lcyBpdCBpbnRyb2R1Y2UgYW55IGJvdW5kcyBjaGVjayBmbGF3cyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIHBhcnRzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vLCBpdCdzIGEgKnRpZ2h0ZW5pbmcqIG9mIHRoZSBjaGVjaywgZW5zdXJpbmcgcGFyYW1ldGVycyBtZWV0IGEgKm1pbmltdW0qIHRocmVzaG9sZC5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIGV4YW1pbmF0aW9uLCBJIHNlZSBubyBpbW1lZGlhdGUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgY2F0Y2ggYW55dGhpbmcgZWxzZSBtZW1vcnkgc2FmZXR5IHJlbGF0ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGlzc3VlIGlzIHByZXNlbnQgaGVyZS5cblxuSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgYGZhbHNlYCwgYW5kIEkgd2lsbCBwcm92aWRlIHRoaXMgZGV0YWlsZWQgcmVhc29uaW5nIGFzIHRoZSBqdXN0aWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODkyLCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ1OjAwLjA0NjA0OTIwOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIDEwdXMpIGZvciB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbikgdG8gcHJldmVudCBDUFUgc3RhcnZhdGlvbiBhbmQgdGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gSXQgaW50cm9kdWNlcyB0aGUgaGVscGVyIGB0YXByaW9fbWluX2ludGVydmFsKClgIGFuZCBhZGp1c3RzIHRoZSBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IHRpZ2h0ZW4gaW5wdXQgdmFsaWRhdGlvbiBvbiBzY2hlZHVsZSBpbnRlcnZhbHMgYW5kIGN5Y2xlIHRpbWVzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlLCBhbmQgbm8gYnVmZmVyIGluZGV4L2xlbmd0aCBhbHRlcmF0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBhIG1pbmltdW0gaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCwgMTB1cykgZm9yIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHdoZW4gb3BlcmF0aW5nIGluIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuKSB0byBwcmV2ZW50IENQVSBzdGFydmF0aW9uIGFuZCB0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBJdCBpbnRyb2R1Y2VzIHRoZSBoZWxwZXIgYHRhcHJpb19taW5faW50ZXJ2YWwoKWAgYW5kIGFkanVzdHMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBpbiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 12:41:40 +0000 UTC FinishedAt: 2026-09-04 12:45:01 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO", "NET_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO", "NET_SCHED" ], "series_id": "643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "taprio_min_interval", "fill_sched_entry", "parse_taprio_schedule", "taprio_change" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19taW5faW50ZXJ2YWwmIzM0OywKICAgICYjMzQ7ZmlsbF9zY2hlZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCAxMHVzKSBmb3IgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgd2hlbiBvcGVyYXRpbmcgaW4gc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4pIHRvIHByZXZlbnQgQ1BVIHN0YXJ2YXRpb24gYW5kIHRpbWVyIGludGVycnVwdCBzdG9ybXMuIEl0IGludHJvZHVjZXMgdGhlIGhlbHBlciBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCBhbmQgYWRqdXN0cyB0aGUgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGluIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBmb3Igc29mdHdhcmUtZHJpdmVuIChocnRpbWVyLWJhc2VkKSB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB0byBwcmV2ZW50IGhydGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIHRhcHJpbyBxZGlzYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0ZGV2IGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMjRiZTRlNTY3ZmYxNGRkN2VlNjU2MTBlMDJhYmIxZmY0ZTU2NjkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggMzlhYzViOTdhYTNhZi4uMzg5MGNkYmZjYjRmMSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC00OCw2ICYjNDM7NDgsMTAgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xuICAqIDYwICogMTcgXHUwMDNlIFBTRUNfUEVSX05TRUMgKDEwMDApXG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4mIzQzOy8qIE1pbmltdW0gaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuIGFkdmFuY2Vfc2NoZWQpIHRvXG4mIzQzOyAqIGF2b2lkIGhydGltZXIgaW50ZXJydXB0IHN0b3JtcyBhbmQgQ1BVIHN0YXJ2YXRpb24uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwICogTlNFQ19QRVJfVVNFQylcbiBcbiBzdHJ1Y3Qgc2NoZWRfZW50cnkge1xuIFx0LyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlXG5AQCAtMjU5LDYgJiM0MzsyNjMsMTcgQEAgc3RhdGljIGludCBsZW5ndGhfdG9fZHVyYXRpb24oc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgaW50IGxlbilcbiBcdHJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoXHUwMDI2cS1cdTAwM2VwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIVRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG4ge1xuIFx0cmV0dXJuIGRpdl91NjQoZHVyYXRpb24gKiBQU0VDX1BFUl9OU0VDLCBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcbkBAIC0xMDM5LDcgJiM0MzsxMDU0LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuJiM0MztcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0dTMyIGludGVydmFsID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXG5AQCAtMTEzMCw2ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XG5AQCAtMTE2Nyw3ICYjNDM7MTE4Myw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0bmV3LVx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcbiBcdH1cbiBcbi1cdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkge1xuJiM0MztcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiBtaW5fZHVyYXRpb24pIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGxcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fbWluX2ludGVydmFsJiMzNDssCiAgICAmIzM0O2ZpbGxfc2NoZWRfZW50cnkmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI0YmU0ZTU2N2ZmMTRkZDdlZTY1NjEwZTAyYWJiMWZmNGU1NjY5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTI6NDM6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwppbmRleCAzOWFjNWI5N2FhM2FmLi4zODkwY2RiZmNiNGYxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKQEAgLTQ4LDYgJiM0Mzs0OCwxMCBAQCBzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87CiAgKiA2MCAqIDE3ICZndDsgUFNFQ19QRVJfTlNFQyAoMTAwMCkKICAqLwogI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3CiYjNDM7LyogTWluaW11bSBpbnRlcnZhbCBmb3Igc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4gYWR2YW5jZV9zY2hlZCkgdG8KJiM0MzsgKiBhdm9pZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIENQVSBzdGFydmF0aW9uLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAgKiBOU0VDX1BFUl9VU0VDKQogCiBzdHJ1Y3Qgc2NoZWRfZW50cnkgewogCS8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZQpAQCAtMjU5LDYgJiM0MzsyNjMsMTcgQEAgc3RhdGljIGludCBsZW5ndGhfdG9fZHVyYXRpb24oc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgaW50IGxlbikKIAlyZXR1cm4gZGl2X3U2NChsZW4gKiBhdG9taWM2NF9yZWFkKCZhbXA7cS0mZ3Q7cGljb3NfcGVyX2J5dGUpLCBQU0VDX1BFUl9OU0VDKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKQomIzQzO3sKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7CiYjNDM7CiYjNDM7CWlmICghRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgICFUWFRJTUVfQVNTSVNUX0lTX0VOQUJMRUQocS0mZ3Q7ZmxhZ3MpKQomIzQzOwkJbWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpOwomIzQzOwomIzQzOwlyZXR1cm4gbWluX2R1cmF0aW9uOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbikKIHsKIAlyZXR1cm4gZGl2X3U2NChkdXJhdGlvbiAqIFBTRUNfUEVSX05TRUMsIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSkpOwpAQCAtMTAzOSw3ICYjNDM7MTA1NCw3IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJCQkgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwKIAkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0JaW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7CiYjNDM7CWludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpOwogCXUzMiBpbnRlcnZhbCA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKQpAQCAtMTEzMCw2ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCQkgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LAogCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CWludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpOwogCWludCBlcnIgPSAwOwogCiAJaWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7CkBAIC0xMTY3LDcgJiM0MzsxMTgzLDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQluZXctJmd0O2N5Y2xlX3RpbWUgPSBjeWNsZTsKIAl9CiAKLQlpZiAobmV3LSZndDtjeWNsZV90aW1lICZsdDsgbmV3LSZndDtudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHsKJiM0MzsJaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IChzNjQpbmV3LSZndDtudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIHNtYWxsJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIGEgbWVudGFsIGNoZWNrbGlzdC4gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBldmVuICp3b3J0aCogc3BlbmRpbmcgZnV6emluZyBjeWNsZXMgb24/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29kZSBjaGFuZ2VzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIC0gbWVtb3J5IGNvcnJ1cHRpb24sIGludGVnZXIgb3ZlcmZsb3dzLCByYWNlIGNvbmRpdGlvbnMsIHRoYXQgc29ydCBvZiB0aGluZy4gSWYgaXQgc2VlbXMgcHJvbWlzaW5nLCB0aGVuIGl0JiMzOTtzIHRpbWUgdG8gbWFwIG91dCBhIGZ1enppbmcgc3RyYXRlZ3kuIFRoYXQgbWVhbnMgZmlndXJpbmcgb3V0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gZXhlcmNpc2UgdGhlIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBwb2ludCBpbiBzcGlubmluZyB3aGVlbHMgaWYgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGRpc2FibGVkIGR1ZSB0byBhIG1pc2NvbmZpZ3VyYXRpb24uCgpUaGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aG9zZSBmb2N1cyBzeW1ib2xzLiBXaGVyZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IHByb2Nlc3MgdGhlIG1vc3QgJiMzNDtpbnRlcmVzdGluZyYjMzQ7IGRhdGE/IEkmIzM5O2xsIG5lZWQgYSBzb2xpZCBsaXN0IG9mIHRob3NlIGZ1bmN0aW9ucyB0byBndWlkZSB0aGUgZnV6emluZyBwcm9jZXNzIGFuZCBlbnN1cmUgbWF4aW11bSBjb2RlIGNvdmVyYWdlLgoKQXMgZm9yIHVuY292ZXJpbmcgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdGFwcmlvIGltcGxlbWVudGF0aW9uLCBJJiMzOTtsbCBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBhbmQgdGhlIHR5cGljYWwgdG9vbHMuIEkmIzM5O2xsIGxpa2VseSB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhcyB0aGF0IHRlbmRzIHRvIGJlIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBiaXJkJiMzOTtzIGV5ZSB2aWV3LiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayBgbmV0L3NjaGVkL0tjb25maWdgIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgdGhhdCB0eXBlIG9mIGNvbmZpZ3VyYXRpb24sIGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1NDSF9UQVBSSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTcxLVxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xubmV0L3NjaGVkL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7VGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVx0JiM0Mzs9IHNjaF9ldGYub1xubmV0L3NjaGVkL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19ORVRfU0NIX1RBUFJJTylcdCYjNDM7PSBzY2hfdGFwcmlvLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUX1NDSF9CUEYpXHQmIzQzOz0gYnBmX3FkaXNjLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkuIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE3Mi4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGJlY2F1c2UgSSBjYW4gdXN1YWxseSBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgd2l0aGluIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiBhIEtjb25maWcgZmlsZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgbW9kdWxlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBvciBpbXBhY3RlZCBieSB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzaG91bGQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ldGYuXG4gMTY2Olx0XG4gMTY3Olx0Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxuIDE2ODpcdFx0dHJpc3RhdGVcbiAxNjk6XHRcdGhlbHBcbiAxNzA6XHRcdCAgQ29tbW9uIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBtcXByaW8gcXVldWUgY29uZmlndXJhdGlvbnMuXG4gMTcxOlx0XG4gMTcyOlx0Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG4gMTczOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclwmIzM0O1xuIDE3NDpcdFx0c2VsZWN0IE5FVF9TQ0hfTVFQUklPX0xJQlxuIDE3NTpcdFx0aGVscFxuIDE3NjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBwYWNrZXRcbiAxNzc6XHRcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXG4gMTc4Olx0XG4gMTc5Olx0XHQgIFNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF90YXByaW8uY1x1MDAzZSBmb3IgbW9yZSBkZXRhaWxzLlxuIDE4MDpcdFxuIDE4MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTgyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfdGFwcmlvLlxuIDE4MzpcdFxuIDE4NDpcdGNvbmZpZyBORVRfU0NIX0dSRURcbiAxODU6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcJiMzNDtcbiAxODY6XHRcdGhlbHBcbiAxODc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvblxuIDE4ODpcdFx0ICAoR1JFRCkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGZvciBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzXG4gMTg5Olx0XHQgIChzZWUgdGhlIHRvcCBvZiBcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfcmVkLmNcdTAwM2UgZm9yIGRldGFpbHMgYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggYW5hbHl6aW5nIHRoZSByZWNlbnQgY2hhbmdlcyBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2A6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgVGFwcmlvIENoYW5nZXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiB1cGRhdGVkIGluIHRoZSBUYXByaW8gc2NoZWR1bGVyLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIHBhdGNoIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gSSB3YW50IHRvIHNlZSB0aGUgZGlmZnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIGVmZmVjdGl2ZWx5IHJldmlldyB0aGVtOiBnaXQgZGlmZiwgY29kZSBjb21wYXJpc29uLCB3aGF0ZXZlciBpdCB0YWtlcy4gT25jZSBJIGhhdmUgdGhlIGNoYW5nZWQgbGluZXMsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyB0aGF0IHNlY3Rpb24gb2YgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBObyBuZWVkIHRvIHJlYWQgdGhlIGVudGlyZSBmaWxlLCBqdXN0IHdoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbi4gSSYjMzk7bGwgbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgY2hhbmdlcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFzIHdlbGwgYXMgdGhlICp3aGF0Ki4gV2hhdCBjb2RlIGFyZSB0aGV5IHRvdWNoaW5nIGFuZCB3aGF0IHdlcmUgdGhlIHJlYXNvbnMuIElzIHRoaXMgYSBidWcgZml4PyBBbiBvcHRpbWl6YXRpb24/IEEgbmV3IGZlYXR1cmU/IEFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgZG9lcyBpdCBhZmZlY3QgdGhlIHNjaGVkdWxpbmcgZGVjaXNpb25zPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdFxuMTAzMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uX3NpZ25lZCB0YXByaW9fY3ljbGVfdGltZV9yYW5nZSA9IHtcbjEwMzI6XHRcdC5taW4gPSAwLFxuMTAzMzpcdFx0Lm1heCA9IElOVF9NQVgsXG4xMDM0Olx0fTtcbjEwMzU6XHRcbjEwMzY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuMTAzNzpcdFx0W1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXVx0ICAgICAgID0ge1xuMTAzODpcdFx0XHQubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19tcXByaW9fcW9wdClcbjEwMzk6XHRcdH0sXG4xMDQwOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQxOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0gICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzY0IH0sXG4xMDQyOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0gICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQzOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NMT0NLSURdICAgICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4xMDQ0Olx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdICAgICAgICAgICA9XG4xMDQ1Olx0XHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRV9TSUdORUQoTkxBX1M2NCwgXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxuMTA0NjpcdFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxuMTA0NzpcdFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxuMTA0ODpcdFx0XHROTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgVEFQUklPX1NVUFBPUlRFRF9GTEFHUyksXG4xMDQ5Olx0XHRbVENBX1RBUFJJT19BVFRSX1RYVElNRV9ERUxBWV1cdFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xMDUwOlx0XHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVx0XHQgICAgID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbjEwNTE6XHR9O1xuMTA1MjpcdFxuMTA1MzpcdHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4xMDU0Olx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4xMDU1Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEwNTY6XHR7XG4xMDU3Olx0XHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbjEwNTg6XHRcdHUzMiBpbnRlcnZhbCA9IDA7XG4xMDU5Olx0XG4xMDYwOlx0XHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKVxuMTA2MTpcdFx0XHRlbnRyeS1cdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcbjEwNjI6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pO1xuMTA2MzpcdFxuMTA2NDpcdFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfR0FURV9NQVNLXSlcbjEwNjU6XHRcdFx0ZW50cnktXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXG4xMDY2Olx0XHRcdFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9HQVRFX01BU0tdKTtcbjEwNjc6XHRcbjEwNjg6XHRcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSlcbjEwNjk6XHRcdFx0aW50ZXJ2YWwgPSBubGFfZ2V0X3UzMihcbjEwNzA6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSk7XG4xMDcxOlx0XG4xMDcyOlx0XHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XG4xMDczOlx0XHQgKiBmcmFtZSB0byBnbyBvdXQuXG4xMDc0Olx0XHQgKi9cbjEwNzU6XHRcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4xMDc2Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcJiMzNDspO1xuMTA3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwNzg6XHRcdH1cbjEwNzk6XHRcbjEwODA6XHRcdGVudHJ5LVx1MDAzZWludGVydmFsID0gaW50ZXJ2YWw7XG4xMDgxOlx0XG4xMDgyOlx0XHRyZXR1cm4gMDtcbjEwODM6XHR9XG4xMDg0Olx0XG4xMDg1Olx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpuLFxuMTA4NjpcdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxuMTA4NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTA4ODpcdHtcbjEwODk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfTUFYICYjNDM7IDFdID0geyB9O1xuMTA5MDpcdFx0aW50IGVycjtcbjEwOTE6XHRcbjEwOTI6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9NQVgsIG4sXG4xMDkzOlx0XHRcdFx0XHRcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcbjEwOTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwOTU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XCYjMzQ7KTtcbjEwOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlbnRyeS1cdTAwM2VpbmRleCA9IGluZGV4O1xuMTEwMDpcdFxuMTEwMTpcdFx0cmV0dXJuIGZpbGxfc2NoZWRfZW50cnkocSwgdGIsIGVudHJ5LCBleHRhY2spO1xuMTEwMjpcdH1cbjExMDM6XHRcbjExMDQ6XHRzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbjExMDU6XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG4xMTA2Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjExMDc6XHR7XG4xMTA4Olx0XHRzdHJ1Y3QgbmxhdHRyICpuO1xuMTEwOTpcdFx0aW50IGVyciwgcmVtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYmVlbiB0d2Vha2VkIHJlY2VudGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNlZW4gZGlyZWN0IG1vZGlmaWNhdGlvbi4gSSBzZWUgYHRhcHJpb19taW5faW50ZXJ2YWxgLCBhIG5ldyBzdGF0aWMgaGVscGVyLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBBbHNvLCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGFyZSBvbiB0aGUgbGlzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdC4gV2hlcmUgaXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYmVpbmcgaW52b2tlZD8gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBzY2hfdGFwcmlvLmNgIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyB0aGUgb3ZlcmFsbCBzY2hlZHVsaW5nIGxvZ2ljIGFuZCB3aGV0aGVyIEkgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExMDQ9c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTQzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTQ0OnN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0NS1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODM4PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkzMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkzMzpcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTM0LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcHJpbyBTY2hlZHVsZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgYHRhcHJpb19jaGFuZ2VgIGZ1bmN0aW9uIGNhbGxzIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBOb3csIGB0YXByaW9fY2hhbmdlYCBpcyB0aGUgY3J1Y2lhbCBjYWxsYmFjayBmb3IgY2hhbmdlcyBpbiB0aGUgYHRhcHJpb19xZGlzY19vcHNgIHN0cnVjdHVyZS4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgY29kZSwgcGFydGljdWxhcmx5IGBzY2hfdGFwcmlvYCwgYmUgcmVhY2hlZCBpbiB0aGUgZGl2ZXJzZSBlbnZpcm9ubWVudHMgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoLCBsaWtlIHZpcnR1YWwgbWFjaGluZXMgb3Igc3RhbmRhcmQgbmV0bGluayBjb25maWd1cmF0aW9ucz8gVGhlIGFuc3dlciBpcyBhIHNvbGlkIHllcy4gTmV0bGluaywgdmlhIGB0YyBxZGlzYyBhZGQgZGV2IGxvIC4uLiB0YXByaW8gLi4uYCBvciBldmVuIGFueSBuZXRkZXZpY2UgdXNpbmcgcnRuZXRsaW5rIChgUlRNX05FV1FESVNDYCAvIGBSVE1fQ0hBTkdFUURJU0NgKSwgcHJvdmlkZXMgdGhlIHBhdGguIFdlIGFsc28ga25vdyBTeXprYWxsZXIgZnJlcXVlbnRseSB0YXJnZXRzIFRDIHFkaXNjcyBpbmNsdWRpbmcgdGFwcmlvLiBHb29kLCB3ZSBoYXZlIHJlYWNoYWJpbGl0eS4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSAqbW9kaWZpZWQqIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBleGVjdXRhYmxlLiBJbmRlZWQsIG5ldGxpbmsgY29tbWFuZHMgdGhhdCBjb25maWd1cmUgdGhlIHRhcHJpbyBzY2hlZHVsZXIgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgdGhlIHNlcXVlbmNlOiBgdGFwcmlvX2NoYW5nZWAgLSZndDsgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgLSZndDsgYGZpbGxfc2NoZWRfZW50cnlgIC0mZ3Q7IGB0YXByaW9fbWluX2ludGVydmFsYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5mb3JjZXMgdGhlIG1pbmltdW0gc2NoZWR1bGUgaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCA9IDEwIHVzID0gMTAwMDAgbnMpIHdoZW4gZnVsbCBvZmZsb2FkIGFuZCB0eHRpbWUgYXNzaXN0IGFyZSAqbm90KiBlbmFibGVkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUsIG9mIGNvdXJzZSwgaXMgdG8gcHJldmVudCB0aGUgZHJlYWRlZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIHN1YnNlcXVlbnQgQ1BVIHN0YXJ2YXRpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGFwcHJvcHJpYXRlIEZvY3VzU3ltYm9scyBmb3IgYW5hbHlzaXMuIFRoZSBtb3N0IHJlbGV2YW50IG9uZXMgd291bGQgYmU6Ci0gYHRhcHJpb19taW5faW50ZXJ2YWxgCi0gYGZpbGxfc2NoZWRfZW50cnlgCi0gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAKLSBgdGFwcmlvX2NoYW5nZWAKCk5vdyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHRhcHJpb19pbml0YCBvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiBgc2NoX3RhcHJpby5jYCBhbHNvIGNhbGwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgb3IgYHRhcHJpb19jaGFuZ2VgIHRvIGVuc3VyZSB0aGUgY292ZXJhZ2UgaXMgY29tcHJlaGVuc2l2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODE0PXN0YXRpYyBpbnQgdGFwcmlvX21xcHJpb19jbXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzctXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4Mzg6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzktXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwODc9c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMC1cdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEwMTpcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMDItXHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDk6XHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE1MC19XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTYyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NjYtXHQuaW5pdFx0XHQ9IHRhcHJpb19pbml0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTY3Olx0LmNoYW5nZVx0XHQ9IHRhcHJpb19jaGFuZ2UsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NjgtXHQuZGVzdHJveVx0PSB0YXByaW9fZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIxOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBGaXJzdCB1cCwgSSBzaG91bGQgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX1NDSF9UQVBSSU9gIGlzIHByb3Blcmx5IHNldC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBhIHJlbGF0ZWQgcXVlc3Rpb24gaXMgd2hldGhlciBgQ09ORklHX05FVF9TQ0hFRGAgaXMgYSBwcmVyZXF1aXNpdGUuIFRvIGZpZ3VyZSB0aGF0IG91dCwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgaXMgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3NwoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBBc3Nlc3NtZW50IG9mIHRoZSBUQVBSSU8gTmV0d29yayBTY2hlZHVsZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgTkVUX1NDSF9UQVBSSU9gIGFuZCBgTkVUX1NDSEVEYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBHb29kLCBhbmQgc2luY2UgYE5FVF9TQ0hfVEFQUklPYCBwdWxscyBpbiBgTkVUX1NDSF9NUVBSSU9fTElCYCwgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCB0b28uIE5vdywgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPwoKWWVzLCBpdCBpcyEgVGhpcyBjb2RlIG1vZGlmaWVzIHBhcmFtZXRlciB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgVEFQUklPIHF1ZXVpbmcgZGlzY2lwbGluZS4gVGhhdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2AgYW5kIGBSVE1fQ0hBTkdFUURJU0NgLiBUaGF0JiMzOTtzIGEgZ3JlYXQgdmVjdG9yIGZvciBmdXp6aW5nLgoKTmV4dCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCBhIHN0cm9uZyBsaXN0IGhlcmU6IGB0YXByaW9fbWluX2ludGVydmFsYCwgYGZpbGxfc2NoZWRfZW50cnlgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIGB0YXByaW9fY2hhbmdlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKTXkgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgYE5FVF9TQ0hfVEFQUklPYCBhbmQgYE5FVF9TQ0hFRGAuCgpBIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0gbXkgYXNzZXNzbWVudC4gRXZlcnl0aGluZyBsb29rcyBnb29kOiB0aGUgZnV6emluZyB0YXJnZXQgaXMgdmFsaWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBub24tdWJpcXVpdG91cywgZGlyZWN0bHkgYWx0ZXJlZCwgb3IgY2FsbGVyczogYHRhcHJpb19taW5faW50ZXJ2YWxgLCBgZmlsbF9zY2hlZF9lbnRyeWAsIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBhbmQgYHRhcHJpb19jaGFuZ2VgLiBUaGUgZW5hYmxlIGNvbmZpZ3MgY2hlY2sgb3V0LCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBjb3JyZWN0LiBOb3csIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCYjMzk7cyBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fbWluX2ludGVydmFsJiMzNDssCiAgICAmIzM0O2ZpbGxfc2NoZWRfZW50cnkmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fbWluX2ludGVydmFsJiMzNDssCiAgICAmIzM0O2ZpbGxfc2NoZWRfZW50cnkmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIDEwdXMpIGZvciB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbikgdG8gcHJldmVudCBDUFUgc3RhcnZhdGlvbiBhbmQgdGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gSXQgaW50cm9kdWNlcyB0aGUgaGVscGVyIGB0YXByaW9fbWluX2ludGVydmFsKClgIGFuZCBhZGp1c3RzIHRoZSBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAuXG5cblRoZXNlIGNoYW5nZXMgb25seSB0aWdodGVuIGlucHV0IHZhbGlkYXRpb24gb24gc2NoZWR1bGUgaW50ZXJ2YWxzIGFuZCBjeWNsZSB0aW1lcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJ1ZmZlciBpbmRleC9sZW5ndGggYWx0ZXJhdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMjRiZTRlNTY3ZmYxNGRkN2VlNjU2MTBlMDJhYmIxZmY0ZTU2NjkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDM5YWM1Yjk3YWEzYWYuLjM4OTBjZGJmY2I0ZjEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtNDgsNiAmIzQzOzQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbzsKICAqIDYwICogMTcgJmd0OyBQU0VDX1BFUl9OU0VDICgxMDAwKQogICovCiAjZGVmaW5lIFRBUFJJT19QSUNPU19QRVJfQllURV9NSU4gMTcKJiM0MzsvKiBNaW5pbXVtIGludGVydmFsIGZvciBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbiBhZHZhbmNlX3NjaGVkKSB0bwomIzQzOyAqIGF2b2lkIGhydGltZXIgaW50ZXJydXB0IHN0b3JtcyBhbmQgQ1BVIHN0YXJ2YXRpb24uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TICgxMCAqIE5TRUNfUEVSX1VTRUMpCiAKIHN0cnVjdCBzY2hlZF9lbnRyeSB7CiAJLyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlCkBAIC0yNTksNiAmIzQzOzI2MywxNyBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKQogCXJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpOwogfQogCiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpCiYjNDM7ewomIzQzOwlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsKJiM0MzsJaWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLSZndDtmbGFncykgJmFtcDsmYW1wOwomIzQzOwkgICAgIVRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRChxLSZndDtmbGFncykpCiYjNDM7CQltaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fZHVyYXRpb247CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKQogewogCXJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZCgmYW1wO3EtJmd0O3BpY29zX3Blcl9ieXRlKSk7CkBAIC0xMDM5LDcgJiM0MzsxMDU0LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCSAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJdTMyIGludGVydmFsID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pCkBAIC0xMTMwLDYgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQkJCSBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsCiAJCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHsKQEAgLTExNjcsNyAmIzQzOzExODMsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJCW5ldy0mZ3Q7Y3ljbGVfdGltZSA9IGN5Y2xlOwogCX0KIAotCWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyBuZXctJmd0O251bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkgewomIzQzOwlpZiAobmV3LSZndDtjeWNsZV90aW1lICZsdDsgKHM2NCluZXctJmd0O251bV9lbnRyaWVzICogbWluX2R1cmF0aW9uKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGwmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZnV6emluZy4gRmlyc3QsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IGAjZGVmaW5lYCBmb3IgdGhlIG1pbmltdW0gc29mdHdhcmUgaW50ZXJ2YWw6IGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCB3aGljaCBpcyBzZXQgdG8gMTAgbWljcm9zZWNvbmRzLiBUaGV5JiMzOTt2ZSBhbHNvIGRlZmluZWQgYSBoZWxwZXIgZnVuY3Rpb24sIGB0YXByaW9fbWluX2ludGVydmFsYCwgdGhhdCBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIGR1cmF0aW9uIGZvciB0YXByaW8gc2NoZWR1bGUgaW50ZXJ2YWxzLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgbm90ZSBhYm91dCBzb2Z0d2FyZSBtb2RlIGFuZCBocnRpbWVycy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBocnRpbWVyIHN0b3JtcyBvciBDUFUgc3RhcnZhdGlvbiBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIDEwdXMgaW50ZXJ2YWwuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgdGhleeKAmXZlIG1vZGlmaWVkIHR3byBrZXkgZnVuY3Rpb25zOiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4gSW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBsZW5ndGhfdG9fZHVyYXRpb25gIHdpdGggYHRhcHJpb19taW5faW50ZXJ2YWxgLiAgVGhpcyBzdWdnZXN0cyB0aGUgbWluaW11bSBkdXJhdGlvbiBjYWxjdWxhdGlvbiBpcyBub3cgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZC4gIFRoZW4sIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAsIHRoZXnigJl2ZSBzd2FwcGVkIG91dCBhIGhhcmRjb2RlZCBtaW5pbXVtIHdpdGggYSBjYWxsIHRvIHRoZSBuZXcgYG1pbl9kdXJhdGlvbmAgdmFyaWFibGUuIFRoaXMgZnVydGhlciByZWluZm9yY2VzIHRoZSBkeW5hbWljIG1pbmltdW0gZHVyYXRpb24uCgpUaGUgY2hhbmdlIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgbG9va3MgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgYXMgaXQgbm93IGNvbXBhcmVzIGBjeWNsZV90aW1lYCB3aXRoIHRoZSBjYWxjdWxhdGVkIGBtaW5fZHVyYXRpb25gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cyBpbiB0aGVzZSBuZXcgY2FsY3VsYXRpb25zLCBlc3BlY2lhbGx5IHdpdGggdGhlIGAoczY0KWAgY2FzdD8gV2UgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZC4KCk5vdywgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NoZWR1bGVyIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgY2FsY3VsYXRlZCBkdXJhdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEkmIzM5O2xsIHRoZW4gZGVjaWRlIGlmIHdlIHNob3VsZCBydW4gdGhlIEtNU0FOIGZ1enplciB0byBsb29rIGZvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9zY2hlZF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0YXByaW9fcG9saWN5W1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDUyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDUzOnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwNTQtXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg1PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMDAtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMDE6XHRyZXR1cm4gZmlsbF9zY2hlZF9lbnRyeShxLCB0YiwgZW50cnksIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMDItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmb3IgU2NoZWR1bGluZyBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFRoZSBjb3JlIGZvY3VzIGhlcmUgaXMgdW5kb3VidGVkbHkgc2NoZWR1bGluZyBhbmQgaG93IHdlJiMzOTtyZSB0cmFuc2xhdGluZyBhIFRBUFJJTyBzY2hlZHVsZSBpbnRvIHNvbWV0aGluZyB1c2FibGUgd2l0aGluIHRoZSBzeXN0ZW0uIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaG93IGBmaWxsX3NjaGVkX2VudHJ5YCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgc2NoZWR1bGVyJiMzOTtzIGRhdGEgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBhcmUgd2UgYnVpbGRpbmcgYSBzdHJhaWdodGZvcndhcmQgbGlzdCBvZiB0aW1lLWJvdW5kIGV2ZW50cywgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBkYXRhIGRlcGVuZGVuY2llcyBiZWluZyBlbmNvZGVkPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgVEFQUklPIHNjaGVkdWxlcyBjYW4gaW52b2x2ZSBzb3BoaXN0aWNhdGVkIHByaW9yaXRpZXMsIHByZWVtcHRpb24gcnVsZXMsIGFuZCBwb3NzaWJseSBldmVuIHJlc291cmNlIGFsbG9jYXRpb24uIFNvLCBJJiMzOTttIHRyeWluZyB0byBzZWUgaWYgdGhhdCBjb21wbGV4aXR5IGlzIHJlZmxlY3RlZCwgYW5kIGlmIHNvLCBob3cgaXQmIzM5O3MgaGFuZGxlZC4gSXMgaXQgdGhyb3VnaCBuZXN0ZWQgc3RydWN0dXJlcywgYml0bWFwcywgb3Igc29tZXRoaW5nIG1vcmUgZWxlZ2FudD8gSSBhbnRpY2lwYXRlIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbnRlcnByZXRpbmcgdGhlIFRBUFJJTyBzY2hlZHVsZSBpdHNlbGYuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSBwYXJzaW5nIHRoZSBUQVBSSU8gZm9ybWF0LCB2YWxpZGF0aW9uLCBhbmQgc29tZSBkZWdyZWUgb2Ygc2VtYW50aWMgYW5hbHlzaXMuIFdlIHNob3VsZCBoYXZlIGVycm9yIGhhbmRsaW5nIGhlcmUsIGdpdmVuIHRoYXQgVEFQUklPIHNjaGVkdWxlcyBjYW4gYmUgcXVpdGUgaW50cmljYXRlIGFuZCBwb3RlbnRpYWxseSBlcnJvbmVvdXMgaW4gaW5wdXQuIElzIHRoaXMgcGFyc2VyIHJvYnVzdD8gRG9lcyBpdCBjaGVjayBmb3IgY29uZmxpY3RpbmcgZGVhZGxpbmVzLCByZXNvdXJjZSBvdmVyLWFsbG9jYXRpb24sIGFuZCBvdGhlciBwb3RlbnRpYWwgcGl0ZmFsbHM/IEFsc28sIGhvdyBkb2VzIGl0IGhhbmRsZSBjb3JuZXIgY2FzZXMgbGlrZSBlbXB0eSBzY2hlZHVsZXMgb3IgaW52YWxpZGx5IGZvcm1hdHRlZCBlbnRyaWVzPyBBIGNyaXRpY2FsIHBvaW50IHRvIGV4YW1pbmUgaXMgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIERvZXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgY29uc3RydWN0IGEgdGVtcG9yYXJ5IHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlbiBgZmlsbF9zY2hlZF9lbnRyeWAgdHJhbnNsYXRlcyB0aGlzIHRvIGEgZm9ybWF0IHRoZSBzY2hlZHVsZXIgdW5kZXJzdGFuZHMsIG9yIGlzIGl0IGEgbW9yZSBpbnRlZ3JhdGVkIHByb2Nlc3M/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGVuZC10by1lbmQgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjaGVkdWxlciYjMzk7cyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgaG93IGEgVEFQUklPIHNjaGVkdWxlIGdldHMgY29udmVydGVkIGludG8gaXQsIGFuZCB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlc3VsdGluZyBlbnRyeS4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6IElzIHRoaXMgc2NoZWR1bGluZyBhbGdvcml0aG0gZWZmaWNpZW50PyBIb3cgZG9lcyB0aGUgc2NoZWR1bGVyIGhhbmRsZSB1cGRhdGVzIHRvIHRoZSBUQVBSSU8gc2NoZWR1bGU/IEFyZSB3ZSBnb2luZyB0byBzZWUgcG90ZW50aWFsIGZvciByZWFsLXRpbWUgaXNzdWVzLCBpZiB0aGUgc2NoZWR1bGVzIGNoYW5nZSBkeW5hbWljYWxseT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDQwOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQxOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0gICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzY0IH0sXG4xMDQyOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0gICAgICAgICA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4xMDQzOlx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NMT0NLSURdICAgICAgICAgICAgICA9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4xMDQ0Olx0XHRbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdICAgICAgICAgICA9XG4xMDQ1Olx0XHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRV9TSUdORUQoTkxBX1M2NCwgXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxuMTA0NjpcdFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxuMTA0NzpcdFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxuMTA0ODpcdFx0XHROTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgVEFQUklPX1NVUFBPUlRFRF9GTEFHUyksXG4xMDQ5Olx0XHRbVENBX1RBUFJJT19BVFRSX1RYVElNRV9ERUxBWV1cdFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xMDUwOlx0XHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVx0XHQgICAgID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbjEwNTE6XHR9O1xuMTA1MjpcdFxuMTA1MzpcdHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4xMDU0Olx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4xMDU1Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEwNTY6XHR7XG4xMDU3Olx0XHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbjEwNTg6XHRcdHUzMiBpbnRlcnZhbCA9IDA7XG4xMDU5Olx0XG4xMDYwOlx0XHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKVxuMTA2MTpcdFx0XHRlbnRyeS1cdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcbjEwNjI6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pO1xuMTA2MzpcdFxuMTA2NDpcdFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfR0FURV9NQVNLXSlcbjEwNjU6XHRcdFx0ZW50cnktXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXG4xMDY2Olx0XHRcdFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9HQVRFX01BU0tdKTtcbjEwNjc6XHRcbjEwNjg6XHRcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSlcbjEwNjk6XHRcdFx0aW50ZXJ2YWwgPSBubGFfZ2V0X3UzMihcbjEwNzA6XHRcdFx0XHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0lOVEVSVkFMXSk7XG4xMDcxOlx0XG4xMDcyOlx0XHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XG4xMDczOlx0XHQgKiBmcmFtZSB0byBnbyBvdXQuXG4xMDc0Olx0XHQgKi9cbjEwNzU6XHRcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4xMDc2Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcJiMzNDspO1xuMTA3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwNzg6XHRcdH1cbjEwNzk6XHRcbjEwODA6XHRcdGVudHJ5LVx1MDAzZWludGVydmFsID0gaW50ZXJ2YWw7XG4xMDgxOlx0XG4xMDgyOlx0XHRyZXR1cm4gMDtcbjEwODM6XHR9XG4xMDg0Olx0XG4xMDg1Olx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpuLFxuMTA4NjpcdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxuMTA4NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTA4ODpcdHtcbjEwODk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfTUFYICYjNDM7IDFdID0geyB9O1xuMTA5MDpcdFx0aW50IGVycjtcbjEwOTE6XHRcbjEwOTI6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9NQVgsIG4sXG4xMDkzOlx0XHRcdFx0XHRcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcbjEwOTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwOTU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XCYjMzQ7KTtcbjEwOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlbnRyeS1cdTAwM2VpbmRleCA9IGluZGV4O1xuMTEwMDpcdFxuMTEwMTpcdFx0cmV0dXJuIGZpbGxfc2NoZWRfZW50cnkocSwgdGIsIGVudHJ5LCBleHRhY2spO1xuMTEwMjpcdH1cbjExMDM6XHRcbjExMDQ6XHRzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbjExMDU6XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG4xMTA2Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjExMDc6XHR7XG4xMTA4Olx0XHRzdHJ1Y3QgbmxhdHRyICpuO1xuMTEwOTpcdFx0aW50IGVyciwgcmVtO1xuMTExMDpcdFx0aW50IGkgPSAwO1xuMTExMTpcdFxuMTExMjpcdFx0aWYgKCFsaXN0KVxuMTExMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMTQ6XHRcbjExMTU6XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQobiwgbGlzdCwgcmVtKSB7XG4xMTE2Olx0XHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4xMTE3Olx0XG4xMTE4Olx0XHRcdGlmIChubGFfdHlwZShuKSAhPSBUQ0FfVEFQUklPX1NDSEVEX0VOVFJZKSB7XG4xMTE5Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBdHRyaWJ1dGUgaXMgbm90IG9mIHR5cGUgJiMzOTtlbnRyeSYjMzk7XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc2NoZWR1bGUgcGFyc2luZy4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgY29yZSBsb2dpYywgYnV0IGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBoYXZlIGEgcXVpY2sgZ2xhbmNlIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gVGhlIHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGVuc3VyaW5nIHRoZSBvdXRwdXQgZm9ybWF0IGlzIGNvcnJlY3QgYW5kIHRoYXQgaXQgd2lsbCBpbnRlZ3JhdGUgcHJvcGVybHkgd2l0aCB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbi4KCkkgd2FudCB0byBzZWUgaWYgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyBhbGlnbiB3aXRoIHRoZSBhc3N1bXB0aW9ucyBJJiMzOTttIG1ha2luZyBpbiB0aGUgcGFydCBJJiMzOTttIHdvcmtpbmcgb24uIFNwZWNpZmljYWxseSwgYXJlIHRoZXJlIGFueSBlZGdlIGNhc2VzIGhhbmRsZWQgdGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IERvZXMgaXQgcGVyZm9ybSBhbnkga2luZCBvZiBpbnB1dCB2YWxpZGF0aW9uIG9yIHByZS1wcm9jZXNzaW5nIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBkYXRhIEkmIzM5O20gdXNpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHByZXZlbnRpbmcgYnVncyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBkb2NzdHJpbmdzIGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgbG9naWMgZm9yIGFueSByZWQgZmxhZ3Mgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmZsaWN0LiBIb3BlZnVsbHksIGV2ZXJ5dGhpbmcmIzM5O3MgY2xlYW4sIGFuZCBJIGNhbiBqdXN0IG1vdmUgZm9yd2FyZC4gQnV0IGl0JiMzOTtzIGFsd2F5cyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzY2hlZHVsZXMgYW5kIHRoZWlyIGNvbXBsZXhpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTQwOlx0XG4xMTQxOlx0XHRyZXR1cm4gaTtcbjExNDI6XHR9XG4xMTQzOlx0XG4xMTQ0Olx0c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuMTE0NTpcdFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbjExNDY6XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xMTQ3Olx0e1xuMTE0ODpcdFx0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4xMTQ5Olx0XHRpbnQgZXJyID0gMDtcbjExNTA6XHRcbjExNTE6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuMTE1MjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0FkZGluZyBhIHNpbmdsZSBlbnRyeSBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjExNTM6XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbjExNTQ6XHRcdH1cbjExNTU6XHRcbjExNTY6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcbjExNTc6XHRcdFx0bmV3LVx1MDAzZWJhc2VfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdKTtcbjExNTg6XHRcbjExNTk6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKVxuMTE2MDpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcbjExNjE6XHRcbjExNjI6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV0pXG4xMTYzOlx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKTtcbjExNjQ6XHRcbjExNjU6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXG4xMTY2Olx0XHRcdGVyciA9IHBhcnNlX3NjaGVkX2xpc3QocSwgdGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdLFxuMTE2NzpcdFx0XHRcdFx0ICAgICAgIG5ldywgZXh0YWNrKTtcbjExNjg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMTY5Olx0XHRcdHJldHVybiBlcnI7XG4xMTcwOlx0XG4xMTcxOlx0XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4xMTcyOlx0XHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4xMTczOlx0XHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuMTE3NDpcdFxuMTE3NTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbjExNzY6XHRcdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuMTE3NzpcdFxuMTE3ODpcdFx0XHRpZiAoY3ljbGUgXHUwMDNjIDAgfHwgY3ljbGUgXHUwMDNlIElOVF9NQVgpIHtcbjExNzk6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWdcJiMzNDspO1xuMTE4MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTE4MTpcdFx0XHR9XG4xMTgyOlx0XG4xMTgzOlx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4xMTg0Olx0XHR9XG4xMTg1Olx0XG4xMTg2Olx0XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIChzNjQpbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbWluX2R1cmF0aW9uKSB7XG4xMTg3Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIHNtYWxsXCYjMzQ7KTtcbjExODg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTg5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTIKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQVBSSU8gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNjaGVkdWxpbmcgYW5kIHRpbWluZy4gU28sIEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlIG1ldGljdWxvdXNseS4KCkZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIHNldHRpbmcgaXQgdG8gMTAgbWljcm9zZWNvbmRzLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbWluaW11bS4gVGhlbiwgaXQgaW1wbGVtZW50cyBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYC4gRXNzZW50aWFsbHksIHRoaXMgZnVuY3Rpb24gKmVuZm9yY2VzKiBhIDEwdXMgbWluaW11bSBgbWluX2R1cmF0aW9uYCB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlLCBtZWFuaW5nIG5laXRoZXIgZnVsbCBvZmZsb2FkIG5vciBUWFRJTUVfQVNTSVNUIGFyZSBlbmFibGVkLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBzYWZldHkgbmV0IOKAkyBwcmV2ZW50aW5nIHVzZXJzIGZyb20gc3BlY2lmeWluZyByaWRpY3Vsb3VzbHkgc2hvcnQgaW50ZXJ2YWxzLCB3aGljaCBjb3VsZCB3cmVhayBoYXZvYyB3aXRoIGhydGltZXJzIGFuZCBwb3NzaWJseSBsb2NrIHRoaW5ncyB1cCBvciBzdGFydmUgdGhlIENQVS4gR29vZC4KCk5leHQsIEkgc2VlIHRoYXQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCBub3cgY2FzdHMgYG5ldy0mZ3Q7bnVtX2VudHJpZXNgIHRvIGBzNjRgLiBUaGlzIGlzIHNtYXJ0OyBpdCYjMzk7cyBhIHByZWVtcHRpdmUgc3RyaWtlIGFnYWluc3QgcG90ZW50aWFsIG92ZXJmbG93IGlzc3VlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0b3RhbCBzY2hlZHVsZSBkdXJhdGlvbjogYChzNjQpbmV3LSZndDtudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbmAuIFByZXZlbnRpbmcgb3ZlcmZsb3cgaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiB0aW1lLWNyaXRpY2FsIHN5c3RlbXMuCgpGaW5hbGx5LCBgZmlsbF9zY2hlZF9lbnRyeSgpYCBlbnN1cmVzIHRoZSBgaW50ZXJ2YWxgIGlzICphbHdheXMqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbWluX2R1cmF0aW9uYC4gQW5vdGhlciBsYXllciBvZiBwcm90ZWN0aW9uLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbnM6IERvZXMgdGhpcyBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBtaWdodCBsZWF2ZSBmaWVsZHMgdW5pbml0aWFsaXplZD8gTm8sIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBpdC4gTm8gY2hhbmdlcyB0byB0aGUgc3RydWN0cy4gSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZSwgdGhlIGNvZGUgcmVsaWVzIG9uIGluaXRpYWxpemVkIGZsYWdzIGFuZCBjb25zdGFudHMuIEFueXRoaW5nIG5ldyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgdGhhdCBtaWdodCBpbnRyb2R1Y2Ugcmlza3M/IE5vIG5ldyBhbGxvY2F0aW9uczsgdGhpcyBpcyBhYm91dCBjb25zdHJhaW5pbmcgKmV4aXN0aW5nKiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMuIERvZXMgaXQgaW50cm9kdWNlIGFueSBib3VuZHMgY2hlY2sgZmxhd3MgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBleGlzdGluZyBidWZmZXJzPyBObywgaXQmIzM5O3MgYSAqdGlnaHRlbmluZyogb2YgdGhlIGNoZWNrLCBlbnN1cmluZyBwYXJhbWV0ZXJzIG1lZXQgYSAqbWluaW11bSogdGhyZXNob2xkLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIGV4YW1pbmF0aW9uLCBJIHNlZSBubyBpbW1lZGlhdGUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgY2F0Y2ggYW55dGhpbmcgZWxzZSBtZW1vcnkgc2FmZXR5IHJlbGF0ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGlzc3VlIGlzIHByZXNlbnQgaGVyZS4KCkkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBgZmFsc2VgLCBhbmQgSSB3aWxsIHByb3ZpZGUgdGhpcyBkZXRhaWxlZCByZWFzb25pbmcgYXMgdGhlIGp1c3RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCAxMHVzKSBmb3IgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgd2hlbiBvcGVyYXRpbmcgaW4gc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4pIHRvIHByZXZlbnQgQ1BVIHN0YXJ2YXRpb24gYW5kIHRpbWVyIGludGVycnVwdCBzdG9ybXMuIEl0IGludHJvZHVjZXMgdGhlIGhlbHBlciBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCBhbmQgYWRqdXN0cyB0aGUgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGluIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIDEwdXMpIGZvciB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbikgdG8gcHJldmVudCBDUFUgc3RhcnZhdGlvbiBhbmQgdGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gSXQgaW50cm9kdWNlcyB0aGUgaGVscGVyIGB0YXByaW9fbWluX2ludGVydmFsKClgIGFuZCBhZGp1c3RzIHRoZSBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAuXG5cblRoZXNlIGNoYW5nZXMgb25seSB0aWdodGVuIGlucHV0IHZhbGlkYXRpb24gb24gc2NoZWR1bGUgaW50ZXJ2YWxzIGFuZCBjeWNsZSB0aW1lcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJ1ZmZlciBpbmRleC9sZW5ndGggYWx0ZXJhdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjQ3LjE5MTM0OTkxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODU0NzM3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCIsXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXByaW9fbWluX2ludGVydmFsXCIsXG4gICAgXCJmaWxsX3NjaGVkX2VudHJ5XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIixcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCAxMHVzKSBmb3IgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgd2hlbiBvcGVyYXRpbmcgaW4gc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4pIHRvIHByZXZlbnQgQ1BVIHN0YXJ2YXRpb24gYW5kIHRpbWVyIGludGVycnVwdCBzdG9ybXMuIEl0IGludHJvZHVjZXMgdGhlIGhlbHBlciBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCBhbmQgYWRqdXN0cyB0aGUgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGluIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSB0aWdodGVuIGlucHV0IHZhbGlkYXRpb24gb24gc2NoZWR1bGUgaW50ZXJ2YWxzIGFuZCBjeWNsZSB0aW1lcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJ1ZmZlciBpbmRleC9sZW5ndGggYWx0ZXJhdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gZm9yIHNvZnR3YXJlLWRyaXZlbiAoaHJ0aW1lci1iYXNlZCkgdGFwcmlvIHNjaGVkdWxlIGVudHJpZXMgdG8gcHJldmVudCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGRldiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0Mzo0Ny4xOTEzNTYyODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTUwNjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyNGJlNGU1NjdmZjE0ZGQ3ZWU2NTYxMGUwMmFiYjFmZjRlNTY2OTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjM4OTBjZGJmY2I0ZjEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5AQCAtNDgsNiArNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xcbiAgKiA2MCAqIDE3IFxcdTAwM2UgUFNFQ19QRVJfTlNFQyAoMTAwMClcXG4gICovXFxuICNkZWZpbmUgVEFQUklPX1BJQ09TX1BFUl9CWVRFX01JTiAxN1xcbisvKiBNaW5pbXVtIGludGVydmFsIGZvciBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbiBhZHZhbmNlX3NjaGVkKSB0b1xcbisgKiBhdm9pZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIENQVSBzdGFydmF0aW9uLlxcbisgKi9cXG4rI2RlZmluZSBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TICgxMCAqIE5TRUNfUEVSX1VTRUMpXFxuIFxcbiBzdHJ1Y3Qgc2NoZWRfZW50cnkge1xcbiBcXHQvKiBEdXJhdGlvbnMgYmV0d2VlbiB0aGlzIEdDTCBlbnRyeSBhbmQgdGhlIEdDTCBlbnRyeSB3aGVyZSB0aGVcXG5AQCAtMjU5LDYgKzI2MywxNyBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxcbiBcXHRyZXR1cm4gZGl2X3U2NChsZW4gKiBhdG9taWM2NF9yZWFkKFxcdTAwMjZxLVxcdTAwM2VwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHRhcHJpb19taW5faW50ZXJ2YWwoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG4re1xcbitcXHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcXG4rXFxuK1xcdGlmICghRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhVFhUSU1FX0FTU0lTVF9JU19FTkFCTEVEKHEtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0bWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpO1xcbitcXG4rXFx0cmV0dXJuIG1pbl9kdXJhdGlvbjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxcbiB7XFxuIFxcdHJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZChcXHUwMDI2cS1cXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcXG5AQCAtMTAzOSw3ICsxMDU0LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0aW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7XFxuK1xcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbiBcXHR1MzIgaW50ZXJ2YWwgPSAwO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcXG5AQCAtMTEzMCw2ICsxMTQ1LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbkBAIC0xMTY3LDcgKzExODMsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobmV3LVxcdTAwM2VjeWNsZV90aW1lIFxcdTAwM2MgbmV3LVxcdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcXG4rXFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIChzNjQpbmV3LVxcdTAwM2VudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjQ3LjU5MzU1ODU4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM0OTAxNzM0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9UQVBSSU9cIixcbiAgICBcIk5FVF9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19taW5faW50ZXJ2YWxcIixcbiAgICBcImZpbGxfc2NoZWRfZW50cnlcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICAgIFwidGFwcmlvX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGZvciBzb2Z0d2FyZS1kcml2ZW4gKGhydGltZXItYmFzZWQpIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHRvIHByZXZlbnQgaHJ0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRkZXYgY29uZmlndXJhdGlvbiBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMjRiZTRlNTY3ZmYxNGRkN2VlNjU2MTBlMDJhYmIxZmY0ZTU2NjkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjo0Mzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5pbmRleCAzOWFjNWI5N2FhM2FmLi4zODkwY2RiZmNiNGYxIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuKysrIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuQEAgLTQ4LDYgKzQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbztcbiAgKiA2MCAqIDE3IFx1MDAzZSBQU0VDX1BFUl9OU0VDICgxMDAwKVxuICAqL1xuICNkZWZpbmUgVEFQUklPX1BJQ09TX1BFUl9CWVRFX01JTiAxN1xuKy8qIE1pbmltdW0gaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuIGFkdmFuY2Vfc2NoZWQpIHRvXG4rICogYXZvaWQgaHJ0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zIGFuZCBDUFUgc3RhcnZhdGlvbi5cbisgKi9cbisjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwICogTlNFQ19QRVJfVVNFQylcbiBcbiBzdHJ1Y3Qgc2NoZWRfZW50cnkge1xuIFx0LyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlXG5AQCAtMjU5LDYgKzI2MywxNyBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxuIFx0cmV0dXJuIGRpdl91NjQobGVuICogYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxuK3tcbitcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1xuK1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhVFhUSU1FX0FTU0lTVF9JU19FTkFCTEVEKHEtXHUwMDNlZmxhZ3MpKVxuK1x0XHRtaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7XG4rXG4rXHRyZXR1cm4gbWluX2R1cmF0aW9uO1xuK31cbitcbiBzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG4ge1xuIFx0cmV0dXJuIGRpdl91NjQoZHVyYXRpb24gKiBQU0VDX1BFUl9OU0VDLCBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcbkBAIC0xMDM5LDcgKzEwNTQsNyBAQCBzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0aW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7XG4rXHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcbiBcdHUzMiBpbnRlcnZhbCA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9DTURdKVxuQEAgLTExMzAsNiArMTE0NSw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbkBAIC0xMTY3LDcgKzExODMsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4gXHR9XG4gXG4tXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbitcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiBtaW5fZHVyYXRpb24pIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIidjeWNsZV90aW1lJyBpcyB0b28gc21hbGxcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NDcuNTkzNTYwOTI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3OTI3NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgYSBtZW50YWwgY2hlY2tsaXN0LiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqd29ydGgqIHNwZW5kaW5nIGZ1enppbmcgY3ljbGVzIG9uPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvZGUgY2hhbmdlcyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyAtIG1lbW9yeSBjb3JydXB0aW9uLCBpbnRlZ2VyIG92ZXJmbG93cywgcmFjZSBjb25kaXRpb25zLCB0aGF0IHNvcnQgb2YgdGhpbmcuIElmIGl0IHNlZW1zIHByb21pc2luZywgdGhlbiBpdCdzIHRpbWUgdG8gbWFwIG91dCBhIGZ1enppbmcgc3RyYXRlZ3kuIFRoYXQgbWVhbnMgZmlndXJpbmcgb3V0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gZXhlcmNpc2UgdGhlIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBwb2ludCBpbiBzcGlubmluZyB3aGVlbHMgaWYgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGRpc2FibGVkIGR1ZSB0byBhIG1pc2NvbmZpZ3VyYXRpb24uXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRob3NlIGZvY3VzIHN5bWJvbHMuIFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgcHJvY2VzcyB0aGUgbW9zdCBcImludGVyZXN0aW5nXCIgZGF0YT8gSSdsbCBuZWVkIGEgc29saWQgbGlzdCBvZiB0aG9zZSBmdW5jdGlvbnMgdG8gZ3VpZGUgdGhlIGZ1enppbmcgcHJvY2VzcyBhbmQgZW5zdXJlIG1heGltdW0gY29kZSBjb3ZlcmFnZS5cblxuQXMgZm9yIHVuY292ZXJpbmcgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdGFwcmlvIGltcGxlbWVudGF0aW9uLCBJJ2xsIGxldmVyYWdlIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGFuZCB0aGUgdHlwaWNhbCB0b29scy4gSSdsbCBsaWtlbHkgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXMgdGhhdCB0ZW5kcyB0byBiZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzIGV5ZSB2aWV3LiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZGlyZWN0bHkuIFRoYXQncyB1c3VhbGx5IHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIHRoYXQgdHlwZSBvZiBjb25maWd1cmF0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0Mzo1My4zNzI4NDA4NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTQ0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1NDSF9UQVBSSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0xNjc9Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMTcxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjE3Mjpjb25maWcgTkVUX1NDSF9UQVBSSU9cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIlRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXFxcIlxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcXHQrPSBzY2hfZXRmLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX05FVF9TQ0hfVEFQUklPKVxcdCs9IHNjaF90YXByaW8ub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUX1NDSF9CUEYpXFx0Kz0gYnBmX3FkaXNjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NTMuNDIxNzYwNDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMDQxNTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5LiBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIExldCdzIGNvbmZpcm0gdGhhdCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMTcyLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiZWNhdXNlIEkgY2FuIHVzdWFsbHkgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHdpdGhpbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgYSBLY29uZmlnIGZpbGUuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgbW9kdWxlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBvciBpbXBhY3RlZCBieSB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBzaG91bGQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjU1LjYyMjIwMzM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ldGYuXFxuIDE2NjpcXHRcXG4gMTY3OlxcdGNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcXG4gMTY4OlxcdFxcdHRyaXN0YXRlXFxuIDE2OTpcXHRcXHRoZWxwXFxuIDE3MDpcXHRcXHQgIENvbW1vbiBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgbXFwcmlvIHF1ZXVlIGNvbmZpZ3VyYXRpb25zLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgTkVUX1NDSF9UQVBSSU9cXG4gMTczOlxcdFxcdHRyaXN0YXRlIFxcXCJUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclxcXCJcXG4gMTc0OlxcdFxcdHNlbGVjdCBORVRfU0NIX01RUFJJT19MSUJcXG4gMTc1OlxcdFxcdGhlbHBcXG4gMTc2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgcGFja2V0XFxuIDE3NzpcXHRcXHQgIHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxODI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG4gMTgzOlxcdFxcbiAxODQ6XFx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxcbiAxODU6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcXFwiXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBHZW5lcmljIFJhbmRvbSBFYXJseSBEZXRlY3Rpb25cXG4gMTg4OlxcdFxcdCAgKEdSRUQpIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobSBmb3Igc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlc1xcbiAxODk6XFx0XFx0ICAoc2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1xcdTAwM2UgZm9yIGRldGFpbHMgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQzOjU1LjYyMjI5MTc0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTcyNTI2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBhbmFseXppbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFRhcHJpbyBDaGFuZ2VzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIHVwZGF0ZWQgaW4gdGhlIFRhcHJpbyBzY2hlZHVsZXIuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgcGF0Y2ggbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBJIHdhbnQgdG8gc2VlIHRoZSBkaWZmcy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBlZmZlY3RpdmVseSByZXZpZXcgdGhlbTogZ2l0IGRpZmYsIGNvZGUgY29tcGFyaXNvbiwgd2hhdGV2ZXIgaXQgdGFrZXMuIE9uY2UgSSBoYXZlIHRoZSBjaGFuZ2VkIGxpbmVzLCBJJ20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyB0aGF0IHNlY3Rpb24gb2YgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBObyBuZWVkIHRvIHJlYWQgdGhlIGVudGlyZSBmaWxlLCBqdXN0IHdoYXQncyByZWxldmFudCB0byB0aGUgbW9kaWZpY2F0aW9uLiBJJ2xsIGxvb2sgYXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGNoYW5nZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhcyB3ZWxsIGFzIHRoZSAqd2hhdCouIFdoYXQgY29kZSBhcmUgdGhleSB0b3VjaGluZyBhbmQgd2hhdCB3ZXJlIHRoZSByZWFzb25zLiBJcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBBIG5ldyBmZWF0dXJlPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGRvZXMgaXQgYWZmZWN0IHRoZSBzY2hlZHVsaW5nIGRlY2lzaW9ucz9cblxuXG4iLCJJbnB1dFRva2VucyI6NDcyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NTkuMDM5NTQ3NDA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzMDpcXHRcXG4xMDMxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uX3NpZ25lZCB0YXByaW9fY3ljbGVfdGltZV9yYW5nZSA9IHtcXG4xMDMyOlxcdFxcdC5taW4gPSAwLFxcbjEwMzM6XFx0XFx0Lm1heCA9IElOVF9NQVgsXFxuMTAzNDpcXHR9O1xcbjEwMzU6XFx0XFxuMTAzNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICsgMV0gPSB7XFxuMTAzNzpcXHRcXHRbVENBX1RBUFJJT19BVFRSX1BSSU9NQVBdXFx0ICAgICAgID0ge1xcbjEwMzg6XFx0XFx0XFx0LmxlbiA9IHNpemVvZihzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQpXFxuMTAzOTpcXHRcXHR9LFxcbjEwNDA6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDE6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDI6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDM6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DTE9DS0lEXSAgICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1MzMiB9LFxcbjEwNDQ6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSAgICAgICAgICAgPVxcbjEwNDU6XFx0XFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFX1NJR05FRChOTEFfUzY0LCBcXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxcbjEwNDY6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDc6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxcbjEwNDg6XFx0XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIFRBUFJJT19TVVBQT1JURURfRkxBR1MpLFxcbjEwNDk6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9UWFRJTUVfREVMQVldXFx0XFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuMTA1MDpcXHRcXHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVxcdFxcdCAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNTE6XFx0fTtcXG4xMDUyOlxcdFxcbjEwNTM6XFx0c3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMDU0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbjEwNTU6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMDU2OlxcdHtcXG4xMDU3OlxcdFxcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbjEwNTg6XFx0XFx0dTMyIGludGVydmFsID0gMDtcXG4xMDU5OlxcdFxcbjEwNjA6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcXG4xMDYxOlxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcXG4xMDYyOlxcdFxcdFxcdFxcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSk7XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pXFxuMTA2NTpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXFxuMTA2NjpcXHRcXHRcXHRcXHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pXFxuMTA2OTpcXHRcXHRcXHRpbnRlcnZhbCA9IG5sYV9nZXRfdTMyKFxcbjEwNzA6XFx0XFx0XFx0XFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XFxuMTA3MzpcXHRcXHQgKiBmcmFtZSB0byBnbyBvdXQuXFxuMTA3NDpcXHRcXHQgKi9cXG4xMDc1OlxcdFxcdGlmIChpbnRlcnZhbCBcXHUwMDNjIG1pbl9kdXJhdGlvbikge1xcbjEwNzY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcXFwiKTtcXG4xMDc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwNzg6XFx0XFx0fVxcbjEwNzk6XFx0XFxuMTA4MDpcXHRcXHRlbnRyeS1cXHUwMDNlaW50ZXJ2YWwgPSBpbnRlcnZhbDtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0cmV0dXJuIDA7XFxuMTA4MzpcXHR9XFxuMTA4NDpcXHRcXG4xMDg1OlxcdHN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcXG4xMDg2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxcbjEwODc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCArIDFdID0geyB9O1xcbjEwOTA6XFx0XFx0aW50IGVycjtcXG4xMDkxOlxcdFxcbjEwOTI6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCwgbixcXG4xMDkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcXG4xMDk0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTA5NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XFxcIik7XFxuMTA5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDk3OlxcdFxcdH1cXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0ZW50cnktXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJldHVybiBmaWxsX3NjaGVkX2VudHJ5KHEsIHRiLCBlbnRyeSwgZXh0YWNrKTtcXG4xMTAyOlxcdH1cXG4xMTAzOlxcdFxcbjExMDQ6XFx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxuMTEwNTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxuMTEwNjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMDc6XFx0e1xcbjExMDg6XFx0XFx0c3RydWN0IG5sYXR0ciAqbjtcXG4xMTA5OlxcdFxcdGludCBlcnIsIHJlbTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDM6NTkuMDM5OTg3ODg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1MzA4NzA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVlbiB0d2Vha2VkIHJlY2VudGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNlZW4gZGlyZWN0IG1vZGlmaWNhdGlvbi4gSSBzZWUgYHRhcHJpb19taW5faW50ZXJ2YWxgLCBhIG5ldyBzdGF0aWMgaGVscGVyLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBBbHNvLCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGFyZSBvbiB0aGUgbGlzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdC4gV2hlcmUgaXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYmVpbmcgaW52b2tlZD8gSSdsbCBoZWFkIG92ZXIgdG8gYHNjaF90YXByaW8uY2AgdG8gdHJhY2UgaXRzIHVzYWdlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW1wYWN0aW5nIHRoZSBvdmVyYWxsIHNjaGVkdWxpbmcgbG9naWMgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0NDowMS4wOTMwNzgwNzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjc3Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEwND1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNDQ6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0NS1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODM4PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTMyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkzMzpcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MzQtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjAxLjE0NDc2NDI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNzMxMTIzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXByaW8gU2NoZWR1bGVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBgdGFwcmlvX2NoYW5nZWAgZnVuY3Rpb24gY2FsbHMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIE5vdywgYHRhcHJpb19jaGFuZ2VgIGlzIHRoZSBjcnVjaWFsIGNhbGxiYWNrIGZvciBjaGFuZ2VzIGluIHRoZSBgdGFwcmlvX3FkaXNjX29wc2Agc3RydWN0dXJlLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBjb2RlLCBwYXJ0aWN1bGFybHkgYHNjaF90YXByaW9gLCBiZSByZWFjaGVkIGluIHRoZSBkaXZlcnNlIGVudmlyb25tZW50cyB3ZSdyZSBjb25jZXJuZWQgd2l0aCwgbGlrZSB2aXJ0dWFsIG1hY2hpbmVzIG9yIHN0YW5kYXJkIG5ldGxpbmsgY29uZmlndXJhdGlvbnM/IFRoZSBhbnN3ZXIgaXMgYSBzb2xpZCB5ZXMuIE5ldGxpbmssIHZpYSBgdGMgcWRpc2MgYWRkIGRldiBsbyAuLi4gdGFwcmlvIC4uLmAgb3IgZXZlbiBhbnkgbmV0ZGV2aWNlIHVzaW5nIHJ0bmV0bGluayAoYFJUTV9ORVdRRElTQ2AgLyBgUlRNX0NIQU5HRVFESVNDYCksIHByb3ZpZGVzIHRoZSBwYXRoLiBXZSBhbHNvIGtub3cgU3l6a2FsbGVyIGZyZXF1ZW50bHkgdGFyZ2V0cyBUQyBxZGlzY3MgaW5jbHVkaW5nIHRhcHJpby4gR29vZCwgd2UgaGF2ZSByZWFjaGFiaWxpdHkuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSAqbW9kaWZpZWQqIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBleGVjdXRhYmxlLiBJbmRlZWQsIG5ldGxpbmsgY29tbWFuZHMgdGhhdCBjb25maWd1cmUgdGhlIHRhcHJpbyBzY2hlZHVsZXIgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgdGhlIHNlcXVlbmNlOiBgdGFwcmlvX2NoYW5nZWAgLVx1MDAzZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAtXHUwMDNlIGBmaWxsX3NjaGVkX2VudHJ5YCAtXHUwMDNlIGB0YXByaW9fbWluX2ludGVydmFsYC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5mb3JjZXMgdGhlIG1pbmltdW0gc2NoZWR1bGUgaW50ZXJ2YWwgZm9yIHNvZnR3YXJlIG1vZGUgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCA9IDEwIHVzID0gMTAwMDAgbnMpIHdoZW4gZnVsbCBvZmZsb2FkIGFuZCB0eHRpbWUgYXNzaXN0IGFyZSAqbm90KiBlbmFibGVkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUsIG9mIGNvdXJzZSwgaXMgdG8gcHJldmVudCB0aGUgZHJlYWRlZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIHN1YnNlcXVlbnQgQ1BVIHN0YXJ2YXRpb24uXG5cbkZpbmFsbHksIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYXBwcm9wcmlhdGUgRm9jdXNTeW1ib2xzIGZvciBhbmFseXNpcy4gVGhlIG1vc3QgcmVsZXZhbnQgb25lcyB3b3VsZCBiZTpcbi0gYHRhcHJpb19taW5faW50ZXJ2YWxgXG4tIGBmaWxsX3NjaGVkX2VudHJ5YFxuLSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYFxuLSBgdGFwcmlvX2NoYW5nZWBcblxuTm93IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgdGFwcmlvX2luaXRgIG9yIGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBzY2hfdGFwcmlvLmNgIGFsc28gY2FsbCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBvciBgdGFwcmlvX2NoYW5nZWAgdG8gZW5zdXJlIHRoZSBjb3ZlcmFnZSBpcyBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjA2LjQxNzg4MDk3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjQ2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwcmlvX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTgxND1zdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxODM4OnN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgzOS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDg3PXN0YXRpYyBpbnQgdGFwcmlvX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMC1cXHQvKiBXZSBvbmx5IHN1cHBvcnQgc3RhdGljIGNsb2NraWRzLiBVc2UgYW4gaW52YWxpZCB2YWx1ZSBhcyBkZWZhdWx0XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTAxOlxcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTAyLVxcdCAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTQ4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjE0OTpcXHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNTAtfVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTYyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU2Ni1cXHQuaW5pdFxcdFxcdD0gdGFwcmlvX2luaXQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTY3OlxcdC5jaGFuZ2VcXHRcXHQ9IHRhcHJpb19jaGFuZ2UsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTY4LVxcdC5kZXN0cm95XFx0PSB0YXByaW9fZGVzdHJveSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MDYuNDY2NjExMjk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzUyNDQyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBGaXJzdCB1cCwgSSBzaG91bGQgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX1NDSF9UQVBSSU9gIGlzIHByb3Blcmx5IHNldC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIGEgcmVsYXRlZCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBDT05GSUdfTkVUX1NDSEVEYCBpcyBhIHByZXJlcXVpc2l0ZS4gVG8gZmlndXJlIHRoYXQgb3V0LCB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBpcyB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjA5LjA0MTg1ODUwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5MjQ4NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjA5LjMzMTExMzAzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTY2NzQ1OTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEFzc2Vzc21lbnQgb2YgdGhlIFRBUFJJTyBOZXR3b3JrIFNjaGVkdWxlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgTkVUX1NDSF9UQVBSSU9gIGFuZCBgTkVUX1NDSEVEYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBHb29kLCBhbmQgc2luY2UgYE5FVF9TQ0hfVEFQUklPYCBwdWxscyBpbiBgTkVUX1NDSF9NUVBSSU9fTElCYCwgdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIHRvby4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/XG5cblllcywgaXQgaXMhIFRoaXMgY29kZSBtb2RpZmllcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIFRBUFJJTyBxdWV1aW5nIGRpc2NpcGxpbmUuIFRoYXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2AgYW5kIGBSVE1fQ0hBTkdFUURJU0NgLiBUaGF0J3MgYSBncmVhdCB2ZWN0b3IgZm9yIGZ1enppbmcuXG5cbk5leHQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBJJ3ZlIGdvdCBhIHN0cm9uZyBsaXN0IGhlcmU6IGB0YXByaW9fbWluX2ludGVydmFsYCwgYGZpbGxfc2NoZWRfZW50cnlgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIGB0YXByaW9fY2hhbmdlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LlxuXG5NeSBjb3JlIGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX1NDSF9UQVBSSU9gIGFuZCBgTkVUX1NDSEVEYC5cblxuQSBxdWljayBjaGVjayB0byBjb25maXJtIG15IGFzc2Vzc21lbnQuIEV2ZXJ5dGhpbmcgbG9va3MgZ29vZDogdGhlIGZ1enppbmcgdGFyZ2V0IGlzIHZhbGlkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgbm9uLXViaXF1aXRvdXMsIGRpcmVjdGx5IGFsdGVyZWQsIG9yIGNhbGxlcnM6IGB0YXByaW9fbWluX2ludGVydmFsYCwgYGZpbGxfc2NoZWRfZW50cnlgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIGB0YXByaW9fY2hhbmdlYC4gVGhlIGVuYWJsZSBjb25maWdzIGNoZWNrIG91dCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgY29ycmVjdC4gTm93LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCdzIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3NywiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MjAuOTk4NTc1NzIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxNTI0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCIsXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXByaW9fbWluX2ludGVydmFsXCIsXG4gICAgXCJmaWxsX3NjaGVkX2VudHJ5XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIixcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBmb3Igc29mdHdhcmUtZHJpdmVuIChocnRpbWVyLWJhc2VkKSB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB0byBwcmV2ZW50IGhydGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIHRhcHJpbyBxZGlzYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0ZGV2IGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9UQVBSSU9cIixcbiAgICBcIk5FVF9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19taW5faW50ZXJ2YWxcIixcbiAgICBcImZpbGxfc2NoZWRfZW50cnlcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICAgIFwidGFwcmlvX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWluaW11bSBpbnRlcnZhbCB2YWxpZGF0aW9uIGZvciBzb2Z0d2FyZS1kcml2ZW4gKGhydGltZXItYmFzZWQpIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHRvIHByZXZlbnQgaHJ0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRkZXYgY29uZmlndXJhdGlvbiBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MjEuMDgzNzM2NjA0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk2MjM0MDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjIxLjA4NDIxNjI4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4OTYxODU2Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBhIG1pbmltdW0gaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCwgMTB1cykgZm9yIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHdoZW4gb3BlcmF0aW5nIGluIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuKSB0byBwcmV2ZW50IENQVSBzdGFydmF0aW9uIGFuZCB0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBJdCBpbnRyb2R1Y2VzIHRoZSBoZWxwZXIgYHRhcHJpb19taW5faW50ZXJ2YWwoKWAgYW5kIGFkanVzdHMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBpbiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyNGJlNGU1NjdmZjE0ZGQ3ZWU2NTYxMGUwMmFiYjFmZjRlNTY2OTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEyOjQzOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjM4OTBjZGJmY2I0ZjEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtNDgsNiArNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xuICAqIDYwICogMTcgXHUwMDNlIFBTRUNfUEVSX05TRUMgKDEwMDApXG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4rLyogTWluaW11bSBpbnRlcnZhbCBmb3Igc29mdHdhcmUgbW9kZSAoaHJ0aW1lci1kcml2ZW4gYWR2YW5jZV9zY2hlZCkgdG9cbisgKiBhdm9pZCBocnRpbWVyIGludGVycnVwdCBzdG9ybXMgYW5kIENQVSBzdGFydmF0aW9uLlxuKyAqL1xuKyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAgKiBOU0VDX1BFUl9VU0VDKVxuIFxuIHN0cnVjdCBzY2hlZF9lbnRyeSB7XG4gXHQvKiBEdXJhdGlvbnMgYmV0d2VlbiB0aGlzIEdDTCBlbnRyeSBhbmQgdGhlIEdDTCBlbnRyeSB3aGVyZSB0aGVcbkBAIC0yNTksNiArMjYzLDE3IEBAIHN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXG4gXHRyZXR1cm4gZGl2X3U2NChsZW4gKiBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpLCBQU0VDX1BFUl9OU0VDKTtcbiB9XG4gXG4rc3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG4re1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTik7XG4rXG4rXHRpZiAoIUZVTExfT0ZGTE9BRF9JU19FTkFCTEVEKHEtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFUWFRJTUVfQVNTSVNUX0lTX0VOQUJMRUQocS1cdTAwM2VmbGFncykpXG4rXHRcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcbitcbitcdHJldHVybiBtaW5fZHVyYXRpb247XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbilcbiB7XG4gXHRyZXR1cm4gZGl2X3U2NChkdXJhdGlvbiAqIFBTRUNfUEVSX05TRUMsIGF0b21pYzY0X3JlYWQoXHUwMDI2cS1cdTAwM2VwaWNvc19wZXJfYnl0ZSkpO1xuQEAgLTEwMzksNyArMTA1NCw3IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcbitcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0dTMyIGludGVydmFsID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXG5AQCAtMTEzMCw2ICsxMTQ1LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNjcsNyArMTE4Myw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0bmV3LVx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcbiBcdH1cbiBcbi1cdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkge1xuK1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyAoczY0KW5ldy1cdTAwM2VudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBzbWFsbFwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjo0NDoyMS4wODQyMTczNTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxNDg0ODUwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIGZ1enppbmcuIEZpcnN0LCBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgbmV3IGAjZGVmaW5lYCBmb3IgdGhlIG1pbmltdW0gc29mdHdhcmUgaW50ZXJ2YWw6IGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCB3aGljaCBpcyBzZXQgdG8gMTAgbWljcm9zZWNvbmRzLiBUaGV5J3ZlIGFsc28gZGVmaW5lZCBhIGhlbHBlciBmdW5jdGlvbiwgYHRhcHJpb19taW5faW50ZXJ2YWxgLCB0aGF0IGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gZHVyYXRpb24gZm9yIHRhcHJpbyBzY2hlZHVsZSBpbnRlcnZhbHMuIFRoZSBpbXBvcnRhbnQgcGFydCBoZXJlIGlzIHRoZSBub3RlIGFib3V0IHNvZnR3YXJlIG1vZGUgYW5kIGhydGltZXJzLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgaHJ0aW1lciBzdG9ybXMgb3IgQ1BVIHN0YXJ2YXRpb24gYnkgZW5mb3JjaW5nIGEgbWluaW11bSAxMHVzIGludGVydmFsLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgdGhleeKAmXZlIG1vZGlmaWVkIHR3byBrZXkgZnVuY3Rpb25zOiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4gSW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIHRoZXkndmUgcmVwbGFjZWQgYGxlbmd0aF90b19kdXJhdGlvbmAgd2l0aCBgdGFwcmlvX21pbl9pbnRlcnZhbGAuICBUaGlzIHN1Z2dlc3RzIHRoZSBtaW5pbXVtIGR1cmF0aW9uIGNhbGN1bGF0aW9uIGlzIG5vdyBkeW5hbWljYWxseSBkZXRlcm1pbmVkLiAgVGhlbiwgaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCwgdGhleeKAmXZlIHN3YXBwZWQgb3V0IGEgaGFyZGNvZGVkIG1pbmltdW0gd2l0aCBhIGNhbGwgdG8gdGhlIG5ldyBgbWluX2R1cmF0aW9uYCB2YXJpYWJsZS4gVGhpcyBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIGR5bmFtaWMgbWluaW11bSBkdXJhdGlvbi5cblxuVGhlIGNoYW5nZSBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGxvb2tzIGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcsIGFzIGl0IG5vdyBjb21wYXJlcyBgY3ljbGVfdGltZWAgd2l0aCB0aGUgY2FsY3VsYXRlZCBgbWluX2R1cmF0aW9uYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MgaW4gdGhlc2UgbmV3IGNhbGN1bGF0aW9ucywgZXNwZWNpYWxseSB3aXRoIHRoZSBgKHM2NClgIGNhc3Q/IFdlIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQuXG5cbk5vdywgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NoZWR1bGVyIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgY2FsY3VsYXRlZCBkdXJhdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEknbGwgdGhlbiBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJ1biB0aGUgS01TQU4gZnV6emVyIHRvIGxvb2sgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MzQuMjMyNzA1NjczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5NjY3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9zY2hlZF9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTAzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwNTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDUzOnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDU0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg1PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMDE6XFx0cmV0dXJuIGZpbGxfc2NoZWRfZW50cnkocSwgdGIsIGVudHJ5LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjM0LjQxMDY4MTE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Mzg4MzExOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZm9yIFNjaGVkdWxpbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgc3Vycm91bmRpbmcgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gVGhlIGNvcmUgZm9jdXMgaGVyZSBpcyB1bmRvdWJ0ZWRseSBzY2hlZHVsaW5nIGFuZCBob3cgd2UncmUgdHJhbnNsYXRpbmcgYSBUQVBSSU8gc2NoZWR1bGUgaW50byBzb21ldGhpbmcgdXNhYmxlIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaG93IGBmaWxsX3NjaGVkX2VudHJ5YCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgc2NoZWR1bGVyJ3MgZGF0YSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIGFyZSB3ZSBidWlsZGluZyBhIHN0cmFpZ2h0Zm9yd2FyZCBsaXN0IG9mIHRpbWUtYm91bmQgZXZlbnRzLCBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGRhdGEgZGVwZW5kZW5jaWVzIGJlaW5nIGVuY29kZWQ/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBUQVBSSU8gc2NoZWR1bGVzIGNhbiBpbnZvbHZlIHNvcGhpc3RpY2F0ZWQgcHJpb3JpdGllcywgcHJlZW1wdGlvbiBydWxlcywgYW5kIHBvc3NpYmx5IGV2ZW4gcmVzb3VyY2UgYWxsb2NhdGlvbi4gU28sIEknbSB0cnlpbmcgdG8gc2VlIGlmIHRoYXQgY29tcGxleGl0eSBpcyByZWZsZWN0ZWQsIGFuZCBpZiBzbywgaG93IGl0J3MgaGFuZGxlZC4gSXMgaXQgdGhyb3VnaCBuZXN0ZWQgc3RydWN0dXJlcywgYml0bWFwcywgb3Igc29tZXRoaW5nIG1vcmUgZWxlZ2FudD8gSSBhbnRpY2lwYXRlIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbnRlcnByZXRpbmcgdGhlIFRBUFJJTyBzY2hlZHVsZSBpdHNlbGYuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSBwYXJzaW5nIHRoZSBUQVBSSU8gZm9ybWF0LCB2YWxpZGF0aW9uLCBhbmQgc29tZSBkZWdyZWUgb2Ygc2VtYW50aWMgYW5hbHlzaXMuIFdlIHNob3VsZCBoYXZlIGVycm9yIGhhbmRsaW5nIGhlcmUsIGdpdmVuIHRoYXQgVEFQUklPIHNjaGVkdWxlcyBjYW4gYmUgcXVpdGUgaW50cmljYXRlIGFuZCBwb3RlbnRpYWxseSBlcnJvbmVvdXMgaW4gaW5wdXQuIElzIHRoaXMgcGFyc2VyIHJvYnVzdD8gRG9lcyBpdCBjaGVjayBmb3IgY29uZmxpY3RpbmcgZGVhZGxpbmVzLCByZXNvdXJjZSBvdmVyLWFsbG9jYXRpb24sIGFuZCBvdGhlciBwb3RlbnRpYWwgcGl0ZmFsbHM/IEFsc28sIGhvdyBkb2VzIGl0IGhhbmRsZSBjb3JuZXIgY2FzZXMgbGlrZSBlbXB0eSBzY2hlZHVsZXMgb3IgaW52YWxpZGx5IGZvcm1hdHRlZCBlbnRyaWVzPyBBIGNyaXRpY2FsIHBvaW50IHRvIGV4YW1pbmUgaXMgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIERvZXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgY29uc3RydWN0IGEgdGVtcG9yYXJ5IHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlbiBgZmlsbF9zY2hlZF9lbnRyeWAgdHJhbnNsYXRlcyB0aGlzIHRvIGEgZm9ybWF0IHRoZSBzY2hlZHVsZXIgdW5kZXJzdGFuZHMsIG9yIGlzIGl0IGEgbW9yZSBpbnRlZ3JhdGVkIHByb2Nlc3M/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGVuZC10by1lbmQgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjaGVkdWxlcidzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBob3cgYSBUQVBSSU8gc2NoZWR1bGUgZ2V0cyBjb252ZXJ0ZWQgaW50byBpdCwgYW5kIHdoYXQgaGFwcGVucyB0byB0aGUgcmVzdWx0aW5nIGVudHJ5LiBUaGUga2V5IHF1ZXN0aW9ucyBpbiBteSBtaW5kIGFyZTogSXMgdGhpcyBzY2hlZHVsaW5nIGFsZ29yaXRobSBlZmZpY2llbnQ/IEhvdyBkb2VzIHRoZSBzY2hlZHVsZXIgaGFuZGxlIHVwZGF0ZXMgdG8gdGhlIFRBUFJJTyBzY2hlZHVsZT8gQXJlIHdlIGdvaW5nIHRvIHNlZSBwb3RlbnRpYWwgZm9yIHJlYWwtdGltZSBpc3N1ZXMsIGlmIHRoZSBzY2hlZHVsZXMgY2hhbmdlIGR5bmFtaWNhbGx5P1xuXG5cbiIsIklucHV0VG9rZW5zIjozNzkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MzkuMjQ5NTE2ODg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNDA6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDE6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDI6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNDM6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DTE9DS0lEXSAgICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1MzMiB9LFxcbjEwNDQ6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSAgICAgICAgICAgPVxcbjEwNDU6XFx0XFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFX1NJR05FRChOTEFfUzY0LCBcXHUwMDI2dGFwcmlvX2N5Y2xlX3RpbWVfcmFuZ2UpLFxcbjEwNDY6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0gPSB7IC50eXBlID0gTkxBX1M2NCB9LFxcbjEwNDc6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9GTEFHU10gICAgICAgICAgICAgICAgICAgICAgPVxcbjEwNDg6XFx0XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIFRBUFJJT19TVVBQT1JURURfRkxBR1MpLFxcbjEwNDk6XFx0XFx0W1RDQV9UQVBSSU9fQVRUUl9UWFRJTUVfREVMQVldXFx0XFx0ICAgICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuMTA1MDpcXHRcXHRbVENBX1RBUFJJT19BVFRSX1RDX0VOVFJZXVxcdFxcdCAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbjEwNTE6XFx0fTtcXG4xMDUyOlxcdFxcbjEwNTM6XFx0c3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMDU0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbjEwNTU6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMDU2OlxcdHtcXG4xMDU3OlxcdFxcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xcbjEwNTg6XFx0XFx0dTMyIGludGVydmFsID0gMDtcXG4xMDU5OlxcdFxcbjEwNjA6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcXG4xMDYxOlxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vjb21tYW5kID0gbmxhX2dldF91OChcXG4xMDYyOlxcdFxcdFxcdFxcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSk7XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pXFxuMTA2NTpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlZ2F0ZV9tYXNrID0gbmxhX2dldF91MzIoXFxuMTA2NjpcXHRcXHRcXHRcXHR0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0dBVEVfTUFTS10pO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pXFxuMTA2OTpcXHRcXHRcXHRpbnRlcnZhbCA9IG5sYV9nZXRfdTMyKFxcbjEwNzA6XFx0XFx0XFx0XFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0XFxuMTA3MzpcXHRcXHQgKiBmcmFtZSB0byBnbyBvdXQuXFxuMTA3NDpcXHRcXHQgKi9cXG4xMDc1OlxcdFxcdGlmIChpbnRlcnZhbCBcXHUwMDNjIG1pbl9kdXJhdGlvbikge1xcbjEwNzY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcXFwiKTtcXG4xMDc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwNzg6XFx0XFx0fVxcbjEwNzk6XFx0XFxuMTA4MDpcXHRcXHRlbnRyeS1cXHUwMDNlaW50ZXJ2YWwgPSBpbnRlcnZhbDtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0cmV0dXJuIDA7XFxuMTA4MzpcXHR9XFxuMTA4NDpcXHRcXG4xMDg1OlxcdHN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcXG4xMDg2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxcbjEwODc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCArIDFdID0geyB9O1xcbjEwOTA6XFx0XFx0aW50IGVycjtcXG4xMDkxOlxcdFxcbjEwOTI6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX01BWCwgbixcXG4xMDkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgZW50cnlfcG9saWN5LCBOVUxMKTtcXG4xMDk0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTA5NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDb3VsZCBub3QgcGFyc2UgbmVzdGVkIGVudHJ5XFxcIik7XFxuMTA5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDk3OlxcdFxcdH1cXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0ZW50cnktXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJldHVybiBmaWxsX3NjaGVkX2VudHJ5KHEsIHRiLCBlbnRyeSwgZXh0YWNrKTtcXG4xMTAyOlxcdH1cXG4xMTAzOlxcdFxcbjExMDQ6XFx0c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxuMTEwNTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxuMTEwNjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMDc6XFx0e1xcbjExMDg6XFx0XFx0c3RydWN0IG5sYXR0ciAqbjtcXG4xMTA5OlxcdFxcdGludCBlcnIsIHJlbTtcXG4xMTEwOlxcdFxcdGludCBpID0gMDtcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0aWYgKCFsaXN0KVxcbjExMTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQobiwgbGlzdCwgcmVtKSB7XFxuMTExNjpcXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRcXHRpZiAobmxhX3R5cGUobikgIT0gVENBX1RBUFJJT19TQ0hFRF9FTlRSWSkge1xcbjExMTk6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQXR0cmlidXRlIGlzIG5vdCBvZiB0eXBlICdlbnRyeSdcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6NDQ6MzkuMjQ5NzA4NDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODEyMzM4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNjaGVkdWxlIHBhcnNpbmcuIEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgY29yZSBsb2dpYywgYnV0IGl0J3MgYWx3YXlzIHNtYXJ0IHRvIGhhdmUgYSBxdWljayBnbGFuY2UgYXQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIFRoZSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBlbnN1cmluZyB0aGUgb3V0cHV0IGZvcm1hdCBpcyBjb3JyZWN0IGFuZCB0aGF0IGl0IHdpbGwgaW50ZWdyYXRlIHByb3Blcmx5IHdpdGggdGhlIGxhcmdlciBzeXN0ZW0uIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24uXG5cbkkgd2FudCB0byBzZWUgaWYgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyBhbGlnbiB3aXRoIHRoZSBhc3N1bXB0aW9ucyBJJ20gbWFraW5nIGluIHRoZSBwYXJ0IEknbSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgZWRnZSBjYXNlcyBoYW5kbGVkIHRoZXJlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBEb2VzIGl0IHBlcmZvcm0gYW55IGtpbmQgb2YgaW5wdXQgdmFsaWRhdGlvbiBvciBwcmUtcHJvY2Vzc2luZyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgZGF0YSBJJ20gdXNpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHByZXZlbnRpbmcgYnVncyBkb3duIHRoZSBsaW5lLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGRvY3N0cmluZ3MgYW5kIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljIGZvciBhbnkgcmVkIGZsYWdzIG9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25mbGljdC4gSG9wZWZ1bGx5LCBldmVyeXRoaW5nJ3MgY2xlYW4sIGFuZCBJIGNhbiBqdXN0IG1vdmUgZm9yd2FyZC4gQnV0IGl0J3MgYWx3YXlzIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnksIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggc2NoZWR1bGVzIGFuZCB0aGVpciBjb21wbGV4aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjQxLjkzMDk0NTIzOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdFxcbjExNDE6XFx0XFx0cmV0dXJuIGk7XFxuMTE0MjpcXHR9XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMTQ1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuMTE0NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExNDc6XFx0e1xcbjExNDg6XFx0XFx0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XFxuMTE0OTpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XFxuMTE1MjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJBZGRpbmcgYSBzaW5nbGUgZW50cnkgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbjExNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4xMTU0OlxcdFxcdH1cXG4xMTU1OlxcdFxcbjExNTY6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdKVxcbjExNTc6XFx0XFx0XFx0bmV3LVxcdTAwM2ViYXNlX3RpbWUgPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSk7XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKVxcbjExNjA6XFx0XFx0XFx0bmV3LVxcdTAwM2VjeWNsZV90aW1lX2V4dGVuc2lvbiA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTl0pO1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKVxcbjExNjM6XFx0XFx0XFx0bmV3LVxcdTAwM2VjeWNsZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKTtcXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSlcXG4xMTY2OlxcdFxcdFxcdGVyciA9IHBhcnNlX3NjaGVkX2xpc3QocSwgdGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdLFxcbjExNjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5ldywgZXh0YWNrKTtcXG4xMTY4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjExNjk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTcwOlxcdFxcbjExNzE6XFx0XFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpIHtcXG4xMTcyOlxcdFxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuMTE3MzpcXHRcXHRcXHRrdGltZV90IGN5Y2xlID0gMDtcXG4xMTc0OlxcdFxcbjExNzU6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNm5ldy1cXHUwMDNlZW50cmllcywgbGlzdClcXG4xMTc2OlxcdFxcdFxcdFxcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cXHUwMDNlaW50ZXJ2YWwpO1xcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHRcXHRpZiAoY3ljbGUgXFx1MDAzYyAwIHx8IGN5Y2xlIFxcdTAwM2UgSU5UX01BWCkge1xcbjExNzk6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcXFwiKTtcXG4xMTgwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExODE6XFx0XFx0XFx0fVxcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4xMTg0OlxcdFxcdH1cXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIChzNjQpbmV3LVxcdTAwM2VudW1fZW50cmllcyAqIG1pbl9kdXJhdGlvbikge1xcbjExODc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBzbWFsbFxcXCIpO1xcbjExODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE4OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ0OjQxLjkzMTEyMDU3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODExNDkyNTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEFQUklPIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc2NoZWR1bGluZyBhbmQgdGltaW5nLiBTbywgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBjaGFuZ2UgbWV0aWN1bG91c2x5LlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCBzZXR0aW5nIGl0IHRvIDEwIG1pY3Jvc2Vjb25kcy4gTWFrZXMgc2Vuc2UsIHRoYXQncyBhIHJlYXNvbmFibGUgbWluaW11bS4gVGhlbiwgaXQgaW1wbGVtZW50cyBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYC4gRXNzZW50aWFsbHksIHRoaXMgZnVuY3Rpb24gKmVuZm9yY2VzKiBhIDEwdXMgbWluaW11bSBgbWluX2R1cmF0aW9uYCB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlLCBtZWFuaW5nIG5laXRoZXIgZnVsbCBvZmZsb2FkIG5vciBUWFRJTUVfQVNTSVNUIGFyZSBlbmFibGVkLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBzYWZldHkgbmV0IOKAkyBwcmV2ZW50aW5nIHVzZXJzIGZyb20gc3BlY2lmeWluZyByaWRpY3Vsb3VzbHkgc2hvcnQgaW50ZXJ2YWxzLCB3aGljaCBjb3VsZCB3cmVhayBoYXZvYyB3aXRoIGhydGltZXJzIGFuZCBwb3NzaWJseSBsb2NrIHRoaW5ncyB1cCBvciBzdGFydmUgdGhlIENQVS4gR29vZC5cblxuTmV4dCwgSSBzZWUgdGhhdCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIG5vdyBjYXN0cyBgbmV3LVx1MDAzZW51bV9lbnRyaWVzYCB0byBgczY0YC4gVGhpcyBpcyBzbWFydDsgaXQncyBhIHByZWVtcHRpdmUgc3RyaWtlIGFnYWluc3QgcG90ZW50aWFsIG92ZXJmbG93IGlzc3VlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0b3RhbCBzY2hlZHVsZSBkdXJhdGlvbjogYChzNjQpbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbWluX2R1cmF0aW9uYC4gUHJldmVudGluZyBvdmVyZmxvdyBpcyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIHRpbWUtY3JpdGljYWwgc3lzdGVtcy5cblxuRmluYWxseSwgYGZpbGxfc2NoZWRfZW50cnkoKWAgZW5zdXJlcyB0aGUgYGludGVydmFsYCBpcyAqYWx3YXlzKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYG1pbl9kdXJhdGlvbmAuIEFub3RoZXIgbGF5ZXIgb2YgcHJvdGVjdGlvbi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbnM6IERvZXMgdGhpcyBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UgaW4gYSB3YXkgdGhhdCBtaWdodCBsZWF2ZSBmaWVsZHMgdW5pbml0aWFsaXplZD8gTm8sIGRvZXNuJ3Qgc2VlbSBsaWtlIGl0LiBObyBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3RzLiBJcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB0aGUgY29kZSByZWxpZXMgb24gaW5pdGlhbGl6ZWQgZmxhZ3MgYW5kIGNvbnN0YW50cy4gQW55dGhpbmcgbmV3IGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB0aGF0IG1pZ2h0IGludHJvZHVjZSByaXNrcz8gTm8gbmV3IGFsbG9jYXRpb25zOyB0aGlzIGlzIGFib3V0IGNvbnN0cmFpbmluZyAqZXhpc3RpbmcqIHNjaGVkdWxpbmcgcGFyYW1ldGVycy4gRG9lcyBpdCBpbnRyb2R1Y2UgYW55IGJvdW5kcyBjaGVjayBmbGF3cyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIHBhcnRzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vLCBpdCdzIGEgKnRpZ2h0ZW5pbmcqIG9mIHRoZSBjaGVjaywgZW5zdXJpbmcgcGFyYW1ldGVycyBtZWV0IGEgKm1pbmltdW0qIHRocmVzaG9sZC5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIGV4YW1pbmF0aW9uLCBJIHNlZSBubyBpbW1lZGlhdGUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgY2F0Y2ggYW55dGhpbmcgZWxzZSBtZW1vcnkgc2FmZXR5IHJlbGF0ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGlzc3VlIGlzIHByZXNlbnQgaGVyZS5cblxuSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgYGZhbHNlYCwgYW5kIEkgd2lsbCBwcm92aWRlIHRoaXMgZGV0YWlsZWQgcmVhc29uaW5nIGFzIHRoZSBqdXN0aWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODkyLCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjQ1OjAwLjA0NjA0OTIwOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2AsIDEwdXMpIGZvciB0YXByaW8gc2NoZWR1bGUgZW50cmllcyB3aGVuIG9wZXJhdGluZyBpbiBzb2Z0d2FyZSBtb2RlIChocnRpbWVyLWRyaXZlbikgdG8gcHJldmVudCBDUFUgc3RhcnZhdGlvbiBhbmQgdGltZXIgaW50ZXJydXB0IHN0b3Jtcy4gSXQgaW50cm9kdWNlcyB0aGUgaGVscGVyIGB0YXByaW9fbWluX2ludGVydmFsKClgIGFuZCBhZGp1c3RzIHRoZSBtaW5pbXVtIGludGVydmFsIHZhbGlkYXRpb24gaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IHRpZ2h0ZW4gaW5wdXQgdmFsaWRhdGlvbiBvbiBzY2hlZHVsZSBpbnRlcnZhbHMgYW5kIGN5Y2xlIHRpbWVzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlLCBhbmQgbm8gYnVmZmVyIGluZGV4L2xlbmd0aCBhbHRlcmF0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBhIG1pbmltdW0gaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCwgMTB1cykgZm9yIHRhcHJpbyBzY2hlZHVsZSBlbnRyaWVzIHdoZW4gb3BlcmF0aW5nIGluIHNvZnR3YXJlIG1vZGUgKGhydGltZXItZHJpdmVuKSB0byBwcmV2ZW50IENQVSBzdGFydmF0aW9uIGFuZCB0aW1lciBpbnRlcnJ1cHQgc3Rvcm1zLiBJdCBpbnRyb2R1Y2VzIHRoZSBoZWxwZXIgYHRhcHJpb19taW5faW50ZXJ2YWwoKWAgYW5kIGFkanVzdHMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdmFsaWRhdGlvbiBpbiBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgdGlnaHRlbiBpbnB1dCB2YWxpZGF0aW9uIG9uIHNjaGVkdWxlIGludGVydmFscyBhbmQgY3ljbGUgdGltZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBidWZmZXIgaW5kZXgvbGVuZ3RoIGFsdGVyYXRpb25zIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[1] Phase: Succeeded StartedAt: 2026-09-04 12:45:11 +0000 UTC FinishedAt: 2026-09-04 12:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 12:45:11 +0000 UTC FinishedAt: 2026-09-04 12:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2] Phase: Succeeded StartedAt: 2026-09-04 12:45:11 +0000 UTC FinishedAt: 2026-09-04 16:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 12:45:11 +0000 UTC FinishedAt: 2026-09-04 16:26:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 12:45:11 +0000 UTC FinishedAt: 2026-09-04 12:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 12:45:11 +0000 UTC FinishedAt: 2026-09-04 12:45:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-workflowd7znt/series-workflowd7znt-convert-artifact-1551704273/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 12:45:21 +0000 UTC FinishedAt: 2026-09-04 13:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 12:45:21 +0000 UTC FinishedAt: 2026-09-04 13:02:28 +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:*d88652d5-4b17-46cc-96f1-3ededb2ce0e6,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-workflowd7znt/series-workflowd7znt-convert-artifact-1551704273/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": "ba84f8e0-309d-4164-a624-ae366b32ffb0", "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-workflowd7znt/series-workflowd7znt-build-action-125680255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 12:45:21 +0000 UTC FinishedAt: 2026-09-04 13:02:18 +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:*d88652d5-4b17-46cc-96f1-3ededb2ce0e6,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-workflowd7znt/series-workflowd7znt-convert-artifact-1551704273/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": "ba84f8e0-309d-4164-a624-ae366b32ffb0", "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-workflowd7znt/series-workflowd7znt-build-action-125680255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:02:28 +0000 UTC FinishedAt: 2026-09-04 13:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:02:28 +0000 UTC FinishedAt: 2026-09-04 13:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:02:28 +0000 UTC FinishedAt: 2026-09-04 13:02:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:02:28 +0000 UTC FinishedAt: 2026-09-04 13:02:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-workflowd7znt/series-workflowd7znt-convert-artifact-2088493476/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:02:38 +0000 UTC FinishedAt: 2026-09-04 13:04:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:02:38 +0000 UTC FinishedAt: 2026-09-04 13:04:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba84f8e0-309d-4164-a624-ae366b32ffb0,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-workflowd7znt/series-workflowd7znt-build-action-125680255/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-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:04:38 +0000 UTC FinishedAt: 2026-09-04 13:04:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:04:38 +0000 UTC FinishedAt: 2026-09-04 13:04:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:04:38 +0000 UTC FinishedAt: 2026-09-04 13:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:04:38 +0000 UTC FinishedAt: 2026-09-04 13:21:28 +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:*d88652d5-4b17-46cc-96f1-3ededb2ce0e6,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-workflowd7znt/series-workflowd7znt-convert-artifact-2088493476/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": "84b111ed-5a9c-4e4a-910e-cf6e3d9b3b84", "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-workflowd7znt/series-workflowd7znt-build-action-3535427632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:04:38 +0000 UTC FinishedAt: 2026-09-04 13:21:18 +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:*d88652d5-4b17-46cc-96f1-3ededb2ce0e6,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-workflowd7znt/series-workflowd7znt-convert-artifact-2088493476/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": "84b111ed-5a9c-4e4a-910e-cf6e3d9b3b84", "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-workflowd7znt/series-workflowd7znt-build-action-3535427632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:21:28 +0000 UTC FinishedAt: 2026-09-04 13:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:21:28 +0000 UTC FinishedAt: 2026-09-04 13:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:21:28 +0000 UTC FinishedAt: 2026-09-04 13:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:21:28 +0000 UTC FinishedAt: 2026-09-04 13:23:14 +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:*84b111ed-5a9c-4e4a-910e-cf6e3d9b3b84,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-workflowd7znt/series-workflowd7znt-build-action-3535427632/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-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:23 +0000 UTC FinishedAt: 2026-09-04 16:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:23 +0000 UTC FinishedAt: 2026-09-04 16:26:51 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},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:*ba84f8e0-309d-4164-a624-ae366b32ffb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*84b111ed-5a9c-4e4a-910e-cf6e3d9b3b84,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-workflowd7znt/series-workflowd7znt-build-action-125680255/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-workflowd7znt/series-workflowd7znt-build-action-3535427632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:23 +0000 UTC FinishedAt: 2026-09-04 13:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:23 +0000 UTC FinishedAt: 2026-09-04 13:23:28 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},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-workflowd7znt/series-workflowd7znt-convert-artifact-663473197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:23 +0000 UTC FinishedAt: 2026-09-04 13:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:23 +0000 UTC FinishedAt: 2026-09-04 13:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:23 +0000 UTC FinishedAt: 2026-09-04 13:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:33 +0000 UTC FinishedAt: 2026-09-04 16:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7znt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_min_interval","fill_sched_entry","parse_taprio_schedule","taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO","NET_SCHED"],"series_id":"643a7b3d-5386-4c91-a3b2-7a4ee0ebe87d","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-09-04 13:23:33 +0000 UTC FinishedAt: 2026-09-04 16:26:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba84f8e0-309d-4164-a624-ae366b32ffb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*84b111ed-5a9c-4e4a-910e-cf6e3d9b3b84,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-workflowd7znt/series-workflowd7znt-build-action-125680255/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-workflowd7znt/series-workflowd7znt-build-action-3535427632/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-workflowd7znt/series-workflowd7znt-convert-artifact-663473197/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,}