Name: series-workflow7f556 Phase: Succeeded StartedAt: 2026-07-01 08:49:13 +0000 UTC FinishedAt: 2026-07-01 13:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[0] Phase: Succeeded StartedAt: 2026-07-01 08:49:13 +0000 UTC FinishedAt: 2026-07-01 09:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 08:49:13 +0000 UTC FinishedAt: 2026-07-01 09:02:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_IOMAP", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_IOMAP", "BLOCK" ], "series_id": "cd5d4089-d327-48fd-9643-ac2536637271" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_dio_simple", "iomap_dio_simple_supported", "iomap_dio_simple_complete", "iomap_dio_simple_end_io", "iomap_dio_simple_complete_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA4OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBhZGRzIG5ldyBjb3JlIGxvZ2ljIGZvciBkaXJlY3QgSS9PIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB2YXJpb3VzIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwODo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI5ZWJiMmNlNzY2ODQwNjc2YzA1ZjU0YjY1MzVhODI3NzgzNzhiMmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA4OjU4OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGI0ODVlM2IxOTFkYWZhLi5jYTc5MDIzOWU1ZWIzMiAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2UuaFwmIzM0O1xuIFxuQEAgLTg4LDkgJiM0Mzs4OSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdHJldHVybiBGU0VSUl9ESVJFQ1RJT19SRUFEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGludCBlcnJvcilcbiB7XG4tXHRzd2l0Y2ggKGRpby1cdTAwM2VlcnJvcikge1xuJiM0MztcdHN3aXRjaCAoZXJyb3IpIHtcbiBcdGNhc2UgMDpcbiBcdGNhc2UgLUVBR0FJTjpcbiBcdGNhc2UgLUVOT1RCTEs6XG5AQCAtMTEwLDcgJiM0MzsxMTEsNyBAQCBzc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXG4gXHRpZiAoZG9wcyBcdTAwMjZcdTAwMjYgZG9wcy1cdTAwM2VlbmRfaW8pXG4gXHRcdHJldCA9IGRvcHMtXHUwMDNlZW5kX2lvKGlvY2IsIGRpby1cdTAwM2VzaXplLCByZXQsIGRpby1cdTAwM2VmbGFncyk7XG4tXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8pKVxuJiM0MztcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby1cdTAwM2VlcnJvcikpXG4gXHRcdGZzZXJyb3JfcmVwb3J0X2lvKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSxcbiBcdFx0XHRcdCAgaW9tYXBfZGlvX2Vycl90eXBlKGRpbyksIG9mZnNldCwgZGlvLVx1MDAzZXNpemUsXG4gXHRcdFx0XHQgIGRpby1cdTAwM2VlcnJvciwgR0ZQX05PRlMpO1xuQEAgLTM5OCw2ICYjNDM7Mzk5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbiYjNDM7e1xuJiM0MztcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXG4mIzQzO1x0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuJiM0MztcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcdTAwMjZpdGVyLVx1MDAzZWlvbWFwO1xuQEAgLTQxNiwxMCAmIzQzOzQyNSw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXHQgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzXG4gXHQgKiBuZWVkIGVhY2ggYmlvIHRvIGJlIGJsb2NrIGFsaWduZWQgYXMgdGhhdCYjMzk7cyB0aGUgdW5pdCBvZiBhbGxvY2F0aW9uLlxuIFx0ICovXG4tXHRpZiAoZGlvLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuLVx0XHRhbGlnbm1lbnQgPSBmc19ibG9ja19zaXplO1xuLVx0ZWxzZVxuLVx0XHRhbGlnbm1lbnQgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShpb21hcC1cdTAwM2ViZGV2KTtcbiYjNDM7XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKChwb3MgfCBsZW5ndGgpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OCwxMiAmIzQzOzg5NCwyNzcgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbiBcbiYjNDM7c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUge1xuJiM0MztcdHN0cnVjdCBraW9jYlx0XHQqaW9jYjtcbiYjNDM7XHRzaXplX3RcdFx0XHRzaXplO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRkaW9fZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxpZ24gQGJpbyB0byBhIGNhY2hlbGluZSBib3VuZGFyeSBzbyB0aGF0LCBjb21iaW5lZCB3aXRoIHRoZVxuJiM0MztcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxuJiM0MztcdCAqIGEgY2FjaGVsaW5lIGluIG1lbW9yeSByZXR1cm5lZCBieSB0aGUgKEhXQ0FDSEUtYWxpZ25lZCkgYmlvXG4mIzQzO1x0ICogc2xhYi4gIFRoaXMga2VlcHMgdGhlIGhvdCBmaWVsZHMgYmxvY2sgbGF5ZXIgdG91Y2hlcyBvbiBzdWJtaXRcbiYjNDM7XHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBiaW9cdFx0YmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sO1xuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSBcdTAwMjZzci1cdTAwM2ViaW87XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoYmlvLVx1MDAzZWJpX3N0YXR1cykpIHtcbiYjNDM7XHRcdHJldCA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVx1MDAzZWJpX3N0YXR1cyk7XG4mIzQzO1x0XHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihyZXQpKVxuJiM0MztcdFx0XHRmc2Vycm9yX3JlcG9ydF9pbyhpbm9kZSwgRlNFUlJfRElSRUNUSU9fUkVBRCxcbiYjNDM7XHRcdFx0XHRcdCAgaW9jYi1cdTAwM2VraV9wb3MsIHNyLVx1MDAzZXNpemUsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgR0ZQX05PRlMpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBzci1cdTAwM2VzaXplO1xuJiM0MztcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzci1cdTAwM2VkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkge1xuJiM0MztcdFx0YmlvX2NoZWNrX3BhZ2VzX2RpcnR5KGJpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuJiM0MztcdFx0YmlvX3B1dChiaW8pO1xuJiM0MztcdH1cbiYjNDM7XHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbiYjNDM7XHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0IFx1MDAzYyAwID8gcmV0IDogMCwgcmV0KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShpb2NiLVx1MDAzZXByaXZhdGUsIE5VTEwpO1xuJiM0MztcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNyLVx1MDAzZWJpby5iaV9zdGF0dXMpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcbiYjNDM7XHRcdElOSVRfV09SSyhcdTAwMjZzci1cdTAwM2V3b3JrLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmspO1xuJiM0MztcdFx0cXVldWVfd29yayhpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EsIFx1MDAyNnNyLVx1MDAzZXdvcmspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShpb2NiLVx1MDAzZXByaXZhdGUsIE5VTEwpO1xuJiM0MztcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzLCBzaXplX3QgZG9uZV9iZWZvcmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoZG9wcyB8fCBkb25lX2JlZm9yZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2ltcGxlIGRpbyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHNtYWxsIElPLiBGaWx0ZXIgb3V0IGxhcmdlIElPXG4mIzQzO1x0ICogZWFybHkgYXMgaXQmIzM5O3MgdGhlIG1vc3QgY29tbW9uIGNhc2UgdG8gZmFpbCBmb3IgdHlwaWNhbCBkaXJlY3QgSU9cbiYjNDM7XHQgKiB3b3JrbG9hZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNvdW50IFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IChJT01BUF9ESU9fRk9SQ0VfV0FJVCB8IElPTUFQX0RJT19QQVJUSUFMIHxcbiYjNDM7XHRcdFx0IElPTUFQX0RJT19CT1VOQ0UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhIHNpbmdsZVxuJiM0MzsgKiBjb250aWd1b3VzIG9uLWRpc2sgZXh0ZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCgpIGVuZm9yY2VzIHRoZSBjaGVhcCB1cC1mcm9udCBjb25zdHJhaW50cyBiZWZvcmVcbiYjNDM7ICogZW50ZXJpbmcgdGhpcyBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcbiYjNDM7ICogLVx1MDAzZWVuZF9pbyAvIC1cdTAwM2VzdWJtaXRfaW8gaG9va3MgaW52b2tlZCwgYW5kIGluIHBhcnRpY3VsYXIgd2FudHMgaXRzIGJpb3MgdG8gYmVcbiYjNDM7ICogYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy1cdTAwM2ViaW9fc2V0ICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYVxuJiM0MzsgKiBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlIGJpbykuICBUaGUgZmFzdCBwYXRoIGluc3RlYWQgYWxsb2NhdGVzXG4mIzQzOyAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxuJiM0MzsgKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcbiYjNDM7ICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cbiYjNDM7ICpcbiYjNDM7ICogQGRvbmVfYmVmb3JlIG11c3QgYmUgemVybzogYSBub24temVybyBjYWxsZXItYWNjdW11bGF0ZWQgcmVzaWR1YWwgY2Fubm90IGJlXG4mIzQzOyAqIGNhcnJpZWQgdGhyb3VnaCBhIHNpbmdsZS1iaW8gaW5saW5lIGNvbXBsZXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEBpdGVyIG11c3QgZGVzY3JpYmUgYSBub24tZW1wdHkgUkVBRCBubyBsYXJnZXIgdGhhbiB0aGUgaW5vZGUgYmxvY2sgc2l6ZTpcbiYjNDM7ICogd3JpdGVzLCB6ZXJvLWxlbmd0aCBJL08sIGFuZCBsYXJnZXIgcmVxdWVzdHMgbmVlZCB0aGUgZ2VuZXJpYyBpb21hcCBkaXJlY3RcbiYjNDM7ICogSS9PIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIEBkaW9fZmxhZ3MgbXVzdCBub3QgcmVxdWVzdCBJT01BUF9ESU9fRk9SQ0VfV0FJVCwgSU9NQVBfRElPX1BBUlRJQUwsIG9yXG4mIzQzOyAqIElPTUFQX0RJT19CT1VOQ0U6IHRoaXMgcGF0aCBkb2VzIG5vdCBzdXBwb3J0IGZvcmNlZCB3YWl0aW5nLCBwYXJ0aWFsIGRpcmVjdFxuJiM0MzsgKiBJL08sIG9yIGJvdW5jaW5nLiAgVGhlIHJhbmdlIG11c3QgYWxzbyBzdGF5IHdpdGhpbiBpX3NpemUgYW5kIGVuY3J5cHRlZFxuJiM0MzsgKiBpbm9kZXMgbXVzdCB1c2UgdGhlIGdlbmVyaWMgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkgd2hlbiBpdFxuJiM0MzsgKiBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLiAgSW4gdGhhdCBjYXNlIHdlIHByb2NlZWQgdG9cbiYjNDM7ICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmRcbiYjNDM7ICogaXMgcHJvcGFnYXRlZCBhcy1pcywgaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZVxuJiM0MzsgKiBjYWxsZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0Mztpb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztcdFx0IGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSxcbiYjNDM7XHRcdCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiYjNDM7XHRib29sIHdhaXRfZm9yX2NvbXBsZXRpb24gPSBpc19zeW5jX2tpb2NiKGlvY2IpO1xuJiM0MztcdHN0cnVjdCBpb21hcF9pdGVyIGlvbWkgPSB7XG4mIzQzO1x0XHQuaW5vZGVcdFx0PSBpbm9kZSxcbiYjNDM7XHRcdC5wb3NcdFx0PSBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdC5sZW5cdFx0PSBjb3VudCxcbiYjNDM7XHRcdC5mbGFnc1x0XHQ9IElPTUFQX0RJUkVDVCxcbiYjNDM7XHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW87XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbiYjNDM7XHRcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBraW9jYl93cml0ZV9hbmRfd2FpdChpb2NiLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlub2RlX2Rpb19iZWdpbihpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9wcy1cdTAwM2Vpb21hcF9iZWdpbihpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBpb21pLmZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCwgXHUwMDI2aW9taS5zcmNtYXApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4mIzQzO1x0ICAgIGlvbWkuaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWkuaW9tYXAubGVuZ3RoIFx1MDAzYyBpb21pLnBvcyAmIzQzOyBjb3VudCB8fFxuJiM0MztcdCAgICAoaW9taS5pb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PVEJMSztcbiYjNDM7XHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcbiYjNDM7XHRpZiAoKGlvbWkucG9zIHwgY291bnQpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XG4mIzQzO1x0XHRyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxuJiM0MztcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcbiYjNDM7XG4mIzQzO1x0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbiYjNDM7XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuJiM0MztcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4mIzQzO1x0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4mIzQzO1x0c3ItXHUwMDNlZGlvX2ZsYWdzID0gZGlvX2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aW9taS5pb21hcCwgaW9taS5wb3MpO1xuJiM0MztcdGJpby1cdTAwM2ViaV9pb3ByaW8gPSBpb2NiLVx1MDAzZWtpX2lvcHJpbztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQpKVxuJiM0MztcdFx0Z290byBvdXRfYmlvX3B1dDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHtcbiYjNDM7XHRcdGlvdl9pdGVyX3JldmVydChpdGVyLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9UQkxLO1xuJiM0MztcdFx0Z290byBvdXRfYmlvX3JlbGVhc2VfcGFnZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzci1cdTAwM2VzaXplID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKVxuJiM0MztcdFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XG4mIzQzO1x0aWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0hJUFJJKSBcdTAwMjZcdTAwMjYgIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBiaW8pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4mIzQzO1x0XHRvcHMtXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIGNvdW50LCBpb21pLmZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCk7XG4mIzQzO1xuJiM0MztcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuJiM0MztcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuJiM0MztcdFx0c3VibWl0X2JpbyhiaW8pO1xuJiM0MztcdFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpbm9kZSwgaW9taS5wb3MsIGNvdW50KTtcbiYjNDM7XHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG4mIzQzO1xuJiM0MztvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XG4mIzQzO1x0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4mIzQzO291dF9iaW9fcHV0OlxuJiM0MztcdGJpb19wdXQoYmlvKTtcbiYjNDM7b3V0X2lvbWFwX2VuZDpcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWlvbWFwX2VuZClcbiYjNDM7XHRcdG9wcy1cdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgMCwgaW9taS5mbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuJiM0MztcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3NpemVfdFxuIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbiBcdFx0dW5zaWduZWQgaW50IGRpb19mbGFncywgdm9pZCAqcHJpdmF0ZSwgc2l6ZV90IGRvbmVfYmVmb3JlKVxuIHtcbiBcdHN0cnVjdCBpb21hcF9kaW8gKmRpbztcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG4mIzQzO1x0XHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXG4gXHRcdFx0ICAgICBkb25lX2JlZm9yZSk7XG5AQCAtOTAyLDMgJiM0MzsxMTczLDExIEBAIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdHJldHVybiBpb21hcF9kaW9fY29tcGxldGUoZGlvKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGlvbWFwX2Rpb19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlvc2V0X2luaXQoXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxuJiM0MztcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKSxcbiYjNDM7XHRcdFx0ICAgQklPU0VUX05FRURfQlZFQ1MgfCBCSU9TRVRfUEVSQ1BVX0NBQ0hFKTtcbiYjNDM7fVxuJiM0Mztmc19pbml0Y2FsbChpb21hcF9kaW9faW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyOWViYjJjZTc2Njg0MDY3NmMwNWY1NGI2NTM1YTgyNzc4Mzc4YjJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwODo1ODo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmNhNzkwMjM5ZTVlYjMyIDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mc2Vycm9yLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNlLmgmIzM0OwogCkBAIC04OCw5ICYjNDM7ODksOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gZnNlcnJvcl90eXBlIGlvbWFwX2Rpb19lcnJfdHlwZShjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCiAJcmV0dXJuIEZTRVJSX0RJUkVDVElPX1JFQUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihpbnQgZXJyb3IpCiB7Ci0Jc3dpdGNoIChkaW8tJmd0O2Vycm9yKSB7CiYjNDM7CXN3aXRjaCAoZXJyb3IpIHsKIAljYXNlIDA6CiAJY2FzZSAtRUFHQUlOOgogCWNhc2UgLUVOT1RCTEs6CkBAIC0xMTAsNyAmIzQzOzExMSw3IEBAIHNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAogCWlmIChkb3BzICZhbXA7JmFtcDsgZG9wcy0mZ3Q7ZW5kX2lvKQogCQlyZXQgPSBkb3BzLSZndDtlbmRfaW8oaW9jYiwgZGlvLSZndDtzaXplLCByZXQsIGRpby0mZ3Q7ZmxhZ3MpOwotCWlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpbykpCiYjNDM7CWlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby0mZ3Q7ZXJyb3IpKQogCQlmc2Vycm9yX3JlcG9ydF9pbyhmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApLAogCQkJCSAgaW9tYXBfZGlvX2Vycl90eXBlKGRpbyksIG9mZnNldCwgZGlvLSZndDtzaXplLAogCQkJCSAgZGlvLSZndDtlcnJvciwgR0ZQX05PRlMpOwpAQCAtMzk4LDYgJiM0MzszOTksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncykKJiM0Mzt7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCkKJiM0MzsJCXJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7CiYjNDM7CXJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogewogCWNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSAmYW1wO2l0ZXItJmd0O2lvbWFwOwpAQCAtNDE2LDEwICYjNDM7NDI1LDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAkgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzCiAJICogbmVlZCBlYWNoIGJpbyB0byBiZSBibG9jayBhbGlnbmVkIGFzIHRoYXQmIzM5O3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi4KIAkgKi8KLQlpZiAoZGlvLSZndDtmbGFncyAmYW1wOyBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKQotCQlhbGlnbm1lbnQgPSBmc19ibG9ja19zaXplOwotCWVsc2UKLQkJYWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtJmd0O2JkZXYpOwomIzQzOwlhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC0mZ3Q7YmRldiwgZGlvLSZndDtmbGFncyk7CiAKIAlpZiAoKHBvcyB8IGxlbmd0aCkgJmFtcDsgKGFsaWdubWVudCAtIDEpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg4OCwxMiAmIzQzOzg5NCwyNzcgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7CiAKJiM0MztzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7CiYjNDM7CXN0cnVjdCBraW9jYgkJKmlvY2I7CiYjNDM7CXNpemVfdAkJCXNpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX2ZsYWdzOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKJiM0MzsJLyoKJiM0MzsJICogQWxpZ24gQGJpbyB0byBhIGNhY2hlbGluZSBib3VuZGFyeSBzbyB0aGF0LCBjb21iaW5lZCB3aXRoIHRoZQomIzQzOwkgKiBmcm9udF9wYWQgcGFzc2VkIHRvIGJpb3NldF9pbml0KCksIHRoZSBiaW8gc2l0cyBhdCB0aGUgc3RhcnQgb2YKJiM0MzsJICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW8KJiM0MzsJICogc2xhYi4gIFRoaXMga2VlcHMgdGhlIGhvdCBmaWVsZHMgYmxvY2sgbGF5ZXIgdG91Y2hlcyBvbiBzdWJtaXQKJiM0MzsJICogYW5kIGNvbXBsZXRpb24gKGJpX2l0ZXIsIGJpX3N0YXR1cywgLi4uKSB3aXRoaW4gYSBzaW5nbGUgbGluZS4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBiaW8JCWJpbyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBiaW9fc2V0IGlvbWFwX2Rpb19zaW1wbGVfcG9vbDsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW8gKmJpbyA9ICZhbXA7c3ItJmd0O2JpbzsKJiM0MzsJc3RydWN0IGtpb2NiICppb2NiID0gc3ItJmd0O2lvY2I7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGJpby0mZ3Q7Ymlfc3RhdHVzKSkgewomIzQzOwkJcmV0ID0gYmxrX3N0YXR1c190b19lcnJubyhiaW8tJmd0O2JpX3N0YXR1cyk7CiYjNDM7CQlpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihyZXQpKQomIzQzOwkJCWZzZXJyb3JfcmVwb3J0X2lvKGlub2RlLCBGU0VSUl9ESVJFQ1RJT19SRUFELAomIzQzOwkJCQkJICBpb2NiLSZndDtraV9wb3MsIHNyLSZndDtzaXplLCByZXQsCiYjNDM7CQkJCQkgIEdGUF9OT0ZTKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHNyLSZndDtzaXplOwomIzQzOwkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHNyLSZndDtkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7CiYjNDM7CQliaW9fY2hlY2tfcGFnZXNfZGlydHkoYmlvKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpOwomIzQzOwkJYmlvX3B1dChiaW8pOwomIzQzOwl9CiYjNDM7CWlub2RlX2Rpb19lbmQoaW5vZGUpOwomIzQzOwl0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0ICZsdDsgMCA/IHJldCA6IDAsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTsKJiM0MzsJc3RydWN0IGtpb2NiICppb2NiID0gc3ItJmd0O2lvY2I7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaW9jYi0mZ3Q7cHJpdmF0ZSwgTlVMTCk7CiYjNDM7CWlvY2ItJmd0O2tpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID0KJiM0MzsJCWNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pOwomIzQzOwlzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci0mZ3Q7aW9jYjsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHNyLSZndDtiaW8uYmlfc3RhdHVzKSkgewomIzQzOwkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CiYjNDM7CQlJTklUX1dPUksoJmFtcDtzci0mZ3Q7d29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTsKJiM0MzsJCXF1ZXVlX3dvcmsoaW5vZGUtJmd0O2lfc2ItJmd0O3NfZGlvX2RvbmVfd3EsICZhbXA7c3ItJmd0O3dvcmspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaW9jYi0mZ3Q7cHJpdmF0ZSwgTlVMTCk7CiYjNDM7CWlvY2ItJmd0O2tpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsCiYjNDM7CQkJICAgdW5zaWduZWQgaW50IGRpb19mbGFncywgc2l6ZV90IGRvbmVfYmVmb3JlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwomIzQzOwlpZiAoZG9wcyB8fCBkb25lX2JlZm9yZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghY291bnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CS8qCiYjNDM7CSAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJTwomIzQzOwkgKiBlYXJseSBhcyBpdCYjMzk7cyB0aGUgbW9zdCBjb21tb24gY2FzZSB0byBmYWlsIGZvciB0eXBpY2FsIGRpcmVjdCBJTwomIzQzOwkgKiB3b3JrbG9hZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoY291bnQgJmd0OyBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgKElPTUFQX0RJT19GT1JDRV9XQUlUIHwgSU9NQVBfRElPX1BBUlRJQUwgfAomIzQzOwkJCSBJT01BUF9ESU9fQk9VTkNFKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmIzQzOyBjb3VudCAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKElTX0VOQ1JZUFRFRChpbm9kZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYSBzaW5nbGUKJiM0MzsgKiBjb250aWd1b3VzIG9uLWRpc2sgZXh0ZW50LgomIzQzOyAqCiYjNDM7ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlCiYjNDM7ICogZW50ZXJpbmcgdGhpcyBwYXRoLgomIzQzOyAqCiYjNDM7ICogQGRvcHMgbXVzdCBiZSBOVUxMOiBhIG5vbi1OVUxMIEBkb3BzIG1lYW5zIHRoZSBjYWxsZXIgd2FudHMgaXRzCiYjNDM7ICogLSZndDtlbmRfaW8gLyAtJmd0O3N1Ym1pdF9pbyBob29rcyBpbnZva2VkLCBhbmQgaW4gcGFydGljdWxhciB3YW50cyBpdHMgYmlvcyB0byBiZQomIzQzOyAqIGFsbG9jYXRlZCBmcm9tIHRoZSBmaWxlc3lzdGVtLXByaXZhdGUgQGRvcHMtJmd0O2Jpb19zZXQgKHdob3NlIGZyb250X3BhZCBzaXplcyBhCiYjNDM7ICogZmlsZXN5c3RlbS1wcml2YXRlIHdyYXBwZXIgYXJvdW5kIHRoZSBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcwomIzQzOyAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdAomIzQzOyAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbAomIzQzOyAqIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpbiB0aGF0IGNhc2UuCiYjNDM7ICoKJiM0MzsgKiBAZG9uZV9iZWZvcmUgbXVzdCBiZSB6ZXJvOiBhIG5vbi16ZXJvIGNhbGxlci1hY2N1bXVsYXRlZCByZXNpZHVhbCBjYW5ub3QgYmUKJiM0MzsgKiBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLgomIzQzOyAqCiYjNDM7ICogQGl0ZXIgbXVzdCBkZXNjcmliZSBhIG5vbi1lbXB0eSBSRUFEIG5vIGxhcmdlciB0aGFuIHRoZSBpbm9kZSBibG9jayBzaXplOgomIzQzOyAqIHdyaXRlcywgemVyby1sZW5ndGggSS9PLCBhbmQgbGFyZ2VyIHJlcXVlc3RzIG5lZWQgdGhlIGdlbmVyaWMgaW9tYXAgZGlyZWN0CiYjNDM7ICogSS9PIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBAZGlvX2ZsYWdzIG11c3Qgbm90IHJlcXVlc3QgSU9NQVBfRElPX0ZPUkNFX1dBSVQsIElPTUFQX0RJT19QQVJUSUFMLCBvcgomIzQzOyAqIElPTUFQX0RJT19CT1VOQ0U6IHRoaXMgcGF0aCBkb2VzIG5vdCBzdXBwb3J0IGZvcmNlZCB3YWl0aW5nLCBwYXJ0aWFsIGRpcmVjdAomIzQzOyAqIEkvTywgb3IgYm91bmNpbmcuICBUaGUgcmFuZ2UgbXVzdCBhbHNvIHN0YXkgd2l0aGluIGlfc2l6ZSBhbmQgZW5jcnlwdGVkCiYjNDM7ICogaW5vZGVzIG11c3QgdXNlIHRoZSBnZW5lcmljIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4KJiM0MzsgKgomIzQzOyAqIC1FTk9UQkxLIGlzIHRoZSBwcml2YXRlIHNlbnRpbmVsIHJldHVybmVkIGJ5IGlvbWFwX2Rpb19zaW1wbGUoKSB3aGVuIGl0CiYjNDM7ICogZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC4gIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvCiYjNDM7ICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmQKJiM0MzsgKiBpcyBwcm9wYWdhdGVkIGFzLWlzLCBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlCiYjNDM7ICogY2FsbGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90CiYjNDM7aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKJiM0MzsJCSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsCiYjNDM7CQkgdW5zaWduZWQgaW50IGRpb19mbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKJiM0MzsJYm9vbCB3YWl0X2Zvcl9jb21wbGV0aW9uID0gaXNfc3luY19raW9jYihpb2NiKTsKJiM0MzsJc3RydWN0IGlvbWFwX2l0ZXIgaW9taSA9IHsKJiM0MzsJCS5pbm9kZQkJPSBpbm9kZSwKJiM0MzsJCS5wb3MJCT0gaW9jYi0mZ3Q7a2lfcG9zLAomIzQzOwkJLmxlbgkJPSBjb3VudCwKJiM0MzsJCS5mbGFncwkJPSBJT01BUF9ESVJFQ1QsCiYjNDM7CQkucHJpdmF0ZQk9IHByaXZhdGUsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcjsKJiM0MzsJdW5zaWduZWQgaW50IGFsaWdubWVudDsKJiM0MzsJc3RydWN0IGJpbyAqYmlvOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQomIzQzOwkJaW9taS5mbGFncyB8PSBJT01BUF9OT1dBSVQ7CiYjNDM7CiYjNDM7CXJldCA9IGtpb2NiX3dyaXRlX2FuZF93YWl0KGlvY2IsIGNvdW50KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlub2RlX2Rpb19iZWdpbihpbm9kZSk7CiYjNDM7CiYjNDM7CXJldCA9IG9wcy0mZ3Q7aW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncywKJiM0MzsJCQkgICAgICAgJmFtcDtpb21pLmlvbWFwLCAmYW1wO2lvbWkuc3JjbWFwKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJaW5vZGVfZGlvX2VuZChpbm9kZSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8CiYjNDM7CSAgICBpb21pLmlvbWFwLm9mZnNldCAmIzQzOyBpb21pLmlvbWFwLmxlbmd0aCAmbHQ7IGlvbWkucG9zICYjNDM7IGNvdW50IHx8CiYjNDM7CSAgICAoaW9taS5pb21hcC5mbGFncyAmYW1wOyBJT01BUF9GX0lOVEVHUklUWSkpIHsKJiM0MzsJCXJldCA9IC1FTk9UQkxLOwomIzQzOwkJZ290byBvdXRfaW9tYXBfZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTsKJiM0MzsJaWYgKChpb21pLnBvcyB8IGNvdW50KSAmYW1wOyAoYWxpZ25tZW50IC0gMSkpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9pb21hcF9lbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uICZhbXA7JmFtcDsgdW5saWtlbHkoIWlub2RlLSZndDtpX3NiLSZndDtzX2Rpb19kb25lX3dxKSkgewomIzQzOwkJcmV0ID0gc2JfaW5pdF9kaW9fZG9uZV93cShpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIG91dF9pb21hcF9lbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7CiYjNDM7CiYjNDM7CWlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKQomIzQzOwkJZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDsKJiM0MzsKJiM0MzsJYmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsCiYjNDM7CQkJICAgICAgIGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLAomIzQzOwkJCSAgICAgICBSRVFfT1BfUkVBRCwgR0ZQX0tFUk5FTCwgJmFtcDtpb21hcF9kaW9fc2ltcGxlX3Bvb2wpOwomIzQzOwlzciA9IGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pOwomIzQzOwlzci0mZ3Q7aW9jYiA9IGlvY2I7CiYjNDM7CXNyLSZndDtkaW9fZmxhZ3MgPSBkaW9fZmxhZ3M7CiYjNDM7CiYjNDM7CWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoJmFtcDtpb21pLmlvbWFwLCBpb21pLnBvcyk7CiYjNDM7CWJpby0mZ3Q7YmlfaW9wcmlvID0gaW9jYi0mZ3Q7a2lfaW9wcmlvOwomIzQzOwomIzQzOwlyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYWxpZ25tZW50IC0gMSk7CiYjNDM7CWlmICh1bmxpa2VseShyZXQpKQomIzQzOwkJZ290byBvdXRfYmlvX3B1dDsKJiM0MzsKJiM0MzsJaWYgKGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplICE9IGNvdW50KSB7CiYjNDM7CQlpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLSZndDtiaV9pdGVyLmJpX3NpemUpOwomIzQzOwkJcmV0ID0gLUVOT1RCTEs7CiYjNDM7CQlnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlczsKJiM0MzsJfQomIzQzOwomIzQzOwlzci0mZ3Q7c2l6ZSA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplOwomIzQzOwomIzQzOwlpZiAoZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkKJiM0MzsJCWJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTsKJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQomIzQzOwkJYmlvLSZndDtiaV9vcGYgfD0gUkVRX05PV0FJVDsKJiM0MzsJaWYgKChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0hJUFJJKSAmYW1wOyZhbXA7ICF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7CiYjNDM7CQliaW8tJmd0O2JpX29wZiB8PSBSRVFfUE9MTEVEOwomIzQzOwkJV1JJVEVfT05DRShpb2NiLSZndDtwcml2YXRlLCBiaW8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHMtJmd0O2lvbWFwX2VuZCkKJiM0MzsJCW9wcy0mZ3Q7aW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIGNvdW50LCBpb21pLmZsYWdzLAomIzQzOwkJCSAgICAgICAmYW1wO2lvbWkuaW9tYXApOwomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHsKJiM0MzsJCWJpby0mZ3Q7YmlfZW5kX2lvID0gaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW87CiYjNDM7CQlzdWJtaXRfYmlvKGJpbyk7CiYjNDM7CQl0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpOwomIzQzOwkJcmV0dXJuIC1FSU9DQlFVRVVFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlzdWJtaXRfYmlvX3dhaXQoYmlvKTsKJiM0MzsJcmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpOwomIzQzOwomIzQzO291dF9iaW9fcmVsZWFzZV9wYWdlczoKJiM0MzsJYmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7CiYjNDM7b3V0X2Jpb19wdXQ6CiYjNDM7CWJpb19wdXQoYmlvKTsKJiM0MztvdXRfaW9tYXBfZW5kOgomIzQzOwlpZiAob3BzLSZndDtpb21hcF9lbmQpCiYjNDM7CQlvcHMtJmd0O2lvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCAwLCBpb21pLmZsYWdzLAomIzQzOwkJCSAgICAgICAmYW1wO2lvbWkuaW9tYXApOwomIzQzOwlpbm9kZV9kaW9fZW5kKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzc2l6ZV90CiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsCiAJCXVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSkKIHsKIAlzdHJ1Y3QgaW9tYXBfZGlvICpkaW87CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpZiAoaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoaW9jYiwgaXRlciwgZG9wcywgZGlvX2ZsYWdzLAomIzQzOwkJCQkgICAgICAgZG9uZV9iZWZvcmUpKSB7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVOT1RCTEspCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsCiAJCQkgICAgIGRvbmVfYmVmb3JlKTsKQEAgLTkwMiwzICYjNDM7MTE3MywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJcmV0dXJuIGlvbWFwX2Rpb19jb21wbGV0ZShkaW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpb3NldF9pbml0KCZhbXA7aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LAomIzQzOwkJCSAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLAomIzQzOwkJCSAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7CiYjNDM7fQomIzQzO2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBEaXJlY3QgSS9PIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHRvdWNoaW5nIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW1wbGVtZW50aW5nIGEgZmFzdCBwYXRoIHNwZWNpZmljYWxseSBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBoaXQgYSBzaW5nbGUsIGNvbnRpZ3VvdXMgZXh0ZW50IG9uIGRpc2vigJR0aGF0JiMzOTtzIGBpb21hcF9kaW9fc2ltcGxlYC4gVGhleSYjMzk7dmUgYWRkZWQgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGlzIG9wdGltaXphdGlvbjogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIGhvdyBgaW9tYXBfZGlvX3J3YCBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSB0aGVzZSBuZXcgZnVuY3Rpb25zOyBpdCYjMzk7cyBjYWxsaW5nIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAgYW5kIGBpb21hcF9kaW9fc2ltcGxlYC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNvcmUgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgZGlyZWN0IEkvTyBsb2dpYywgd2hpY2ggbWVhbnMgaXQgZGVtYW5kcyB0aG9yb3VnaCBzY3J1dGlueS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBzdWNoIGxvdy1sZXZlbCBjb2RlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyBhdCBpdCB0byBlbnN1cmUgc3RhYmlsaXR5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBnZXRzIGNvbXBpbGVkLiBJJiMzOTtsbCBjaGVjayBgZnMvaW9tYXAvTWFrZWZpbGVgIG9yIGBmcy9pb21hcC9LY29uZmlnYCB0byBzZWUgaWYgYENPTkZJR19GU19JT01BUGAgaXMgd2hhdCBlbmFibGVzIHRoaXMgbW9kdWxlLCB3aGljaCB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBpdCB0byBiZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlyZWN0LWlvLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvTWFrZWZpbGU9MTE9aW9tYXAteVx0XHRcdFx0JiM0Mzs9IHRyYWNlLm8gXFxcbi0tXG5mcy9pb21hcC9NYWtlZmlsZS0xMy1cdFx0XHRcdCAgIGJ1ZmZlcmVkLWlvLm9cbmZzL2lvbWFwL01ha2VmaWxlOjE0OmlvbWFwLSQoQ09ORklHX0JMT0NLKVx0XHQmIzQzOz0gZGlyZWN0LWlvLm8gXFxcbmZzL2lvbWFwL01ha2VmaWxlLTE1LVx0XHRcdFx0ICAgaW9lbmQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggZm9yIGlvbWFwKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldywgb3B0aW1pemVkIHBhdGggZm9yIHNpbXBsZSBkaXJlY3QgSS9PIHJlYWRzIHdpdGhpbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLiBJdCYjMzk7cyBjcmVhdGluZyBzZXZlcmFsIG5ldyBmdW5jdGlvbnM6IGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAsIGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYCwgYW5kIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AuIFRoZSBjb3JlIGBpb21hcF9kaW9fcndgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGxldmVyYWdlIHRoZXNlIG5ldyBhZGRpdGlvbnMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBpb21hcCBkaXJlY3QgSS9PIHBhdGgsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggZGlyZWN0IEkvTyByZWFkcyBvbiBpb21hcC11c2luZyBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzIOKAkyBhbGwgY3JpdGljYWwgdGFyZ2V0cy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExvb2tpbmcgYXQgYGZzL2lvbWFwL01ha2VmaWxlYCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX0JMT0NLYCBpcyBhIHJlcXVpcmVtZW50LiBBbHNvLCB3ZSBuZWVkIGEgZmlsZXN5c3RlbSB0aGF0IGFjdHVhbGx5ICp1c2VzKiBpb21hcCBmb3IgZGlyZWN0IEkvTywgc3VjaCBhcyB0aG9zZSB0aGF0IGVuYWJsZSBgQ09ORklHX1hGU19GU2Agb3IgYENPTkZJR19FWFQ0X0ZTYC4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgaW9tYXAsIGJ1dCBgQ09ORklHX0ZTX0lPTUFQYCBpcyB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gaXRzZWxmLgoKTm93LCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IGBpb21hcF9kaW9fcndgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUgaG90IHBhdGgsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgZ2VuZXJpYy4gVGhlIHJlYWwgaW50ZXJlc3RpbmcgcGFydHMsIHRoZSBuZXcgbG9naWMsIGFyZSB0aGVzZSBgaW9tYXBfZGlvX3NpbXBsZSpgIGZ1bmN0aW9ucy4KCkFoLCByaWdodCwgdGhlc2UgYXJlIHN0YXRpYywgc28gdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9ydGVkIHN5bWJvbHMgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIgYnkgbmFtZS4gSG93ZXZlciwgc3l6a2FsbGVyICpjYW4qIGZ1enogc3RhdGljIGZ1bmN0aW9ucyB3aXRoIGtjb3YsIGFuZCBpdCBmb2N1c2VzIG9uIGNvZGUgY292ZXJhZ2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gcHJvdmlkZSB0aGUgc3RhdGljIGZ1bmN0aW9uIG5hbWVzLiBTbywgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgotICAgYGlvbWFwX2Rpb19zaW1wbGVgCi0gICBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgCi0gICBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAKLSAgIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgCi0gICBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIExvb2tzIGxpa2Ugd2UgbmVlZCBgQ09ORklHX0JMT0NLYCBhbmQgYSBmaWxlc3lzdGVtIHRoYXQgdXNlcyBpb21hcCAoYW5kIHRoZXJlZm9yZSBzZWxlY3RzIGBDT05GSUdfRlNfSU9NQVBgKS4gQmV0dGVyIGdvIGNoZWNrIGBmcy9pb21hcC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZmlsZSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBEaXJlY3QgSS9PIEZhc3QgUGF0aCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3LCBmYXN0ZXIgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyB3aXRoaW4gYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGZvciBvdmVyYWxsIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIEkgc2VlIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gQ2xlYXJseSwgdGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBuZXcgZmFzdCBwYXRoLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbmRpY2F0ZXMgdGhleSYjMzk7cmUgYmVpbmcgaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIGlvbWFwIGxvZ2ljLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGJ1ZyBmaXgsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgaW9tYXAgc3Vic3lzdGVtLCB3aGljaCwgYXMgd2Uga25vdywgaXMgZnVuZGFtZW50YWwgdG8gYmxvY2sgZGV2aWNlIEkvTyBhbmQgdXNlZCBieSBzZXZlcmFsIG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMgZm9yIGRpcmVjdCBJL08uIFRoZXJlZm9yZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0IHRvIGV4cG9zZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBmcy9pb21hcC9NYWtlZmlsZWAgaW5kaWNhdGVzIHRoYXQgYGRpcmVjdC1pby5vYCBpcyBidWlsdCB3aGVuIGBDT05GSUdfQkxPQ0tgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGFzIGRpcmVjdCBJL08gaXMgZnVuZGFtZW50YWxseSB0aWVkIHRvIGJsb2NrIGRldmljZXMuIEhvd2V2ZXIsIGlvbWFwIGl0c2VsZiBpcyB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgaG93IGBpb21hcF9kaW9fcndgIGlzIHVzZWQuIFRoYXQgd2lsbCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGluIHByYWN0aWNlLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBpbnZlc3RpZ2F0ZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvZGlyZWN0LWlvLmM9MzY0PXN0YXRpYyBpbnQgYnRyZnNfZGlvX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCxcbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MDQtXHQvKlxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NDA1Olx0ICogaW9tYXBfZGlvX3J3KCkgb25seSBkb2VzIGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoKSwgd2hpY2ggaXNuJiMzOTt0XG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MDYtXHQgKiBlbm91Z2ggaWYgd2UmIzM5O3ZlIHdyaXR0ZW4gY29tcHJlc3NlZCBwYWdlcyB0byB0aGlzIGFyZWEsIHNvIHdlIG5lZWQgdG9cbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MTYtXHQgKiBkaXJ0eSBvciB1bmRlciB3cml0ZWJhY2sgKHNhbWUgYXMgZm9yIHRoZSBub24tY29tcHJlc3Npb24gY2FzZSkuXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo0MTc6XHQgKiBpb21hcF9kaW9fcncoKSBkaWQgdGhlIHNhbWUgY2hlY2ssIGJ1dCBhZnRlciB0aGF0IGFuZCBiZWZvcmUgd2UgZ290XG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MTgtXHQgKiBoZXJlLCBtbWFwJiMzOTtlZCB3cml0ZXMgbWF5IGhhdmUgaGFwcGVuZWQgb3IgYnVmZmVyZWQgcmVhZHMgc3RhcnRlZFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUxNS1cdCAqIFdoZW4gZG9pbmcgYSByZWFkLCBiZWNhdXNlIHdlIHVzZSBJT01BUF9ESU9fUEFSVElBTCB3aGVuIGNhbGxpbmdcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUxNjpcdCAqIGlvbWFwX2Rpb19ydygpLCB3ZSBjYW4gZW5kIHVwIHJldHVybmluZyBsZXNzIGRhdGEgdGhlbiB3aGF0IHRoZSBjYWxsZXJcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUxNy1cdCAqIGFza2VkIGZvciwgcmVzdWx0aW5nIGluIGFuIHVuZXhwZWN0ZWQsIGFuZCBpbmNvcnJlY3QsIHNob3J0IHJlYWQuXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTIwLVx0ICogcGFnZSBmYXVsdCBlcnJvciB3aGVuIHRyeWluZyB0byBmYXVsdCBpbiBwYWdlcyBmb3IgdGhlIGJ1ZmZlciB0aGF0IGlzXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo1MjE6XHQgKiBhc3NvY2lhdGVkIHRvIHRoZSBzdHJ1Y3QgaW92X2l0ZXIgcGFzc2VkIHRvIGlvbWFwX2Rpb19ydygpLCBhbmQgd2VcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMi1cdCAqIGhhdmUgcHJldmlvdXNseSBzdWJtaXR0ZWQgYmlvcyBmb3Igb3RoZXIgZXh0ZW50cyBpbiB0aGUgcmFuZ2UsIGluXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo1MjM6XHQgKiB3aGljaCBjYXNlIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gdXMgRUlPQ0JRVUVVRUQgaWYgbm90IGFsbCBvZlxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTI0LVx0ICogdGhvc2UgYmlvcyBoYXZlIGNvbXBsZXRlZCBieSB0aGUgdGltZSB3ZSBnZXQgdGhlIHBhZ2UgZmF1bHQgZXJyb3IsXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmM9ODExPXN0YXRpYyBzc2l6ZV90IGJ0cmZzX2Rpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jOjgxNjpcdHJldHVybiBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwgXHUwMDI2YnRyZnNfZGlvX2lvbWFwX29wcywgXHUwMDI2YnRyZnNfZGlvX29wcyxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNy1cdFx0XHQgICAgSU9NQVBfRElPX1BBUlRJQUwgfCBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVELCBcdTAwMjZkYXRhLCBkb25lX2JlZm9yZSk7XG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmM9ODIwPXN0YXRpYyBzdHJ1Y3QgaW9tYXBfZGlvICpidHJmc19kaW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODI0LVxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6ODI1Olx0cmV0dXJuIF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFx1MDAyNmJ0cmZzX2Rpb19pb21hcF9vcHMsIFx1MDAyNmJ0cmZzX2Rpb19vcHMsXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MjYtXHRcdFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXHUwMDI2ZGF0YSwgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2Vyb2ZzL2RhdGEuYz00NDU9c3RhdGljIHNzaXplX3QgZXJvZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2Vyb2ZzL2RhdGEuYy00NjAtXG5mcy9lcm9mcy9kYXRhLmM6NDYxOlx0XHRyZXR1cm4gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZlcm9mc19pb21hcF9vcHMsXG5mcy9lcm9mcy9kYXRhLmMtNDYyLVx0XHRcdFx0ICAgIE5VTEwsIDAsIFx1MDAyNml0ZXJfY3R4LCAwKTtcbi0tXG5mcy9leGZhdC9maWxlLmM9NzA4PXN0YXRpYyBzc2l6ZV90IGV4ZmF0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4ZmF0L2ZpbGUuYy03MTEtXG5mcy9leGZhdC9maWxlLmM6NzEyOlx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNmV4ZmF0X3dyaXRlX2lvbWFwX29wcyxcbmZzL2V4ZmF0L2ZpbGUuYy03MTMtXHRcdFx0XHUwMDI2ZXhmYXRfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvZXhmYXQvZmlsZS5jPTgwMD1zdGF0aWMgc3NpemVfdCBleGZhdF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi0tXG5mcy9leGZhdC9maWxlLmMtODExLVx0XHRmaWxlX2FjY2Vzc2VkKGlvY2ItXHUwMDNla2lfZmlscCk7XG5mcy9leGZhdC9maWxlLmM6ODEyOlx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwgXHUwMDI2ZXhmYXRfaW9tYXBfb3BzLCBOVUxMLCAwLFxuZnMvZXhmYXQvZmlsZS5jLTgxMy1cdFx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL2V4dDIvZmlsZS5jPTY1PXN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0Mi9maWxlLmMtNzItXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG5mcy9leHQyL2ZpbGUuYzo3MzpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXh0Ml9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZnMvZXh0Mi9maWxlLmMtNzQtXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9leHQyL2ZpbGUuYz04MD1zdGF0aWMgaW50IGV4dDJfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbi0tXG5mcy9leHQyL2ZpbGUuYy05MC1cdCAqIElmIHdlIGFyZSBleHRlbmRpbmcgdGhlIGZpbGUsIHdlIGhhdmUgdG8gdXBkYXRlIGlfc2l6ZSBoZXJlIGJlZm9yZVxuZnMvZXh0Mi9maWxlLmM6OTE6XHQgKiBwYWdlIGNhY2hlIGdldHMgaW52YWxpZGF0ZWQgaW4gaW9tYXBfZGlvX3J3KCkuIFRoaXMgcHJldmVudHMgcmFjaW5nXG5mcy9leHQyL2ZpbGUuYy05Mi1cdCAqIGJ1ZmZlcmVkIHJlYWRzIGZyb20gemVyb2luZyBvdXQgdG9vIG11Y2ggZnJvbSBwYWdlIGNhY2hlIHBhZ2VzLlxuLS1cbmZzL2V4dDIvZmlsZS5jPTExMT1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDIvZmlsZS5jLTEzNi1cbmZzL2V4dDIvZmlsZS5jOjEzNzpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZleHQyX2lvbWFwX29wcywgXHUwMDI2ZXh0Ml9kaW9fd3JpdGVfb3BzLFxuZnMvZXh0Mi9maWxlLmMtMTM4LVx0XHRcdCAgIGZsYWdzLCBOVUxMLCAwKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYy00Ni0gKiBhbnkgc3BlY2lhbCBmZWF0dXJlcyBsaWtlIGVuY3J5cHRpb24gb3IgdmVyaXR5LCBleHQ0IGhhcyB0cmFkaXRpb25hbGx5XG5mcy9leHQ0L2ZpbGUuYzo0NzogKiByZXR1cm5lZCBFSU5WQUwgZm9yIG1pc2FsaWduZWQgRElPLiAgaW9tYXBfZGlvX3J3KCkgdXNlcyB0aGlzIGNvbnZlbnRpb24gdG9vLlxuZnMvZXh0NC9maWxlLmMtNDgtICogSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgYXR0ZW1wdCB0aGUgRElPLCAqbm90KiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PLlxuLS1cbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0NC9maWxlLmMtOTMtXG5mcy9leHQ0L2ZpbGUuYzo5NDpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZnMvZXh0NC9maWxlLmMtOTUtXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYz01MTk9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy01OTEtXG5mcy9leHQ0L2ZpbGUuYzo1OTI6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIFx1MDAyNmV4dDRfZGlvX3dyaXRlX29wcyxcbmZzL2V4dDQvZmlsZS5jLTU5My1cdFx0XHQgICBkaW9fZmxhZ3MsIE5VTEwsIDApO1xuLS1cbmZzL2YyZnMvZmlsZS5jPTQ4NDk9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mMmZzL2ZpbGUuYy00ODgxLVx0LypcbmZzL2YyZnMvZmlsZS5jOjQ4ODI6XHQgKiBXZSBoYXZlIHRvIHVzZSBfX2lvbWFwX2Rpb19ydygpIGFuZCBpb21hcF9kaW9fY29tcGxldGUoKSBpbnN0ZWFkIG9mXG5mcy9mMmZzL2ZpbGUuYzo0ODgzOlx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcbmZzL2YyZnMvZmlsZS5jLTQ4ODQtXHQgKiBGMkZTX0RJT19SRUFEIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ4ODYtXHRpbmNfcGFnZV9jb3VudChzYmksIEYyRlNfRElPX1JFQUQpO1xuZnMvZjJmcy9maWxlLmM6NDg4NzpcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTQ4ODgtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb19yZWFkX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmM9NTE2Nj1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMTQtXHQvKlxuZnMvZjJmcy9maWxlLmM6NTIxNTpcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcbmZzL2YyZnMvZmlsZS5jOjUyMTY6XHQgKiB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIGlvbWFwX2Rpb19ydygpIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZVxuZnMvZjJmcy9maWxlLmMtNTIxNy1cdCAqIEYyRlNfRElPX1dSSVRFIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMjItXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcbmZzL2YyZnMvZmlsZS5jOjUyMjM6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTUyMjQtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncywgaW9jYiwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmMtNTI3NC1cdH0gZWxzZSB7XG5mcy9mMmZzL2ZpbGUuYzo1Mjc1Olx0XHQvKiBpb21hcF9kaW9fcncoKSBhbHJlYWR5IGhhbmRsZWQgdGhlIGdlbmVyaWNfd3JpdGVfc3luYygpLiAqL1xuZnMvZjJmcy9maWxlLmMtNTI3Ni1cdFx0Km1heV9uZWVkX3N5bmMgPSBmYWxzZTtcbi0tXG5mcy9nZnMyL2ZpbGUuYz04MTE9c3RhdGljIHNzaXplX3QgZ2ZzMl9maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcbi0tXG5mcy9nZnMyL2ZpbGUuYy04MjUtXHQgKlxuZnMvZ2ZzMi9maWxlLmM6ODI2Olx0ICogVW5saWtlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsIGZvciByZWFkcywgaW9tYXBfZGlvX3J3IGNhbiB0cmlnZ2VyXG5mcy9nZnMyL2ZpbGUuYy04MjctXHQgKiBwaHlzaWNhbCBhcyB3ZWxsIGFzIG1hbnVhbCBwYWdlIGZhdWx0cywgYW5kIHdlIG5lZWQgdG8gZGlzYWJsZSBib3RoXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODQ2LVx0dG8tXHUwMDNlbm9mYXVsdCA9IHRydWU7XG5mcy9nZnMyL2ZpbGUuYzo4NDc6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtODQ4LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCByZWFkKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy04NTItXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL2dmczIvZmlsZS5jOjg1MzpcdC8qIE5vIGluY3JlbWVudCAoJiM0Mzs9KSBiZWNhdXNlIGlvbWFwX2Rpb19ydyByZXR1cm5zIGEgY3VtdWxhdGl2ZSB2YWx1ZS4gKi9cbmZzL2dmczIvZmlsZS5jLTg1NC1cdGlmIChyZXQgXHUwMDNlIDApXG4tLVxuZnMvZ2ZzMi9maWxlLmM9ODc0PXN0YXRpYyBzc2l6ZV90IGdmczJfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODkwLVx0ICpcbmZzL2dmczIvZmlsZS5jOjg5MTpcdCAqIEZvciB3cml0ZXMsIGlvbWFwX2Rpb19ydyBvbmx5IHRyaWdnZXJzIG1hbnVhbCBwYWdlIGZhdWx0cywgc28gd2VcbmZzL2dmczIvZmlsZS5jLTg5Mi1cdCAqIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgcGh5c2ljYWwgb25lcy5cbi0tXG5mcy9nZnMyL2ZpbGUuYy05MTItXHRmcm9tLVx1MDAzZW5vZmF1bHQgPSB0cnVlO1xuZnMvZ2ZzMi9maWxlLmM6OTEzOlx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtOTE0LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCB3cml0dGVuKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy05MjEtXHR9XG5mcy9nZnMyL2ZpbGUuYzo5MjI6XHQvKiBObyBpbmNyZW1lbnQgKCYjNDM7PSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXG5mcy9nZnMyL2ZpbGUuYy05MjMtXHRpZiAocmV0IFx1MDAzZSAwKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQxMD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUwNS1cdFx0ICogV3JpdGVzIHRoYXQgZXh0ZW5kIGlfc2l6ZSBhcmUgYWxzbyBub3Qgc3VwcG9ydGVkLCBidXQgdGhpcyBpc1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTA2Olx0XHQgKiBoYW5kbGVkIGluIF9faW9tYXBfZGlvX3J3KCkuXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MDctXHRcdCAqL1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTYzMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjYzLS8qXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NjQ6ICogaW9tYXBfZGlvX3J3KCkgYWx3YXlzIGNvbXBsZXRlcyBPX1tEXVNZTkMgd3JpdGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgSU9cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY2NS0gKiBpcyBiZWluZyBpc3N1ZWQgYXMgQUlPIG9yIG5vdC4gIFRoaXMgYWxsb3dzIHVzIHRvIG9wdGltaXNlIHB1cmUgZGF0YSB3cml0ZXNcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzItICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NzM6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3NC0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjgzPXN0cnVjdCBpb21hcF9kaW8gKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg0Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg1LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcwMjpcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIGRvbmVfYmVmb3JlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMy1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04NzItXHRcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODczOlx0XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBpb21pLmxlbik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04NzQtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJT0NCUVVFVUVEKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTQtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk1OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5Ni1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05NzI9aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNS0gKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTY6ICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMTctICpcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAzMjogKiB0aGUgZ2VuZXJpYyBfX2lvbWFwX2Rpb19ydygpIHNsb3cgcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMy0gKiBpcyBwcm9wYWdhdGVkIGFzLWlzLCBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNz1pb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwOTAtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDkxOlx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDkyLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzQtXHRcdHN1Ym1pdF9iaW8oYmlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExMzU6XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTM2LVx0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTQ9c3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE1NTppb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTU2LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjgtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY5Olx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTcwLVx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNzQtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE3NTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3Ni1cbi0tXG5mcy9pb21hcC90cmFjZS5oPTg1PURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcbmZzL2lvbWFwL3RyYWNlLmg6ODY6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19yd19xdWV1ZWQpO1xuZnMvaW9tYXAvdHJhY2UuaC04Ny1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcbi0tXG5mcy9pb21hcC90cmFjZS5oPTIyMD1UUkFDRV9FVkVOVChpb21hcF9pdGVyLFxuLS1cbmZzL2lvbWFwL3RyYWNlLmgtMjU1LVxuZnMvaW9tYXAvdHJhY2UuaDoyNTY6VFJBQ0VfRVZFTlQoaW9tYXBfZGlvX3J3X2JlZ2luLFxuZnMvaW9tYXAvdHJhY2UuaC0yNTctXHRUUF9QUk9UTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9udGZzL2ZpbGUuYz00Mzg9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvbnRmcy9maWxlLmMtNDYwLVx0XHRmaWxlX2FjY2Vzc2VkKGlvY2ItXHUwMDNla2lfZmlscCk7XG5mcy9udGZzL2ZpbGUuYzo0NjE6XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2bnRmc19yZWFkX2lvbWFwX29wcywgTlVMTCwgMCxcbmZzL250ZnMvZmlsZS5jLTQ2Mi1cdFx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL250ZnMvZmlsZS5jPTQ5NT1zdGF0aWMgc3NpemVfdCBudGZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL250ZnMvZmlsZS5jLTQ5OC1cbmZzL250ZnMvZmlsZS5jOjQ5OTpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZudGZzX2Rpb19pb21hcF9vcHMsXG5mcy9udGZzL2ZpbGUuYy01MDAtXHRcdFx0XHUwMDI2bnRmc193cml0ZV9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzMy9maWxlLmM9ODE1PXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTg3NC1cbmZzL250ZnMzL2ZpbGUuYzo4NzU6XHRcdGVyciA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcdTAwMjZudGZzX2lvbWFwX29wcywgTlVMTCwgZGlvX2ZsYWdzLFxuZnMvbnRmczMvZmlsZS5jLTg3Ni1cdFx0XHRcdCAgIE5VTEwsIDApO1xuLS1cbmZzL250ZnMzL2ZpbGUuYz0xMjIwPXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy0xMzA1LVxuZnMvbnRmczMvZmlsZS5jOjEzMDY6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsXG5mcy9udGZzMy9maWxlLmMtMTMwNy1cdFx0XHQgICBJT01BUF9ESU9fRk9SQ0VfV0FJVCwgTlVMTCwgMCk7XG4tLVxuZnMvbnRmczMvaW5vZGUuYz02Nzk9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxuLS1cbmZzL250ZnMzL2lub2RlLmMtNzIxLSAqIC0gaW9tYXBfdHJ1bmNhdGVfcGFnZVxuZnMvbnRmczMvaW5vZGUuYzo3MjI6ICogLSBpb21hcF9kaW9fcndcbmZzL250ZnMzL2lub2RlLmMtNzIzLSAqIC0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZVxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTI0OT14ZnNfZmlsZV9kaW9fcmVhZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0yNzEtXHR9XG5mcy94ZnMveGZzX2ZpbGUuYzoyNzI6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgZGlvX29wcywgZGlvX2ZsYWdzLFxuZnMveGZzL3hmc19maWxlLmMtMjczLVx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTc0MT14ZnNfZmlsZV9kaW9fd3JpdGVfYWxpZ25lZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy03NzktXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XG5mcy94ZnMveGZzX2ZpbGUuYzo3ODA6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIGFjLCAwKTtcbmZzL3hmcy94ZnNfZmlsZS5jLTc4MS1vdXRfdW5sb2NrOlxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTgxOT14ZnNfZmlsZV9kaW9fd3JpdGVfYXRvbWljKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTg1NS1cdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5mcy94ZnMveGZzX2ZpbGUuYzo4NTY6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgZG9wcywgXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncyxcbmZzL3hmcy94ZnNfZmlsZS5jLTg1Ny1cdFx0XHROVUxMLCAwKTtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz04OTU9eGZzX2ZpbGVfZGlvX3dyaXRlX3VuYWxpZ25lZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy05NDktXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XG5mcy94ZnMveGZzX2ZpbGUuYzo5NTA6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2eGZzX2RpcmVjdF93cml0ZV9pb21hcF9vcHMsXG5mcy94ZnMveGZzX2ZpbGUuYy05NTEtXHRcdFx0ICAgXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcbi0tXG5mcy96b25lZnMvZmlsZS5jPTQ2OT1zdGF0aWMgc3NpemVfdCB6b25lZnNfZmlsZV9kaW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvem9uZWZzL2ZpbGUuYy01MjMtXHQvKlxuZnMvem9uZWZzL2ZpbGUuYzo1MjQ6XHQgKiBpb21hcF9kaW9fcncoKSBtYXkgcmV0dXJuIEVOT1RCTEsgaWYgdGhlcmUgd2FzIGFuIGlzc3VlIHdpdGhcbmZzL3pvbmVmcy9maWxlLmMtNTI1LVx0ICogcGFnZSBpbnZhbGlkYXRpb24uIE92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUgd2l0aCBFQlVTWSBzbyB0aGF0XG4tLVxuZnMvem9uZWZzL2ZpbGUuYy01MjctXHQgKi9cbmZzL3pvbmVmcy9maWxlLmM6NTI4Olx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNnpvbmVmc193cml0ZV9pb21hcF9vcHMsXG5mcy96b25lZnMvZmlsZS5jLTUyOS1cdFx0XHQgICBcdTAwMjZ6b25lZnNfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvem9uZWZzL2ZpbGUuYz02MzE9c3RhdGljIHNzaXplX3Qgem9uZWZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy96b25lZnMvZmlsZS5jLTY3Mi1cdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuZnMvem9uZWZzL2ZpbGUuYzo2NzM6XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2em9uZWZzX3JlYWRfaW9tYXBfb3BzLFxuZnMvem9uZWZzL2ZpbGUuYy02NzQtXHRcdFx0XHQgICBcdTAwMjZ6b25lZnNfcmVhZF9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19zaW1wbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg5NzpzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTExLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ0LXtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0NTpcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NDY6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NDctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0OS1cdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBOVUxMKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MDpcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTUxLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTQte1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1Olx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1NjpcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2MjpcdFx0SU5JVF9XT1JLKFx1MDAyNnNyLVx1MDAzZXdvcmssIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXHRcdHF1ZXVlX3dvcmsoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxLCBcdTAwMjZzci1cdTAwM2V3b3JrKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjctXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5Njg6XHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2OS19XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTcxPXN0YXRpYyBpbmxpbmUgYm9vbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTcyOmlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDYtICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDA4LSAqIGVudGVyaW5nIHRoaXMgcGF0aC5cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTQ6ICogZnJvbSB0aGUgc2hhcmVkIGlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgd2hvc2UgZnJvbnRfcGFkIG1hdGNoZXMgc3RydWN0XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE1OiAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMjktICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzEtICogZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC4gIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAzNzppb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzOC1cdFx0IGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVx0fTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwNTE6XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUyLVx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDk3LVx0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTg6XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5OTpcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVx0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzMi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzNC1cdFx0c3VibWl0X2JpbyhiaW8pO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzktXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNDA6XHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTU9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjEtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTYyOlx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjMtXHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0Olx0XHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE3Nz1zdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3OC17XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5Olx0cmV0dXJuIGJpb3NldF9pbml0KFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTgxLVx0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDYzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEaXJlY3QgSS9PIEZhc3QgUGF0aCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGltcGxlbWVudGluZyBhIGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0IHRhcmdldHMgc21hbGwsIGJsb2NrLWFsaWduZWQgSS9PcyB0aGF0IGhpdCBhIHNpbmdsZSBjb250aWd1b3VzIGV4dGVudCBvbiBkaXNrIHdpdGhpbiB0aGUgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIG9wdGltaXphdGlvbiBpbnZvbHZlcyB0d28gbmV3IGZ1bmN0aW9ucywgYGlvbWFwX2Rpb19zaW1wbGUoKWAgYW5kIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCgpYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGlvbWFwX2Rpb19ydygpYC4gVGhlIGltcGxpY2F0aW9uIGlzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgdG8gdGhlIGtlcm5lbCYjMzk7cyBkaXJlY3QgSS9PIHBhdGgsIHdoaWNoIHVzZXJzIGFjY2VzcyB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBsaWtlIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgd2l0aCB0aGUgYE9fRElSRUNUYCBmbGFnLgoKR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgY29yZSBWRlMgYW5kIGlvbWFwIGxvZ2ljLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gZXhwb3NlIHRoaXMgdG8gYXMgbWFueSBzdHJlc3MgdGVzdHMgYXMgd2UgY2FuIHRvIHNoYWtlIG91dCBhbnkgZWRnZSBjYXNlcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTdGFydGluZyB3aXRoIHRoZSBmaWxlIGxvY2F0aW9uIGl0c2VsZiwgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gRGl2aW5nIGludG8gdGhlIGBmcy9pb21hcC9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYGlvbWFwLSQoQ09ORklHX0JMT0NLKSAmIzQzOz0gZGlyZWN0LWlvLm9gLiBTbyBgQ09ORklHX0JMT0NLYCBpcyB0aGUgcHJpbWFyeSByZXF1aXJlbWVudC4gVGhhdCBpcyBhICp2ZXJ5KiBnZW5lcmFsIGNvbmZpZywgc28gSSYjMzk7bSBub3Qgb3Zlcmx5IGNvbmNlcm5lZCBhYm91dCB0aGF0LiBUaGUgbW9yZSByZWxldmFudCByZXF1aXJlbWVudCBpcyBgQ09ORklHX0ZTX0lPTUFQYC4gVGhpcyBpcyB0aGUgY29yZSBpb21hcCBjb25maWd1cmF0aW9uLCBhbmQgaXQgaXMgc2VsZWN0ZWQgYnkgbnVtZXJvdXMgZmlsZSBzeXN0ZW1zIGxpa2UgZXh0NCwgeGZzLCBhbmQgYnRyZnMsIHdoaWNoIG1lYW5zIGl0cyBwcmV0dHkgYnJvYWRseSB1c2VkLiBOb3csIHdhaXQgYSBtaW51dGUuLi4gd2hlcmUgaXMgdGhlIEtjb25maWcgZm9yIHRoZSBpb21hcCBzdWJzeXN0ZW0gaXRzZWxmPyBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gZXhpc3QgaW4gYGZzL2lvbWFwL2AuIEkmIzM5O2xsIGhhdmUgdG8gY2hlY2sgYGZzL0tjb25maWdgIGZvciB0aGUgaW9tYXAgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGU19JT01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4tLVxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9pb21hcC9NYWtlZmlsZT03PWNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmMpXHRcdCMgbmVlZGVkIGZvciB0cmFjZSBldmVudHNcbmZzL2lvbWFwL01ha2VmaWxlLTgtXG5mcy9pb21hcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19GU19JT01BUClcdFx0JiM0Mzs9IGlvbWFwLm9cbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxuLS1cbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXG4tLVxuZnMvbnRmcy9LY29uZmlnLTQtXHRzZWxlY3QgTkxTXG5mcy9udGZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvbnRmcy9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvbnRmcy9pb21hcC5jPTM2Mz1zdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL250ZnMvaW9tYXAuYy01NDAtXG5mcy9udGZzL2lvbWFwLmM6NTQxOiNkZWZpbmUgTlRGU19JT01BUF9GTEFHU19CRUdJTlx0XHRCSVQoMSlcbmZzL250ZnMvaW9tYXAuYzo1NDI6I2RlZmluZSBOVEZTX0lPTUFQX0ZMQUdTX0RJT1x0XHRCSVQoMilcbmZzL250ZnMvaW9tYXAuYzo1NDM6I2RlZmluZVx0TlRGU19JT01BUF9GTEFHU19NS1dSSVRFXHRCSVQoMylcbmZzL250ZnMvaW9tYXAuYzo1NDQ6I2RlZmluZVx0TlRGU19JT01BUF9GTEFHU19XUklURUJBQ0tcdEJJVCg0KVxuZnMvbnRmcy9pb21hcC5jLTU0NS1cbmZzL250ZnMvaW9tYXAuYz01NDY9c3RhdGljIGludCBudGZzX3dyaXRlX2RhX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL250ZnMvaW9tYXAuYy01NjEtXG5mcy9udGZzL2lvbWFwLmM6NTYyOlx0dXBkYXRlX21wID0gbnRmc19pb21hcF9mbGFncyBcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfRElPIHwgTlRGU19JT01BUF9GTEFHU19NS1dSSVRFKSB8fFxuZnMvbnRmcy9pb21hcC5jLTU2My1cdFx0XHROSW5vQXR0cihuaSkgfHwgbmktXHUwMDNlbWZ0X25vIFx1MDAzYyBGSUxFX2ZpcnN0X3VzZXI7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTU2Ni1cdFx0XHRtYXhfY2x1X2NvdW50LCBcdTAwMjZiYWxsb2MsIHVwZGF0ZV9tcCxcbmZzL250ZnMvaW9tYXAuYzo1Njc6XHRcdFx0bnRmc19pb21hcF9mbGFncyBcdTAwMjYgTlRGU19JT01BUF9GTEFHU19XUklURUJBQ0spO1xuZnMvbnRmcy9pb21hcC5jLTU2OC1cdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTU5NC1cdFx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9ESVJFQ1QgfHxcbmZzL250ZnMvaW9tYXAuYzo1OTU6XHRcdCAgICBudGZzX2lvbWFwX2ZsYWdzIFx1MDAyNiBOVEZTX0lPTUFQX0ZMQUdTX01LV1JJVEUpIHtcbmZzL250ZnMvaW9tYXAuYy01OTYtXHRcdFx0bG9mZl90IGVuZCA9IG9mZnNldCAmIzQzOyBsZW5ndGg7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTYyMC1cbmZzL250ZnMvaW9tYXAuYzo2MjE6XHRpZiAobnRmc19pb21hcF9mbGFncyBcdTAwMjYgTlRGU19JT01BUF9GTEFHU19NS1dSSVRFIFx1MDAyNlx1MDAyNlxuZnMvbnRmcy9pb21hcC5jLTYyMi1cdCAgICBpb21hcC1cdTAwM2VvZmZzZXQgJiM0MzsgaW9tYXAtXHUwMDNlbGVuZ3RoIFx1MDAzZSBuaS1cdTAwM2Vpbml0aWFsaXplZF9zaXplKSB7XG4tLVxuZnMvbnRmcy9pb21hcC5jPTY3ND1zdGF0aWMgaW50IG50ZnNfd3JpdGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTY3OS1cbmZzL250ZnMvaW9tYXAuYzo2ODA6XHRpZiAobnRmc19pb21hcF9mbGFncyBcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfQkVHSU4gfCBOVEZTX0lPTUFQX0ZMQUdTX0RJTykgXHUwMDI2XHUwMDI2XG5mcy9udGZzL2lvbWFwLmMtNjgxLVx0ICAgIG9mZnNldCAmIzQzOyBsZW5ndGggXHUwMDNlIG5pLVx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcbi0tXG5mcy9udGZzL2lvbWFwLmMtNjg2LVx0XHRcdFx0XHRcdCAgIG50ZnNfaW9tYXBfZmxhZ3MgXHUwMDI2XG5mcy9udGZzL2lvbWFwLmM6Njg3Olx0XHRcdFx0XHRcdCAgIE5URlNfSU9NQVBfRkxBR1NfRElPKTtcbmZzL250ZnMvaW9tYXAuYy02ODgtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvbnRmcy9pb21hcC5jLTY5Mi1cdG11dGV4X2xvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbmZzL250ZnMvaW9tYXAuYzo2OTM6XHRpZiAobnRmc19pb21hcF9mbGFncyBcdTAwMjYgTlRGU19JT01BUF9GTEFHU19CRUdJTilcbmZzL250ZnMvaW9tYXAuYy02OTQtXHRcdHJldHVybiAgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KGlub2RlLCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jPTcwMz1zdGF0aWMgaW50IF9fbnRmc193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL250ZnMvaW9tYXAuYy03MTItXG5mcy9udGZzL2lvbWFwLmM6NzEzOlx0aWYgKG50ZnNfaW9tYXBfZmxhZ3MgXHUwMDI2IChOVEZTX0lPTUFQX0ZMQUdTX0JFR0lOIHwgTlRGU19JT01BUF9GTEFHU19ESU8pIFx1MDAyNlx1MDAyNlxuZnMvbnRmcy9pb21hcC5jLTcxNC1cdCAgICBlbmQgXHUwMDNlIG5pLVx1MDAzZWRhdGFfc2l6ZSkge1xuLS1cbmZzL250ZnMvaW9tYXAuYz03Mzg9c3RhdGljIGludCBudGZzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTc0Mi1cdHJldHVybiBfX250ZnNfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsXG5mcy9udGZzL2lvbWFwLmM6NzQzOlx0XHRcdE5URlNfSU9NQVBfRkxBR1NfQkVHSU4pO1xuZnMvbnRmcy9pb21hcC5jLTc0NC19XG4tLVxuZnMvbnRmcy9pb21hcC5jPTc3Mj1zdGF0aWMgaW50IG50ZnNfcGFnZV9ta3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTc3Ni1cdHJldHVybiBfX250ZnNfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsXG5mcy9udGZzL2lvbWFwLmM6Nzc3Olx0XHRcdE5URlNfSU9NQVBfRkxBR1NfTUtXUklURSk7XG5mcy9udGZzL2lvbWFwLmMtNzc4LX1cbi0tXG5mcy9udGZzL2lvbWFwLmM9Nzg1PXN0YXRpYyBpbnQgbnRmc19kaW9faW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9udGZzL2lvbWFwLmMtNzg5LVx0cmV0dXJuIF9fbnRmc193cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCxcbmZzL250ZnMvaW9tYXAuYzo3OTA6XHRcdFx0TlRGU19JT01BUF9GTEFHU19ESU8pO1xuZnMvbnRmcy9pb21hcC5jLTc5MS19XG4tLVxuZnMvbnRmcy9pb21hcC5jPTc5OD1zdGF0aWMgc3NpemVfdCBudGZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuLS1cbmZzL250ZnMvaW9tYXAuYy04MDctXHRcdFx0XHRJT01BUF9XUklURSwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLFxuZnMvbnRmcy9pb21hcC5jOjgwODpcdFx0XHRcdE5URlNfSU9NQVBfRkxBR1NfV1JJVEVCQUNLKTtcbmZzL250ZnMvaW9tYXAuYy04MDktXHRcdGlmIChlcnJvcilcbi0tXG5mcy9udGZzL2lvbWFwLmgtNS1cbmZzL250ZnMvaW9tYXAuaDo2OiNpZm5kZWYgX0xJTlVYX05URlNfSU9NQVBfSFxuZnMvbnRmcy9pb21hcC5oOjc6I2RlZmluZSBfTElOVVhfTlRGU19JT01BUF9IXG5mcy9udGZzL2lvbWFwLmgtOC1cbi0tXG5mcy9udGZzL2lvbWFwLmg9MjI9ZXh0ZXJuIGludCBudGZzX2Rpb196ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgpO1xuZnMvbnRmcy9pb21hcC5oOjIzOiNlbmRpZiAvKiBfTElOVVhfTlRGU19JT01BUF9IICovXG4tLVxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXG4tLVxuZnMveGZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuZnMveGZzL0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMveGZzL0tjb25maWctOC1cdGhlbHBcbi0tXG5mcy94ZnMveGZzX2lvbWFwLmgtNS0gKi9cbmZzL3hmcy94ZnNfaW9tYXAuaDo2OiNpZm5kZWYgX19YRlNfSU9NQVBfSF9fXG5mcy94ZnMveGZzX2lvbWFwLmg6NzojZGVmaW5lIF9fWEZTX0lPTUFQX0hfX1xuZnMveGZzL3hmc19pb21hcC5oLTgtXG4tLVxuZnMveGZzL3hmc19pb21hcC5oPTYwPWV4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzIHhmc19pb21hcF93cml0ZV9vcHM7XG5mcy94ZnMveGZzX2lvbWFwLmgtNjEtXG5mcy94ZnMveGZzX2lvbWFwLmg6NjI6I2VuZGlmIC8qIF9fWEZTX0lPTUFQX0hfXyovXG4tLVxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXG4tLVxuZnMvem9uZWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZnMvem9uZWZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvem9uZWZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19zaW1wbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg5NzpzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTExLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ0LXtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0NTpcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NDY6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NDctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0OS1cdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBOVUxMKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MDpcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTUxLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTQte1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1Olx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1NjpcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2MjpcdFx0SU5JVF9XT1JLKFx1MDAyNnNyLVx1MDAzZXdvcmssIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXHRcdHF1ZXVlX3dvcmsoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxLCBcdTAwMjZzci1cdTAwM2V3b3JrKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjctXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5Njg6XHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2OS19XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTcxPXN0YXRpYyBpbmxpbmUgYm9vbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTcyOmlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDYtICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDA4LSAqIGVudGVyaW5nIHRoaXMgcGF0aC5cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTQ6ICogZnJvbSB0aGUgc2hhcmVkIGlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgd2hvc2UgZnJvbnRfcGFkIG1hdGNoZXMgc3RydWN0XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE1OiAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMjktICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzEtICogZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC4gIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAzNzppb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzOC1cdFx0IGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVx0fTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwNTE6XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUyLVx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDk3LVx0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTg6XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5OTpcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVx0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzMi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzNC1cdFx0c3VibWl0X2JpbyhiaW8pO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzktXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNDA6XHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTU9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjEtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTYyOlx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjMtXHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0Olx0XHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE3Nz1zdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3OC17XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5Olx0cmV0dXJuIGJpb3NldF9pbml0KFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTgxLVx0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTQxCgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDcxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgRGlyZWN0IEkvTyBQYXRoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgcGF0Y2guIEl0IGludHJvZHVjZXMgYSAmIzM0O3NpbXBsZSYjMzQ7IGRpcmVjdCBJL08gcGF0aCwgc3BlY2lmaWNhbGx5IGBpb21hcF9kaW9fc2ltcGxlYCwgd2l0aGluIHRoZSBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGZpbGUuIFRoaXMgbmV3IHBhdGggaXMgZGVzaWduZWQgZm9yIGhhbmRsaW5nIGZhc3QgcGF0aCwgc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYSBzaW5nbGUgY29udGlndW91cyBleHRlbnQgb24gZGlzay4gTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmlwZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQuCgpUaGUgYGlvbWFwX2Rpb19zaW1wbGVgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBpb21hcF9kaW9fcndgLCB3aGljaCBpcywgYXMgd2Uga25vdywgYSBmdW5jdGlvbiB1c2VkIGJ5IG51bWVyb3VzIGZpbGVzeXN0ZW1zLCBpbmNsdWRpbmcgYnRyZnMsIGV4dDQsIHhmcywgZjJmcywgYW5kIGdmczIuIFRoYXQgaW1tZWRpYXRlbHkgZXhwYW5kcyB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYXR0YWNrIHN1cmZhY2UsIGFuZCBtZWFucyBpdCBzaG91bGQgYmUgdmVyeSB3ZWxsIHRlc3RlZCwgYW5kIHRodXMgZnV6emVkLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBhbGwgdGhpcyBpcyBgRlNfSU9NQVBgLiBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBtYW55IGZpbGVzeXN0ZW1zLCB3aGljaCBpcyBnb29kLCBidXQgaW4gbXkgZXhwZXJpZW5jZSwgaXQgbWlnaHQgYWxzbyBiZSB3b3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiB0aGUgc2VsZWN0ZWQgZmlsZXN5c3RlbXMuIFNpbmNlIGBGU19JT01BUGAgaXMgYSBib29sIGNvbmZpZywgbGlzdGluZyBpdCBpcyBmaW5lLiBJdCB3b3VsZCBhbHNvIGJlIHVzZWZ1bCB0byBrZWVwIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGBCVFJGU19GU2AgaW4gbWluZC4KClNvLCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cyBvZiB0aGlzIG5ldyBwYXRoLCBhbmQgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGJlLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGBpb21hcF9kaW9fc2ltcGxlYCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgc28gdGhpcyBpcyBhIHNvbGlkIGFkZGl0aW9uLgoKVGhlcmVmb3JlLCBmb3IgbXkgZnV6emluZyBhc3Nlc3NtZW50OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYAoqICAgKipGb2N1c1N5bWJvbHMqKjogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEZTX0lPTUFQYCBhbmQsIHdhaXQsIHNpbmNlIHRoZSBgZGlyZWN0LWlvLm9gIGZpbGUgYWxzbyByZXF1aXJlcyBgQ09ORklHX0JMT0NLYCwgSSBzaG91bGQgYWRkIHRoYXQgdG9vLiBgQkxPQ0tgCgoqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcsIGZhc3RlciBwYXRoIGZvciBoYW5kbGluZyBzcGVjaWZpYyB0eXBlcyBvZiBkaXJlY3QgSS9PcyB3aXRoaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gQmVjYXVzZSB0aGlzIHBhdGggYWRkcyBuZXcgY29yZSBsb2dpYywgYW5kIGJlY2F1c2UgaXQgaXMgcmVhY2hhYmxlIHZpYSBzZXZlcmFsIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBpdCBzaG91bGQgYmUgZnV6emVkIGFzIHBhcnQgb2YgYSBwcm9wZXIgc2VjdXJpdHkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBhZGRzIG5ldyBjb3JlIGxvZ2ljIGZvciBkaXJlY3QgSS9PIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB2YXJpb3VzIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTg6NTEuMDY5NzAxODM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjg1NDk1OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2VuZF9pb1wiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIHNtYWxsLCBibG9jay1hbGlnbmVkIGRpcmVjdCBJL09zIGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIFRoaXMgYWRkcyBuZXcgY29yZSBsb2dpYyBmb3IgZGlyZWN0IEkvTyBoYW5kbGluZyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdmFyaW91cyBmaWxlc3lzdGVtcyAoZXh0NCwgeGZzLCBidHJmcywgZXRjLikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA4OjU4OjUxLjA2OTcwNzQ1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NDU1NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjllYmIyY2U3NjY4NDA2NzZjMDVmNTRiNjUzNWE4Mjc3ODM3OGIyY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDA4OjU4OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uY2E3OTAyMzllNWViMzIgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNlcnJvci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNlLmhcXFwiXFxuIFxcbkBAIC04OCw5ICs4OSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gXFx0cmV0dXJuIEZTRVJSX0RJUkVDVElPX1JFQUQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoaW50IGVycm9yKVxcbiB7XFxuLVxcdHN3aXRjaCAoZGlvLVxcdTAwM2VlcnJvcikge1xcbitcXHRzd2l0Y2ggKGVycm9yKSB7XFxuIFxcdGNhc2UgMDpcXG4gXFx0Y2FzZSAtRUFHQUlOOlxcbiBcXHRjYXNlIC1FTk9UQkxLOlxcbkBAIC0xMTAsNyArMTExLDcgQEAgc3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXG4gXFx0aWYgKGRvcHMgXFx1MDAyNlxcdTAwMjYgZG9wcy1cXHUwMDNlZW5kX2lvKVxcbiBcXHRcXHRyZXQgPSBkb3BzLVxcdTAwM2VlbmRfaW8oaW9jYiwgZGlvLVxcdTAwM2VzaXplLCByZXQsIGRpby1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8pKVxcbitcXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8tXFx1MDAzZWVycm9yKSlcXG4gXFx0XFx0ZnNlcnJvcl9yZXBvcnRfaW8oZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKSxcXG4gXFx0XFx0XFx0XFx0ICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tXFx1MDAzZXNpemUsXFxuIFxcdFxcdFxcdFxcdCAgZGlvLVxcdTAwM2VlcnJvciwgR0ZQX05PRlMpO1xcbkBAIC0zOTgsNiArMzk5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcXG4re1xcbitcXHRpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcXG4rXFx0XFx0cmV0dXJuIGlfYmxvY2tzaXplKGlub2RlKTtcXG4rXFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcXHUwMDI2aXRlci1cXHUwMDNlaW9tYXA7XFxuQEAgLTQxNiwxMCArNDI1LDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gXFx0ICogRmlsZSBzeXN0ZW1zIHRoYXQgd3JpdGUgb3V0IG9mIHBsYWNlIGFuZCBhbHdheXMgYWxsb2NhdGUgbmV3IGJsb2Nrc1xcbiBcXHQgKiBuZWVkIGVhY2ggYmlvIHRvIGJlIGJsb2NrIGFsaWduZWQgYXMgdGhhdCdzIHRoZSB1bml0IG9mIGFsbG9jYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRpZiAoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXFxuLVxcdFxcdGFsaWdubWVudCA9IGZzX2Jsb2NrX3NpemU7XFxuLVxcdGVsc2VcXG4tXFx0XFx0YWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtXFx1MDAzZWJkZXYpO1xcbitcXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cXHUwMDNlYmRldiwgZGlvLVxcdTAwM2VmbGFncyk7XFxuIFxcbiBcXHRpZiAoKHBvcyB8IGxlbmd0aCkgXFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC04ODgsMTIgKzg5NCwyNzcgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbiBcXG4rc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUge1xcbitcXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYjtcXG4rXFx0c2l6ZV90XFx0XFx0XFx0c2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0ZGlvX2ZsYWdzO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3b3JrO1xcbitcXHQvKlxcbitcXHQgKiBBbGlnbiBAYmlvIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5IHNvIHRoYXQsIGNvbWJpbmVkIHdpdGggdGhlXFxuK1xcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxcbitcXHQgKiBhIGNhY2hlbGluZSBpbiBtZW1vcnkgcmV0dXJuZWQgYnkgdGhlIChIV0NBQ0hFLWFsaWduZWQpIGJpb1xcbitcXHQgKiBzbGFiLiAgVGhpcyBrZWVwcyB0aGUgaG90IGZpZWxkcyBibG9jayBsYXllciB0b3VjaGVzIG9uIHN1Ym1pdFxcbitcXHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGJpb1xcdFxcdGJpbyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBiaW9fc2V0IGlvbWFwX2Rpb19zaW1wbGVfcG9vbDtcXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyKVxcbit7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbyA9IFxcdTAwMjZzci1cXHUwMDNlYmlvO1xcbitcXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cXHUwMDNlaW9jYjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGJpby1cXHUwMDNlYmlfc3RhdHVzKSkge1xcbitcXHRcXHRyZXQgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGJpby1cXHUwMDNlYmlfc3RhdHVzKTtcXG4rXFx0XFx0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IocmV0KSlcXG4rXFx0XFx0XFx0ZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgaW9jYi1cXHUwMDNla2lfcG9zLCBzci1cXHUwMDNlc2l6ZSwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgIEdGUF9OT0ZTKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gc3ItXFx1MDAzZXNpemU7XFxuK1xcdFxcdGlvY2ItXFx1MDAzZWtpX3BvcyArPSByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzci1cXHUwMDNlZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XFxuK1xcdFxcdGJpb19jaGVja19wYWdlc19kaXJ0eShiaW8pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4rXFx0XFx0YmlvX3B1dChiaW8pO1xcbitcXHR9XFxuK1xcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0IFxcdTAwM2MgMCA/IHJldCA6IDAsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcXG4rXFx0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXFx1MDAzZWlvY2I7XFxuK1xcbitcXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbitcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4re1xcbitcXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxcbitcXHRcXHRjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG4rXFx0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXFx1MDAzZWlvY2I7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoc3ItXFx1MDAzZWJpby5iaV9zdGF0dXMpKSB7XFxuK1xcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbitcXG4rXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzci1cXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcXG4rXFx0XFx0cXVldWVfd29yayhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19kaW9fZG9uZV93cSwgXFx1MDAyNnNyLVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbitcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbitpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHNpemVfdCBkb25lX2JlZm9yZSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuK1xcbitcXHRpZiAoZG9wcyB8fCBkb25lX2JlZm9yZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoIWNvdW50KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qXFxuK1xcdCAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJT1xcbitcXHQgKiBlYXJseSBhcyBpdCdzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIHRvIGZhaWwgZm9yIHR5cGljYWwgZGlyZWN0IElPXFxuK1xcdCAqIHdvcmtsb2Fkcy5cXG4rXFx0ICovXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgKElPTUFQX0RJT19GT1JDRV9XQUlUIHwgSU9NQVBfRElPX1BBUlRJQUwgfFxcbitcXHRcXHRcXHQgSU9NQVBfRElPX0JPVU5DRSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX3BvcyArIGNvdW50IFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLypcXG4rICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhIHNpbmdsZVxcbisgKiBjb250aWd1b3VzIG9uLWRpc2sgZXh0ZW50LlxcbisgKlxcbisgKiBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCgpIGVuZm9yY2VzIHRoZSBjaGVhcCB1cC1mcm9udCBjb25zdHJhaW50cyBiZWZvcmVcXG4rICogZW50ZXJpbmcgdGhpcyBwYXRoLlxcbisgKlxcbisgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcXG4rICogLVxcdTAwM2VlbmRfaW8gLyAtXFx1MDAzZXN1Ym1pdF9pbyBob29rcyBpbnZva2VkLCBhbmQgaW4gcGFydGljdWxhciB3YW50cyBpdHMgYmlvcyB0byBiZVxcbisgKiBhbGxvY2F0ZWQgZnJvbSB0aGUgZmlsZXN5c3RlbS1wcml2YXRlIEBkb3BzLVxcdTAwM2ViaW9fc2V0ICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYVxcbisgKiBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlIGJpbykuICBUaGUgZmFzdCBwYXRoIGluc3RlYWQgYWxsb2NhdGVzXFxuKyAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxcbisgKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcXG4rICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cXG4rICpcXG4rICogQGRvbmVfYmVmb3JlIG11c3QgYmUgemVybzogYSBub24temVybyBjYWxsZXItYWNjdW11bGF0ZWQgcmVzaWR1YWwgY2Fubm90IGJlXFxuKyAqIGNhcnJpZWQgdGhyb3VnaCBhIHNpbmdsZS1iaW8gaW5saW5lIGNvbXBsZXRpb24uXFxuKyAqXFxuKyAqIEBpdGVyIG11c3QgZGVzY3JpYmUgYSBub24tZW1wdHkgUkVBRCBubyBsYXJnZXIgdGhhbiB0aGUgaW5vZGUgYmxvY2sgc2l6ZTpcXG4rICogd3JpdGVzLCB6ZXJvLWxlbmd0aCBJL08sIGFuZCBsYXJnZXIgcmVxdWVzdHMgbmVlZCB0aGUgZ2VuZXJpYyBpb21hcCBkaXJlY3RcXG4rICogSS9PIHBhdGguXFxuKyAqXFxuKyAqIEBkaW9fZmxhZ3MgbXVzdCBub3QgcmVxdWVzdCBJT01BUF9ESU9fRk9SQ0VfV0FJVCwgSU9NQVBfRElPX1BBUlRJQUwsIG9yXFxuKyAqIElPTUFQX0RJT19CT1VOQ0U6IHRoaXMgcGF0aCBkb2VzIG5vdCBzdXBwb3J0IGZvcmNlZCB3YWl0aW5nLCBwYXJ0aWFsIGRpcmVjdFxcbisgKiBJL08sIG9yIGJvdW5jaW5nLiAgVGhlIHJhbmdlIG11c3QgYWxzbyBzdGF5IHdpdGhpbiBpX3NpemUgYW5kIGVuY3J5cHRlZFxcbisgKiBpbm9kZXMgbXVzdCB1c2UgdGhlIGdlbmVyaWMgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLlxcbisgKlxcbisgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkgd2hlbiBpdFxcbisgKiBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLiAgSW4gdGhhdCBjYXNlIHdlIHByb2NlZWQgdG9cXG4rICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmRcXG4rICogaXMgcHJvcGFnYXRlZCBhcy1pcywgaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZVxcbisgKiBjYWxsZXIuXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdFxcbitpb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbitcXHRcXHQgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCB2b2lkICpwcml2YXRlLFxcbitcXHRcXHQgdW5zaWduZWQgaW50IGRpb19mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuK1xcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XFxuK1xcdHN0cnVjdCBpb21hcF9pdGVyIGlvbWkgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdFxcdD0gaW5vZGUsXFxuK1xcdFxcdC5wb3NcXHRcXHQ9IGlvY2ItXFx1MDAzZWtpX3BvcyxcXG4rXFx0XFx0LmxlblxcdFxcdD0gY291bnQsXFxuK1xcdFxcdC5mbGFnc1xcdFxcdD0gSU9NQVBfRElSRUNULFxcbitcXHRcXHQucHJpdmF0ZVxcdD0gcHJpdmF0ZSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyO1xcbitcXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xcbitcXHRzdHJ1Y3QgYmlvICpiaW87XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuK1xcdFxcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xcbitcXG4rXFx0cmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW5vZGVfZGlvX2JlZ2luKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IG9wcy1cXHUwMDNlaW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpb21pLmlvbWFwLCBcXHUwMDI2aW9taS5zcmNtYXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW9taS5pb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxcbitcXHQgICAgaW9taS5pb21hcC5vZmZzZXQgKyBpb21pLmlvbWFwLmxlbmd0aCBcXHUwMDNjIGlvbWkucG9zICsgY291bnQgfHxcXG4rXFx0ICAgIChpb21pLmlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9UQkxLO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcXG4rXFx0aWYgKChpb21pLnBvcyB8IGNvdW50KSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbiBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XFxuK1xcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBvdXRfaW9tYXBfZW5kO1xcbitcXHR9XFxuK1xcbitcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTtcXG4rXFxuK1xcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxcbitcXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEO1xcbitcXG4rXFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXFxuK1xcdFxcdFxcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcXG4rXFx0XFx0XFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcXG4rXFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG4rXFx0c3ItXFx1MDAzZWlvY2IgPSBpb2NiO1xcbitcXHRzci1cXHUwMDNlZGlvX2ZsYWdzID0gZGlvX2ZsYWdzO1xcbitcXG4rXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aW9taS5pb21hcCwgaW9taS5wb3MpO1xcbitcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXFx1MDAzZWtpX2lvcHJpbztcXG4rXFxuK1xcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTtcXG4rXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19wdXQ7XFxuK1xcbitcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHtcXG4rXFx0XFx0aW92X2l0ZXJfcmV2ZXJ0KGl0ZXIsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcXG4rXFx0XFx0cmV0ID0gLUVOT1RCTEs7XFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19yZWxlYXNlX3BhZ2VzO1xcbitcXHR9XFxuK1xcbitcXHRzci1cXHUwMDNlc2l6ZSA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbitcXG4rXFx0aWYgKGRpb19mbGFncyBcXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRClcXG4rXFx0XFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuK1xcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XFxuK1xcdGlmICgoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0hJUFJJKSBcXHUwMDI2XFx1MDAyNiAhd2FpdF9mb3JfY29tcGxldGlvbikge1xcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfUE9MTEVEO1xcbitcXHRcXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIGJpbyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHMtXFx1MDAzZWlvbWFwX2VuZClcXG4rXFx0XFx0b3BzLVxcdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgY291bnQsIGlvbWkuZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgICBcXHUwMDI2aW9taS5pb21hcCk7XFxuK1xcbitcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbztcXG4rXFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbitcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpO1xcbitcXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbitcXHR9XFxuK1xcbitcXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG4rXFx0cmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpO1xcbitcXG4rb3V0X2Jpb19yZWxlYXNlX3BhZ2VzOlxcbitcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4rb3V0X2Jpb19wdXQ6XFxuK1xcdGJpb19wdXQoYmlvKTtcXG4rb3V0X2lvbWFwX2VuZDpcXG4rXFx0aWYgKG9wcy1cXHUwMDNlaW9tYXBfZW5kKVxcbitcXHRcXHRvcHMtXFx1MDAzZWlvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCAwLCBpb21pLmZsYWdzLFxcbitcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlvbWkuaW9tYXApO1xcbitcXHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3NpemVfdFxcbiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW87XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGRvbmVfYmVmb3JlKSkge1xcbitcXHRcXHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRU5PVEJMSylcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuIFxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcbkBAIC05MDIsMyArMTE3MywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdHJldHVybiBpb21hcF9kaW9fY29tcGxldGUoZGlvKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYmlvc2V0X2luaXQoXFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcXG4rXFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXFxuK1xcdFxcdFxcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XFxuK31cXG4rZnNfaW5pdGNhbGwoaW9tYXBfZGlvX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwODo1ODo1MS41MDg4MDY4NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTg0NjM2ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZFwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZVwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5ZWJiMmNlNzY2ODQwNjc2YzA1ZjU0YjY1MzVhODI3NzgzNzhiMmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA4OjU4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmNhNzkwMjM5ZTVlYjMyIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc2Vycm9yLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwidHJhY2UuaFwiXG4gXG5AQCAtODgsOSArODksOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gZnNlcnJvcl90eXBlIGlvbWFwX2Rpb19lcnJfdHlwZShjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXHRyZXR1cm4gRlNFUlJfRElSRUNUSU9fUkVBRDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGludCBlcnJvcilcbiB7XG4tXHRzd2l0Y2ggKGRpby1cdTAwM2VlcnJvcikge1xuK1x0c3dpdGNoIChlcnJvcikge1xuIFx0Y2FzZSAwOlxuIFx0Y2FzZSAtRUFHQUlOOlxuIFx0Y2FzZSAtRU5PVEJMSzpcbkBAIC0xMTAsNyArMTExLDcgQEAgc3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFxuIFx0aWYgKGRvcHMgXHUwMDI2XHUwMDI2IGRvcHMtXHUwMDNlZW5kX2lvKVxuIFx0XHRyZXQgPSBkb3BzLVx1MDAzZWVuZF9pbyhpb2NiLCBkaW8tXHUwMDNlc2l6ZSwgcmV0LCBkaW8tXHUwMDNlZmxhZ3MpO1xuLVx0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvKSlcbitcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby1cdTAwM2VlcnJvcikpXG4gXHRcdGZzZXJyb3JfcmVwb3J0X2lvKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSxcbiBcdFx0XHRcdCAgaW9tYXBfZGlvX2Vycl90eXBlKGRpbyksIG9mZnNldCwgZGlvLVx1MDAzZXNpemUsXG4gXHRcdFx0XHQgIGRpby1cdTAwM2VlcnJvciwgR0ZQX05PRlMpO1xuQEAgLTM5OCw2ICszOTksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbit7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuK1x0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuK1x0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuK31cbitcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcdTAwMjZpdGVyLVx1MDAzZWlvbWFwO1xuQEAgLTQxNiwxMCArNDI1LDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdCAqIEZpbGUgc3lzdGVtcyB0aGF0IHdyaXRlIG91dCBvZiBwbGFjZSBhbmQgYWx3YXlzIGFsbG9jYXRlIG5ldyBibG9ja3NcbiBcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0J3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi5cbiBcdCAqL1xuLVx0aWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcbi1cdFx0YWxpZ25tZW50ID0gZnNfYmxvY2tfc2l6ZTtcbi1cdGVsc2Vcbi1cdFx0YWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtXHUwMDNlYmRldik7XG4rXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKChwb3MgfCBsZW5ndGgpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OCwxMiArODk0LDI3NyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuIFxuK3N0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYjtcbitcdHNpemVfdFx0XHRcdHNpemU7XG4rXHR1bnNpZ25lZCBpbnRcdFx0ZGlvX2ZsYWdzO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuK1x0LypcbitcdCAqIEFsaWduIEBiaW8gdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkgc28gdGhhdCwgY29tYmluZWQgd2l0aCB0aGVcbitcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxuK1x0ICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW9cbitcdCAqIHNsYWIuICBUaGlzIGtlZXBzIHRoZSBob3QgZmllbGRzIGJsb2NrIGxheWVyIHRvdWNoZXMgb24gc3VibWl0XG4rXHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYmlvXHRcdGJpbyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBiaW9fc2V0IGlvbWFwX2Rpb19zaW1wbGVfcG9vbDtcbitcbitzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcilcbit7XG4rXHRzdHJ1Y3QgYmlvICpiaW8gPSBcdTAwMjZzci1cdTAwM2ViaW87XG4rXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV9zdGF0dXMpKSB7XG4rXHRcdHJldCA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVx1MDAzZWJpX3N0YXR1cyk7XG4rXHRcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKHJldCkpXG4rXHRcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsXG4rXHRcdFx0XHRcdCAgaW9jYi1cdTAwM2VraV9wb3MsIHNyLVx1MDAzZXNpemUsIHJldCxcbitcdFx0XHRcdFx0ICBHRlBfTk9GUyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBzci1cdTAwM2VzaXplO1xuK1x0XHRpb2NiLVx1MDAzZWtpX3BvcyArPSByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoc3ItXHUwMDNlZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpIHtcbitcdFx0YmlvX2NoZWNrX3BhZ2VzX2RpcnR5KGJpbyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbitcdFx0YmlvX3B1dChiaW8pO1xuK1x0fVxuK1x0aW5vZGVfZGlvX2VuZChpbm9kZSk7XG4rXHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0IFx1MDAzYyAwID8gcmV0IDogMCwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcbitcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVx1MDAzZWlvY2I7XG4rXG4rXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG4rXHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG4rXHRcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuK1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbitcbitcdGlmICh1bmxpa2VseShzci1cdTAwM2ViaW8uYmlfc3RhdHVzKSkge1xuK1x0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1xuK1x0XHRJTklUX1dPUksoXHUwMDI2c3ItXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcbitcdFx0cXVldWVfd29yayhpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EsIFx1MDAyNnNyLVx1MDAzZXdvcmspO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG4rXHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sXG4raW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IGRpb19mbGFncywgc2l6ZV90IGRvbmVfYmVmb3JlKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcbitcdGlmIChkb3BzIHx8IGRvbmVfYmVmb3JlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFjb3VudClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0LypcbitcdCAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJT1xuK1x0ICogZWFybHkgYXMgaXQncyB0aGUgbW9zdCBjb21tb24gY2FzZSB0byBmYWlsIGZvciB0eXBpY2FsIGRpcmVjdCBJT1xuK1x0ICogd29ya2xvYWRzLlxuK1x0ICovXG4rXHRpZiAoY291bnQgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IChJT01BUF9ESU9fRk9SQ0VfV0FJVCB8IElPTUFQX0RJT19QQVJUSUFMIHxcbitcdFx0XHQgSU9NQVBfRElPX0JPVU5DRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50IFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBGYXN0IHBhdGggZm9yIHNtYWxsLCBibG9jay1hbGlnbmVkIGRpcmVjdCBJL09zIHRoYXQgbWFwIHRvIGEgc2luZ2xlXG4rICogY29udGlndW91cyBvbi1kaXNrIGV4dGVudC5cbisgKlxuKyAqIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKCkgZW5mb3JjZXMgdGhlIGNoZWFwIHVwLWZyb250IGNvbnN0cmFpbnRzIGJlZm9yZVxuKyAqIGVudGVyaW5nIHRoaXMgcGF0aC5cbisgKlxuKyAqIEBkb3BzIG11c3QgYmUgTlVMTDogYSBub24tTlVMTCBAZG9wcyBtZWFucyB0aGUgY2FsbGVyIHdhbnRzIGl0c1xuKyAqIC1cdTAwM2VlbmRfaW8gLyAtXHUwMDNlc3VibWl0X2lvIGhvb2tzIGludm9rZWQsIGFuZCBpbiBwYXJ0aWN1bGFyIHdhbnRzIGl0cyBiaW9zIHRvIGJlXG4rICogYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy1cdTAwM2ViaW9fc2V0ICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYVxuKyAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcbisgKiBmcm9tIHRoZSBzaGFyZWQgaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlcyBzdHJ1Y3RcbisgKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcbisgKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxuKyAqXG4rICogQGRvbmVfYmVmb3JlIG11c3QgYmUgemVybzogYSBub24temVybyBjYWxsZXItYWNjdW11bGF0ZWQgcmVzaWR1YWwgY2Fubm90IGJlXG4rICogY2FycmllZCB0aHJvdWdoIGEgc2luZ2xlLWJpbyBpbmxpbmUgY29tcGxldGlvbi5cbisgKlxuKyAqIEBpdGVyIG11c3QgZGVzY3JpYmUgYSBub24tZW1wdHkgUkVBRCBubyBsYXJnZXIgdGhhbiB0aGUgaW5vZGUgYmxvY2sgc2l6ZTpcbisgKiB3cml0ZXMsIHplcm8tbGVuZ3RoIEkvTywgYW5kIGxhcmdlciByZXF1ZXN0cyBuZWVkIHRoZSBnZW5lcmljIGlvbWFwIGRpcmVjdFxuKyAqIEkvTyBwYXRoLlxuKyAqXG4rICogQGRpb19mbGFncyBtdXN0IG5vdCByZXF1ZXN0IElPTUFQX0RJT19GT1JDRV9XQUlULCBJT01BUF9ESU9fUEFSVElBTCwgb3JcbisgKiBJT01BUF9ESU9fQk9VTkNFOiB0aGlzIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBmb3JjZWQgd2FpdGluZywgcGFydGlhbCBkaXJlY3RcbisgKiBJL08sIG9yIGJvdW5jaW5nLiAgVGhlIHJhbmdlIG11c3QgYWxzbyBzdGF5IHdpdGhpbiBpX3NpemUgYW5kIGVuY3J5cHRlZFxuKyAqIGlub2RlcyBtdXN0IHVzZSB0aGUgZ2VuZXJpYyBpb21hcCBkaXJlY3QgSS9PIHBhdGguXG4rICpcbisgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkgd2hlbiBpdFxuKyAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xuKyAqIHRoZSBnZW5lcmljIF9faW9tYXBfZGlvX3J3KCkgc2xvdyBwYXRoLiAgQW55IG90aGVyIGVycm5vIGlzIGEgcmVhbCByZXN1bHQgYW5kXG4rICogaXMgcHJvcGFnYXRlZCBhcy1pcywgaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZVxuKyAqIGNhbGxlci5cbisgKi9cbitzdGF0aWMgc3NpemVfdFxuK2lvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsXG4rXHRcdCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XG4rXHRzdHJ1Y3QgaW9tYXBfaXRlciBpb21pID0ge1xuK1x0XHQuaW5vZGVcdFx0PSBpbm9kZSxcbitcdFx0LnBvc1x0XHQ9IGlvY2ItXHUwMDNla2lfcG9zLFxuK1x0XHQubGVuXHRcdD0gY291bnQsXG4rXHRcdC5mbGFnc1x0XHQ9IElPTUFQX0RJUkVDVCxcbitcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbitcdH07XG4rXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4rXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xuK1x0c3RydWN0IGJpbyAqYmlvO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG4rXHRcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xuK1xuK1x0cmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlub2RlX2Rpb19iZWdpbihpbm9kZSk7XG4rXG4rXHRyZXQgPSBvcHMtXHUwMDNlaW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncyxcbitcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCwgXHUwMDI2aW9taS5zcmNtYXApO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4rXHQgICAgaW9taS5pb21hcC5vZmZzZXQgKyBpb21pLmlvbWFwLmxlbmd0aCBcdTAwM2MgaW9taS5wb3MgKyBjb3VudCB8fFxuK1x0ICAgIChpb21pLmlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcbitcdFx0cmV0ID0gLUVOT1RCTEs7XG4rXHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbitcdH1cbitcbitcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcbitcdGlmICgoaW9taS5wb3MgfCBjb3VudCkgXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4rXHR9XG4rXG4rXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XG4rXHRcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuK1x0fVxuK1xuK1x0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG4rXG4rXHRpZiAodXNlcl9iYWNrZWRfaXRlcihpdGVyKSlcbitcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcbitcbitcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoaW9taS5pb21hcC5iZGV2LFxuK1x0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbitcdFx0XHQgICAgICAgUkVRX09QX1JFQUQsIEdGUF9LRVJORUwsIFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCk7XG4rXHRzciA9IGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuK1x0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4rXHRzci1cdTAwM2VkaW9fZmxhZ3MgPSBkaW9fZmxhZ3M7XG4rXG4rXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aW9taS5pb21hcCwgaW9taS5wb3MpO1xuK1x0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXHUwMDNla2lfaW9wcmlvO1xuK1xuK1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xuK1x0aWYgKHVubGlrZWx5KHJldCkpXG4rXHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG4rXG4rXHRpZiAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBjb3VudCkge1xuK1x0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4rXHRcdHJldCA9IC1FTk9UQkxLO1xuK1x0XHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcbitcdH1cbitcbitcdHNyLVx1MDAzZXNpemUgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplO1xuK1xuK1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKVxuK1x0XHRiaW9fc2V0X3BhZ2VzX2RpcnR5KGJpbyk7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG4rXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PV0FJVDtcbitcdGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ISVBSSSkgXHUwMDI2XHUwMDI2ICF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XG4rXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcbitcdFx0V1JJVEVfT05DRShpb2NiLVx1MDAzZXByaXZhdGUsIGJpbyk7XG4rXHR9XG4rXG4rXHRpZiAob3BzLVx1MDAzZWlvbWFwX2VuZClcbitcdFx0b3BzLVx1MDAzZWlvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBjb3VudCwgaW9taS5mbGFncyxcbitcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCk7XG4rXG4rXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbitcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuK1x0XHRzdWJtaXRfYmlvKGJpbyk7XG4rXHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7XG4rXHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4rXHR9XG4rXG4rXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbitcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcbitcbitvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XG4rXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbitvdXRfYmlvX3B1dDpcbitcdGJpb19wdXQoYmlvKTtcbitvdXRfaW9tYXBfZW5kOlxuK1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4rXHRcdG9wcy1cdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgMCwgaW9taS5mbGFncyxcbitcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCk7XG4rXHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHNzaXplX3RcbiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4gXHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSlcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW87XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGlmIChpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZChpb2NiLCBpdGVyLCBkb3BzLCBkaW9fZmxhZ3MsXG4rXHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG4rXHRcdHJldCA9IGlvbWFwX2Rpb19zaW1wbGUoaW9jYiwgaXRlciwgb3BzLCBwcml2YXRlLCBkaW9fZmxhZ3MpO1xuK1x0XHRpZiAocmV0ICE9IC1FTk9UQkxLKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbiBcdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbkBAIC05MDIsMyArMTE3MywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gaW9tYXBfZGlvX2NvbXBsZXRlKGRpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG4rXG4rc3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcbit7XG4rXHRyZXR1cm4gYmlvc2V0X2luaXQoXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxuK1x0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxuK1x0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4rfVxuK2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA4OjU4OjUxLjUwODgwODAyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODE3Mjc1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgRGlyZWN0IEkvTyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHRvdWNoaW5nIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBpbXBsZW1lbnRpbmcgYSBmYXN0IHBhdGggc3BlY2lmaWNhbGx5IGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IGhpdCBhIHNpbmdsZSwgY29udGlndW91cyBleHRlbnQgb24gZGlza+KAlHRoYXQncyBgaW9tYXBfZGlvX3NpbXBsZWAuIFRoZXkndmUgYWRkZWQgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGlzIG9wdGltaXphdGlvbjogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIGhvdyBgaW9tYXBfZGlvX3J3YCBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSB0aGVzZSBuZXcgZnVuY3Rpb25zOyBpdCdzIGNhbGxpbmcgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVgLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjb3JlIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgZGlyZWN0IEkvTyBsb2dpYywgd2hpY2ggbWVhbnMgaXQgZGVtYW5kcyB0aG9yb3VnaCBzY3J1dGlueS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBzdWNoIGxvdy1sZXZlbCBjb2RlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyBhdCBpdCB0byBlbnN1cmUgc3RhYmlsaXR5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGdldHMgY29tcGlsZWQuIEknbGwgY2hlY2sgYGZzL2lvbWFwL01ha2VmaWxlYCBvciBgZnMvaW9tYXAvS2NvbmZpZ2AgdG8gc2VlIGlmIGBDT05GSUdfRlNfSU9NQVBgIGlzIHdoYXQgZW5hYmxlcyB0aGlzIG1vZHVsZSwgd2hpY2ggd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgaXQgdG8gYmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTE1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTg6NTcuMDkwNTM3NDAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODAyNzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXJlY3QtaW8ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9MTE9aW9tYXAteVxcdFxcdFxcdFxcdCs9IHRyYWNlLm8gXFxcXFxcbi0tXFxuZnMvaW9tYXAvTWFrZWZpbGUtMTMtXFx0XFx0XFx0XFx0ICAgYnVmZmVyZWQtaW8ub1xcbmZzL2lvbWFwL01ha2VmaWxlOjE0OmlvbWFwLSQoQ09ORklHX0JMT0NLKVxcdFxcdCs9IGRpcmVjdC1pby5vIFxcXFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNS1cXHRcXHRcXHRcXHQgICBpb2VuZC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTg6NTcuMjA4NTcxNjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzOTEwNDYxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggZm9yIGlvbWFwKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3LCBvcHRpbWl6ZWQgcGF0aCBmb3Igc2ltcGxlIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIEl0J3MgY3JlYXRpbmcgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zOiBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLiBUaGUgY29yZSBgaW9tYXBfZGlvX3J3YCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSB0aGVzZSBuZXcgYWRkaXRpb25zLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLCBtZWFuaW5nIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggZGlyZWN0IEkvTyByZWFkcyBvbiBpb21hcC11c2luZyBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzIOKAkyBhbGwgY3JpdGljYWwgdGFyZ2V0cy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCBgZnMvaW9tYXAvTWFrZWZpbGVgLCBpdCdzIGNsZWFyIHRoYXQgYENPTkZJR19CTE9DS2AgaXMgYSByZXF1aXJlbWVudC4gQWxzbywgd2UgbmVlZCBhIGZpbGVzeXN0ZW0gdGhhdCBhY3R1YWxseSAqdXNlcyogaW9tYXAgZm9yIGRpcmVjdCBJL08sIHN1Y2ggYXMgdGhvc2UgdGhhdCBlbmFibGUgYENPTkZJR19YRlNfRlNgIG9yIGBDT05GSUdfRVhUNF9GU2AuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgaW9tYXAsIGJ1dCBgQ09ORklHX0ZTX0lPTUFQYCBpcyB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gaXRzZWxmLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzPyBgaW9tYXBfZGlvX3J3YCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIGhvdCBwYXRoLCBidXQgaXQncyBwcmV0dHkgZ2VuZXJpYy4gVGhlIHJlYWwgaW50ZXJlc3RpbmcgcGFydHMsIHRoZSBuZXcgbG9naWMsIGFyZSB0aGVzZSBgaW9tYXBfZGlvX3NpbXBsZSpgIGZ1bmN0aW9ucy5cblxuQWgsIHJpZ2h0LCB0aGVzZSBhcmUgc3RhdGljLCBzbyB0aGV5J3JlIG5vdCBkaXJlY3RseSBleHBvcnRlZCBzeW1ib2xzIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IHJlYWNoYWJsZSBieSB0aGUgZnV6emVyIGJ5IG5hbWUuIEhvd2V2ZXIsIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgd2l0aCBrY292LCBhbmQgaXQgZm9jdXNlcyBvbiBjb2RlIGNvdmVyYWdlLiBJIHNob3VsZCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIHN0YXRpYyBmdW5jdGlvbiBuYW1lcy4gU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTpcbi0gICBgaW9tYXBfZGlvX3NpbXBsZWBcbi0gICBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgXG4tICAgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgXG4tICAgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2Bcbi0gICBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gTG9va3MgbGlrZSB3ZSBuZWVkIGBDT05GSUdfQkxPQ0tgIGFuZCBhIGZpbGVzeXN0ZW0gdGhhdCB1c2VzIGlvbWFwIChhbmQgdGhlcmVmb3JlIHNlbGVjdHMgYENPTkZJR19GU19JT01BUGApLiBCZXR0ZXIgZ28gY2hlY2sgYGZzL2lvbWFwL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwODo1OToxNS41OTk2MjAxNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM4MCwiRXJyb3IiOiJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvbWFwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmaWxlIGRvZXMgbm90IGV4aXN0XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA4OjU5OjE1LjU5OTY2NDU3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MDUzNzYzMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IERpcmVjdCBJL08gRmFzdCBQYXRoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldywgZmFzdGVyIHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGZvciBvdmVyYWxsIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIEkgc2VlIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gQ2xlYXJseSwgdGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBuZXcgZmFzdCBwYXRoLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbmRpY2F0ZXMgdGhleSdyZSBiZWluZyBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIGNvcmUgaW9tYXAgbG9naWMuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBidWcgZml4LCBhbmQgaXQncyB0b3VjaGluZyB0aGUgaW9tYXAgc3Vic3lzdGVtLCB3aGljaCwgYXMgd2Uga25vdywgaXMgZnVuZGFtZW50YWwgdG8gYmxvY2sgZGV2aWNlIEkvTyBhbmQgdXNlZCBieSBzZXZlcmFsIG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMgZm9yIGRpcmVjdCBJL08uIFRoZXJlZm9yZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0IHRvIGV4cG9zZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgZnMvaW9tYXAvTWFrZWZpbGVgIGluZGljYXRlcyB0aGF0IGBkaXJlY3QtaW8ub2AgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhcyBkaXJlY3QgSS9PIGlzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBibG9jayBkZXZpY2VzLiBIb3dldmVyLCBpb21hcCBpdHNlbGYgaXMgdHlwaWNhbGx5IHNlbGVjdGVkIGJ5IHRoZSBmaWxlc3lzdGVtcyB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggdG8gc2VlIGhvdyBgaW9tYXBfZGlvX3J3YCBpcyB1c2VkLiBUaGF0IHdpbGwgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV3IGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBpbiBwcmFjdGljZS4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgaW52ZXN0aWdhdGUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwODo1OTo0MS42NTM0MzAxODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Mzc0Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvZGlyZWN0LWlvLmM9MzY0PXN0YXRpYyBpbnQgYnRyZnNfZGlvX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCxcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNC1cXHQvKlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjQwNTpcXHQgKiBpb21hcF9kaW9fcncoKSBvbmx5IGRvZXMgZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZSgpLCB3aGljaCBpc24ndFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNi1cXHQgKiBlbm91Z2ggaWYgd2UndmUgd3JpdHRlbiBjb21wcmVzc2VkIHBhZ2VzIHRvIHRoaXMgYXJlYSwgc28gd2UgbmVlZCB0b1xcbi0tXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE2LVxcdCAqIGRpcnR5IG9yIHVuZGVyIHdyaXRlYmFjayAoc2FtZSBhcyBmb3IgdGhlIG5vbi1jb21wcmVzc2lvbiBjYXNlKS5cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo0MTc6XFx0ICogaW9tYXBfZGlvX3J3KCkgZGlkIHRoZSBzYW1lIGNoZWNrLCBidXQgYWZ0ZXIgdGhhdCBhbmQgYmVmb3JlIHdlIGdvdFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQxOC1cXHQgKiBoZXJlLCBtbWFwJ2VkIHdyaXRlcyBtYXkgaGF2ZSBoYXBwZW5lZCBvciBidWZmZXJlZCByZWFkcyBzdGFydGVkXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTUtXFx0ICogV2hlbiBkb2luZyBhIHJlYWQsIGJlY2F1c2Ugd2UgdXNlIElPTUFQX0RJT19QQVJUSUFMIHdoZW4gY2FsbGluZ1xcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUxNjpcXHQgKiBpb21hcF9kaW9fcncoKSwgd2UgY2FuIGVuZCB1cCByZXR1cm5pbmcgbGVzcyBkYXRhIHRoZW4gd2hhdCB0aGUgY2FsbGVyXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTE3LVxcdCAqIGFza2VkIGZvciwgcmVzdWx0aW5nIGluIGFuIHVuZXhwZWN0ZWQsIGFuZCBpbmNvcnJlY3QsIHNob3J0IHJlYWQuXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MjAtXFx0ICogcGFnZSBmYXVsdCBlcnJvciB3aGVuIHRyeWluZyB0byBmYXVsdCBpbiBwYWdlcyBmb3IgdGhlIGJ1ZmZlciB0aGF0IGlzXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIxOlxcdCAqIGFzc29jaWF0ZWQgdG8gdGhlIHN0cnVjdCBpb3ZfaXRlciBwYXNzZWQgdG8gaW9tYXBfZGlvX3J3KCksIGFuZCB3ZVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMi1cXHQgKiBoYXZlIHByZXZpb3VzbHkgc3VibWl0dGVkIGJpb3MgZm9yIG90aGVyIGV4dGVudHMgaW4gdGhlIHJhbmdlLCBpblxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUyMzpcXHQgKiB3aGljaCBjYXNlIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gdXMgRUlPQ0JRVUVVRUQgaWYgbm90IGFsbCBvZlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyNC1cXHQgKiB0aG9zZSBiaW9zIGhhdmUgY29tcGxldGVkIGJ5IHRoZSB0aW1lIHdlIGdldCB0aGUgcGFnZSBmYXVsdCBlcnJvcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgxMT1zdGF0aWMgc3NpemVfdCBidHJmc19kaW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MTY6XFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcXHUwMDI2YnRyZnNfZGlvX2lvbWFwX29wcywgXFx1MDAyNmJ0cmZzX2Rpb19vcHMsXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODE3LVxcdFxcdFxcdCAgICBJT01BUF9ESU9fUEFSVElBTCB8IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQsIFxcdTAwMjZkYXRhLCBkb25lX2JlZm9yZSk7XFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYz04MjA9c3RhdGljIHN0cnVjdCBpb21hcF9kaW8gKmJ0cmZzX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgyNC1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MjU6XFx0cmV0dXJuIF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZidHJmc19kaW9faW9tYXBfb3BzLCBcXHUwMDI2YnRyZnNfZGlvX29wcyxcXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MjYtXFx0XFx0XFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXFx1MDAyNmRhdGEsIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYz00NDU9c3RhdGljIHNzaXplX3QgZXJvZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZXJvZnMvZGF0YS5jLTQ2MC1cXG5mcy9lcm9mcy9kYXRhLmM6NDYxOlxcdFxcdHJldHVybiBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZlcm9mc19pb21hcF9vcHMsXFxuZnMvZXJvZnMvZGF0YS5jLTQ2Mi1cXHRcXHRcXHRcXHQgICAgTlVMTCwgMCwgXFx1MDAyNml0ZXJfY3R4LCAwKTtcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz03MDg9c3RhdGljIHNzaXplX3QgZXhmYXRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leGZhdC9maWxlLmMtNzExLVxcbmZzL2V4ZmF0L2ZpbGUuYzo3MTI6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleGZhdF93cml0ZV9pb21hcF9vcHMsXFxuZnMvZXhmYXQvZmlsZS5jLTcxMy1cXHRcXHRcXHRcXHUwMDI2ZXhmYXRfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9leGZhdC9maWxlLmM9ODAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvZXhmYXQvZmlsZS5jLTgxMS1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL2V4ZmF0L2ZpbGUuYzo4MTI6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZleGZhdF9pb21hcF9vcHMsIE5VTEwsIDAsXFxuZnMvZXhmYXQvZmlsZS5jLTgxMy1cXHRcXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL2V4dDIvZmlsZS5jPTY1PXN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy03Mi1cXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuZnMvZXh0Mi9maWxlLmM6NzM6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2ZXh0Ml9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmZzL2V4dDIvZmlsZS5jLTc0LVxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0Mi9maWxlLmM9ODA9c3RhdGljIGludCBleHQyX2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy05MC1cXHQgKiBJZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBmaWxlLCB3ZSBoYXZlIHRvIHVwZGF0ZSBpX3NpemUgaGVyZSBiZWZvcmVcXG5mcy9leHQyL2ZpbGUuYzo5MTpcXHQgKiBwYWdlIGNhY2hlIGdldHMgaW52YWxpZGF0ZWQgaW4gaW9tYXBfZGlvX3J3KCkuIFRoaXMgcHJldmVudHMgcmFjaW5nXFxuZnMvZXh0Mi9maWxlLmMtOTItXFx0ICogYnVmZmVyZWQgcmVhZHMgZnJvbSB6ZXJvaW5nIG91dCB0b28gbXVjaCBmcm9tIHBhZ2UgY2FjaGUgcGFnZXMuXFxuLS1cXG5mcy9leHQyL2ZpbGUuYz0xMTE9c3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDIvZmlsZS5jLTEzNi1cXG5mcy9leHQyL2ZpbGUuYzoxMzc6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleHQyX2lvbWFwX29wcywgXFx1MDAyNmV4dDJfZGlvX3dyaXRlX29wcyxcXG5mcy9leHQyL2ZpbGUuYy0xMzgtXFx0XFx0XFx0ICAgZmxhZ3MsIE5VTEwsIDApO1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtNDYtICogYW55IHNwZWNpYWwgZmVhdHVyZXMgbGlrZSBlbmNyeXB0aW9uIG9yIHZlcml0eSwgZXh0NCBoYXMgdHJhZGl0aW9uYWxseVxcbmZzL2V4dDQvZmlsZS5jOjQ3OiAqIHJldHVybmVkIEVJTlZBTCBmb3IgbWlzYWxpZ25lZCBESU8uICBpb21hcF9kaW9fcncoKSB1c2VzIHRoaXMgY29udmVudGlvbiB0b28uXFxuZnMvZXh0NC9maWxlLmMtNDgtICogSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgYXR0ZW1wdCB0aGUgRElPLCAqbm90KiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PLlxcbi0tXFxuZnMvZXh0NC9maWxlLmM9Njk9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTkzLVxcbmZzL2V4dDQvZmlsZS5jOjk0OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNmV4dDRfaW9tYXBfb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5mcy9leHQ0L2ZpbGUuYy05NS1cXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTUxOT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNTkxLVxcbmZzL2V4dDQvZmlsZS5jOjU5MjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNmV4dDRfaW9tYXBfb3BzLCBcXHUwMDI2ZXh0NF9kaW9fd3JpdGVfb3BzLFxcbmZzL2V4dDQvZmlsZS5jLTU5My1cXHRcXHRcXHQgICBkaW9fZmxhZ3MsIE5VTEwsIDApO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9NDg0OT1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDg4MS1cXHQvKlxcbmZzL2YyZnMvZmlsZS5jOjQ4ODI6XFx0ICogV2UgaGF2ZSB0byB1c2UgX19pb21hcF9kaW9fcncoKSBhbmQgaW9tYXBfZGlvX2NvbXBsZXRlKCkgaW5zdGVhZCBvZlxcbmZzL2YyZnMvZmlsZS5jOjQ4ODM6XFx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcXG5mcy9mMmZzL2ZpbGUuYy00ODg0LVxcdCAqIEYyRlNfRElPX1JFQUQgY291bnRlciB3aWxsIGJlIGRlY3JlbWVudGVkIGNvcnJlY3RseSBpbiBhbGwgY2FzZXMuXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy00ODg2LVxcdGluY19wYWdlX2NvdW50KHNiaSwgRjJGU19ESU9fUkVBRCk7XFxuZnMvZjJmcy9maWxlLmM6NDg4NzpcXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNmYyZnNfaW9tYXBfb3BzLFxcbmZzL2YyZnMvZmlsZS5jLTQ4ODgtXFx0XFx0XFx0ICAgICBcXHUwMDI2ZjJmc19pb21hcF9kaW9fcmVhZF9vcHMsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9NTE2Nj1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNTIxNC1cXHQvKlxcbmZzL2YyZnMvZmlsZS5jOjUyMTU6XFx0ICogV2UgaGF2ZSB0byB1c2UgX19pb21hcF9kaW9fcncoKSBhbmQgaW9tYXBfZGlvX2NvbXBsZXRlKCkgaW5zdGVhZCBvZlxcbmZzL2YyZnMvZmlsZS5jOjUyMTY6XFx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcXG5mcy9mMmZzL2ZpbGUuYy01MjE3LVxcdCAqIEYyRlNfRElPX1dSSVRFIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNTIyMi1cXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX0ZPUkNFX1dBSVQ7XFxuZnMvZjJmcy9maWxlLmM6NTIyMzpcXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2ZjJmc19pb21hcF9vcHMsXFxuZnMvZjJmcy9maWxlLmMtNTIyNC1cXHRcXHRcXHQgICAgIFxcdTAwMjZmMmZzX2lvbWFwX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncywgaW9jYiwgMCk7XFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy01Mjc0LVxcdH0gZWxzZSB7XFxuZnMvZjJmcy9maWxlLmM6NTI3NTpcXHRcXHQvKiBpb21hcF9kaW9fcncoKSBhbHJlYWR5IGhhbmRsZWQgdGhlIGdlbmVyaWNfd3JpdGVfc3luYygpLiAqL1xcbmZzL2YyZnMvZmlsZS5jLTUyNzYtXFx0XFx0Km1heV9uZWVkX3N5bmMgPSBmYWxzZTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jPTgxMT1zdGF0aWMgc3NpemVfdCBnZnMyX2ZpbGVfZGlyZWN0X3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODI1LVxcdCAqXFxuZnMvZ2ZzMi9maWxlLmM6ODI2OlxcdCAqIFVubGlrZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLCBmb3IgcmVhZHMsIGlvbWFwX2Rpb19ydyBjYW4gdHJpZ2dlclxcbmZzL2dmczIvZmlsZS5jLTgyNy1cXHQgKiBwaHlzaWNhbCBhcyB3ZWxsIGFzIG1hbnVhbCBwYWdlIGZhdWx0cywgYW5kIHdlIG5lZWQgdG8gZGlzYWJsZSBib3RoXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy04NDYtXFx0dG8tXFx1MDAzZW5vZmF1bHQgPSB0cnVlO1xcbmZzL2dmczIvZmlsZS5jOjg0NzpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZnZnMyX2lvbWFwX29wcywgTlVMTCxcXG5mcy9nZnMyL2ZpbGUuYy04NDgtXFx0XFx0XFx0ICAgSU9NQVBfRElPX1BBUlRJQUwsIE5VTEwsIHJlYWQpO1xcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODUyLVxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5mcy9nZnMyL2ZpbGUuYzo4NTM6XFx0LyogTm8gaW5jcmVtZW50ICgrPSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXFxuZnMvZ2ZzMi9maWxlLmMtODU0LVxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi0tXFxuZnMvZ2ZzMi9maWxlLmM9ODc0PXN0YXRpYyBzc2l6ZV90IGdmczJfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy04OTAtXFx0ICpcXG5mcy9nZnMyL2ZpbGUuYzo4OTE6XFx0ICogRm9yIHdyaXRlcywgaW9tYXBfZGlvX3J3IG9ubHkgdHJpZ2dlcnMgbWFudWFsIHBhZ2UgZmF1bHRzLCBzbyB3ZVxcbmZzL2dmczIvZmlsZS5jLTg5Mi1cXHQgKiBkb24ndCBuZWVkIHRvIGRpc2FibGUgcGh5c2ljYWwgb25lcy5cXG4tLVxcbmZzL2dmczIvZmlsZS5jLTkxMi1cXHRmcm9tLVxcdTAwM2Vub2ZhdWx0ID0gdHJ1ZTtcXG5mcy9nZnMyL2ZpbGUuYzo5MTM6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZnZnMyX2lvbWFwX29wcywgTlVMTCxcXG5mcy9nZnMyL2ZpbGUuYy05MTQtXFx0XFx0XFx0ICAgSU9NQVBfRElPX1BBUlRJQUwsIE5VTEwsIHdyaXR0ZW4pO1xcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtOTIxLVxcdH1cXG5mcy9nZnMyL2ZpbGUuYzo5MjI6XFx0LyogTm8gaW5jcmVtZW50ICgrPSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXFxuZnMvZ2ZzMi9maWxlLmMtOTIzLVxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDEwPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MDUtXFx0XFx0ICogV3JpdGVzIHRoYXQgZXh0ZW5kIGlfc2l6ZSBhcmUgYWxzbyBub3Qgc3VwcG9ydGVkLCBidXQgdGhpcyBpc1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUwNjpcXHRcXHQgKiBoYW5kbGVkIGluIF9faW9tYXBfZGlvX3J3KCkuXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTA3LVxcdFxcdCAqL1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjMyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY2My0vKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY2NDogKiBpb21hcF9kaW9fcncoKSBhbHdheXMgY29tcGxldGVzIE9fW0RdU1lOQyB3cml0ZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBJT1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY2NS0gKiBpcyBiZWluZyBpc3N1ZWQgYXMgQUlPIG9yIG5vdC4gIFRoaXMgYWxsb3dzIHVzIHRvIG9wdGltaXNlIHB1cmUgZGF0YSB3cml0ZXNcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3Mi0gKiBXaGVuIHBhZ2UgZmF1bHRzIGFyZSBkaXNhYmxlZCBhbmQgQGRpb19mbGFncyBpbmNsdWRlcyBJT01BUF9ESU9fUEFSVElBTCxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NzM6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzQtICogcGFnZSBpbiBAaXRlciBhZnRlciBwcmVwYXJpbmcgYSB0cmFuc2Zlci4gIEluIHRoYXQgY2FzZSwgdGhlIG5vbi1yZXNpZGVudFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjgzPXN0cnVjdCBpb21hcF9kaW8gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NDpfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODUtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDI6XFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgZG9uZV9iZWZvcmUpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg3Mi1cXHRcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo4NzM6XFx0XFx0XFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpbm9kZSwgaW9taS5wb3MsIGlvbWkubGVuKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04NzQtXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJT0NCUVVFVUVEKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5NC19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk1OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTYtXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05NzI9aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE1LSAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTY6ICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE3LSAqXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzI6ICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMzLSAqIGlzIHByb3BhZ2F0ZWQgYXMtaXMsIGluIHBhcnRpY3VsYXIgLUVBR0FJTiBmb3IgSU9DQl9OT1dBSVQgbXVzdCByZWFjaCB0aGVcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTEwMzc9aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwOTAtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5MTpcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDkyLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzNC1cXHRcXHRzdWJtaXRfYmlvKGJpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzNTpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzYtXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTQ9c3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNTU6aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNTYtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjgtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE2OTpcXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTcwLVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3NC19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE3NTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNzYtXFxuLS1cXG5mcy9pb21hcC90cmFjZS5oPTg1PURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcXG5mcy9pb21hcC90cmFjZS5oOjg2OkRFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9fcndfcXVldWVkKTtcXG5mcy9pb21hcC90cmFjZS5oLTg3LURFRklORV9SQU5HRV9FVkVOVChpb21hcF96ZXJvX2l0ZXIpO1xcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD0yMjA9VFJBQ0VfRVZFTlQoaW9tYXBfaXRlcixcXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmgtMjU1LVxcbmZzL2lvbWFwL3RyYWNlLmg6MjU2OlRSQUNFX0VWRU5UKGlvbWFwX2Rpb19yd19iZWdpbixcXG5mcy9pb21hcC90cmFjZS5oLTI1Ny1cXHRUUF9QUk9UTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTQzOD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTQ2MC1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL250ZnMvZmlsZS5jOjQ2MTpcXHRcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZudGZzX3JlYWRfaW9tYXBfb3BzLCBOVUxMLCAwLFxcbmZzL250ZnMvZmlsZS5jLTQ2Mi1cXHRcXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTQ5NT1zdGF0aWMgc3NpemVfdCBudGZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtNDk4LVxcbmZzL250ZnMvZmlsZS5jOjQ5OTpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNm50ZnNfZGlvX2lvbWFwX29wcyxcXG5mcy9udGZzL2ZpbGUuYy01MDAtXFx0XFx0XFx0XFx1MDAyNm50ZnNfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzMy9maWxlLmM9ODE1PXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtODc0LVxcbmZzL250ZnMzL2ZpbGUuYzo4NzU6XFx0XFx0ZXJyID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZudGZzX2lvbWFwX29wcywgTlVMTCwgZGlvX2ZsYWdzLFxcbmZzL250ZnMzL2ZpbGUuYy04NzYtXFx0XFx0XFx0XFx0ICAgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzMy9maWxlLmM9MTIyMD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xMzA1LVxcbmZzL250ZnMzL2ZpbGUuYzoxMzA2OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsXFxuZnMvbnRmczMvZmlsZS5jLTEzMDctXFx0XFx0XFx0ICAgSU9NQVBfRElPX0ZPUkNFX1dBSVQsIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz02Nzk9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy03MjEtICogLSBpb21hcF90cnVuY2F0ZV9wYWdlXFxuZnMvbnRmczMvaW5vZGUuYzo3MjI6ICogLSBpb21hcF9kaW9fcndcXG5mcy9udGZzMy9pbm9kZS5jLTcyMy0gKiAtIGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTI0OT14ZnNfZmlsZV9kaW9fcmVhZChcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTI3MS1cXHR9XFxuZnMveGZzL3hmc19maWxlLmM6MjcyOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgZGlvX29wcywgZGlvX2ZsYWdzLFxcbmZzL3hmcy94ZnNfZmlsZS5jLTI3My1cXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTc0MT14ZnNfZmlsZV9kaW9fd3JpdGVfYWxpZ25lZChcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTc3OS1cXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XFxuZnMveGZzL3hmc19maWxlLmM6NzgwOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsIGRvcHMsIGRpb19mbGFncywgYWMsIDApO1xcbmZzL3hmcy94ZnNfZmlsZS5jLTc4MS1vdXRfdW5sb2NrOlxcbi0tXFxuZnMveGZzL3hmc19maWxlLmM9ODE5PXhmc19maWxlX2Rpb193cml0ZV9hdG9taWMoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy04NTUtXFx0XFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XFxuZnMveGZzL3hmc19maWxlLmM6ODU2OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBkb3BzLCBcXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncyxcXG5mcy94ZnMveGZzX2ZpbGUuYy04NTctXFx0XFx0XFx0TlVMTCwgMCk7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz04OTU9eGZzX2ZpbGVfZGlvX3dyaXRlX3VuYWxpZ25lZChcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTk0OS1cXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XFxuZnMveGZzL3hmc19maWxlLmM6OTUwOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2eGZzX2RpcmVjdF93cml0ZV9pb21hcF9vcHMsXFxuZnMveGZzL3hmc19maWxlLmMtOTUxLVxcdFxcdFxcdCAgIFxcdTAwMjZ4ZnNfZGlvX3dyaXRlX29wcywgZmxhZ3MsIE5VTEwsIDApO1xcbi0tXFxuZnMvem9uZWZzL2ZpbGUuYz00Njk9c3RhdGljIHNzaXplX3Qgem9uZWZzX2ZpbGVfZGlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvem9uZWZzL2ZpbGUuYy01MjMtXFx0LypcXG5mcy96b25lZnMvZmlsZS5jOjUyNDpcXHQgKiBpb21hcF9kaW9fcncoKSBtYXkgcmV0dXJuIEVOT1RCTEsgaWYgdGhlcmUgd2FzIGFuIGlzc3VlIHdpdGhcXG5mcy96b25lZnMvZmlsZS5jLTUyNS1cXHQgKiBwYWdlIGludmFsaWRhdGlvbi4gT3ZlcndyaXRlIHRoYXQgZXJyb3IgY29kZSB3aXRoIEVCVVNZIHNvIHRoYXRcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtNTI3LVxcdCAqL1xcbmZzL3pvbmVmcy9maWxlLmM6NTI4OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2em9uZWZzX3dyaXRlX2lvbWFwX29wcyxcXG5mcy96b25lZnMvZmlsZS5jLTUyOS1cXHRcXHRcXHQgICBcXHUwMDI2em9uZWZzX3dyaXRlX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvem9uZWZzL2ZpbGUuYz02MzE9c3RhdGljIHNzaXplX3Qgem9uZWZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtNjcyLVxcdFxcdGZpbGVfYWNjZXNzZWQoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuZnMvem9uZWZzL2ZpbGUuYzo2NzM6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2em9uZWZzX3JlYWRfaW9tYXBfb3BzLFxcbmZzL3pvbmVmcy9maWxlLmMtNjc0LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ6b25lZnNfcmVhZF9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTk6NDIuMTg3ODA5ODAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5MTkzMDkzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNDMwNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6MDA6MDMuMTA3MTIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MTU4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX3NpbXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTYtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk3OnN0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2I7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTEtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcilcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQyLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ2OlxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ3LVxcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVxcdTAwM2Vpb2NiO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ5LVxcdFdSSVRFX09OQ0UoaW9jYi1cXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTUwOlxcdGlvY2ItXFx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTEtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NTM6c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU2OlxcdFxcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Ny1cXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cXHUwMDNlaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NjI6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzci1cXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXFx0XFx0cXVldWVfd29yayhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19kaW9fZG9uZV93cSwgXFx1MDAyNnNyLVxcdTAwM2V3b3JrKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2Ny1cXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2ODpcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTY5LX1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk3MT1zdGF0aWMgaW5saW5lIGJvb2xcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NzI6aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwNi0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwOC0gKiBlbnRlcmluZyB0aGlzIHBhdGguXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE0OiAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTU6ICogaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90IGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAyOS0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzc6aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDM4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVxcdH07XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA1MTpcXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA1Mi1cXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA5Ny1cXHRcXHRcXHQgICAgICAgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKGl0ZXIsIEJJT19NQVhfVkVDUyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5ODpcXHRcXHRcXHQgICAgICAgUkVRX09QX1JFQUQsIEdGUF9LRVJORUwsIFxcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTk6XFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVxcdHNyLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzItXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzQtXFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzOS1cXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTQwOlxcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE1NT1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYxLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNjI6XFx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYzLVxcdFxcdFxcdFxcdCAgICAgICBkb25lX2JlZm9yZSkpIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19zaW1wbGUoaW9jYiwgaXRlciwgb3BzLCBwcml2YXRlLCBkaW9fZmxhZ3MpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXFx0XFx0aWYgKHJldCAhPSAtRU5PVEJMSylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNzc9c3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTc4LXtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5OlxcdHJldHVybiBiaW9zZXRfaW5pdChcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE4MS1cXHRcXHRcXHQgICBCSU9TRVRfTkVFRF9CVkVDUyB8IEJJT1NFVF9QRVJDUFVfQ0FDSEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTowMDowMy4yODI1NDYyMzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxNzY3ODAxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERpcmVjdCBJL08gRmFzdCBQYXRoIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRpbmcgYSBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCB0YXJnZXRzIHNtYWxsLCBibG9jay1hbGlnbmVkIEkvT3MgdGhhdCBoaXQgYSBzaW5nbGUgY29udGlndW91cyBleHRlbnQgb24gZGlzayB3aXRoaW4gdGhlIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBvcHRpbWl6YXRpb24gaW52b2x2ZXMgdHdvIG5ldyBmdW5jdGlvbnMsIGBpb21hcF9kaW9fc2ltcGxlKClgIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKWAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBpb21hcF9kaW9fcncoKWAuIFRoZSBpbXBsaWNhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHRvIHRoZSBrZXJuZWwncyBkaXJlY3QgSS9PIHBhdGgsIHdoaWNoIHVzZXJzIGFjY2VzcyB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBsaWtlIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgd2l0aCB0aGUgYE9fRElSRUNUYCBmbGFnLlxuXG5HaXZlbiB0aGF0IHRoaXMgdG91Y2hlcyBjb3JlIFZGUyBhbmQgaW9tYXAgbG9naWMsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UgbmVlZCB0byBleHBvc2UgdGhpcyB0byBhcyBtYW55IHN0cmVzcyB0ZXN0cyBhcyB3ZSBjYW4gdG8gc2hha2Ugb3V0IGFueSBlZGdlIGNhc2VzLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTdGFydGluZyB3aXRoIHRoZSBmaWxlIGxvY2F0aW9uIGl0c2VsZiwgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gRGl2aW5nIGludG8gdGhlIGBmcy9pb21hcC9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYGlvbWFwLSQoQ09ORklHX0JMT0NLKSArPSBkaXJlY3QtaW8ub2AuIFNvIGBDT05GSUdfQkxPQ0tgIGlzIHRoZSBwcmltYXJ5IHJlcXVpcmVtZW50LiBUaGF0IGlzIGEgKnZlcnkqIGdlbmVyYWwgY29uZmlnLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgYWJvdXQgdGhhdC4gVGhlIG1vcmUgcmVsZXZhbnQgcmVxdWlyZW1lbnQgaXMgYENPTkZJR19GU19JT01BUGAuIFRoaXMgaXMgdGhlIGNvcmUgaW9tYXAgY29uZmlndXJhdGlvbiwgYW5kIGl0IGlzIHNlbGVjdGVkIGJ5IG51bWVyb3VzIGZpbGUgc3lzdGVtcyBsaWtlIGV4dDQsIHhmcywgYW5kIGJ0cmZzLCB3aGljaCBtZWFucyBpdHMgcHJldHR5IGJyb2FkbHkgdXNlZC4gTm93LCB3YWl0IGEgbWludXRlLi4uIHdoZXJlIGlzIHRoZSBLY29uZmlnIGZvciB0aGUgaW9tYXAgc3Vic3lzdGVtIGl0c2VsZj8gSXQgZG9lc24ndCBhcHBlYXIgdG8gZXhpc3QgaW4gYGZzL2lvbWFwL2AuIEknbGwgaGF2ZSB0byBjaGVjayBgZnMvS2NvbmZpZ2AgZm9yIHRoZSBpb21hcCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDYzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjAwOjE4LjQ1OTMzMDU5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODY5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG4tLVxcbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxcbi0tXFxuZnMvS2NvbmZpZy02MS1cXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTYzLVxcdHNlbGVjdCBEQVhcXG4tLVxcbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcXG4tLVxcbmZzL2J0cmZzL0tjb25maWctMTQtXFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbmZzL2J0cmZzL0tjb25maWc6MTU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cXHRzZWxlY3QgUkFJRDZfUFFcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXFxuZnMvZXJvZnMvS2NvbmZpZzo5OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Vyb2ZzL0tjb25maWctMTAtXFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZz0zPWNvbmZpZyBFWEZBVF9GU1xcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG5mcy9leGZhdC9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXhmYXQvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuLS1cXG5mcy9leHQyL0tjb25maWctNC1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9leHQyL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQyL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTctXFx0c2VsZWN0IENSQzMyXFxuZnMvZXh0NC9LY29uZmlnOjg6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXh0NC9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuLS1cXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xcbi0tXFxuZnMvZjJmcy9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuZnMvZjJmcy9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2YyZnMvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTFo0X0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0XFxuLS1cXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xcbi0tXFxuZnMvZnVzZS9LY29uZmlnLTQtXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbmZzL2Z1c2UvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Z1c2UvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXFxuLS1cXG5mcy9nZnMyL0tjb25maWctNy1cXHRzZWxlY3QgUVVPVEFDVExcXG5mcy9nZnMyL0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9nZnMyL0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xcbi0tXFxuZnMvaHBmcy9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaHBmcy9LY29uZmlnOjY6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvaHBmcy9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZnMvaW9tYXAvTWFrZWZpbGU9Nz1jY2ZsYWdzLXkgKz0gLUkgJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL2lvbWFwL01ha2VmaWxlLTgtXFxuZnMvaW9tYXAvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfRlNfSU9NQVApXFx0XFx0Kz0gaW9tYXAub1xcbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00LVxcdHNlbGVjdCBOTFNcXG5mcy9udGZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9udGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9udGZzL2lvbWFwLmM9MzYzPXN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmMtNTQwLVxcbmZzL250ZnMvaW9tYXAuYzo1NDE6I2RlZmluZSBOVEZTX0lPTUFQX0ZMQUdTX0JFR0lOXFx0XFx0QklUKDEpXFxuZnMvbnRmcy9pb21hcC5jOjU0MjojZGVmaW5lIE5URlNfSU9NQVBfRkxBR1NfRElPXFx0XFx0QklUKDIpXFxuZnMvbnRmcy9pb21hcC5jOjU0MzojZGVmaW5lXFx0TlRGU19JT01BUF9GTEFHU19NS1dSSVRFXFx0QklUKDMpXFxuZnMvbnRmcy9pb21hcC5jOjU0NDojZGVmaW5lXFx0TlRGU19JT01BUF9GTEFHU19XUklURUJBQ0tcXHRCSVQoNClcXG5mcy9udGZzL2lvbWFwLmMtNTQ1LVxcbmZzL250ZnMvaW9tYXAuYz01NDY9c3RhdGljIGludCBudGZzX3dyaXRlX2RhX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTU2MS1cXG5mcy9udGZzL2lvbWFwLmM6NTYyOlxcdHVwZGF0ZV9tcCA9IG50ZnNfaW9tYXBfZmxhZ3MgXFx1MDAyNiAoTlRGU19JT01BUF9GTEFHU19ESU8gfCBOVEZTX0lPTUFQX0ZMQUdTX01LV1JJVEUpIHx8XFxuZnMvbnRmcy9pb21hcC5jLTU2My1cXHRcXHRcXHROSW5vQXR0cihuaSkgfHwgbmktXFx1MDAzZW1mdF9ubyBcXHUwMDNjIEZJTEVfZmlyc3RfdXNlcjtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYy01NjYtXFx0XFx0XFx0bWF4X2NsdV9jb3VudCwgXFx1MDAyNmJhbGxvYywgdXBkYXRlX21wLFxcbmZzL250ZnMvaW9tYXAuYzo1Njc6XFx0XFx0XFx0bnRmc19pb21hcF9mbGFncyBcXHUwMDI2IE5URlNfSU9NQVBfRkxBR1NfV1JJVEVCQUNLKTtcXG5mcy9udGZzL2lvbWFwLmMtNTY4LVxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYy01OTQtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9NQVBfRElSRUNUIHx8XFxuZnMvbnRmcy9pb21hcC5jOjU5NTpcXHRcXHQgICAgbnRmc19pb21hcF9mbGFncyBcXHUwMDI2IE5URlNfSU9NQVBfRkxBR1NfTUtXUklURSkge1xcbmZzL250ZnMvaW9tYXAuYy01OTYtXFx0XFx0XFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbmd0aDtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYy02MjAtXFxuZnMvbnRmcy9pb21hcC5jOjYyMTpcXHRpZiAobnRmc19pb21hcF9mbGFncyBcXHUwMDI2IE5URlNfSU9NQVBfRkxBR1NfTUtXUklURSBcXHUwMDI2XFx1MDAyNlxcbmZzL250ZnMvaW9tYXAuYy02MjItXFx0ICAgIGlvbWFwLVxcdTAwM2VvZmZzZXQgKyBpb21hcC1cXHUwMDNlbGVuZ3RoIFxcdTAwM2UgbmktXFx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYz02NzQ9c3RhdGljIGludCBudGZzX3dyaXRlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY3OS1cXG5mcy9udGZzL2lvbWFwLmM6NjgwOlxcdGlmIChudGZzX2lvbWFwX2ZsYWdzIFxcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfQkVHSU4gfCBOVEZTX0lPTUFQX0ZMQUdTX0RJTykgXFx1MDAyNlxcdTAwMjZcXG5mcy9udGZzL2lvbWFwLmMtNjgxLVxcdCAgICBvZmZzZXQgKyBsZW5ndGggXFx1MDAzZSBuaS1cXHUwMDNlaW5pdGlhbGl6ZWRfc2l6ZSkge1xcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY4Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICBudGZzX2lvbWFwX2ZsYWdzIFxcdTAwMjZcXG5mcy9udGZzL2lvbWFwLmM6Njg3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE5URlNfSU9NQVBfRkxBR1NfRElPKTtcXG5mcy9udGZzL2lvbWFwLmMtNjg4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY5Mi1cXHRtdXRleF9sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG5mcy9udGZzL2lvbWFwLmM6NjkzOlxcdGlmIChudGZzX2lvbWFwX2ZsYWdzIFxcdTAwMjYgTlRGU19JT01BUF9GTEFHU19CRUdJTilcXG5mcy9udGZzL2lvbWFwLmMtNjk0LVxcdFxcdHJldHVybiAgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KGlub2RlLCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmM9NzAzPXN0YXRpYyBpbnQgX19udGZzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmMtNzEyLVxcbmZzL250ZnMvaW9tYXAuYzo3MTM6XFx0aWYgKG50ZnNfaW9tYXBfZmxhZ3MgXFx1MDAyNiAoTlRGU19JT01BUF9GTEFHU19CRUdJTiB8IE5URlNfSU9NQVBfRkxBR1NfRElPKSBcXHUwMDI2XFx1MDAyNlxcbmZzL250ZnMvaW9tYXAuYy03MTQtXFx0ICAgIGVuZCBcXHUwMDNlIG5pLVxcdTAwM2VkYXRhX3NpemUpIHtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYz03Mzg9c3RhdGljIGludCBudGZzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmMtNzQyLVxcdHJldHVybiBfX250ZnNfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsXFxuZnMvbnRmcy9pb21hcC5jOjc0MzpcXHRcXHRcXHROVEZTX0lPTUFQX0ZMQUdTX0JFR0lOKTtcXG5mcy9udGZzL2lvbWFwLmMtNzQ0LX1cXG4tLVxcbmZzL250ZnMvaW9tYXAuYz03NzI9c3RhdGljIGludCBudGZzX3BhZ2VfbWt3cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTc3Ni1cXHRyZXR1cm4gX19udGZzX3dyaXRlX2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLFxcbmZzL250ZnMvaW9tYXAuYzo3Nzc6XFx0XFx0XFx0TlRGU19JT01BUF9GTEFHU19NS1dSSVRFKTtcXG5mcy9udGZzL2lvbWFwLmMtNzc4LX1cXG4tLVxcbmZzL250ZnMvaW9tYXAuYz03ODU9c3RhdGljIGludCBudGZzX2Rpb19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTc4OS1cXHRyZXR1cm4gX19udGZzX3dyaXRlX2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLFxcbmZzL250ZnMvaW9tYXAuYzo3OTA6XFx0XFx0XFx0TlRGU19JT01BUF9GTEFHU19ESU8pO1xcbmZzL250ZnMvaW9tYXAuYy03OTEtfVxcbi0tXFxuZnMvbnRmcy9pb21hcC5jPTc5OD1zdGF0aWMgc3NpemVfdCBudGZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTgwNy1cXHRcXHRcXHRcXHRJT01BUF9XUklURSwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsXFxuZnMvbnRmcy9pb21hcC5jOjgwODpcXHRcXHRcXHRcXHROVEZTX0lPTUFQX0ZMQUdTX1dSSVRFQkFDSyk7XFxuZnMvbnRmcy9pb21hcC5jLTgwOS1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9udGZzL2lvbWFwLmgtNS1cXG5mcy9udGZzL2lvbWFwLmg6NjojaWZuZGVmIF9MSU5VWF9OVEZTX0lPTUFQX0hcXG5mcy9udGZzL2lvbWFwLmg6NzojZGVmaW5lIF9MSU5VWF9OVEZTX0lPTUFQX0hcXG5mcy9udGZzL2lvbWFwLmgtOC1cXG4tLVxcbmZzL250ZnMvaW9tYXAuaD0yMj1leHRlcm4gaW50IG50ZnNfZGlvX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCk7XFxuZnMvbnRmcy9pb21hcC5oOjIzOiNlbmRpZiAvKiBfTElOVVhfTlRGU19JT01BUF9IICovXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcXG4tLVxcbmZzL3hmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMveGZzL0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy94ZnMvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL3hmcy94ZnNfaW9tYXAuaC01LSAqL1xcbmZzL3hmcy94ZnNfaW9tYXAuaDo2OiNpZm5kZWYgX19YRlNfSU9NQVBfSF9fXFxuZnMveGZzL3hmc19pb21hcC5oOjc6I2RlZmluZSBfX1hGU19JT01BUF9IX19cXG5mcy94ZnMveGZzX2lvbWFwLmgtOC1cXG4tLVxcbmZzL3hmcy94ZnNfaW9tYXAuaD02MD1leHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyB4ZnNfaW9tYXBfd3JpdGVfb3BzO1xcbmZzL3hmcy94ZnNfaW9tYXAuaC02MS1cXG5mcy94ZnMveGZzX2lvbWFwLmg6NjI6I2VuZGlmIC8qIF9fWEZTX0lPTUFQX0hfXyovXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuZnMvem9uZWZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy96b25lZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTowMDoxOC44NzUyMDUyMjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMzQwMjAzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxOTk4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6MDA6MzEuMjA5MjI4MTY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExOTk4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX3NpbXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTYtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk3OnN0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2I7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTEtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcilcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQyLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ2OlxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ3LVxcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVxcdTAwM2Vpb2NiO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ5LVxcdFdSSVRFX09OQ0UoaW9jYi1cXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTUwOlxcdGlvY2ItXFx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTEtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NTM6c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU2OlxcdFxcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Ny1cXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cXHUwMDNlaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NjI6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzci1cXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXFx0XFx0cXVldWVfd29yayhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19kaW9fZG9uZV93cSwgXFx1MDAyNnNyLVxcdTAwM2V3b3JrKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2Ny1cXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2ODpcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTY5LX1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk3MT1zdGF0aWMgaW5saW5lIGJvb2xcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NzI6aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwNi0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwOC0gKiBlbnRlcmluZyB0aGlzIHBhdGguXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE0OiAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTU6ICogaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90IGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAyOS0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzc6aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDM4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVxcdH07XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA1MTpcXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA1Mi1cXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA5Ny1cXHRcXHRcXHQgICAgICAgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKGl0ZXIsIEJJT19NQVhfVkVDUyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5ODpcXHRcXHRcXHQgICAgICAgUkVRX09QX1JFQUQsIEdGUF9LRVJORUwsIFxcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTk6XFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVxcdHNyLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzItXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzQtXFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzOS1cXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTQwOlxcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE1NT1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYxLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNjI6XFx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYzLVxcdFxcdFxcdFxcdCAgICAgICBkb25lX2JlZm9yZSkpIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19zaW1wbGUoaW9jYiwgaXRlciwgb3BzLCBwcml2YXRlLCBkaW9fZmxhZ3MpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXFx0XFx0aWYgKHJldCAhPSAtRU5PVEJMSylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNzc9c3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTc4LXtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5OlxcdHJldHVybiBiaW9zZXRfaW5pdChcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE4MS1cXHRcXHRcXHQgICBCSU9TRVRfTkVFRF9CVkVDUyB8IEJJT1NFVF9QRVJDUFVfQ0FDSEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTowMDozMS40MDA0MzI1MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk2NDA2MDE0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IERpcmVjdCBJL08gUGF0aCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIGEgXCJzaW1wbGVcIiBkaXJlY3QgSS9PIHBhdGgsIHNwZWNpZmljYWxseSBgaW9tYXBfZGlvX3NpbXBsZWAsIHdpdGhpbiB0aGUgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBmaWxlLiBUaGlzIG5ldyBwYXRoIGlzIGRlc2lnbmVkIGZvciBoYW5kbGluZyBmYXN0IHBhdGgsIHNtYWxsLCBibG9jay1hbGlnbmVkIGRpcmVjdCBJL09zIHRoYXQgbWFwIHRvIGEgc2luZ2xlIGNvbnRpZ3VvdXMgZXh0ZW50IG9uIGRpc2suIE15IGluaXRpYWwgdGhvdWdodD8gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQuXG5cblRoZSBgaW9tYXBfZGlvX3NpbXBsZWAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYGlvbWFwX2Rpb19yd2AsIHdoaWNoIGlzLCBhcyB3ZSBrbm93LCBhIGZ1bmN0aW9uIHVzZWQgYnkgbnVtZXJvdXMgZmlsZXN5c3RlbXMsIGluY2x1ZGluZyBidHJmcywgZXh0NCwgeGZzLCBmMmZzLCBhbmQgZ2ZzMi4gVGhhdCBpbW1lZGlhdGVseSBleHBhbmRzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCBhdHRhY2sgc3VyZmFjZSwgYW5kIG1lYW5zIGl0IHNob3VsZCBiZSB2ZXJ5IHdlbGwgdGVzdGVkLCBhbmQgdGh1cyBmdXp6ZWQuXG5cblRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYWxsIHRoaXMgaXMgYEZTX0lPTUFQYC4gVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgbWFueSBmaWxlc3lzdGVtcywgd2hpY2ggaXMgZ29vZCwgYnV0IGluIG15IGV4cGVyaWVuY2UsIGl0IG1pZ2h0IGFsc28gYmUgd29ydGgga2VlcGluZyBhbiBleWUgb24gdGhlIHNlbGVjdGVkIGZpbGVzeXN0ZW1zLiBTaW5jZSBgRlNfSU9NQVBgIGlzIGEgYm9vbCBjb25maWcsIGxpc3RpbmcgaXQgaXMgZmluZS4gSXQgd291bGQgYWxzbyBiZSB1c2VmdWwgdG8ga2VlcCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBgQlRSRlNfRlNgIGluIG1pbmQuXG5cblNvLCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoaXMgbmV3IHBhdGgsIGFuZCB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gYmUuXG5cblRoZSBwYXRjaCBpbmNsdWRlcyBgaW9tYXBfZGlvX3NpbXBsZWAgYW5kIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAsIHNvIHRoaXMgaXMgYSBzb2xpZCBhZGRpdGlvbi5cblxuVGhlcmVmb3JlLCBmb3IgbXkgZnV6emluZyBhc3Nlc3NtZW50OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgXG4qICAgKipFbmFibGVDb25maWdzKio6IGBGU19JT01BUGAgYW5kLCB3YWl0LCBzaW5jZSB0aGUgYGRpcmVjdC1pby5vYCBmaWxlIGFsc28gcmVxdWlyZXMgYENPTkZJR19CTE9DS2AsIEkgc2hvdWxkIGFkZCB0aGF0IHRvby4gYEJMT0NLYFxuXG4qKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcsIGZhc3RlciBwYXRoIGZvciBoYW5kbGluZyBzcGVjaWZpYyB0eXBlcyBvZiBkaXJlY3QgSS9PcyB3aXRoaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gQmVjYXVzZSB0aGlzIHBhdGggYWRkcyBuZXcgY29yZSBsb2dpYywgYW5kIGJlY2F1c2UgaXQgaXMgcmVhY2hhYmxlIHZpYSBzZXZlcmFsIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBpdCBzaG91bGQgYmUgZnV6emVkIGFzIHBhcnQgb2YgYSBwcm9wZXIgc2VjdXJpdHkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNDEsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjAwOjUxLjA0MTAzODMwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDEzMTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfZGlvX3NpbXBsZVwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBhZGRzIG5ldyBjb3JlIGxvZ2ljIGZvciBkaXJlY3QgSS9PIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB2YXJpb3VzIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZFwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZVwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 08:49:13 +0000 UTC FinishedAt: 2026-07-01 09:00:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_IOMAP", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_IOMAP", "BLOCK" ], "series_id": "cd5d4089-d327-48fd-9643-ac2536637271" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_dio_simple", "iomap_dio_simple_supported", "iomap_dio_simple_complete", "iomap_dio_simple_end_io", "iomap_dio_simple_complete_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA4OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBhZGRzIG5ldyBjb3JlIGxvZ2ljIGZvciBkaXJlY3QgSS9PIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB2YXJpb3VzIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwODo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI5ZWJiMmNlNzY2ODQwNjc2YzA1ZjU0YjY1MzVhODI3NzgzNzhiMmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA4OjU4OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGI0ODVlM2IxOTFkYWZhLi5jYTc5MDIzOWU1ZWIzMiAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2UuaFwmIzM0O1xuIFxuQEAgLTg4LDkgJiM0Mzs4OSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdHJldHVybiBGU0VSUl9ESVJFQ1RJT19SRUFEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGludCBlcnJvcilcbiB7XG4tXHRzd2l0Y2ggKGRpby1cdTAwM2VlcnJvcikge1xuJiM0MztcdHN3aXRjaCAoZXJyb3IpIHtcbiBcdGNhc2UgMDpcbiBcdGNhc2UgLUVBR0FJTjpcbiBcdGNhc2UgLUVOT1RCTEs6XG5AQCAtMTEwLDcgJiM0MzsxMTEsNyBAQCBzc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXG4gXHRpZiAoZG9wcyBcdTAwMjZcdTAwMjYgZG9wcy1cdTAwM2VlbmRfaW8pXG4gXHRcdHJldCA9IGRvcHMtXHUwMDNlZW5kX2lvKGlvY2IsIGRpby1cdTAwM2VzaXplLCByZXQsIGRpby1cdTAwM2VmbGFncyk7XG4tXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8pKVxuJiM0MztcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby1cdTAwM2VlcnJvcikpXG4gXHRcdGZzZXJyb3JfcmVwb3J0X2lvKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSxcbiBcdFx0XHRcdCAgaW9tYXBfZGlvX2Vycl90eXBlKGRpbyksIG9mZnNldCwgZGlvLVx1MDAzZXNpemUsXG4gXHRcdFx0XHQgIGRpby1cdTAwM2VlcnJvciwgR0ZQX05PRlMpO1xuQEAgLTM5OCw2ICYjNDM7Mzk5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbiYjNDM7e1xuJiM0MztcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXG4mIzQzO1x0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuJiM0MztcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcdTAwMjZpdGVyLVx1MDAzZWlvbWFwO1xuQEAgLTQxNiwxMCAmIzQzOzQyNSw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXHQgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzXG4gXHQgKiBuZWVkIGVhY2ggYmlvIHRvIGJlIGJsb2NrIGFsaWduZWQgYXMgdGhhdCYjMzk7cyB0aGUgdW5pdCBvZiBhbGxvY2F0aW9uLlxuIFx0ICovXG4tXHRpZiAoZGlvLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuLVx0XHRhbGlnbm1lbnQgPSBmc19ibG9ja19zaXplO1xuLVx0ZWxzZVxuLVx0XHRhbGlnbm1lbnQgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShpb21hcC1cdTAwM2ViZGV2KTtcbiYjNDM7XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKChwb3MgfCBsZW5ndGgpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OCwxMiAmIzQzOzg5NCwyNzcgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbiBcbiYjNDM7c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUge1xuJiM0MztcdHN0cnVjdCBraW9jYlx0XHQqaW9jYjtcbiYjNDM7XHRzaXplX3RcdFx0XHRzaXplO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRkaW9fZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxpZ24gQGJpbyB0byBhIGNhY2hlbGluZSBib3VuZGFyeSBzbyB0aGF0LCBjb21iaW5lZCB3aXRoIHRoZVxuJiM0MztcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxuJiM0MztcdCAqIGEgY2FjaGVsaW5lIGluIG1lbW9yeSByZXR1cm5lZCBieSB0aGUgKEhXQ0FDSEUtYWxpZ25lZCkgYmlvXG4mIzQzO1x0ICogc2xhYi4gIFRoaXMga2VlcHMgdGhlIGhvdCBmaWVsZHMgYmxvY2sgbGF5ZXIgdG91Y2hlcyBvbiBzdWJtaXRcbiYjNDM7XHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBiaW9cdFx0YmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sO1xuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSBcdTAwMjZzci1cdTAwM2ViaW87XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoYmlvLVx1MDAzZWJpX3N0YXR1cykpIHtcbiYjNDM7XHRcdHJldCA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVx1MDAzZWJpX3N0YXR1cyk7XG4mIzQzO1x0XHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihyZXQpKVxuJiM0MztcdFx0XHRmc2Vycm9yX3JlcG9ydF9pbyhpbm9kZSwgRlNFUlJfRElSRUNUSU9fUkVBRCxcbiYjNDM7XHRcdFx0XHRcdCAgaW9jYi1cdTAwM2VraV9wb3MsIHNyLVx1MDAzZXNpemUsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgR0ZQX05PRlMpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBzci1cdTAwM2VzaXplO1xuJiM0MztcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzci1cdTAwM2VkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkge1xuJiM0MztcdFx0YmlvX2NoZWNrX3BhZ2VzX2RpcnR5KGJpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuJiM0MztcdFx0YmlvX3B1dChiaW8pO1xuJiM0MztcdH1cbiYjNDM7XHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbiYjNDM7XHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0IFx1MDAzYyAwID8gcmV0IDogMCwgcmV0KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShpb2NiLVx1MDAzZXByaXZhdGUsIE5VTEwpO1xuJiM0MztcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNyLVx1MDAzZWJpby5iaV9zdGF0dXMpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcbiYjNDM7XHRcdElOSVRfV09SSyhcdTAwMjZzci1cdTAwM2V3b3JrLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmspO1xuJiM0MztcdFx0cXVldWVfd29yayhpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EsIFx1MDAyNnNyLVx1MDAzZXdvcmspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShpb2NiLVx1MDAzZXByaXZhdGUsIE5VTEwpO1xuJiM0MztcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzLCBzaXplX3QgZG9uZV9iZWZvcmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoZG9wcyB8fCBkb25lX2JlZm9yZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2ltcGxlIGRpbyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHNtYWxsIElPLiBGaWx0ZXIgb3V0IGxhcmdlIElPXG4mIzQzO1x0ICogZWFybHkgYXMgaXQmIzM5O3MgdGhlIG1vc3QgY29tbW9uIGNhc2UgdG8gZmFpbCBmb3IgdHlwaWNhbCBkaXJlY3QgSU9cbiYjNDM7XHQgKiB3b3JrbG9hZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNvdW50IFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IChJT01BUF9ESU9fRk9SQ0VfV0FJVCB8IElPTUFQX0RJT19QQVJUSUFMIHxcbiYjNDM7XHRcdFx0IElPTUFQX0RJT19CT1VOQ0UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhIHNpbmdsZVxuJiM0MzsgKiBjb250aWd1b3VzIG9uLWRpc2sgZXh0ZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCgpIGVuZm9yY2VzIHRoZSBjaGVhcCB1cC1mcm9udCBjb25zdHJhaW50cyBiZWZvcmVcbiYjNDM7ICogZW50ZXJpbmcgdGhpcyBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcbiYjNDM7ICogLVx1MDAzZWVuZF9pbyAvIC1cdTAwM2VzdWJtaXRfaW8gaG9va3MgaW52b2tlZCwgYW5kIGluIHBhcnRpY3VsYXIgd2FudHMgaXRzIGJpb3MgdG8gYmVcbiYjNDM7ICogYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy1cdTAwM2ViaW9fc2V0ICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYVxuJiM0MzsgKiBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlIGJpbykuICBUaGUgZmFzdCBwYXRoIGluc3RlYWQgYWxsb2NhdGVzXG4mIzQzOyAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxuJiM0MzsgKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcbiYjNDM7ICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cbiYjNDM7ICpcbiYjNDM7ICogQGRvbmVfYmVmb3JlIG11c3QgYmUgemVybzogYSBub24temVybyBjYWxsZXItYWNjdW11bGF0ZWQgcmVzaWR1YWwgY2Fubm90IGJlXG4mIzQzOyAqIGNhcnJpZWQgdGhyb3VnaCBhIHNpbmdsZS1iaW8gaW5saW5lIGNvbXBsZXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEBpdGVyIG11c3QgZGVzY3JpYmUgYSBub24tZW1wdHkgUkVBRCBubyBsYXJnZXIgdGhhbiB0aGUgaW5vZGUgYmxvY2sgc2l6ZTpcbiYjNDM7ICogd3JpdGVzLCB6ZXJvLWxlbmd0aCBJL08sIGFuZCBsYXJnZXIgcmVxdWVzdHMgbmVlZCB0aGUgZ2VuZXJpYyBpb21hcCBkaXJlY3RcbiYjNDM7ICogSS9PIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIEBkaW9fZmxhZ3MgbXVzdCBub3QgcmVxdWVzdCBJT01BUF9ESU9fRk9SQ0VfV0FJVCwgSU9NQVBfRElPX1BBUlRJQUwsIG9yXG4mIzQzOyAqIElPTUFQX0RJT19CT1VOQ0U6IHRoaXMgcGF0aCBkb2VzIG5vdCBzdXBwb3J0IGZvcmNlZCB3YWl0aW5nLCBwYXJ0aWFsIGRpcmVjdFxuJiM0MzsgKiBJL08sIG9yIGJvdW5jaW5nLiAgVGhlIHJhbmdlIG11c3QgYWxzbyBzdGF5IHdpdGhpbiBpX3NpemUgYW5kIGVuY3J5cHRlZFxuJiM0MzsgKiBpbm9kZXMgbXVzdCB1c2UgdGhlIGdlbmVyaWMgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkgd2hlbiBpdFxuJiM0MzsgKiBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLiAgSW4gdGhhdCBjYXNlIHdlIHByb2NlZWQgdG9cbiYjNDM7ICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmRcbiYjNDM7ICogaXMgcHJvcGFnYXRlZCBhcy1pcywgaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZVxuJiM0MzsgKiBjYWxsZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0Mztpb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztcdFx0IGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSxcbiYjNDM7XHRcdCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiYjNDM7XHRib29sIHdhaXRfZm9yX2NvbXBsZXRpb24gPSBpc19zeW5jX2tpb2NiKGlvY2IpO1xuJiM0MztcdHN0cnVjdCBpb21hcF9pdGVyIGlvbWkgPSB7XG4mIzQzO1x0XHQuaW5vZGVcdFx0PSBpbm9kZSxcbiYjNDM7XHRcdC5wb3NcdFx0PSBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdC5sZW5cdFx0PSBjb3VudCxcbiYjNDM7XHRcdC5mbGFnc1x0XHQ9IElPTUFQX0RJUkVDVCxcbiYjNDM7XHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW87XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbiYjNDM7XHRcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBraW9jYl93cml0ZV9hbmRfd2FpdChpb2NiLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlub2RlX2Rpb19iZWdpbihpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9wcy1cdTAwM2Vpb21hcF9iZWdpbihpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBpb21pLmZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCwgXHUwMDI2aW9taS5zcmNtYXApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4mIzQzO1x0ICAgIGlvbWkuaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWkuaW9tYXAubGVuZ3RoIFx1MDAzYyBpb21pLnBvcyAmIzQzOyBjb3VudCB8fFxuJiM0MztcdCAgICAoaW9taS5pb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PVEJMSztcbiYjNDM7XHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcbiYjNDM7XHRpZiAoKGlvbWkucG9zIHwgY291bnQpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XG4mIzQzO1x0XHRyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxuJiM0MztcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcbiYjNDM7XG4mIzQzO1x0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbiYjNDM7XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuJiM0MztcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4mIzQzO1x0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4mIzQzO1x0c3ItXHUwMDNlZGlvX2ZsYWdzID0gZGlvX2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aW9taS5pb21hcCwgaW9taS5wb3MpO1xuJiM0MztcdGJpby1cdTAwM2ViaV9pb3ByaW8gPSBpb2NiLVx1MDAzZWtpX2lvcHJpbztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQpKVxuJiM0MztcdFx0Z290byBvdXRfYmlvX3B1dDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHtcbiYjNDM7XHRcdGlvdl9pdGVyX3JldmVydChpdGVyLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9UQkxLO1xuJiM0MztcdFx0Z290byBvdXRfYmlvX3JlbGVhc2VfcGFnZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzci1cdTAwM2VzaXplID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKVxuJiM0MztcdFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XG4mIzQzO1x0aWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0hJUFJJKSBcdTAwMjZcdTAwMjYgIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBiaW8pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4mIzQzO1x0XHRvcHMtXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIGNvdW50LCBpb21pLmZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCk7XG4mIzQzO1xuJiM0MztcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuJiM0MztcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuJiM0MztcdFx0c3VibWl0X2JpbyhiaW8pO1xuJiM0MztcdFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpbm9kZSwgaW9taS5wb3MsIGNvdW50KTtcbiYjNDM7XHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG4mIzQzO1xuJiM0MztvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XG4mIzQzO1x0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4mIzQzO291dF9iaW9fcHV0OlxuJiM0MztcdGJpb19wdXQoYmlvKTtcbiYjNDM7b3V0X2lvbWFwX2VuZDpcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWlvbWFwX2VuZClcbiYjNDM7XHRcdG9wcy1cdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgMCwgaW9taS5mbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuJiM0MztcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3NpemVfdFxuIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbiBcdFx0dW5zaWduZWQgaW50IGRpb19mbGFncywgdm9pZCAqcHJpdmF0ZSwgc2l6ZV90IGRvbmVfYmVmb3JlKVxuIHtcbiBcdHN0cnVjdCBpb21hcF9kaW8gKmRpbztcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG4mIzQzO1x0XHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXG4gXHRcdFx0ICAgICBkb25lX2JlZm9yZSk7XG5AQCAtOTAyLDMgJiM0MzsxMTczLDExIEBAIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdHJldHVybiBpb21hcF9kaW9fY29tcGxldGUoZGlvKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGlvbWFwX2Rpb19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlvc2V0X2luaXQoXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxuJiM0MztcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKSxcbiYjNDM7XHRcdFx0ICAgQklPU0VUX05FRURfQlZFQ1MgfCBCSU9TRVRfUEVSQ1BVX0NBQ0hFKTtcbiYjNDM7fVxuJiM0Mztmc19pbml0Y2FsbChpb21hcF9kaW9faW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyOWViYjJjZTc2Njg0MDY3NmMwNWY1NGI2NTM1YTgyNzc4Mzc4YjJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwODo1ODo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmNhNzkwMjM5ZTVlYjMyIDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mc2Vycm9yLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYWNlLmgmIzM0OwogCkBAIC04OCw5ICYjNDM7ODksOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gZnNlcnJvcl90eXBlIGlvbWFwX2Rpb19lcnJfdHlwZShjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCiAJcmV0dXJuIEZTRVJSX0RJUkVDVElPX1JFQUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihpbnQgZXJyb3IpCiB7Ci0Jc3dpdGNoIChkaW8tJmd0O2Vycm9yKSB7CiYjNDM7CXN3aXRjaCAoZXJyb3IpIHsKIAljYXNlIDA6CiAJY2FzZSAtRUFHQUlOOgogCWNhc2UgLUVOT1RCTEs6CkBAIC0xMTAsNyAmIzQzOzExMSw3IEBAIHNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAogCWlmIChkb3BzICZhbXA7JmFtcDsgZG9wcy0mZ3Q7ZW5kX2lvKQogCQlyZXQgPSBkb3BzLSZndDtlbmRfaW8oaW9jYiwgZGlvLSZndDtzaXplLCByZXQsIGRpby0mZ3Q7ZmxhZ3MpOwotCWlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpbykpCiYjNDM7CWlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby0mZ3Q7ZXJyb3IpKQogCQlmc2Vycm9yX3JlcG9ydF9pbyhmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApLAogCQkJCSAgaW9tYXBfZGlvX2Vycl90eXBlKGRpbyksIG9mZnNldCwgZGlvLSZndDtzaXplLAogCQkJCSAgZGlvLSZndDtlcnJvciwgR0ZQX05PRlMpOwpAQCAtMzk4LDYgJiM0MzszOTksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncykKJiM0Mzt7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCkKJiM0MzsJCXJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7CiYjNDM7CXJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogewogCWNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSAmYW1wO2l0ZXItJmd0O2lvbWFwOwpAQCAtNDE2LDEwICYjNDM7NDI1LDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAkgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzCiAJICogbmVlZCBlYWNoIGJpbyB0byBiZSBibG9jayBhbGlnbmVkIGFzIHRoYXQmIzM5O3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi4KIAkgKi8KLQlpZiAoZGlvLSZndDtmbGFncyAmYW1wOyBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKQotCQlhbGlnbm1lbnQgPSBmc19ibG9ja19zaXplOwotCWVsc2UKLQkJYWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtJmd0O2JkZXYpOwomIzQzOwlhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC0mZ3Q7YmRldiwgZGlvLSZndDtmbGFncyk7CiAKIAlpZiAoKHBvcyB8IGxlbmd0aCkgJmFtcDsgKGFsaWdubWVudCAtIDEpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg4OCwxMiAmIzQzOzg5NCwyNzcgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7CiAKJiM0MztzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7CiYjNDM7CXN0cnVjdCBraW9jYgkJKmlvY2I7CiYjNDM7CXNpemVfdAkJCXNpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX2ZsYWdzOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKJiM0MzsJLyoKJiM0MzsJICogQWxpZ24gQGJpbyB0byBhIGNhY2hlbGluZSBib3VuZGFyeSBzbyB0aGF0LCBjb21iaW5lZCB3aXRoIHRoZQomIzQzOwkgKiBmcm9udF9wYWQgcGFzc2VkIHRvIGJpb3NldF9pbml0KCksIHRoZSBiaW8gc2l0cyBhdCB0aGUgc3RhcnQgb2YKJiM0MzsJICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW8KJiM0MzsJICogc2xhYi4gIFRoaXMga2VlcHMgdGhlIGhvdCBmaWVsZHMgYmxvY2sgbGF5ZXIgdG91Y2hlcyBvbiBzdWJtaXQKJiM0MzsJICogYW5kIGNvbXBsZXRpb24gKGJpX2l0ZXIsIGJpX3N0YXR1cywgLi4uKSB3aXRoaW4gYSBzaW5nbGUgbGluZS4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBiaW8JCWJpbyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBiaW9fc2V0IGlvbWFwX2Rpb19zaW1wbGVfcG9vbDsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW8gKmJpbyA9ICZhbXA7c3ItJmd0O2JpbzsKJiM0MzsJc3RydWN0IGtpb2NiICppb2NiID0gc3ItJmd0O2lvY2I7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGJpby0mZ3Q7Ymlfc3RhdHVzKSkgewomIzQzOwkJcmV0ID0gYmxrX3N0YXR1c190b19lcnJubyhiaW8tJmd0O2JpX3N0YXR1cyk7CiYjNDM7CQlpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihyZXQpKQomIzQzOwkJCWZzZXJyb3JfcmVwb3J0X2lvKGlub2RlLCBGU0VSUl9ESVJFQ1RJT19SRUFELAomIzQzOwkJCQkJICBpb2NiLSZndDtraV9wb3MsIHNyLSZndDtzaXplLCByZXQsCiYjNDM7CQkJCQkgIEdGUF9OT0ZTKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHNyLSZndDtzaXplOwomIzQzOwkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHNyLSZndDtkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7CiYjNDM7CQliaW9fY2hlY2tfcGFnZXNfZGlydHkoYmlvKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpOwomIzQzOwkJYmlvX3B1dChiaW8pOwomIzQzOwl9CiYjNDM7CWlub2RlX2Rpb19lbmQoaW5vZGUpOwomIzQzOwl0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0ICZsdDsgMCA/IHJldCA6IDAsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTsKJiM0MzsJc3RydWN0IGtpb2NiICppb2NiID0gc3ItJmd0O2lvY2I7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaW9jYi0mZ3Q7cHJpdmF0ZSwgTlVMTCk7CiYjNDM7CWlvY2ItJmd0O2tpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID0KJiM0MzsJCWNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pOwomIzQzOwlzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci0mZ3Q7aW9jYjsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHNyLSZndDtiaW8uYmlfc3RhdHVzKSkgewomIzQzOwkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CiYjNDM7CQlJTklUX1dPUksoJmFtcDtzci0mZ3Q7d29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTsKJiM0MzsJCXF1ZXVlX3dvcmsoaW5vZGUtJmd0O2lfc2ItJmd0O3NfZGlvX2RvbmVfd3EsICZhbXA7c3ItJmd0O3dvcmspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaW9jYi0mZ3Q7cHJpdmF0ZSwgTlVMTCk7CiYjNDM7CWlvY2ItJmd0O2tpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsCiYjNDM7CQkJICAgdW5zaWduZWQgaW50IGRpb19mbGFncywgc2l6ZV90IGRvbmVfYmVmb3JlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwomIzQzOwlpZiAoZG9wcyB8fCBkb25lX2JlZm9yZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghY291bnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CS8qCiYjNDM7CSAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJTwomIzQzOwkgKiBlYXJseSBhcyBpdCYjMzk7cyB0aGUgbW9zdCBjb21tb24gY2FzZSB0byBmYWlsIGZvciB0eXBpY2FsIGRpcmVjdCBJTwomIzQzOwkgKiB3b3JrbG9hZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoY291bnQgJmd0OyBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgKElPTUFQX0RJT19GT1JDRV9XQUlUIHwgSU9NQVBfRElPX1BBUlRJQUwgfAomIzQzOwkJCSBJT01BUF9ESU9fQk9VTkNFKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmIzQzOyBjb3VudCAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKElTX0VOQ1JZUFRFRChpbm9kZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYSBzaW5nbGUKJiM0MzsgKiBjb250aWd1b3VzIG9uLWRpc2sgZXh0ZW50LgomIzQzOyAqCiYjNDM7ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlCiYjNDM7ICogZW50ZXJpbmcgdGhpcyBwYXRoLgomIzQzOyAqCiYjNDM7ICogQGRvcHMgbXVzdCBiZSBOVUxMOiBhIG5vbi1OVUxMIEBkb3BzIG1lYW5zIHRoZSBjYWxsZXIgd2FudHMgaXRzCiYjNDM7ICogLSZndDtlbmRfaW8gLyAtJmd0O3N1Ym1pdF9pbyBob29rcyBpbnZva2VkLCBhbmQgaW4gcGFydGljdWxhciB3YW50cyBpdHMgYmlvcyB0byBiZQomIzQzOyAqIGFsbG9jYXRlZCBmcm9tIHRoZSBmaWxlc3lzdGVtLXByaXZhdGUgQGRvcHMtJmd0O2Jpb19zZXQgKHdob3NlIGZyb250X3BhZCBzaXplcyBhCiYjNDM7ICogZmlsZXN5c3RlbS1wcml2YXRlIHdyYXBwZXIgYXJvdW5kIHRoZSBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcwomIzQzOyAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdAomIzQzOyAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbAomIzQzOyAqIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpbiB0aGF0IGNhc2UuCiYjNDM7ICoKJiM0MzsgKiBAZG9uZV9iZWZvcmUgbXVzdCBiZSB6ZXJvOiBhIG5vbi16ZXJvIGNhbGxlci1hY2N1bXVsYXRlZCByZXNpZHVhbCBjYW5ub3QgYmUKJiM0MzsgKiBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLgomIzQzOyAqCiYjNDM7ICogQGl0ZXIgbXVzdCBkZXNjcmliZSBhIG5vbi1lbXB0eSBSRUFEIG5vIGxhcmdlciB0aGFuIHRoZSBpbm9kZSBibG9jayBzaXplOgomIzQzOyAqIHdyaXRlcywgemVyby1sZW5ndGggSS9PLCBhbmQgbGFyZ2VyIHJlcXVlc3RzIG5lZWQgdGhlIGdlbmVyaWMgaW9tYXAgZGlyZWN0CiYjNDM7ICogSS9PIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBAZGlvX2ZsYWdzIG11c3Qgbm90IHJlcXVlc3QgSU9NQVBfRElPX0ZPUkNFX1dBSVQsIElPTUFQX0RJT19QQVJUSUFMLCBvcgomIzQzOyAqIElPTUFQX0RJT19CT1VOQ0U6IHRoaXMgcGF0aCBkb2VzIG5vdCBzdXBwb3J0IGZvcmNlZCB3YWl0aW5nLCBwYXJ0aWFsIGRpcmVjdAomIzQzOyAqIEkvTywgb3IgYm91bmNpbmcuICBUaGUgcmFuZ2UgbXVzdCBhbHNvIHN0YXkgd2l0aGluIGlfc2l6ZSBhbmQgZW5jcnlwdGVkCiYjNDM7ICogaW5vZGVzIG11c3QgdXNlIHRoZSBnZW5lcmljIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4KJiM0MzsgKgomIzQzOyAqIC1FTk9UQkxLIGlzIHRoZSBwcml2YXRlIHNlbnRpbmVsIHJldHVybmVkIGJ5IGlvbWFwX2Rpb19zaW1wbGUoKSB3aGVuIGl0CiYjNDM7ICogZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC4gIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvCiYjNDM7ICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmQKJiM0MzsgKiBpcyBwcm9wYWdhdGVkIGFzLWlzLCBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlCiYjNDM7ICogY2FsbGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90CiYjNDM7aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKJiM0MzsJCSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsCiYjNDM7CQkgdW5zaWduZWQgaW50IGRpb19mbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKJiM0MzsJYm9vbCB3YWl0X2Zvcl9jb21wbGV0aW9uID0gaXNfc3luY19raW9jYihpb2NiKTsKJiM0MzsJc3RydWN0IGlvbWFwX2l0ZXIgaW9taSA9IHsKJiM0MzsJCS5pbm9kZQkJPSBpbm9kZSwKJiM0MzsJCS5wb3MJCT0gaW9jYi0mZ3Q7a2lfcG9zLAomIzQzOwkJLmxlbgkJPSBjb3VudCwKJiM0MzsJCS5mbGFncwkJPSBJT01BUF9ESVJFQ1QsCiYjNDM7CQkucHJpdmF0ZQk9IHByaXZhdGUsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcjsKJiM0MzsJdW5zaWduZWQgaW50IGFsaWdubWVudDsKJiM0MzsJc3RydWN0IGJpbyAqYmlvOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQomIzQzOwkJaW9taS5mbGFncyB8PSBJT01BUF9OT1dBSVQ7CiYjNDM7CiYjNDM7CXJldCA9IGtpb2NiX3dyaXRlX2FuZF93YWl0KGlvY2IsIGNvdW50KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlub2RlX2Rpb19iZWdpbihpbm9kZSk7CiYjNDM7CiYjNDM7CXJldCA9IG9wcy0mZ3Q7aW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncywKJiM0MzsJCQkgICAgICAgJmFtcDtpb21pLmlvbWFwLCAmYW1wO2lvbWkuc3JjbWFwKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJaW5vZGVfZGlvX2VuZChpbm9kZSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8CiYjNDM7CSAgICBpb21pLmlvbWFwLm9mZnNldCAmIzQzOyBpb21pLmlvbWFwLmxlbmd0aCAmbHQ7IGlvbWkucG9zICYjNDM7IGNvdW50IHx8CiYjNDM7CSAgICAoaW9taS5pb21hcC5mbGFncyAmYW1wOyBJT01BUF9GX0lOVEVHUklUWSkpIHsKJiM0MzsJCXJldCA9IC1FTk9UQkxLOwomIzQzOwkJZ290byBvdXRfaW9tYXBfZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTsKJiM0MzsJaWYgKChpb21pLnBvcyB8IGNvdW50KSAmYW1wOyAoYWxpZ25tZW50IC0gMSkpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9pb21hcF9lbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uICZhbXA7JmFtcDsgdW5saWtlbHkoIWlub2RlLSZndDtpX3NiLSZndDtzX2Rpb19kb25lX3dxKSkgewomIzQzOwkJcmV0ID0gc2JfaW5pdF9kaW9fZG9uZV93cShpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIG91dF9pb21hcF9lbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7CiYjNDM7CiYjNDM7CWlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKQomIzQzOwkJZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDsKJiM0MzsKJiM0MzsJYmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsCiYjNDM7CQkJICAgICAgIGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLAomIzQzOwkJCSAgICAgICBSRVFfT1BfUkVBRCwgR0ZQX0tFUk5FTCwgJmFtcDtpb21hcF9kaW9fc2ltcGxlX3Bvb2wpOwomIzQzOwlzciA9IGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pOwomIzQzOwlzci0mZ3Q7aW9jYiA9IGlvY2I7CiYjNDM7CXNyLSZndDtkaW9fZmxhZ3MgPSBkaW9fZmxhZ3M7CiYjNDM7CiYjNDM7CWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoJmFtcDtpb21pLmlvbWFwLCBpb21pLnBvcyk7CiYjNDM7CWJpby0mZ3Q7YmlfaW9wcmlvID0gaW9jYi0mZ3Q7a2lfaW9wcmlvOwomIzQzOwomIzQzOwlyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYWxpZ25tZW50IC0gMSk7CiYjNDM7CWlmICh1bmxpa2VseShyZXQpKQomIzQzOwkJZ290byBvdXRfYmlvX3B1dDsKJiM0MzsKJiM0MzsJaWYgKGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplICE9IGNvdW50KSB7CiYjNDM7CQlpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLSZndDtiaV9pdGVyLmJpX3NpemUpOwomIzQzOwkJcmV0ID0gLUVOT1RCTEs7CiYjNDM7CQlnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlczsKJiM0MzsJfQomIzQzOwomIzQzOwlzci0mZ3Q7c2l6ZSA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplOwomIzQzOwomIzQzOwlpZiAoZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkKJiM0MzsJCWJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTsKJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQomIzQzOwkJYmlvLSZndDtiaV9vcGYgfD0gUkVRX05PV0FJVDsKJiM0MzsJaWYgKChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0hJUFJJKSAmYW1wOyZhbXA7ICF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7CiYjNDM7CQliaW8tJmd0O2JpX29wZiB8PSBSRVFfUE9MTEVEOwomIzQzOwkJV1JJVEVfT05DRShpb2NiLSZndDtwcml2YXRlLCBiaW8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHMtJmd0O2lvbWFwX2VuZCkKJiM0MzsJCW9wcy0mZ3Q7aW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIGNvdW50LCBpb21pLmZsYWdzLAomIzQzOwkJCSAgICAgICAmYW1wO2lvbWkuaW9tYXApOwomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHsKJiM0MzsJCWJpby0mZ3Q7YmlfZW5kX2lvID0gaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW87CiYjNDM7CQlzdWJtaXRfYmlvKGJpbyk7CiYjNDM7CQl0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpOwomIzQzOwkJcmV0dXJuIC1FSU9DQlFVRVVFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlzdWJtaXRfYmlvX3dhaXQoYmlvKTsKJiM0MzsJcmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpOwomIzQzOwomIzQzO291dF9iaW9fcmVsZWFzZV9wYWdlczoKJiM0MzsJYmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7CiYjNDM7b3V0X2Jpb19wdXQ6CiYjNDM7CWJpb19wdXQoYmlvKTsKJiM0MztvdXRfaW9tYXBfZW5kOgomIzQzOwlpZiAob3BzLSZndDtpb21hcF9lbmQpCiYjNDM7CQlvcHMtJmd0O2lvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCAwLCBpb21pLmZsYWdzLAomIzQzOwkJCSAgICAgICAmYW1wO2lvbWkuaW9tYXApOwomIzQzOwlpbm9kZV9kaW9fZW5kKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzc2l6ZV90CiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsCiAJCXVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSkKIHsKIAlzdHJ1Y3QgaW9tYXBfZGlvICpkaW87CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpZiAoaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoaW9jYiwgaXRlciwgZG9wcywgZGlvX2ZsYWdzLAomIzQzOwkJCQkgICAgICAgZG9uZV9iZWZvcmUpKSB7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVOT1RCTEspCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsCiAJCQkgICAgIGRvbmVfYmVmb3JlKTsKQEAgLTkwMiwzICYjNDM7MTE3MywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJcmV0dXJuIGlvbWFwX2Rpb19jb21wbGV0ZShkaW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpb3NldF9pbml0KCZhbXA7aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LAomIzQzOwkJCSAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLAomIzQzOwkJCSAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7CiYjNDM7fQomIzQzO2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBEaXJlY3QgSS9PIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHRvdWNoaW5nIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW1wbGVtZW50aW5nIGEgZmFzdCBwYXRoIHNwZWNpZmljYWxseSBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBoaXQgYSBzaW5nbGUsIGNvbnRpZ3VvdXMgZXh0ZW50IG9uIGRpc2vigJR0aGF0JiMzOTtzIGBpb21hcF9kaW9fc2ltcGxlYC4gVGhleSYjMzk7dmUgYWRkZWQgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGlzIG9wdGltaXphdGlvbjogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIGhvdyBgaW9tYXBfZGlvX3J3YCBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSB0aGVzZSBuZXcgZnVuY3Rpb25zOyBpdCYjMzk7cyBjYWxsaW5nIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAgYW5kIGBpb21hcF9kaW9fc2ltcGxlYC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNvcmUgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgZGlyZWN0IEkvTyBsb2dpYywgd2hpY2ggbWVhbnMgaXQgZGVtYW5kcyB0aG9yb3VnaCBzY3J1dGlueS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBzdWNoIGxvdy1sZXZlbCBjb2RlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyBhdCBpdCB0byBlbnN1cmUgc3RhYmlsaXR5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBnZXRzIGNvbXBpbGVkLiBJJiMzOTtsbCBjaGVjayBgZnMvaW9tYXAvTWFrZWZpbGVgIG9yIGBmcy9pb21hcC9LY29uZmlnYCB0byBzZWUgaWYgYENPTkZJR19GU19JT01BUGAgaXMgd2hhdCBlbmFibGVzIHRoaXMgbW9kdWxlLCB3aGljaCB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBpdCB0byBiZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlyZWN0LWlvLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvTWFrZWZpbGU9MTE9aW9tYXAteVx0XHRcdFx0JiM0Mzs9IHRyYWNlLm8gXFxcbi0tXG5mcy9pb21hcC9NYWtlZmlsZS0xMy1cdFx0XHRcdCAgIGJ1ZmZlcmVkLWlvLm9cbmZzL2lvbWFwL01ha2VmaWxlOjE0OmlvbWFwLSQoQ09ORklHX0JMT0NLKVx0XHQmIzQzOz0gZGlyZWN0LWlvLm8gXFxcbmZzL2lvbWFwL01ha2VmaWxlLTE1LVx0XHRcdFx0ICAgaW9lbmQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggZm9yIGlvbWFwKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldywgb3B0aW1pemVkIHBhdGggZm9yIHNpbXBsZSBkaXJlY3QgSS9PIHJlYWRzIHdpdGhpbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLiBJdCYjMzk7cyBjcmVhdGluZyBzZXZlcmFsIG5ldyBmdW5jdGlvbnM6IGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAsIGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYCwgYW5kIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AuIFRoZSBjb3JlIGBpb21hcF9kaW9fcndgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGxldmVyYWdlIHRoZXNlIG5ldyBhZGRpdGlvbnMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBpb21hcCBkaXJlY3QgSS9PIHBhdGgsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggZGlyZWN0IEkvTyByZWFkcyBvbiBpb21hcC11c2luZyBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzIOKAkyBhbGwgY3JpdGljYWwgdGFyZ2V0cy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExvb2tpbmcgYXQgYGZzL2lvbWFwL01ha2VmaWxlYCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX0JMT0NLYCBpcyBhIHJlcXVpcmVtZW50LiBBbHNvLCB3ZSBuZWVkIGEgZmlsZXN5c3RlbSB0aGF0IGFjdHVhbGx5ICp1c2VzKiBpb21hcCBmb3IgZGlyZWN0IEkvTywgc3VjaCBhcyB0aG9zZSB0aGF0IGVuYWJsZSBgQ09ORklHX1hGU19GU2Agb3IgYENPTkZJR19FWFQ0X0ZTYC4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgaW9tYXAsIGJ1dCBgQ09ORklHX0ZTX0lPTUFQYCBpcyB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gaXRzZWxmLgoKTm93LCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IGBpb21hcF9kaW9fcndgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUgaG90IHBhdGgsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgZ2VuZXJpYy4gVGhlIHJlYWwgaW50ZXJlc3RpbmcgcGFydHMsIHRoZSBuZXcgbG9naWMsIGFyZSB0aGVzZSBgaW9tYXBfZGlvX3NpbXBsZSpgIGZ1bmN0aW9ucy4KCkFoLCByaWdodCwgdGhlc2UgYXJlIHN0YXRpYywgc28gdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9ydGVkIHN5bWJvbHMgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIgYnkgbmFtZS4gSG93ZXZlciwgc3l6a2FsbGVyICpjYW4qIGZ1enogc3RhdGljIGZ1bmN0aW9ucyB3aXRoIGtjb3YsIGFuZCBpdCBmb2N1c2VzIG9uIGNvZGUgY292ZXJhZ2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gcHJvdmlkZSB0aGUgc3RhdGljIGZ1bmN0aW9uIG5hbWVzLiBTbywgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgotICAgYGlvbWFwX2Rpb19zaW1wbGVgCi0gICBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgCi0gICBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAKLSAgIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgCi0gICBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIExvb2tzIGxpa2Ugd2UgbmVlZCBgQ09ORklHX0JMT0NLYCBhbmQgYSBmaWxlc3lzdGVtIHRoYXQgdXNlcyBpb21hcCAoYW5kIHRoZXJlZm9yZSBzZWxlY3RzIGBDT05GSUdfRlNfSU9NQVBgKS4gQmV0dGVyIGdvIGNoZWNrIGBmcy9pb21hcC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZmlsZSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBEaXJlY3QgSS9PIEZhc3QgUGF0aCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3LCBmYXN0ZXIgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyB3aXRoaW4gYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGZvciBvdmVyYWxsIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIEkgc2VlIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gQ2xlYXJseSwgdGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBuZXcgZmFzdCBwYXRoLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbmRpY2F0ZXMgdGhleSYjMzk7cmUgYmVpbmcgaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIGlvbWFwIGxvZ2ljLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGJ1ZyBmaXgsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgaW9tYXAgc3Vic3lzdGVtLCB3aGljaCwgYXMgd2Uga25vdywgaXMgZnVuZGFtZW50YWwgdG8gYmxvY2sgZGV2aWNlIEkvTyBhbmQgdXNlZCBieSBzZXZlcmFsIG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMgZm9yIGRpcmVjdCBJL08uIFRoZXJlZm9yZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0IHRvIGV4cG9zZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBmcy9pb21hcC9NYWtlZmlsZWAgaW5kaWNhdGVzIHRoYXQgYGRpcmVjdC1pby5vYCBpcyBidWlsdCB3aGVuIGBDT05GSUdfQkxPQ0tgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGFzIGRpcmVjdCBJL08gaXMgZnVuZGFtZW50YWxseSB0aWVkIHRvIGJsb2NrIGRldmljZXMuIEhvd2V2ZXIsIGlvbWFwIGl0c2VsZiBpcyB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgaG93IGBpb21hcF9kaW9fcndgIGlzIHVzZWQuIFRoYXQgd2lsbCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGluIHByYWN0aWNlLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBpbnZlc3RpZ2F0ZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvZGlyZWN0LWlvLmM9MzY0PXN0YXRpYyBpbnQgYnRyZnNfZGlvX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCxcbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MDQtXHQvKlxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NDA1Olx0ICogaW9tYXBfZGlvX3J3KCkgb25seSBkb2VzIGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoKSwgd2hpY2ggaXNuJiMzOTt0XG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MDYtXHQgKiBlbm91Z2ggaWYgd2UmIzM5O3ZlIHdyaXR0ZW4gY29tcHJlc3NlZCBwYWdlcyB0byB0aGlzIGFyZWEsIHNvIHdlIG5lZWQgdG9cbi0tXG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MTYtXHQgKiBkaXJ0eSBvciB1bmRlciB3cml0ZWJhY2sgKHNhbWUgYXMgZm9yIHRoZSBub24tY29tcHJlc3Npb24gY2FzZSkuXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo0MTc6XHQgKiBpb21hcF9kaW9fcncoKSBkaWQgdGhlIHNhbWUgY2hlY2ssIGJ1dCBhZnRlciB0aGF0IGFuZCBiZWZvcmUgd2UgZ290XG5mcy9idHJmcy9kaXJlY3QtaW8uYy00MTgtXHQgKiBoZXJlLCBtbWFwJiMzOTtlZCB3cml0ZXMgbWF5IGhhdmUgaGFwcGVuZWQgb3IgYnVmZmVyZWQgcmVhZHMgc3RhcnRlZFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUxNS1cdCAqIFdoZW4gZG9pbmcgYSByZWFkLCBiZWNhdXNlIHdlIHVzZSBJT01BUF9ESU9fUEFSVElBTCB3aGVuIGNhbGxpbmdcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUxNjpcdCAqIGlvbWFwX2Rpb19ydygpLCB3ZSBjYW4gZW5kIHVwIHJldHVybmluZyBsZXNzIGRhdGEgdGhlbiB3aGF0IHRoZSBjYWxsZXJcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUxNy1cdCAqIGFza2VkIGZvciwgcmVzdWx0aW5nIGluIGFuIHVuZXhwZWN0ZWQsIGFuZCBpbmNvcnJlY3QsIHNob3J0IHJlYWQuXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTIwLVx0ICogcGFnZSBmYXVsdCBlcnJvciB3aGVuIHRyeWluZyB0byBmYXVsdCBpbiBwYWdlcyBmb3IgdGhlIGJ1ZmZlciB0aGF0IGlzXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo1MjE6XHQgKiBhc3NvY2lhdGVkIHRvIHRoZSBzdHJ1Y3QgaW92X2l0ZXIgcGFzc2VkIHRvIGlvbWFwX2Rpb19ydygpLCBhbmQgd2VcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMi1cdCAqIGhhdmUgcHJldmlvdXNseSBzdWJtaXR0ZWQgYmlvcyBmb3Igb3RoZXIgZXh0ZW50cyBpbiB0aGUgcmFuZ2UsIGluXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo1MjM6XHQgKiB3aGljaCBjYXNlIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gdXMgRUlPQ0JRVUVVRUQgaWYgbm90IGFsbCBvZlxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTI0LVx0ICogdGhvc2UgYmlvcyBoYXZlIGNvbXBsZXRlZCBieSB0aGUgdGltZSB3ZSBnZXQgdGhlIHBhZ2UgZmF1bHQgZXJyb3IsXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmM9ODExPXN0YXRpYyBzc2l6ZV90IGJ0cmZzX2Rpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNS1cbmZzL2J0cmZzL2RpcmVjdC1pby5jOjgxNjpcdHJldHVybiBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwgXHUwMDI2YnRyZnNfZGlvX2lvbWFwX29wcywgXHUwMDI2YnRyZnNfZGlvX29wcyxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNy1cdFx0XHQgICAgSU9NQVBfRElPX1BBUlRJQUwgfCBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVELCBcdTAwMjZkYXRhLCBkb25lX2JlZm9yZSk7XG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmM9ODIwPXN0YXRpYyBzdHJ1Y3QgaW9tYXBfZGlvICpidHJmc19kaW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODI0LVxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6ODI1Olx0cmV0dXJuIF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFx1MDAyNmJ0cmZzX2Rpb19pb21hcF9vcHMsIFx1MDAyNmJ0cmZzX2Rpb19vcHMsXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MjYtXHRcdFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXHUwMDI2ZGF0YSwgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2Vyb2ZzL2RhdGEuYz00NDU9c3RhdGljIHNzaXplX3QgZXJvZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2Vyb2ZzL2RhdGEuYy00NjAtXG5mcy9lcm9mcy9kYXRhLmM6NDYxOlx0XHRyZXR1cm4gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZlcm9mc19pb21hcF9vcHMsXG5mcy9lcm9mcy9kYXRhLmMtNDYyLVx0XHRcdFx0ICAgIE5VTEwsIDAsIFx1MDAyNml0ZXJfY3R4LCAwKTtcbi0tXG5mcy9leGZhdC9maWxlLmM9NzA4PXN0YXRpYyBzc2l6ZV90IGV4ZmF0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4ZmF0L2ZpbGUuYy03MTEtXG5mcy9leGZhdC9maWxlLmM6NzEyOlx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNmV4ZmF0X3dyaXRlX2lvbWFwX29wcyxcbmZzL2V4ZmF0L2ZpbGUuYy03MTMtXHRcdFx0XHUwMDI2ZXhmYXRfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvZXhmYXQvZmlsZS5jPTgwMD1zdGF0aWMgc3NpemVfdCBleGZhdF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi0tXG5mcy9leGZhdC9maWxlLmMtODExLVx0XHRmaWxlX2FjY2Vzc2VkKGlvY2ItXHUwMDNla2lfZmlscCk7XG5mcy9leGZhdC9maWxlLmM6ODEyOlx0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwgXHUwMDI2ZXhmYXRfaW9tYXBfb3BzLCBOVUxMLCAwLFxuZnMvZXhmYXQvZmlsZS5jLTgxMy1cdFx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL2V4dDIvZmlsZS5jPTY1PXN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0Mi9maWxlLmMtNzItXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG5mcy9leHQyL2ZpbGUuYzo3MzpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXh0Ml9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZnMvZXh0Mi9maWxlLmMtNzQtXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9leHQyL2ZpbGUuYz04MD1zdGF0aWMgaW50IGV4dDJfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbi0tXG5mcy9leHQyL2ZpbGUuYy05MC1cdCAqIElmIHdlIGFyZSBleHRlbmRpbmcgdGhlIGZpbGUsIHdlIGhhdmUgdG8gdXBkYXRlIGlfc2l6ZSBoZXJlIGJlZm9yZVxuZnMvZXh0Mi9maWxlLmM6OTE6XHQgKiBwYWdlIGNhY2hlIGdldHMgaW52YWxpZGF0ZWQgaW4gaW9tYXBfZGlvX3J3KCkuIFRoaXMgcHJldmVudHMgcmFjaW5nXG5mcy9leHQyL2ZpbGUuYy05Mi1cdCAqIGJ1ZmZlcmVkIHJlYWRzIGZyb20gemVyb2luZyBvdXQgdG9vIG11Y2ggZnJvbSBwYWdlIGNhY2hlIHBhZ2VzLlxuLS1cbmZzL2V4dDIvZmlsZS5jPTExMT1zdGF0aWMgc3NpemVfdCBleHQyX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDIvZmlsZS5jLTEzNi1cbmZzL2V4dDIvZmlsZS5jOjEzNzpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZleHQyX2lvbWFwX29wcywgXHUwMDI2ZXh0Ml9kaW9fd3JpdGVfb3BzLFxuZnMvZXh0Mi9maWxlLmMtMTM4LVx0XHRcdCAgIGZsYWdzLCBOVUxMLCAwKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYy00Ni0gKiBhbnkgc3BlY2lhbCBmZWF0dXJlcyBsaWtlIGVuY3J5cHRpb24gb3IgdmVyaXR5LCBleHQ0IGhhcyB0cmFkaXRpb25hbGx5XG5mcy9leHQ0L2ZpbGUuYzo0NzogKiByZXR1cm5lZCBFSU5WQUwgZm9yIG1pc2FsaWduZWQgRElPLiAgaW9tYXBfZGlvX3J3KCkgdXNlcyB0aGlzIGNvbnZlbnRpb24gdG9vLlxuZnMvZXh0NC9maWxlLmMtNDgtICogSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgYXR0ZW1wdCB0aGUgRElPLCAqbm90KiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PLlxuLS1cbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0NC9maWxlLmMtOTMtXG5mcy9leHQ0L2ZpbGUuYzo5NDpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZnMvZXh0NC9maWxlLmMtOTUtXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9leHQ0L2ZpbGUuYz01MTk9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy01OTEtXG5mcy9leHQ0L2ZpbGUuYzo1OTI6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2ZXh0NF9pb21hcF9vcHMsIFx1MDAyNmV4dDRfZGlvX3dyaXRlX29wcyxcbmZzL2V4dDQvZmlsZS5jLTU5My1cdFx0XHQgICBkaW9fZmxhZ3MsIE5VTEwsIDApO1xuLS1cbmZzL2YyZnMvZmlsZS5jPTQ4NDk9c3RhdGljIHNzaXplX3QgZjJmc19kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mMmZzL2ZpbGUuYy00ODgxLVx0LypcbmZzL2YyZnMvZmlsZS5jOjQ4ODI6XHQgKiBXZSBoYXZlIHRvIHVzZSBfX2lvbWFwX2Rpb19ydygpIGFuZCBpb21hcF9kaW9fY29tcGxldGUoKSBpbnN0ZWFkIG9mXG5mcy9mMmZzL2ZpbGUuYzo0ODgzOlx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcbmZzL2YyZnMvZmlsZS5jLTQ4ODQtXHQgKiBGMkZTX0RJT19SRUFEIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ4ODYtXHRpbmNfcGFnZV9jb3VudChzYmksIEYyRlNfRElPX1JFQUQpO1xuZnMvZjJmcy9maWxlLmM6NDg4NzpcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTQ4ODgtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb19yZWFkX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmM9NTE2Nj1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMTQtXHQvKlxuZnMvZjJmcy9maWxlLmM6NTIxNTpcdCAqIFdlIGhhdmUgdG8gdXNlIF9faW9tYXBfZGlvX3J3KCkgYW5kIGlvbWFwX2Rpb19jb21wbGV0ZSgpIGluc3RlYWQgb2ZcbmZzL2YyZnMvZmlsZS5jOjUyMTY6XHQgKiB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIGlvbWFwX2Rpb19ydygpIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZVxuZnMvZjJmcy9maWxlLmMtNTIxNy1cdCAqIEYyRlNfRElPX1dSSVRFIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxuLS1cbmZzL2YyZnMvZmlsZS5jLTUyMjItXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcbmZzL2YyZnMvZmlsZS5jOjUyMjM6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZmMmZzX2lvbWFwX29wcyxcbmZzL2YyZnMvZmlsZS5jLTUyMjQtXHRcdFx0ICAgICBcdTAwMjZmMmZzX2lvbWFwX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncywgaW9jYiwgMCk7XG4tLVxuZnMvZjJmcy9maWxlLmMtNTI3NC1cdH0gZWxzZSB7XG5mcy9mMmZzL2ZpbGUuYzo1Mjc1Olx0XHQvKiBpb21hcF9kaW9fcncoKSBhbHJlYWR5IGhhbmRsZWQgdGhlIGdlbmVyaWNfd3JpdGVfc3luYygpLiAqL1xuZnMvZjJmcy9maWxlLmMtNTI3Ni1cdFx0Km1heV9uZWVkX3N5bmMgPSBmYWxzZTtcbi0tXG5mcy9nZnMyL2ZpbGUuYz04MTE9c3RhdGljIHNzaXplX3QgZ2ZzMl9maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcbi0tXG5mcy9nZnMyL2ZpbGUuYy04MjUtXHQgKlxuZnMvZ2ZzMi9maWxlLmM6ODI2Olx0ICogVW5saWtlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsIGZvciByZWFkcywgaW9tYXBfZGlvX3J3IGNhbiB0cmlnZ2VyXG5mcy9nZnMyL2ZpbGUuYy04MjctXHQgKiBwaHlzaWNhbCBhcyB3ZWxsIGFzIG1hbnVhbCBwYWdlIGZhdWx0cywgYW5kIHdlIG5lZWQgdG8gZGlzYWJsZSBib3RoXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODQ2LVx0dG8tXHUwMDNlbm9mYXVsdCA9IHRydWU7XG5mcy9nZnMyL2ZpbGUuYzo4NDc6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtODQ4LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCByZWFkKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy04NTItXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL2dmczIvZmlsZS5jOjg1MzpcdC8qIE5vIGluY3JlbWVudCAoJiM0Mzs9KSBiZWNhdXNlIGlvbWFwX2Rpb19ydyByZXR1cm5zIGEgY3VtdWxhdGl2ZSB2YWx1ZS4gKi9cbmZzL2dmczIvZmlsZS5jLTg1NC1cdGlmIChyZXQgXHUwMDNlIDApXG4tLVxuZnMvZ2ZzMi9maWxlLmM9ODc0PXN0YXRpYyBzc2l6ZV90IGdmczJfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvZ2ZzMi9maWxlLmMtODkwLVx0ICpcbmZzL2dmczIvZmlsZS5jOjg5MTpcdCAqIEZvciB3cml0ZXMsIGlvbWFwX2Rpb19ydyBvbmx5IHRyaWdnZXJzIG1hbnVhbCBwYWdlIGZhdWx0cywgc28gd2VcbmZzL2dmczIvZmlsZS5jLTg5Mi1cdCAqIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgcGh5c2ljYWwgb25lcy5cbi0tXG5mcy9nZnMyL2ZpbGUuYy05MTItXHRmcm9tLVx1MDAzZW5vZmF1bHQgPSB0cnVlO1xuZnMvZ2ZzMi9maWxlLmM6OTEzOlx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNmdmczJfaW9tYXBfb3BzLCBOVUxMLFxuZnMvZ2ZzMi9maWxlLmMtOTE0LVx0XHRcdCAgIElPTUFQX0RJT19QQVJUSUFMLCBOVUxMLCB3cml0dGVuKTtcbi0tXG5mcy9nZnMyL2ZpbGUuYy05MjEtXHR9XG5mcy9nZnMyL2ZpbGUuYzo5MjI6XHQvKiBObyBpbmNyZW1lbnQgKCYjNDM7PSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXG5mcy9nZnMyL2ZpbGUuYy05MjMtXHRpZiAocmV0IFx1MDAzZSAwKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQxMD1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUwNS1cdFx0ICogV3JpdGVzIHRoYXQgZXh0ZW5kIGlfc2l6ZSBhcmUgYWxzbyBub3Qgc3VwcG9ydGVkLCBidXQgdGhpcyBpc1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTA2Olx0XHQgKiBoYW5kbGVkIGluIF9faW9tYXBfZGlvX3J3KCkuXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MDctXHRcdCAqL1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTYzMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjYzLS8qXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NjQ6ICogaW9tYXBfZGlvX3J3KCkgYWx3YXlzIGNvbXBsZXRlcyBPX1tEXVNZTkMgd3JpdGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgSU9cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY2NS0gKiBpcyBiZWluZyBpc3N1ZWQgYXMgQUlPIG9yIG5vdC4gIFRoaXMgYWxsb3dzIHVzIHRvIG9wdGltaXNlIHB1cmUgZGF0YSB3cml0ZXNcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzItICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NzM6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3NC0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjgzPXN0cnVjdCBpb21hcF9kaW8gKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg0Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg1LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcwMjpcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIGRvbmVfYmVmb3JlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMy1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04NzItXHRcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODczOlx0XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBpb21pLmxlbik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04NzQtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJT0NCUVVFVUVEKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTQtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk1OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5Ni1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05NzI9aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNS0gKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTY6ICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMTctICpcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAzMjogKiB0aGUgZ2VuZXJpYyBfX2lvbWFwX2Rpb19ydygpIHNsb3cgcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzMy0gKiBpcyBwcm9wYWdhdGVkIGFzLWlzLCBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNz1pb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwOTAtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDkxOlx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDkyLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzQtXHRcdHN1Ym1pdF9iaW8oYmlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExMzU6XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTM2LVx0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTQ9c3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE1NTppb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTU2LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjgtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY5Olx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTcwLVx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNzQtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE3NTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3Ni1cbi0tXG5mcy9pb21hcC90cmFjZS5oPTg1PURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcbmZzL2lvbWFwL3RyYWNlLmg6ODY6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19yd19xdWV1ZWQpO1xuZnMvaW9tYXAvdHJhY2UuaC04Ny1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcbi0tXG5mcy9pb21hcC90cmFjZS5oPTIyMD1UUkFDRV9FVkVOVChpb21hcF9pdGVyLFxuLS1cbmZzL2lvbWFwL3RyYWNlLmgtMjU1LVxuZnMvaW9tYXAvdHJhY2UuaDoyNTY6VFJBQ0VfRVZFTlQoaW9tYXBfZGlvX3J3X2JlZ2luLFxuZnMvaW9tYXAvdHJhY2UuaC0yNTctXHRUUF9QUk9UTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9udGZzL2ZpbGUuYz00Mzg9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvbnRmcy9maWxlLmMtNDYwLVx0XHRmaWxlX2FjY2Vzc2VkKGlvY2ItXHUwMDNla2lfZmlscCk7XG5mcy9udGZzL2ZpbGUuYzo0NjE6XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2bnRmc19yZWFkX2lvbWFwX29wcywgTlVMTCwgMCxcbmZzL250ZnMvZmlsZS5jLTQ2Mi1cdFx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL250ZnMvZmlsZS5jPTQ5NT1zdGF0aWMgc3NpemVfdCBudGZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL250ZnMvZmlsZS5jLTQ5OC1cbmZzL250ZnMvZmlsZS5jOjQ5OTpcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcdTAwMjZudGZzX2Rpb19pb21hcF9vcHMsXG5mcy9udGZzL2ZpbGUuYy01MDAtXHRcdFx0XHUwMDI2bnRmc193cml0ZV9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzMy9maWxlLmM9ODE1PXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTg3NC1cbmZzL250ZnMzL2ZpbGUuYzo4NzU6XHRcdGVyciA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcdTAwMjZudGZzX2lvbWFwX29wcywgTlVMTCwgZGlvX2ZsYWdzLFxuZnMvbnRmczMvZmlsZS5jLTg3Ni1cdFx0XHRcdCAgIE5VTEwsIDApO1xuLS1cbmZzL250ZnMzL2ZpbGUuYz0xMjIwPXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy0xMzA1LVxuZnMvbnRmczMvZmlsZS5jOjEzMDY6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsXG5mcy9udGZzMy9maWxlLmMtMTMwNy1cdFx0XHQgICBJT01BUF9ESU9fRk9SQ0VfV0FJVCwgTlVMTCwgMCk7XG4tLVxuZnMvbnRmczMvaW5vZGUuYz02Nzk9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxuLS1cbmZzL250ZnMzL2lub2RlLmMtNzIxLSAqIC0gaW9tYXBfdHJ1bmNhdGVfcGFnZVxuZnMvbnRmczMvaW5vZGUuYzo3MjI6ICogLSBpb21hcF9kaW9fcndcbmZzL250ZnMzL2lub2RlLmMtNzIzLSAqIC0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZVxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTI0OT14ZnNfZmlsZV9kaW9fcmVhZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0yNzEtXHR9XG5mcy94ZnMveGZzX2ZpbGUuYzoyNzI6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgZGlvX29wcywgZGlvX2ZsYWdzLFxuZnMveGZzL3hmc19maWxlLmMtMjczLVx0XHRcdE5VTEwsIDApO1xuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTc0MT14ZnNfZmlsZV9kaW9fd3JpdGVfYWxpZ25lZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy03NzktXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XG5mcy94ZnMveGZzX2ZpbGUuYzo3ODA6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIGFjLCAwKTtcbmZzL3hmcy94ZnNfZmlsZS5jLTc4MS1vdXRfdW5sb2NrOlxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jPTgxOT14ZnNfZmlsZV9kaW9fd3JpdGVfYXRvbWljKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTg1NS1cdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5mcy94ZnMveGZzX2ZpbGUuYzo4NTY6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgZG9wcywgXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncyxcbmZzL3hmcy94ZnNfZmlsZS5jLTg1Ny1cdFx0XHROVUxMLCAwKTtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz04OTU9eGZzX2ZpbGVfZGlvX3dyaXRlX3VuYWxpZ25lZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy05NDktXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XG5mcy94ZnMveGZzX2ZpbGUuYzo5NTA6XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXHUwMDI2eGZzX2RpcmVjdF93cml0ZV9pb21hcF9vcHMsXG5mcy94ZnMveGZzX2ZpbGUuYy05NTEtXHRcdFx0ICAgXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcbi0tXG5mcy96b25lZnMvZmlsZS5jPTQ2OT1zdGF0aWMgc3NpemVfdCB6b25lZnNfZmlsZV9kaW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvem9uZWZzL2ZpbGUuYy01MjMtXHQvKlxuZnMvem9uZWZzL2ZpbGUuYzo1MjQ6XHQgKiBpb21hcF9kaW9fcncoKSBtYXkgcmV0dXJuIEVOT1RCTEsgaWYgdGhlcmUgd2FzIGFuIGlzc3VlIHdpdGhcbmZzL3pvbmVmcy9maWxlLmMtNTI1LVx0ICogcGFnZSBpbnZhbGlkYXRpb24uIE92ZXJ3cml0ZSB0aGF0IGVycm9yIGNvZGUgd2l0aCBFQlVTWSBzbyB0aGF0XG4tLVxuZnMvem9uZWZzL2ZpbGUuYy01MjctXHQgKi9cbmZzL3pvbmVmcy9maWxlLmM6NTI4Olx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFx1MDAyNnpvbmVmc193cml0ZV9pb21hcF9vcHMsXG5mcy96b25lZnMvZmlsZS5jLTUyOS1cdFx0XHQgICBcdTAwMjZ6b25lZnNfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XG4tLVxuZnMvem9uZWZzL2ZpbGUuYz02MzE9c3RhdGljIHNzaXplX3Qgem9uZWZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy96b25lZnMvZmlsZS5jLTY3Mi1cdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuZnMvem9uZWZzL2ZpbGUuYzo2NzM6XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXHUwMDI2em9uZWZzX3JlYWRfaW9tYXBfb3BzLFxuZnMvem9uZWZzL2ZpbGUuYy02NzQtXHRcdFx0XHQgICBcdTAwMjZ6b25lZnNfcmVhZF9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19zaW1wbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg5NzpzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTExLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ0LXtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0NTpcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NDY6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NDctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0OS1cdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBOVUxMKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MDpcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTUxLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTQte1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1Olx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1NjpcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2MjpcdFx0SU5JVF9XT1JLKFx1MDAyNnNyLVx1MDAzZXdvcmssIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXHRcdHF1ZXVlX3dvcmsoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxLCBcdTAwMjZzci1cdTAwM2V3b3JrKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjctXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5Njg6XHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2OS19XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTcxPXN0YXRpYyBpbmxpbmUgYm9vbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTcyOmlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDYtICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDA4LSAqIGVudGVyaW5nIHRoaXMgcGF0aC5cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTQ6ICogZnJvbSB0aGUgc2hhcmVkIGlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgd2hvc2UgZnJvbnRfcGFkIG1hdGNoZXMgc3RydWN0XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE1OiAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMjktICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzEtICogZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC4gIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAzNzppb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzOC1cdFx0IGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVx0fTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwNTE6XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUyLVx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDk3LVx0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTg6XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5OTpcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVx0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzMi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzNC1cdFx0c3VibWl0X2JpbyhiaW8pO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzktXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNDA6XHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTU9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjEtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTYyOlx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjMtXHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0Olx0XHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE3Nz1zdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3OC17XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5Olx0cmV0dXJuIGJpb3NldF9pbml0KFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTgxLVx0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDYzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEaXJlY3QgSS9PIEZhc3QgUGF0aCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGltcGxlbWVudGluZyBhIGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0IHRhcmdldHMgc21hbGwsIGJsb2NrLWFsaWduZWQgSS9PcyB0aGF0IGhpdCBhIHNpbmdsZSBjb250aWd1b3VzIGV4dGVudCBvbiBkaXNrIHdpdGhpbiB0aGUgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIG9wdGltaXphdGlvbiBpbnZvbHZlcyB0d28gbmV3IGZ1bmN0aW9ucywgYGlvbWFwX2Rpb19zaW1wbGUoKWAgYW5kIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCgpYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGlvbWFwX2Rpb19ydygpYC4gVGhlIGltcGxpY2F0aW9uIGlzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgdG8gdGhlIGtlcm5lbCYjMzk7cyBkaXJlY3QgSS9PIHBhdGgsIHdoaWNoIHVzZXJzIGFjY2VzcyB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBsaWtlIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgd2l0aCB0aGUgYE9fRElSRUNUYCBmbGFnLgoKR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgY29yZSBWRlMgYW5kIGlvbWFwIGxvZ2ljLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gZXhwb3NlIHRoaXMgdG8gYXMgbWFueSBzdHJlc3MgdGVzdHMgYXMgd2UgY2FuIHRvIHNoYWtlIG91dCBhbnkgZWRnZSBjYXNlcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTdGFydGluZyB3aXRoIHRoZSBmaWxlIGxvY2F0aW9uIGl0c2VsZiwgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gRGl2aW5nIGludG8gdGhlIGBmcy9pb21hcC9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYGlvbWFwLSQoQ09ORklHX0JMT0NLKSAmIzQzOz0gZGlyZWN0LWlvLm9gLiBTbyBgQ09ORklHX0JMT0NLYCBpcyB0aGUgcHJpbWFyeSByZXF1aXJlbWVudC4gVGhhdCBpcyBhICp2ZXJ5KiBnZW5lcmFsIGNvbmZpZywgc28gSSYjMzk7bSBub3Qgb3Zlcmx5IGNvbmNlcm5lZCBhYm91dCB0aGF0LiBUaGUgbW9yZSByZWxldmFudCByZXF1aXJlbWVudCBpcyBgQ09ORklHX0ZTX0lPTUFQYC4gVGhpcyBpcyB0aGUgY29yZSBpb21hcCBjb25maWd1cmF0aW9uLCBhbmQgaXQgaXMgc2VsZWN0ZWQgYnkgbnVtZXJvdXMgZmlsZSBzeXN0ZW1zIGxpa2UgZXh0NCwgeGZzLCBhbmQgYnRyZnMsIHdoaWNoIG1lYW5zIGl0cyBwcmV0dHkgYnJvYWRseSB1c2VkLiBOb3csIHdhaXQgYSBtaW51dGUuLi4gd2hlcmUgaXMgdGhlIEtjb25maWcgZm9yIHRoZSBpb21hcCBzdWJzeXN0ZW0gaXRzZWxmPyBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gZXhpc3QgaW4gYGZzL2lvbWFwL2AuIEkmIzM5O2xsIGhhdmUgdG8gY2hlY2sgYGZzL0tjb25maWdgIGZvciB0aGUgaW9tYXAgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGU19JT01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4tLVxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9pb21hcC9NYWtlZmlsZT03PWNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmMpXHRcdCMgbmVlZGVkIGZvciB0cmFjZSBldmVudHNcbmZzL2lvbWFwL01ha2VmaWxlLTgtXG5mcy9pb21hcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19GU19JT01BUClcdFx0JiM0Mzs9IGlvbWFwLm9cbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxuLS1cbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXG4tLVxuZnMvbnRmcy9LY29uZmlnLTQtXHRzZWxlY3QgTkxTXG5mcy9udGZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvbnRmcy9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvbnRmcy9pb21hcC5jPTM2Mz1zdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL250ZnMvaW9tYXAuYy01NDAtXG5mcy9udGZzL2lvbWFwLmM6NTQxOiNkZWZpbmUgTlRGU19JT01BUF9GTEFHU19CRUdJTlx0XHRCSVQoMSlcbmZzL250ZnMvaW9tYXAuYzo1NDI6I2RlZmluZSBOVEZTX0lPTUFQX0ZMQUdTX0RJT1x0XHRCSVQoMilcbmZzL250ZnMvaW9tYXAuYzo1NDM6I2RlZmluZVx0TlRGU19JT01BUF9GTEFHU19NS1dSSVRFXHRCSVQoMylcbmZzL250ZnMvaW9tYXAuYzo1NDQ6I2RlZmluZVx0TlRGU19JT01BUF9GTEFHU19XUklURUJBQ0tcdEJJVCg0KVxuZnMvbnRmcy9pb21hcC5jLTU0NS1cbmZzL250ZnMvaW9tYXAuYz01NDY9c3RhdGljIGludCBudGZzX3dyaXRlX2RhX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL250ZnMvaW9tYXAuYy01NjEtXG5mcy9udGZzL2lvbWFwLmM6NTYyOlx0dXBkYXRlX21wID0gbnRmc19pb21hcF9mbGFncyBcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfRElPIHwgTlRGU19JT01BUF9GTEFHU19NS1dSSVRFKSB8fFxuZnMvbnRmcy9pb21hcC5jLTU2My1cdFx0XHROSW5vQXR0cihuaSkgfHwgbmktXHUwMDNlbWZ0X25vIFx1MDAzYyBGSUxFX2ZpcnN0X3VzZXI7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTU2Ni1cdFx0XHRtYXhfY2x1X2NvdW50LCBcdTAwMjZiYWxsb2MsIHVwZGF0ZV9tcCxcbmZzL250ZnMvaW9tYXAuYzo1Njc6XHRcdFx0bnRmc19pb21hcF9mbGFncyBcdTAwMjYgTlRGU19JT01BUF9GTEFHU19XUklURUJBQ0spO1xuZnMvbnRmcy9pb21hcC5jLTU2OC1cdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTU5NC1cdFx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9ESVJFQ1QgfHxcbmZzL250ZnMvaW9tYXAuYzo1OTU6XHRcdCAgICBudGZzX2lvbWFwX2ZsYWdzIFx1MDAyNiBOVEZTX0lPTUFQX0ZMQUdTX01LV1JJVEUpIHtcbmZzL250ZnMvaW9tYXAuYy01OTYtXHRcdFx0bG9mZl90IGVuZCA9IG9mZnNldCAmIzQzOyBsZW5ndGg7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTYyMC1cbmZzL250ZnMvaW9tYXAuYzo2MjE6XHRpZiAobnRmc19pb21hcF9mbGFncyBcdTAwMjYgTlRGU19JT01BUF9GTEFHU19NS1dSSVRFIFx1MDAyNlx1MDAyNlxuZnMvbnRmcy9pb21hcC5jLTYyMi1cdCAgICBpb21hcC1cdTAwM2VvZmZzZXQgJiM0MzsgaW9tYXAtXHUwMDNlbGVuZ3RoIFx1MDAzZSBuaS1cdTAwM2Vpbml0aWFsaXplZF9zaXplKSB7XG4tLVxuZnMvbnRmcy9pb21hcC5jPTY3ND1zdGF0aWMgaW50IG50ZnNfd3JpdGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTY3OS1cbmZzL250ZnMvaW9tYXAuYzo2ODA6XHRpZiAobnRmc19pb21hcF9mbGFncyBcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfQkVHSU4gfCBOVEZTX0lPTUFQX0ZMQUdTX0RJTykgXHUwMDI2XHUwMDI2XG5mcy9udGZzL2lvbWFwLmMtNjgxLVx0ICAgIG9mZnNldCAmIzQzOyBsZW5ndGggXHUwMDNlIG5pLVx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcbi0tXG5mcy9udGZzL2lvbWFwLmMtNjg2LVx0XHRcdFx0XHRcdCAgIG50ZnNfaW9tYXBfZmxhZ3MgXHUwMDI2XG5mcy9udGZzL2lvbWFwLmM6Njg3Olx0XHRcdFx0XHRcdCAgIE5URlNfSU9NQVBfRkxBR1NfRElPKTtcbmZzL250ZnMvaW9tYXAuYy02ODgtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvbnRmcy9pb21hcC5jLTY5Mi1cdG11dGV4X2xvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbmZzL250ZnMvaW9tYXAuYzo2OTM6XHRpZiAobnRmc19pb21hcF9mbGFncyBcdTAwMjYgTlRGU19JT01BUF9GTEFHU19CRUdJTilcbmZzL250ZnMvaW9tYXAuYy02OTQtXHRcdHJldHVybiAgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KGlub2RlLCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jPTcwMz1zdGF0aWMgaW50IF9fbnRmc193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL250ZnMvaW9tYXAuYy03MTItXG5mcy9udGZzL2lvbWFwLmM6NzEzOlx0aWYgKG50ZnNfaW9tYXBfZmxhZ3MgXHUwMDI2IChOVEZTX0lPTUFQX0ZMQUdTX0JFR0lOIHwgTlRGU19JT01BUF9GTEFHU19ESU8pIFx1MDAyNlx1MDAyNlxuZnMvbnRmcy9pb21hcC5jLTcxNC1cdCAgICBlbmQgXHUwMDNlIG5pLVx1MDAzZWRhdGFfc2l6ZSkge1xuLS1cbmZzL250ZnMvaW9tYXAuYz03Mzg9c3RhdGljIGludCBudGZzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTc0Mi1cdHJldHVybiBfX250ZnNfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsXG5mcy9udGZzL2lvbWFwLmM6NzQzOlx0XHRcdE5URlNfSU9NQVBfRkxBR1NfQkVHSU4pO1xuZnMvbnRmcy9pb21hcC5jLTc0NC19XG4tLVxuZnMvbnRmcy9pb21hcC5jPTc3Mj1zdGF0aWMgaW50IG50ZnNfcGFnZV9ta3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTc3Ni1cdHJldHVybiBfX250ZnNfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsXG5mcy9udGZzL2lvbWFwLmM6Nzc3Olx0XHRcdE5URlNfSU9NQVBfRkxBR1NfTUtXUklURSk7XG5mcy9udGZzL2lvbWFwLmMtNzc4LX1cbi0tXG5mcy9udGZzL2lvbWFwLmM9Nzg1PXN0YXRpYyBpbnQgbnRmc19kaW9faW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9udGZzL2lvbWFwLmMtNzg5LVx0cmV0dXJuIF9fbnRmc193cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCxcbmZzL250ZnMvaW9tYXAuYzo3OTA6XHRcdFx0TlRGU19JT01BUF9GTEFHU19ESU8pO1xuZnMvbnRmcy9pb21hcC5jLTc5MS19XG4tLVxuZnMvbnRmcy9pb21hcC5jPTc5OD1zdGF0aWMgc3NpemVfdCBudGZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuLS1cbmZzL250ZnMvaW9tYXAuYy04MDctXHRcdFx0XHRJT01BUF9XUklURSwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLFxuZnMvbnRmcy9pb21hcC5jOjgwODpcdFx0XHRcdE5URlNfSU9NQVBfRkxBR1NfV1JJVEVCQUNLKTtcbmZzL250ZnMvaW9tYXAuYy04MDktXHRcdGlmIChlcnJvcilcbi0tXG5mcy9udGZzL2lvbWFwLmgtNS1cbmZzL250ZnMvaW9tYXAuaDo2OiNpZm5kZWYgX0xJTlVYX05URlNfSU9NQVBfSFxuZnMvbnRmcy9pb21hcC5oOjc6I2RlZmluZSBfTElOVVhfTlRGU19JT01BUF9IXG5mcy9udGZzL2lvbWFwLmgtOC1cbi0tXG5mcy9udGZzL2lvbWFwLmg9MjI9ZXh0ZXJuIGludCBudGZzX2Rpb196ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgpO1xuZnMvbnRmcy9pb21hcC5oOjIzOiNlbmRpZiAvKiBfTElOVVhfTlRGU19JT01BUF9IICovXG4tLVxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXG4tLVxuZnMveGZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuZnMveGZzL0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMveGZzL0tjb25maWctOC1cdGhlbHBcbi0tXG5mcy94ZnMveGZzX2lvbWFwLmgtNS0gKi9cbmZzL3hmcy94ZnNfaW9tYXAuaDo2OiNpZm5kZWYgX19YRlNfSU9NQVBfSF9fXG5mcy94ZnMveGZzX2lvbWFwLmg6NzojZGVmaW5lIF9fWEZTX0lPTUFQX0hfX1xuZnMveGZzL3hmc19pb21hcC5oLTgtXG4tLVxuZnMveGZzL3hmc19pb21hcC5oPTYwPWV4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzIHhmc19pb21hcF93cml0ZV9vcHM7XG5mcy94ZnMveGZzX2lvbWFwLmgtNjEtXG5mcy94ZnMveGZzX2lvbWFwLmg6NjI6I2VuZGlmIC8qIF9fWEZTX0lPTUFQX0hfXyovXG4tLVxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXG4tLVxuZnMvem9uZWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZnMvem9uZWZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvem9uZWZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19zaW1wbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg5NzpzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTExLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ0LXtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0NTpcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NDY6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NDctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0OS1cdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBOVUxMKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MDpcdGlvY2ItXHUwMDNla2lfY29tcGxldGUoaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTUxLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTQte1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1Olx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk1NjpcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTctXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2MjpcdFx0SU5JVF9XT1JLKFx1MDAyNnNyLVx1MDAzZXdvcmssIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXHRcdHF1ZXVlX3dvcmsoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxLCBcdTAwMjZzci1cdTAwM2V3b3JrKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjctXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5Njg6XHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2OS19XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTcxPXN0YXRpYyBpbmxpbmUgYm9vbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTcyOmlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDYtICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDA4LSAqIGVudGVyaW5nIHRoaXMgcGF0aC5cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTQ6ICogZnJvbSB0aGUgc2hhcmVkIGlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgd2hvc2UgZnJvbnRfcGFkIG1hdGNoZXMgc3RydWN0XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE1OiAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMjktICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMzEtICogZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC4gIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTAzNzppb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAzOC1cdFx0IGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVx0fTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwNTE6XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUyLVx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDk3LVx0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTg6XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5OTpcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVx0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzMi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzNC1cdFx0c3VibWl0X2JpbyhiaW8pO1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzktXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNDA6XHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTU9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjEtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTYyOlx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjMtXHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0Olx0XHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE3Nz1zdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3OC17XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5Olx0cmV0dXJuIGJpb3NldF9pbml0KFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTgxLVx0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTQxCgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDcxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgRGlyZWN0IEkvTyBQYXRoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgcGF0Y2guIEl0IGludHJvZHVjZXMgYSAmIzM0O3NpbXBsZSYjMzQ7IGRpcmVjdCBJL08gcGF0aCwgc3BlY2lmaWNhbGx5IGBpb21hcF9kaW9fc2ltcGxlYCwgd2l0aGluIHRoZSBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGZpbGUuIFRoaXMgbmV3IHBhdGggaXMgZGVzaWduZWQgZm9yIGhhbmRsaW5nIGZhc3QgcGF0aCwgc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYSBzaW5nbGUgY29udGlndW91cyBleHRlbnQgb24gZGlzay4gTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmlwZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQuCgpUaGUgYGlvbWFwX2Rpb19zaW1wbGVgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBpb21hcF9kaW9fcndgLCB3aGljaCBpcywgYXMgd2Uga25vdywgYSBmdW5jdGlvbiB1c2VkIGJ5IG51bWVyb3VzIGZpbGVzeXN0ZW1zLCBpbmNsdWRpbmcgYnRyZnMsIGV4dDQsIHhmcywgZjJmcywgYW5kIGdmczIuIFRoYXQgaW1tZWRpYXRlbHkgZXhwYW5kcyB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYXR0YWNrIHN1cmZhY2UsIGFuZCBtZWFucyBpdCBzaG91bGQgYmUgdmVyeSB3ZWxsIHRlc3RlZCwgYW5kIHRodXMgZnV6emVkLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBhbGwgdGhpcyBpcyBgRlNfSU9NQVBgLiBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBtYW55IGZpbGVzeXN0ZW1zLCB3aGljaCBpcyBnb29kLCBidXQgaW4gbXkgZXhwZXJpZW5jZSwgaXQgbWlnaHQgYWxzbyBiZSB3b3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiB0aGUgc2VsZWN0ZWQgZmlsZXN5c3RlbXMuIFNpbmNlIGBGU19JT01BUGAgaXMgYSBib29sIGNvbmZpZywgbGlzdGluZyBpdCBpcyBmaW5lLiBJdCB3b3VsZCBhbHNvIGJlIHVzZWZ1bCB0byBrZWVwIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGBCVFJGU19GU2AgaW4gbWluZC4KClNvLCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cyBvZiB0aGlzIG5ldyBwYXRoLCBhbmQgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGJlLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGBpb21hcF9kaW9fc2ltcGxlYCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgc28gdGhpcyBpcyBhIHNvbGlkIGFkZGl0aW9uLgoKVGhlcmVmb3JlLCBmb3IgbXkgZnV6emluZyBhc3Nlc3NtZW50OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYAoqICAgKipGb2N1c1N5bWJvbHMqKjogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEZTX0lPTUFQYCBhbmQsIHdhaXQsIHNpbmNlIHRoZSBgZGlyZWN0LWlvLm9gIGZpbGUgYWxzbyByZXF1aXJlcyBgQ09ORklHX0JMT0NLYCwgSSBzaG91bGQgYWRkIHRoYXQgdG9vLiBgQkxPQ0tgCgoqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcsIGZhc3RlciBwYXRoIGZvciBoYW5kbGluZyBzcGVjaWZpYyB0eXBlcyBvZiBkaXJlY3QgSS9PcyB3aXRoaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gQmVjYXVzZSB0aGlzIHBhdGggYWRkcyBuZXcgY29yZSBsb2dpYywgYW5kIGJlY2F1c2UgaXQgaXMgcmVhY2hhYmxlIHZpYSBzZXZlcmFsIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBpdCBzaG91bGQgYmUgZnV6emVkIGFzIHBhcnQgb2YgYSBwcm9wZXIgc2VjdXJpdHkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBhZGRzIG5ldyBjb3JlIGxvZ2ljIGZvciBkaXJlY3QgSS9PIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB2YXJpb3VzIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTg6NTEuMDY5NzAxODM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjg1NDk1OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2VuZF9pb1wiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIHNtYWxsLCBibG9jay1hbGlnbmVkIGRpcmVjdCBJL09zIGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIFRoaXMgYWRkcyBuZXcgY29yZSBsb2dpYyBmb3IgZGlyZWN0IEkvTyBoYW5kbGluZyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdmFyaW91cyBmaWxlc3lzdGVtcyAoZXh0NCwgeGZzLCBidHJmcywgZXRjLikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA4OjU4OjUxLjA2OTcwNzQ1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NDU1NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjllYmIyY2U3NjY4NDA2NzZjMDVmNTRiNjUzNWE4Mjc3ODM3OGIyY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDA4OjU4OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uY2E3OTAyMzllNWViMzIgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNlcnJvci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYWNlLmhcXFwiXFxuIFxcbkBAIC04OCw5ICs4OSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gXFx0cmV0dXJuIEZTRVJSX0RJUkVDVElPX1JFQUQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoaW50IGVycm9yKVxcbiB7XFxuLVxcdHN3aXRjaCAoZGlvLVxcdTAwM2VlcnJvcikge1xcbitcXHRzd2l0Y2ggKGVycm9yKSB7XFxuIFxcdGNhc2UgMDpcXG4gXFx0Y2FzZSAtRUFHQUlOOlxcbiBcXHRjYXNlIC1FTk9UQkxLOlxcbkBAIC0xMTAsNyArMTExLDcgQEAgc3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXG4gXFx0aWYgKGRvcHMgXFx1MDAyNlxcdTAwMjYgZG9wcy1cXHUwMDNlZW5kX2lvKVxcbiBcXHRcXHRyZXQgPSBkb3BzLVxcdTAwM2VlbmRfaW8oaW9jYiwgZGlvLVxcdTAwM2VzaXplLCByZXQsIGRpby1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8pKVxcbitcXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8tXFx1MDAzZWVycm9yKSlcXG4gXFx0XFx0ZnNlcnJvcl9yZXBvcnRfaW8oZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKSxcXG4gXFx0XFx0XFx0XFx0ICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tXFx1MDAzZXNpemUsXFxuIFxcdFxcdFxcdFxcdCAgZGlvLVxcdTAwM2VlcnJvciwgR0ZQX05PRlMpO1xcbkBAIC0zOTgsNiArMzk5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcXG4re1xcbitcXHRpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcXG4rXFx0XFx0cmV0dXJuIGlfYmxvY2tzaXplKGlub2RlKTtcXG4rXFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcXHUwMDI2aXRlci1cXHUwMDNlaW9tYXA7XFxuQEAgLTQxNiwxMCArNDI1LDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gXFx0ICogRmlsZSBzeXN0ZW1zIHRoYXQgd3JpdGUgb3V0IG9mIHBsYWNlIGFuZCBhbHdheXMgYWxsb2NhdGUgbmV3IGJsb2Nrc1xcbiBcXHQgKiBuZWVkIGVhY2ggYmlvIHRvIGJlIGJsb2NrIGFsaWduZWQgYXMgdGhhdCdzIHRoZSB1bml0IG9mIGFsbG9jYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRpZiAoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXFxuLVxcdFxcdGFsaWdubWVudCA9IGZzX2Jsb2NrX3NpemU7XFxuLVxcdGVsc2VcXG4tXFx0XFx0YWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtXFx1MDAzZWJkZXYpO1xcbitcXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cXHUwMDNlYmRldiwgZGlvLVxcdTAwM2VmbGFncyk7XFxuIFxcbiBcXHRpZiAoKHBvcyB8IGxlbmd0aCkgXFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC04ODgsMTIgKzg5NCwyNzcgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbiBcXG4rc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUge1xcbitcXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYjtcXG4rXFx0c2l6ZV90XFx0XFx0XFx0c2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0ZGlvX2ZsYWdzO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3b3JrO1xcbitcXHQvKlxcbitcXHQgKiBBbGlnbiBAYmlvIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5IHNvIHRoYXQsIGNvbWJpbmVkIHdpdGggdGhlXFxuK1xcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxcbitcXHQgKiBhIGNhY2hlbGluZSBpbiBtZW1vcnkgcmV0dXJuZWQgYnkgdGhlIChIV0NBQ0hFLWFsaWduZWQpIGJpb1xcbitcXHQgKiBzbGFiLiAgVGhpcyBrZWVwcyB0aGUgaG90IGZpZWxkcyBibG9jayBsYXllciB0b3VjaGVzIG9uIHN1Ym1pdFxcbitcXHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGJpb1xcdFxcdGJpbyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBiaW9fc2V0IGlvbWFwX2Rpb19zaW1wbGVfcG9vbDtcXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyKVxcbit7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbyA9IFxcdTAwMjZzci1cXHUwMDNlYmlvO1xcbitcXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cXHUwMDNlaW9jYjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGJpby1cXHUwMDNlYmlfc3RhdHVzKSkge1xcbitcXHRcXHRyZXQgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGJpby1cXHUwMDNlYmlfc3RhdHVzKTtcXG4rXFx0XFx0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IocmV0KSlcXG4rXFx0XFx0XFx0ZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgaW9jYi1cXHUwMDNla2lfcG9zLCBzci1cXHUwMDNlc2l6ZSwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgIEdGUF9OT0ZTKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gc3ItXFx1MDAzZXNpemU7XFxuK1xcdFxcdGlvY2ItXFx1MDAzZWtpX3BvcyArPSByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzci1cXHUwMDNlZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XFxuK1xcdFxcdGJpb19jaGVja19wYWdlc19kaXJ0eShiaW8pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4rXFx0XFx0YmlvX3B1dChiaW8pO1xcbitcXHR9XFxuK1xcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0IFxcdTAwM2MgMCA/IHJldCA6IDAsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcXG4rXFx0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXFx1MDAzZWlvY2I7XFxuK1xcbitcXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbitcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4re1xcbitcXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxcbitcXHRcXHRjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG4rXFx0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXFx1MDAzZWlvY2I7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoc3ItXFx1MDAzZWJpby5iaV9zdGF0dXMpKSB7XFxuK1xcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbitcXG4rXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzci1cXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcXG4rXFx0XFx0cXVldWVfd29yayhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19kaW9fZG9uZV93cSwgXFx1MDAyNnNyLVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbitcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbitpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHNpemVfdCBkb25lX2JlZm9yZSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuK1xcbitcXHRpZiAoZG9wcyB8fCBkb25lX2JlZm9yZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoIWNvdW50KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qXFxuK1xcdCAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJT1xcbitcXHQgKiBlYXJseSBhcyBpdCdzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIHRvIGZhaWwgZm9yIHR5cGljYWwgZGlyZWN0IElPXFxuK1xcdCAqIHdvcmtsb2Fkcy5cXG4rXFx0ICovXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgKElPTUFQX0RJT19GT1JDRV9XQUlUIHwgSU9NQVBfRElPX1BBUlRJQUwgfFxcbitcXHRcXHRcXHQgSU9NQVBfRElPX0JPVU5DRSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX3BvcyArIGNvdW50IFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLypcXG4rICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhIHNpbmdsZVxcbisgKiBjb250aWd1b3VzIG9uLWRpc2sgZXh0ZW50LlxcbisgKlxcbisgKiBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCgpIGVuZm9yY2VzIHRoZSBjaGVhcCB1cC1mcm9udCBjb25zdHJhaW50cyBiZWZvcmVcXG4rICogZW50ZXJpbmcgdGhpcyBwYXRoLlxcbisgKlxcbisgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcXG4rICogLVxcdTAwM2VlbmRfaW8gLyAtXFx1MDAzZXN1Ym1pdF9pbyBob29rcyBpbnZva2VkLCBhbmQgaW4gcGFydGljdWxhciB3YW50cyBpdHMgYmlvcyB0byBiZVxcbisgKiBhbGxvY2F0ZWQgZnJvbSB0aGUgZmlsZXN5c3RlbS1wcml2YXRlIEBkb3BzLVxcdTAwM2ViaW9fc2V0ICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYVxcbisgKiBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlIGJpbykuICBUaGUgZmFzdCBwYXRoIGluc3RlYWQgYWxsb2NhdGVzXFxuKyAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxcbisgKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcXG4rICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cXG4rICpcXG4rICogQGRvbmVfYmVmb3JlIG11c3QgYmUgemVybzogYSBub24temVybyBjYWxsZXItYWNjdW11bGF0ZWQgcmVzaWR1YWwgY2Fubm90IGJlXFxuKyAqIGNhcnJpZWQgdGhyb3VnaCBhIHNpbmdsZS1iaW8gaW5saW5lIGNvbXBsZXRpb24uXFxuKyAqXFxuKyAqIEBpdGVyIG11c3QgZGVzY3JpYmUgYSBub24tZW1wdHkgUkVBRCBubyBsYXJnZXIgdGhhbiB0aGUgaW5vZGUgYmxvY2sgc2l6ZTpcXG4rICogd3JpdGVzLCB6ZXJvLWxlbmd0aCBJL08sIGFuZCBsYXJnZXIgcmVxdWVzdHMgbmVlZCB0aGUgZ2VuZXJpYyBpb21hcCBkaXJlY3RcXG4rICogSS9PIHBhdGguXFxuKyAqXFxuKyAqIEBkaW9fZmxhZ3MgbXVzdCBub3QgcmVxdWVzdCBJT01BUF9ESU9fRk9SQ0VfV0FJVCwgSU9NQVBfRElPX1BBUlRJQUwsIG9yXFxuKyAqIElPTUFQX0RJT19CT1VOQ0U6IHRoaXMgcGF0aCBkb2VzIG5vdCBzdXBwb3J0IGZvcmNlZCB3YWl0aW5nLCBwYXJ0aWFsIGRpcmVjdFxcbisgKiBJL08sIG9yIGJvdW5jaW5nLiAgVGhlIHJhbmdlIG11c3QgYWxzbyBzdGF5IHdpdGhpbiBpX3NpemUgYW5kIGVuY3J5cHRlZFxcbisgKiBpbm9kZXMgbXVzdCB1c2UgdGhlIGdlbmVyaWMgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLlxcbisgKlxcbisgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkgd2hlbiBpdFxcbisgKiBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLiAgSW4gdGhhdCBjYXNlIHdlIHByb2NlZWQgdG9cXG4rICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmRcXG4rICogaXMgcHJvcGFnYXRlZCBhcy1pcywgaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZVxcbisgKiBjYWxsZXIuXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdFxcbitpb21hcF9kaW9fc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbitcXHRcXHQgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCB2b2lkICpwcml2YXRlLFxcbitcXHRcXHQgdW5zaWduZWQgaW50IGRpb19mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuK1xcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XFxuK1xcdHN0cnVjdCBpb21hcF9pdGVyIGlvbWkgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdFxcdD0gaW5vZGUsXFxuK1xcdFxcdC5wb3NcXHRcXHQ9IGlvY2ItXFx1MDAzZWtpX3BvcyxcXG4rXFx0XFx0LmxlblxcdFxcdD0gY291bnQsXFxuK1xcdFxcdC5mbGFnc1xcdFxcdD0gSU9NQVBfRElSRUNULFxcbitcXHRcXHQucHJpdmF0ZVxcdD0gcHJpdmF0ZSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyO1xcbitcXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xcbitcXHRzdHJ1Y3QgYmlvICpiaW87XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuK1xcdFxcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xcbitcXG4rXFx0cmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW5vZGVfZGlvX2JlZ2luKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IG9wcy1cXHUwMDNlaW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpb21pLmlvbWFwLCBcXHUwMDI2aW9taS5zcmNtYXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW9taS5pb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxcbitcXHQgICAgaW9taS5pb21hcC5vZmZzZXQgKyBpb21pLmlvbWFwLmxlbmd0aCBcXHUwMDNjIGlvbWkucG9zICsgY291bnQgfHxcXG4rXFx0ICAgIChpb21pLmlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9UQkxLO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcXG4rXFx0aWYgKChpb21pLnBvcyB8IGNvdW50KSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbiBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XFxuK1xcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBvdXRfaW9tYXBfZW5kO1xcbitcXHR9XFxuK1xcbitcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTtcXG4rXFxuK1xcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxcbitcXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEO1xcbitcXG4rXFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXFxuK1xcdFxcdFxcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcXG4rXFx0XFx0XFx0ICAgICAgIFJFUV9PUF9SRUFELCBHRlBfS0VSTkVMLCBcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcXG4rXFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG4rXFx0c3ItXFx1MDAzZWlvY2IgPSBpb2NiO1xcbitcXHRzci1cXHUwMDNlZGlvX2ZsYWdzID0gZGlvX2ZsYWdzO1xcbitcXG4rXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aW9taS5pb21hcCwgaW9taS5wb3MpO1xcbitcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXFx1MDAzZWtpX2lvcHJpbztcXG4rXFxuK1xcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTtcXG4rXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19wdXQ7XFxuK1xcbitcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHtcXG4rXFx0XFx0aW92X2l0ZXJfcmV2ZXJ0KGl0ZXIsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcXG4rXFx0XFx0cmV0ID0gLUVOT1RCTEs7XFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19yZWxlYXNlX3BhZ2VzO1xcbitcXHR9XFxuK1xcbitcXHRzci1cXHUwMDNlc2l6ZSA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbitcXG4rXFx0aWYgKGRpb19mbGFncyBcXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRClcXG4rXFx0XFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuK1xcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XFxuK1xcdGlmICgoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0hJUFJJKSBcXHUwMDI2XFx1MDAyNiAhd2FpdF9mb3JfY29tcGxldGlvbikge1xcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfUE9MTEVEO1xcbitcXHRcXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIGJpbyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHMtXFx1MDAzZWlvbWFwX2VuZClcXG4rXFx0XFx0b3BzLVxcdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgY291bnQsIGlvbWkuZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgICBcXHUwMDI2aW9taS5pb21hcCk7XFxuK1xcbitcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbztcXG4rXFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbitcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpO1xcbitcXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbitcXHR9XFxuK1xcbitcXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG4rXFx0cmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpO1xcbitcXG4rb3V0X2Jpb19yZWxlYXNlX3BhZ2VzOlxcbitcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4rb3V0X2Jpb19wdXQ6XFxuK1xcdGJpb19wdXQoYmlvKTtcXG4rb3V0X2lvbWFwX2VuZDpcXG4rXFx0aWYgKG9wcy1cXHUwMDNlaW9tYXBfZW5kKVxcbitcXHRcXHRvcHMtXFx1MDAzZWlvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCAwLCBpb21pLmZsYWdzLFxcbitcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlvbWkuaW9tYXApO1xcbitcXHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3NpemVfdFxcbiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW87XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGRvbmVfYmVmb3JlKSkge1xcbitcXHRcXHRyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRU5PVEJMSylcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuIFxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcbkBAIC05MDIsMyArMTE3MywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdHJldHVybiBpb21hcF9kaW9fY29tcGxldGUoZGlvKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYmlvc2V0X2luaXQoXFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcXG4rXFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXFxuK1xcdFxcdFxcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XFxuK31cXG4rZnNfaW5pdGNhbGwoaW9tYXBfZGlvX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwODo1ODo1MS41MDg4MDY4NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTg0NjM2ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZFwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZVwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5ZWJiMmNlNzY2ODQwNjc2YzA1ZjU0YjY1MzVhODI3NzgzNzhiMmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA4OjU4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmNhNzkwMjM5ZTVlYjMyIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc2Vycm9yLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwidHJhY2UuaFwiXG4gXG5AQCAtODgsOSArODksOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gZnNlcnJvcl90eXBlIGlvbWFwX2Rpb19lcnJfdHlwZShjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXHRyZXR1cm4gRlNFUlJfRElSRUNUSU9fUkVBRDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGludCBlcnJvcilcbiB7XG4tXHRzd2l0Y2ggKGRpby1cdTAwM2VlcnJvcikge1xuK1x0c3dpdGNoIChlcnJvcikge1xuIFx0Y2FzZSAwOlxuIFx0Y2FzZSAtRUFHQUlOOlxuIFx0Y2FzZSAtRU5PVEJMSzpcbkBAIC0xMTAsNyArMTExLDcgQEAgc3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFxuIFx0aWYgKGRvcHMgXHUwMDI2XHUwMDI2IGRvcHMtXHUwMDNlZW5kX2lvKVxuIFx0XHRyZXQgPSBkb3BzLVx1MDAzZWVuZF9pbyhpb2NiLCBkaW8tXHUwMDNlc2l6ZSwgcmV0LCBkaW8tXHUwMDNlZmxhZ3MpO1xuLVx0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvKSlcbitcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby1cdTAwM2VlcnJvcikpXG4gXHRcdGZzZXJyb3JfcmVwb3J0X2lvKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSxcbiBcdFx0XHRcdCAgaW9tYXBfZGlvX2Vycl90eXBlKGRpbyksIG9mZnNldCwgZGlvLVx1MDAzZXNpemUsXG4gXHRcdFx0XHQgIGRpby1cdTAwM2VlcnJvciwgR0ZQX05PRlMpO1xuQEAgLTM5OCw2ICszOTksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbit7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuK1x0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuK1x0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuK31cbitcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcdTAwMjZpdGVyLVx1MDAzZWlvbWFwO1xuQEAgLTQxNiwxMCArNDI1LDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdCAqIEZpbGUgc3lzdGVtcyB0aGF0IHdyaXRlIG91dCBvZiBwbGFjZSBhbmQgYWx3YXlzIGFsbG9jYXRlIG5ldyBibG9ja3NcbiBcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0J3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi5cbiBcdCAqL1xuLVx0aWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcbi1cdFx0YWxpZ25tZW50ID0gZnNfYmxvY2tfc2l6ZTtcbi1cdGVsc2Vcbi1cdFx0YWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtXHUwMDNlYmRldik7XG4rXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKChwb3MgfCBsZW5ndGgpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OCwxMiArODk0LDI3NyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuIFxuK3N0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYjtcbitcdHNpemVfdFx0XHRcdHNpemU7XG4rXHR1bnNpZ25lZCBpbnRcdFx0ZGlvX2ZsYWdzO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuK1x0LypcbitcdCAqIEFsaWduIEBiaW8gdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkgc28gdGhhdCwgY29tYmluZWQgd2l0aCB0aGVcbitcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxuK1x0ICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW9cbitcdCAqIHNsYWIuICBUaGlzIGtlZXBzIHRoZSBob3QgZmllbGRzIGJsb2NrIGxheWVyIHRvdWNoZXMgb24gc3VibWl0XG4rXHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYmlvXHRcdGJpbyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBiaW9fc2V0IGlvbWFwX2Rpb19zaW1wbGVfcG9vbDtcbitcbitzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcilcbit7XG4rXHRzdHJ1Y3QgYmlvICpiaW8gPSBcdTAwMjZzci1cdTAwM2ViaW87XG4rXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cdTAwM2Vpb2NiO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV9zdGF0dXMpKSB7XG4rXHRcdHJldCA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVx1MDAzZWJpX3N0YXR1cyk7XG4rXHRcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKHJldCkpXG4rXHRcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsXG4rXHRcdFx0XHRcdCAgaW9jYi1cdTAwM2VraV9wb3MsIHNyLVx1MDAzZXNpemUsIHJldCxcbitcdFx0XHRcdFx0ICBHRlBfTk9GUyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBzci1cdTAwM2VzaXplO1xuK1x0XHRpb2NiLVx1MDAzZWtpX3BvcyArPSByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoc3ItXHUwMDNlZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpIHtcbitcdFx0YmlvX2NoZWNrX3BhZ2VzX2RpcnR5KGJpbyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbitcdFx0YmlvX3B1dChiaW8pO1xuK1x0fVxuK1x0aW5vZGVfZGlvX2VuZChpbm9kZSk7XG4rXHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgcmV0IFx1MDAzYyAwID8gcmV0IDogMCwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcbitcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVx1MDAzZWlvY2I7XG4rXG4rXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG4rXHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG4rXHRcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuK1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbitcbitcdGlmICh1bmxpa2VseShzci1cdTAwM2ViaW8uYmlfc3RhdHVzKSkge1xuK1x0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1xuK1x0XHRJTklUX1dPUksoXHUwMDI2c3ItXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcbitcdFx0cXVldWVfd29yayhpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EsIFx1MDAyNnNyLVx1MDAzZXdvcmspO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG4rXHRpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sXG4raW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IGRpb19mbGFncywgc2l6ZV90IGRvbmVfYmVmb3JlKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcbitcdGlmIChkb3BzIHx8IGRvbmVfYmVmb3JlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFjb3VudClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0LypcbitcdCAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJT1xuK1x0ICogZWFybHkgYXMgaXQncyB0aGUgbW9zdCBjb21tb24gY2FzZSB0byBmYWlsIGZvciB0eXBpY2FsIGRpcmVjdCBJT1xuK1x0ICogd29ya2xvYWRzLlxuK1x0ICovXG4rXHRpZiAoY291bnQgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IChJT01BUF9ESU9fRk9SQ0VfV0FJVCB8IElPTUFQX0RJT19QQVJUSUFMIHxcbitcdFx0XHQgSU9NQVBfRElPX0JPVU5DRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50IFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBGYXN0IHBhdGggZm9yIHNtYWxsLCBibG9jay1hbGlnbmVkIGRpcmVjdCBJL09zIHRoYXQgbWFwIHRvIGEgc2luZ2xlXG4rICogY29udGlndW91cyBvbi1kaXNrIGV4dGVudC5cbisgKlxuKyAqIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKCkgZW5mb3JjZXMgdGhlIGNoZWFwIHVwLWZyb250IGNvbnN0cmFpbnRzIGJlZm9yZVxuKyAqIGVudGVyaW5nIHRoaXMgcGF0aC5cbisgKlxuKyAqIEBkb3BzIG11c3QgYmUgTlVMTDogYSBub24tTlVMTCBAZG9wcyBtZWFucyB0aGUgY2FsbGVyIHdhbnRzIGl0c1xuKyAqIC1cdTAwM2VlbmRfaW8gLyAtXHUwMDNlc3VibWl0X2lvIGhvb2tzIGludm9rZWQsIGFuZCBpbiBwYXJ0aWN1bGFyIHdhbnRzIGl0cyBiaW9zIHRvIGJlXG4rICogYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy1cdTAwM2ViaW9fc2V0ICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYVxuKyAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcbisgKiBmcm9tIHRoZSBzaGFyZWQgaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlcyBzdHJ1Y3RcbisgKiBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLCBzbyB3ZSBtdXN0IGZhbGxcbisgKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxuKyAqXG4rICogQGRvbmVfYmVmb3JlIG11c3QgYmUgemVybzogYSBub24temVybyBjYWxsZXItYWNjdW11bGF0ZWQgcmVzaWR1YWwgY2Fubm90IGJlXG4rICogY2FycmllZCB0aHJvdWdoIGEgc2luZ2xlLWJpbyBpbmxpbmUgY29tcGxldGlvbi5cbisgKlxuKyAqIEBpdGVyIG11c3QgZGVzY3JpYmUgYSBub24tZW1wdHkgUkVBRCBubyBsYXJnZXIgdGhhbiB0aGUgaW5vZGUgYmxvY2sgc2l6ZTpcbisgKiB3cml0ZXMsIHplcm8tbGVuZ3RoIEkvTywgYW5kIGxhcmdlciByZXF1ZXN0cyBuZWVkIHRoZSBnZW5lcmljIGlvbWFwIGRpcmVjdFxuKyAqIEkvTyBwYXRoLlxuKyAqXG4rICogQGRpb19mbGFncyBtdXN0IG5vdCByZXF1ZXN0IElPTUFQX0RJT19GT1JDRV9XQUlULCBJT01BUF9ESU9fUEFSVElBTCwgb3JcbisgKiBJT01BUF9ESU9fQk9VTkNFOiB0aGlzIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBmb3JjZWQgd2FpdGluZywgcGFydGlhbCBkaXJlY3RcbisgKiBJL08sIG9yIGJvdW5jaW5nLiAgVGhlIHJhbmdlIG11c3QgYWxzbyBzdGF5IHdpdGhpbiBpX3NpemUgYW5kIGVuY3J5cHRlZFxuKyAqIGlub2RlcyBtdXN0IHVzZSB0aGUgZ2VuZXJpYyBpb21hcCBkaXJlY3QgSS9PIHBhdGguXG4rICpcbisgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkgd2hlbiBpdFxuKyAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xuKyAqIHRoZSBnZW5lcmljIF9faW9tYXBfZGlvX3J3KCkgc2xvdyBwYXRoLiAgQW55IG90aGVyIGVycm5vIGlzIGEgcmVhbCByZXN1bHQgYW5kXG4rICogaXMgcHJvcGFnYXRlZCBhcy1pcywgaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZVxuKyAqIGNhbGxlci5cbisgKi9cbitzdGF0aWMgc3NpemVfdFxuK2lvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsXG4rXHRcdCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XG4rXHRzdHJ1Y3QgaW9tYXBfaXRlciBpb21pID0ge1xuK1x0XHQuaW5vZGVcdFx0PSBpbm9kZSxcbitcdFx0LnBvc1x0XHQ9IGlvY2ItXHUwMDNla2lfcG9zLFxuK1x0XHQubGVuXHRcdD0gY291bnQsXG4rXHRcdC5mbGFnc1x0XHQ9IElPTUFQX0RJUkVDVCxcbitcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbitcdH07XG4rXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4rXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xuK1x0c3RydWN0IGJpbyAqYmlvO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG4rXHRcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xuK1xuK1x0cmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlub2RlX2Rpb19iZWdpbihpbm9kZSk7XG4rXG4rXHRyZXQgPSBvcHMtXHUwMDNlaW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncyxcbitcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCwgXHUwMDI2aW9taS5zcmNtYXApO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4rXHQgICAgaW9taS5pb21hcC5vZmZzZXQgKyBpb21pLmlvbWFwLmxlbmd0aCBcdTAwM2MgaW9taS5wb3MgKyBjb3VudCB8fFxuK1x0ICAgIChpb21pLmlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcbitcdFx0cmV0ID0gLUVOT1RCTEs7XG4rXHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbitcdH1cbitcbitcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcbitcdGlmICgoaW9taS5wb3MgfCBjb3VudCkgXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4rXHR9XG4rXG4rXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XG4rXHRcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuK1x0fVxuK1xuK1x0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG4rXG4rXHRpZiAodXNlcl9iYWNrZWRfaXRlcihpdGVyKSlcbitcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcbitcbitcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoaW9taS5pb21hcC5iZGV2LFxuK1x0XHRcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbitcdFx0XHQgICAgICAgUkVRX09QX1JFQUQsIEdGUF9LRVJORUwsIFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCk7XG4rXHRzciA9IGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuK1x0c3ItXHUwMDNlaW9jYiA9IGlvY2I7XG4rXHRzci1cdTAwM2VkaW9fZmxhZ3MgPSBkaW9fZmxhZ3M7XG4rXG4rXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aW9taS5pb21hcCwgaW9taS5wb3MpO1xuK1x0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXHUwMDNla2lfaW9wcmlvO1xuK1xuK1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xuK1x0aWYgKHVubGlrZWx5KHJldCkpXG4rXHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG4rXG4rXHRpZiAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBjb3VudCkge1xuK1x0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4rXHRcdHJldCA9IC1FTk9UQkxLO1xuK1x0XHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcbitcdH1cbitcbitcdHNyLVx1MDAzZXNpemUgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplO1xuK1xuK1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKVxuK1x0XHRiaW9fc2V0X3BhZ2VzX2RpcnR5KGJpbyk7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG4rXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PV0FJVDtcbitcdGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ISVBSSSkgXHUwMDI2XHUwMDI2ICF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XG4rXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcbitcdFx0V1JJVEVfT05DRShpb2NiLVx1MDAzZXByaXZhdGUsIGJpbyk7XG4rXHR9XG4rXG4rXHRpZiAob3BzLVx1MDAzZWlvbWFwX2VuZClcbitcdFx0b3BzLVx1MDAzZWlvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBjb3VudCwgaW9taS5mbGFncyxcbitcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCk7XG4rXG4rXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbitcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuK1x0XHRzdWJtaXRfYmlvKGJpbyk7XG4rXHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7XG4rXHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4rXHR9XG4rXG4rXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbitcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcbitcbitvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XG4rXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbitvdXRfYmlvX3B1dDpcbitcdGJpb19wdXQoYmlvKTtcbitvdXRfaW9tYXBfZW5kOlxuK1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4rXHRcdG9wcy1cdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgMCwgaW9taS5mbGFncyxcbitcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCk7XG4rXHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHNzaXplX3RcbiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4gXHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSlcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW87XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGlmIChpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZChpb2NiLCBpdGVyLCBkb3BzLCBkaW9fZmxhZ3MsXG4rXHRcdFx0XHQgICAgICAgZG9uZV9iZWZvcmUpKSB7XG4rXHRcdHJldCA9IGlvbWFwX2Rpb19zaW1wbGUoaW9jYiwgaXRlciwgb3BzLCBwcml2YXRlLCBkaW9fZmxhZ3MpO1xuK1x0XHRpZiAocmV0ICE9IC1FTk9UQkxLKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbiBcdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbkBAIC05MDIsMyArMTE3MywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gaW9tYXBfZGlvX2NvbXBsZXRlKGRpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG4rXG4rc3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcbit7XG4rXHRyZXR1cm4gYmlvc2V0X2luaXQoXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxuK1x0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxuK1x0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4rfVxuK2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA4OjU4OjUxLjUwODgwODAyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODE3Mjc1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgRGlyZWN0IEkvTyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHRvdWNoaW5nIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBpbXBsZW1lbnRpbmcgYSBmYXN0IHBhdGggc3BlY2lmaWNhbGx5IGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IGhpdCBhIHNpbmdsZSwgY29udGlndW91cyBleHRlbnQgb24gZGlza+KAlHRoYXQncyBgaW9tYXBfZGlvX3NpbXBsZWAuIFRoZXkndmUgYWRkZWQgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGlzIG9wdGltaXphdGlvbjogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIGhvdyBgaW9tYXBfZGlvX3J3YCBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSB0aGVzZSBuZXcgZnVuY3Rpb25zOyBpdCdzIGNhbGxpbmcgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVgLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjb3JlIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgZGlyZWN0IEkvTyBsb2dpYywgd2hpY2ggbWVhbnMgaXQgZGVtYW5kcyB0aG9yb3VnaCBzY3J1dGlueS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBzdWNoIGxvdy1sZXZlbCBjb2RlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyBhdCBpdCB0byBlbnN1cmUgc3RhYmlsaXR5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGdldHMgY29tcGlsZWQuIEknbGwgY2hlY2sgYGZzL2lvbWFwL01ha2VmaWxlYCBvciBgZnMvaW9tYXAvS2NvbmZpZ2AgdG8gc2VlIGlmIGBDT05GSUdfRlNfSU9NQVBgIGlzIHdoYXQgZW5hYmxlcyB0aGlzIG1vZHVsZSwgd2hpY2ggd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgaXQgdG8gYmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTE1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTg6NTcuMDkwNTM3NDAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODAyNzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXJlY3QtaW8ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9MTE9aW9tYXAteVxcdFxcdFxcdFxcdCs9IHRyYWNlLm8gXFxcXFxcbi0tXFxuZnMvaW9tYXAvTWFrZWZpbGUtMTMtXFx0XFx0XFx0XFx0ICAgYnVmZmVyZWQtaW8ub1xcbmZzL2lvbWFwL01ha2VmaWxlOjE0OmlvbWFwLSQoQ09ORklHX0JMT0NLKVxcdFxcdCs9IGRpcmVjdC1pby5vIFxcXFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNS1cXHRcXHRcXHRcXHQgICBpb2VuZC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTg6NTcuMjA4NTcxNjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzOTEwNDYxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggZm9yIGlvbWFwKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3LCBvcHRpbWl6ZWQgcGF0aCBmb3Igc2ltcGxlIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIEl0J3MgY3JlYXRpbmcgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zOiBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLiBUaGUgY29yZSBgaW9tYXBfZGlvX3J3YCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSB0aGVzZSBuZXcgYWRkaXRpb25zLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLCBtZWFuaW5nIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggZGlyZWN0IEkvTyByZWFkcyBvbiBpb21hcC11c2luZyBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzIOKAkyBhbGwgY3JpdGljYWwgdGFyZ2V0cy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCBgZnMvaW9tYXAvTWFrZWZpbGVgLCBpdCdzIGNsZWFyIHRoYXQgYENPTkZJR19CTE9DS2AgaXMgYSByZXF1aXJlbWVudC4gQWxzbywgd2UgbmVlZCBhIGZpbGVzeXN0ZW0gdGhhdCBhY3R1YWxseSAqdXNlcyogaW9tYXAgZm9yIGRpcmVjdCBJL08sIHN1Y2ggYXMgdGhvc2UgdGhhdCBlbmFibGUgYENPTkZJR19YRlNfRlNgIG9yIGBDT05GSUdfRVhUNF9GU2AuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgaW9tYXAsIGJ1dCBgQ09ORklHX0ZTX0lPTUFQYCBpcyB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gaXRzZWxmLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzPyBgaW9tYXBfZGlvX3J3YCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIGhvdCBwYXRoLCBidXQgaXQncyBwcmV0dHkgZ2VuZXJpYy4gVGhlIHJlYWwgaW50ZXJlc3RpbmcgcGFydHMsIHRoZSBuZXcgbG9naWMsIGFyZSB0aGVzZSBgaW9tYXBfZGlvX3NpbXBsZSpgIGZ1bmN0aW9ucy5cblxuQWgsIHJpZ2h0LCB0aGVzZSBhcmUgc3RhdGljLCBzbyB0aGV5J3JlIG5vdCBkaXJlY3RseSBleHBvcnRlZCBzeW1ib2xzIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IHJlYWNoYWJsZSBieSB0aGUgZnV6emVyIGJ5IG5hbWUuIEhvd2V2ZXIsIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgd2l0aCBrY292LCBhbmQgaXQgZm9jdXNlcyBvbiBjb2RlIGNvdmVyYWdlLiBJIHNob3VsZCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIHN0YXRpYyBmdW5jdGlvbiBuYW1lcy4gU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTpcbi0gICBgaW9tYXBfZGlvX3NpbXBsZWBcbi0gICBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgXG4tICAgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgXG4tICAgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2Bcbi0gICBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gTG9va3MgbGlrZSB3ZSBuZWVkIGBDT05GSUdfQkxPQ0tgIGFuZCBhIGZpbGVzeXN0ZW0gdGhhdCB1c2VzIGlvbWFwIChhbmQgdGhlcmVmb3JlIHNlbGVjdHMgYENPTkZJR19GU19JT01BUGApLiBCZXR0ZXIgZ28gY2hlY2sgYGZzL2lvbWFwL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwODo1OToxNS41OTk2MjAxNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM4MCwiRXJyb3IiOiJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvbWFwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmaWxlIGRvZXMgbm90IGV4aXN0XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA4OjU5OjE1LjU5OTY2NDU3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MDUzNzYzMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IERpcmVjdCBJL08gRmFzdCBQYXRoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldywgZmFzdGVyIHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGZvciBvdmVyYWxsIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIEkgc2VlIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19pbml0YC4gQ2xlYXJseSwgdGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBuZXcgZmFzdCBwYXRoLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbmRpY2F0ZXMgdGhleSdyZSBiZWluZyBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIGNvcmUgaW9tYXAgbG9naWMuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBidWcgZml4LCBhbmQgaXQncyB0b3VjaGluZyB0aGUgaW9tYXAgc3Vic3lzdGVtLCB3aGljaCwgYXMgd2Uga25vdywgaXMgZnVuZGFtZW50YWwgdG8gYmxvY2sgZGV2aWNlIEkvTyBhbmQgdXNlZCBieSBzZXZlcmFsIG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMgZm9yIGRpcmVjdCBJL08uIFRoZXJlZm9yZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0IHRvIGV4cG9zZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgZnMvaW9tYXAvTWFrZWZpbGVgIGluZGljYXRlcyB0aGF0IGBkaXJlY3QtaW8ub2AgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhcyBkaXJlY3QgSS9PIGlzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBibG9jayBkZXZpY2VzLiBIb3dldmVyLCBpb21hcCBpdHNlbGYgaXMgdHlwaWNhbGx5IHNlbGVjdGVkIGJ5IHRoZSBmaWxlc3lzdGVtcyB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggdG8gc2VlIGhvdyBgaW9tYXBfZGlvX3J3YCBpcyB1c2VkLiBUaGF0IHdpbGwgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV3IGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBpbiBwcmFjdGljZS4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgaW52ZXN0aWdhdGUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwODo1OTo0MS42NTM0MzAxODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Mzc0Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvZGlyZWN0LWlvLmM9MzY0PXN0YXRpYyBpbnQgYnRyZnNfZGlvX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCxcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNC1cXHQvKlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjQwNTpcXHQgKiBpb21hcF9kaW9fcncoKSBvbmx5IGRvZXMgZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZSgpLCB3aGljaCBpc24ndFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQwNi1cXHQgKiBlbm91Z2ggaWYgd2UndmUgd3JpdHRlbiBjb21wcmVzc2VkIHBhZ2VzIHRvIHRoaXMgYXJlYSwgc28gd2UgbmVlZCB0b1xcbi0tXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNDE2LVxcdCAqIGRpcnR5IG9yIHVuZGVyIHdyaXRlYmFjayAoc2FtZSBhcyBmb3IgdGhlIG5vbi1jb21wcmVzc2lvbiBjYXNlKS5cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo0MTc6XFx0ICogaW9tYXBfZGlvX3J3KCkgZGlkIHRoZSBzYW1lIGNoZWNrLCBidXQgYWZ0ZXIgdGhhdCBhbmQgYmVmb3JlIHdlIGdvdFxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTQxOC1cXHQgKiBoZXJlLCBtbWFwJ2VkIHdyaXRlcyBtYXkgaGF2ZSBoYXBwZW5lZCBvciBidWZmZXJlZCByZWFkcyBzdGFydGVkXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MTUtXFx0ICogV2hlbiBkb2luZyBhIHJlYWQsIGJlY2F1c2Ugd2UgdXNlIElPTUFQX0RJT19QQVJUSUFMIHdoZW4gY2FsbGluZ1xcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUxNjpcXHQgKiBpb21hcF9kaW9fcncoKSwgd2UgY2FuIGVuZCB1cCByZXR1cm5pbmcgbGVzcyBkYXRhIHRoZW4gd2hhdCB0aGUgY2FsbGVyXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtNTE3LVxcdCAqIGFza2VkIGZvciwgcmVzdWx0aW5nIGluIGFuIHVuZXhwZWN0ZWQsIGFuZCBpbmNvcnJlY3QsIHNob3J0IHJlYWQuXFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYy01MjAtXFx0ICogcGFnZSBmYXVsdCBlcnJvciB3aGVuIHRyeWluZyB0byBmYXVsdCBpbiBwYWdlcyBmb3IgdGhlIGJ1ZmZlciB0aGF0IGlzXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmM6NTIxOlxcdCAqIGFzc29jaWF0ZWQgdG8gdGhlIHN0cnVjdCBpb3ZfaXRlciBwYXNzZWQgdG8gaW9tYXBfZGlvX3J3KCksIGFuZCB3ZVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyMi1cXHQgKiBoYXZlIHByZXZpb3VzbHkgc3VibWl0dGVkIGJpb3MgZm9yIG90aGVyIGV4dGVudHMgaW4gdGhlIHJhbmdlLCBpblxcbmZzL2J0cmZzL2RpcmVjdC1pby5jOjUyMzpcXHQgKiB3aGljaCBjYXNlIGlvbWFwX2Rpb19ydygpIG1heSByZXR1cm4gdXMgRUlPQ0JRVUVVRUQgaWYgbm90IGFsbCBvZlxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTUyNC1cXHQgKiB0aG9zZSBiaW9zIGhhdmUgY29tcGxldGVkIGJ5IHRoZSB0aW1lIHdlIGdldCB0aGUgcGFnZSBmYXVsdCBlcnJvcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jPTgxMT1zdGF0aWMgc3NpemVfdCBidHJmc19kaW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgxNS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MTY6XFx0cmV0dXJuIGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBcXHUwMDI2YnRyZnNfZGlvX2lvbWFwX29wcywgXFx1MDAyNmJ0cmZzX2Rpb19vcHMsXFxuZnMvYnRyZnMvZGlyZWN0LWlvLmMtODE3LVxcdFxcdFxcdCAgICBJT01BUF9ESU9fUEFSVElBTCB8IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQsIFxcdTAwMjZkYXRhLCBkb25lX2JlZm9yZSk7XFxuLS1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYz04MjA9c3RhdGljIHN0cnVjdCBpb21hcF9kaW8gKmJ0cmZzX2Rpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2J0cmZzL2RpcmVjdC1pby5jLTgyNC1cXG5mcy9idHJmcy9kaXJlY3QtaW8uYzo4MjU6XFx0cmV0dXJuIF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZidHJmc19kaW9faW9tYXBfb3BzLCBcXHUwMDI2YnRyZnNfZGlvX29wcyxcXG5mcy9idHJmcy9kaXJlY3QtaW8uYy04MjYtXFx0XFx0XFx0ICAgIElPTUFQX0RJT19QQVJUSUFMIHwgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCwgXFx1MDAyNmRhdGEsIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYz00NDU9c3RhdGljIHNzaXplX3QgZXJvZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZXJvZnMvZGF0YS5jLTQ2MC1cXG5mcy9lcm9mcy9kYXRhLmM6NDYxOlxcdFxcdHJldHVybiBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZlcm9mc19pb21hcF9vcHMsXFxuZnMvZXJvZnMvZGF0YS5jLTQ2Mi1cXHRcXHRcXHRcXHQgICAgTlVMTCwgMCwgXFx1MDAyNml0ZXJfY3R4LCAwKTtcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz03MDg9c3RhdGljIHNzaXplX3QgZXhmYXRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leGZhdC9maWxlLmMtNzExLVxcbmZzL2V4ZmF0L2ZpbGUuYzo3MTI6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleGZhdF93cml0ZV9pb21hcF9vcHMsXFxuZnMvZXhmYXQvZmlsZS5jLTcxMy1cXHRcXHRcXHRcXHUwMDI2ZXhmYXRfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9leGZhdC9maWxlLmM9ODAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvZXhmYXQvZmlsZS5jLTgxMS1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL2V4ZmF0L2ZpbGUuYzo4MTI6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZleGZhdF9pb21hcF9vcHMsIE5VTEwsIDAsXFxuZnMvZXhmYXQvZmlsZS5jLTgxMy1cXHRcXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL2V4dDIvZmlsZS5jPTY1PXN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy03Mi1cXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuZnMvZXh0Mi9maWxlLmM6NzM6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2ZXh0Ml9pb21hcF9vcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmZzL2V4dDIvZmlsZS5jLTc0LVxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0Mi9maWxlLmM9ODA9c3RhdGljIGludCBleHQyX2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9leHQyL2ZpbGUuYy05MC1cXHQgKiBJZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBmaWxlLCB3ZSBoYXZlIHRvIHVwZGF0ZSBpX3NpemUgaGVyZSBiZWZvcmVcXG5mcy9leHQyL2ZpbGUuYzo5MTpcXHQgKiBwYWdlIGNhY2hlIGdldHMgaW52YWxpZGF0ZWQgaW4gaW9tYXBfZGlvX3J3KCkuIFRoaXMgcHJldmVudHMgcmFjaW5nXFxuZnMvZXh0Mi9maWxlLmMtOTItXFx0ICogYnVmZmVyZWQgcmVhZHMgZnJvbSB6ZXJvaW5nIG91dCB0b28gbXVjaCBmcm9tIHBhZ2UgY2FjaGUgcGFnZXMuXFxuLS1cXG5mcy9leHQyL2ZpbGUuYz0xMTE9c3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDIvZmlsZS5jLTEzNi1cXG5mcy9leHQyL2ZpbGUuYzoxMzc6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZleHQyX2lvbWFwX29wcywgXFx1MDAyNmV4dDJfZGlvX3dyaXRlX29wcyxcXG5mcy9leHQyL2ZpbGUuYy0xMzgtXFx0XFx0XFx0ICAgZmxhZ3MsIE5VTEwsIDApO1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtNDYtICogYW55IHNwZWNpYWwgZmVhdHVyZXMgbGlrZSBlbmNyeXB0aW9uIG9yIHZlcml0eSwgZXh0NCBoYXMgdHJhZGl0aW9uYWxseVxcbmZzL2V4dDQvZmlsZS5jOjQ3OiAqIHJldHVybmVkIEVJTlZBTCBmb3IgbWlzYWxpZ25lZCBESU8uICBpb21hcF9kaW9fcncoKSB1c2VzIHRoaXMgY29udmVudGlvbiB0b28uXFxuZnMvZXh0NC9maWxlLmMtNDgtICogSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgYXR0ZW1wdCB0aGUgRElPLCAqbm90KiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PLlxcbi0tXFxuZnMvZXh0NC9maWxlLmM9Njk9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTkzLVxcbmZzL2V4dDQvZmlsZS5jOjk0OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNmV4dDRfaW9tYXBfb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5mcy9leHQ0L2ZpbGUuYy05NS1cXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTUxOT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNTkxLVxcbmZzL2V4dDQvZmlsZS5jOjU5MjpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNmV4dDRfaW9tYXBfb3BzLCBcXHUwMDI2ZXh0NF9kaW9fd3JpdGVfb3BzLFxcbmZzL2V4dDQvZmlsZS5jLTU5My1cXHRcXHRcXHQgICBkaW9fZmxhZ3MsIE5VTEwsIDApO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9NDg0OT1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDg4MS1cXHQvKlxcbmZzL2YyZnMvZmlsZS5jOjQ4ODI6XFx0ICogV2UgaGF2ZSB0byB1c2UgX19pb21hcF9kaW9fcncoKSBhbmQgaW9tYXBfZGlvX2NvbXBsZXRlKCkgaW5zdGVhZCBvZlxcbmZzL2YyZnMvZmlsZS5jOjQ4ODM6XFx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcXG5mcy9mMmZzL2ZpbGUuYy00ODg0LVxcdCAqIEYyRlNfRElPX1JFQUQgY291bnRlciB3aWxsIGJlIGRlY3JlbWVudGVkIGNvcnJlY3RseSBpbiBhbGwgY2FzZXMuXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy00ODg2LVxcdGluY19wYWdlX2NvdW50KHNiaSwgRjJGU19ESU9fUkVBRCk7XFxuZnMvZjJmcy9maWxlLmM6NDg4NzpcXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNmYyZnNfaW9tYXBfb3BzLFxcbmZzL2YyZnMvZmlsZS5jLTQ4ODgtXFx0XFx0XFx0ICAgICBcXHUwMDI2ZjJmc19pb21hcF9kaW9fcmVhZF9vcHMsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9NTE2Nj1zdGF0aWMgc3NpemVfdCBmMmZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNTIxNC1cXHQvKlxcbmZzL2YyZnMvZmlsZS5jOjUyMTU6XFx0ICogV2UgaGF2ZSB0byB1c2UgX19pb21hcF9kaW9fcncoKSBhbmQgaW9tYXBfZGlvX2NvbXBsZXRlKCkgaW5zdGVhZCBvZlxcbmZzL2YyZnMvZmlsZS5jOjUyMTY6XFx0ICogdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiBpb21hcF9kaW9fcncoKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGVcXG5mcy9mMmZzL2ZpbGUuYy01MjE3LVxcdCAqIEYyRlNfRElPX1dSSVRFIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLlxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNTIyMi1cXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX0ZPUkNFX1dBSVQ7XFxuZnMvZjJmcy9maWxlLmM6NTIyMzpcXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2ZjJmc19pb21hcF9vcHMsXFxuZnMvZjJmcy9maWxlLmMtNTIyNC1cXHRcXHRcXHQgICAgIFxcdTAwMjZmMmZzX2lvbWFwX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncywgaW9jYiwgMCk7XFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy01Mjc0LVxcdH0gZWxzZSB7XFxuZnMvZjJmcy9maWxlLmM6NTI3NTpcXHRcXHQvKiBpb21hcF9kaW9fcncoKSBhbHJlYWR5IGhhbmRsZWQgdGhlIGdlbmVyaWNfd3JpdGVfc3luYygpLiAqL1xcbmZzL2YyZnMvZmlsZS5jLTUyNzYtXFx0XFx0Km1heV9uZWVkX3N5bmMgPSBmYWxzZTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jPTgxMT1zdGF0aWMgc3NpemVfdCBnZnMyX2ZpbGVfZGlyZWN0X3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODI1LVxcdCAqXFxuZnMvZ2ZzMi9maWxlLmM6ODI2OlxcdCAqIFVubGlrZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLCBmb3IgcmVhZHMsIGlvbWFwX2Rpb19ydyBjYW4gdHJpZ2dlclxcbmZzL2dmczIvZmlsZS5jLTgyNy1cXHQgKiBwaHlzaWNhbCBhcyB3ZWxsIGFzIG1hbnVhbCBwYWdlIGZhdWx0cywgYW5kIHdlIG5lZWQgdG8gZGlzYWJsZSBib3RoXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy04NDYtXFx0dG8tXFx1MDAzZW5vZmF1bHQgPSB0cnVlO1xcbmZzL2dmczIvZmlsZS5jOjg0NzpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZnZnMyX2lvbWFwX29wcywgTlVMTCxcXG5mcy9nZnMyL2ZpbGUuYy04NDgtXFx0XFx0XFx0ICAgSU9NQVBfRElPX1BBUlRJQUwsIE5VTEwsIHJlYWQpO1xcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtODUyLVxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5mcy9nZnMyL2ZpbGUuYzo4NTM6XFx0LyogTm8gaW5jcmVtZW50ICgrPSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXFxuZnMvZ2ZzMi9maWxlLmMtODU0LVxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi0tXFxuZnMvZ2ZzMi9maWxlLmM9ODc0PXN0YXRpYyBzc2l6ZV90IGdmczJfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy04OTAtXFx0ICpcXG5mcy9nZnMyL2ZpbGUuYzo4OTE6XFx0ICogRm9yIHdyaXRlcywgaW9tYXBfZGlvX3J3IG9ubHkgdHJpZ2dlcnMgbWFudWFsIHBhZ2UgZmF1bHRzLCBzbyB3ZVxcbmZzL2dmczIvZmlsZS5jLTg5Mi1cXHQgKiBkb24ndCBuZWVkIHRvIGRpc2FibGUgcGh5c2ljYWwgb25lcy5cXG4tLVxcbmZzL2dmczIvZmlsZS5jLTkxMi1cXHRmcm9tLVxcdTAwM2Vub2ZhdWx0ID0gdHJ1ZTtcXG5mcy9nZnMyL2ZpbGUuYzo5MTM6XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIFxcdTAwMjZnZnMyX2lvbWFwX29wcywgTlVMTCxcXG5mcy9nZnMyL2ZpbGUuYy05MTQtXFx0XFx0XFx0ICAgSU9NQVBfRElPX1BBUlRJQUwsIE5VTEwsIHdyaXR0ZW4pO1xcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtOTIxLVxcdH1cXG5mcy9nZnMyL2ZpbGUuYzo5MjI6XFx0LyogTm8gaW5jcmVtZW50ICgrPSkgYmVjYXVzZSBpb21hcF9kaW9fcncgcmV0dXJucyBhIGN1bXVsYXRpdmUgdmFsdWUuICovXFxuZnMvZ2ZzMi9maWxlLmMtOTIzLVxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDEwPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MDUtXFx0XFx0ICogV3JpdGVzIHRoYXQgZXh0ZW5kIGlfc2l6ZSBhcmUgYWxzbyBub3Qgc3VwcG9ydGVkLCBidXQgdGhpcyBpc1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUwNjpcXHRcXHQgKiBoYW5kbGVkIGluIF9faW9tYXBfZGlvX3J3KCkuXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTA3LVxcdFxcdCAqL1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjMyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY2My0vKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY2NDogKiBpb21hcF9kaW9fcncoKSBhbHdheXMgY29tcGxldGVzIE9fW0RdU1lOQyB3cml0ZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBJT1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY2NS0gKiBpcyBiZWluZyBpc3N1ZWQgYXMgQUlPIG9yIG5vdC4gIFRoaXMgYWxsb3dzIHVzIHRvIG9wdGltaXNlIHB1cmUgZGF0YSB3cml0ZXNcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3Mi0gKiBXaGVuIHBhZ2UgZmF1bHRzIGFyZSBkaXNhYmxlZCBhbmQgQGRpb19mbGFncyBpbmNsdWRlcyBJT01BUF9ESU9fUEFSVElBTCxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NzM6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzQtICogcGFnZSBpbiBAaXRlciBhZnRlciBwcmVwYXJpbmcgYSB0cmFuc2Zlci4gIEluIHRoYXQgY2FzZSwgdGhlIG5vbi1yZXNpZGVudFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjgzPXN0cnVjdCBpb21hcF9kaW8gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NDpfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODUtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MDI6XFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgZG9uZV9iZWZvcmUpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTcwMy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg3Mi1cXHRcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo4NzM6XFx0XFx0XFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpbm9kZSwgaW9taS5wb3MsIGlvbWkubGVuKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04NzQtXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJT0NCUVVFVUVEKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg5NC19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk1OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTYtXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05NzI9aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE1LSAqIGlvbWFwX2Rpb19zaW1wbGU7IHRoZSB0d28gd3JhcHBlcnMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTY6ICogYmFjayB0byBfX2lvbWFwX2Rpb19ydygpIGluIHRoYXQgY2FzZS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDE3LSAqXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzI6ICogdGhlIGdlbmVyaWMgX19pb21hcF9kaW9fcncoKSBzbG93IHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMzLSAqIGlzIHByb3BhZ2F0ZWQgYXMtaXMsIGluIHBhcnRpY3VsYXIgLUVBR0FJTiBmb3IgSU9DQl9OT1dBSVQgbXVzdCByZWFjaCB0aGVcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTEwMzc9aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwOTAtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5MTpcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDkyLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzNC1cXHRcXHRzdWJtaXRfYmlvKGJpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzNTpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzYtXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNTQ9c3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNTU6aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNTYtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjgtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE2OTpcXHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTcwLVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE3NC19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTE3NTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNzYtXFxuLS1cXG5mcy9pb21hcC90cmFjZS5oPTg1PURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcXG5mcy9pb21hcC90cmFjZS5oOjg2OkRFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9fcndfcXVldWVkKTtcXG5mcy9pb21hcC90cmFjZS5oLTg3LURFRklORV9SQU5HRV9FVkVOVChpb21hcF96ZXJvX2l0ZXIpO1xcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD0yMjA9VFJBQ0VfRVZFTlQoaW9tYXBfaXRlcixcXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmgtMjU1LVxcbmZzL2lvbWFwL3RyYWNlLmg6MjU2OlRSQUNFX0VWRU5UKGlvbWFwX2Rpb19yd19iZWdpbixcXG5mcy9pb21hcC90cmFjZS5oLTI1Ny1cXHRUUF9QUk9UTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTQzOD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTQ2MC1cXHRcXHRmaWxlX2FjY2Vzc2VkKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbmZzL250ZnMvZmlsZS5jOjQ2MTpcXHRcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIFxcdTAwMjZudGZzX3JlYWRfaW9tYXBfb3BzLCBOVUxMLCAwLFxcbmZzL250ZnMvZmlsZS5jLTQ2Mi1cXHRcXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTQ5NT1zdGF0aWMgc3NpemVfdCBudGZzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtNDk4LVxcbmZzL250ZnMvZmlsZS5jOjQ5OTpcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgXFx1MDAyNm50ZnNfZGlvX2lvbWFwX29wcyxcXG5mcy9udGZzL2ZpbGUuYy01MDAtXFx0XFx0XFx0XFx1MDAyNm50ZnNfd3JpdGVfZGlvX29wcywgMCwgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzMy9maWxlLmM9ODE1PXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtODc0LVxcbmZzL250ZnMzL2ZpbGUuYzo4NzU6XFx0XFx0ZXJyID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIFxcdTAwMjZudGZzX2lvbWFwX29wcywgTlVMTCwgZGlvX2ZsYWdzLFxcbmZzL250ZnMzL2ZpbGUuYy04NzYtXFx0XFx0XFx0XFx0ICAgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzMy9maWxlLmM9MTIyMD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xMzA1LVxcbmZzL250ZnMzL2ZpbGUuYzoxMzA2OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2bnRmc19pb21hcF9vcHMsIE5VTEwsXFxuZnMvbnRmczMvZmlsZS5jLTEzMDctXFx0XFx0XFx0ICAgSU9NQVBfRElPX0ZPUkNFX1dBSVQsIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz02Nzk9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy03MjEtICogLSBpb21hcF90cnVuY2F0ZV9wYWdlXFxuZnMvbnRmczMvaW5vZGUuYzo3MjI6ICogLSBpb21hcF9kaW9fcndcXG5mcy9udGZzMy9pbm9kZS5jLTcyMy0gKiAtIGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTI0OT14ZnNfZmlsZV9kaW9fcmVhZChcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTI3MS1cXHR9XFxuZnMveGZzL3hmc19maWxlLmM6MjcyOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgXFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgZGlvX29wcywgZGlvX2ZsYWdzLFxcbmZzL3hmcy94ZnNfZmlsZS5jLTI3My1cXHRcXHRcXHROVUxMLCAwKTtcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTc0MT14ZnNfZmlsZV9kaW9fd3JpdGVfYWxpZ25lZChcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTc3OS1cXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XFxuZnMveGZzL3hmc19maWxlLmM6NzgwOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsIGRvcHMsIGRpb19mbGFncywgYWMsIDApO1xcbmZzL3hmcy94ZnNfZmlsZS5jLTc4MS1vdXRfdW5sb2NrOlxcbi0tXFxuZnMveGZzL3hmc19maWxlLmM9ODE5PXhmc19maWxlX2Rpb193cml0ZV9hdG9taWMoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy04NTUtXFx0XFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XFxuZnMveGZzL3hmc19maWxlLmM6ODU2OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBkb3BzLCBcXHUwMDI2eGZzX2Rpb193cml0ZV9vcHMsIGRpb19mbGFncyxcXG5mcy94ZnMveGZzX2ZpbGUuYy04NTctXFx0XFx0XFx0TlVMTCwgMCk7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz04OTU9eGZzX2ZpbGVfZGlvX3dyaXRlX3VuYWxpZ25lZChcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTk0OS1cXHR0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgZnJvbSk7XFxuZnMveGZzL3hmc19maWxlLmM6OTUwOlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2eGZzX2RpcmVjdF93cml0ZV9pb21hcF9vcHMsXFxuZnMveGZzL3hmc19maWxlLmMtOTUxLVxcdFxcdFxcdCAgIFxcdTAwMjZ4ZnNfZGlvX3dyaXRlX29wcywgZmxhZ3MsIE5VTEwsIDApO1xcbi0tXFxuZnMvem9uZWZzL2ZpbGUuYz00Njk9c3RhdGljIHNzaXplX3Qgem9uZWZzX2ZpbGVfZGlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvem9uZWZzL2ZpbGUuYy01MjMtXFx0LypcXG5mcy96b25lZnMvZmlsZS5jOjUyNDpcXHQgKiBpb21hcF9kaW9fcncoKSBtYXkgcmV0dXJuIEVOT1RCTEsgaWYgdGhlcmUgd2FzIGFuIGlzc3VlIHdpdGhcXG5mcy96b25lZnMvZmlsZS5jLTUyNS1cXHQgKiBwYWdlIGludmFsaWRhdGlvbi4gT3ZlcndyaXRlIHRoYXQgZXJyb3IgY29kZSB3aXRoIEVCVVNZIHNvIHRoYXRcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtNTI3LVxcdCAqL1xcbmZzL3pvbmVmcy9maWxlLmM6NTI4OlxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBcXHUwMDI2em9uZWZzX3dyaXRlX2lvbWFwX29wcyxcXG5mcy96b25lZnMvZmlsZS5jLTUyOS1cXHRcXHRcXHQgICBcXHUwMDI2em9uZWZzX3dyaXRlX2Rpb19vcHMsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvem9uZWZzL2ZpbGUuYz02MzE9c3RhdGljIHNzaXplX3Qgem9uZWZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtNjcyLVxcdFxcdGZpbGVfYWNjZXNzZWQoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuZnMvem9uZWZzL2ZpbGUuYzo2NzM6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBcXHUwMDI2em9uZWZzX3JlYWRfaW9tYXBfb3BzLFxcbmZzL3pvbmVmcy9maWxlLmMtNjc0LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ6b25lZnNfcmVhZF9kaW9fb3BzLCAwLCBOVUxMLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDg6NTk6NDIuMTg3ODA5ODAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5MTkzMDkzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNDMwNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6MDA6MDMuMTA3MTIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MTU4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX3NpbXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTYtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk3OnN0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2I7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTEtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcilcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQyLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ2OlxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ3LVxcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVxcdTAwM2Vpb2NiO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ5LVxcdFdSSVRFX09OQ0UoaW9jYi1cXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTUwOlxcdGlvY2ItXFx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTEtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NTM6c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU2OlxcdFxcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Ny1cXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cXHUwMDNlaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NjI6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzci1cXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXFx0XFx0cXVldWVfd29yayhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19kaW9fZG9uZV93cSwgXFx1MDAyNnNyLVxcdTAwM2V3b3JrKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2Ny1cXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2ODpcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTY5LX1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk3MT1zdGF0aWMgaW5saW5lIGJvb2xcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NzI6aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwNi0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwOC0gKiBlbnRlcmluZyB0aGlzIHBhdGguXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE0OiAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTU6ICogaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90IGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAyOS0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzc6aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDM4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVxcdH07XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA1MTpcXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA1Mi1cXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA5Ny1cXHRcXHRcXHQgICAgICAgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKGl0ZXIsIEJJT19NQVhfVkVDUyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5ODpcXHRcXHRcXHQgICAgICAgUkVRX09QX1JFQUQsIEdGUF9LRVJORUwsIFxcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTk6XFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVxcdHNyLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzItXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzQtXFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzOS1cXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTQwOlxcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE1NT1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYxLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNjI6XFx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYzLVxcdFxcdFxcdFxcdCAgICAgICBkb25lX2JlZm9yZSkpIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19zaW1wbGUoaW9jYiwgaXRlciwgb3BzLCBwcml2YXRlLCBkaW9fZmxhZ3MpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXFx0XFx0aWYgKHJldCAhPSAtRU5PVEJMSylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNzc9c3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTc4LXtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5OlxcdHJldHVybiBiaW9zZXRfaW5pdChcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE4MS1cXHRcXHRcXHQgICBCSU9TRVRfTkVFRF9CVkVDUyB8IEJJT1NFVF9QRVJDUFVfQ0FDSEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTowMDowMy4yODI1NDYyMzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxNzY3ODAxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERpcmVjdCBJL08gRmFzdCBQYXRoIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRpbmcgYSBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCB0YXJnZXRzIHNtYWxsLCBibG9jay1hbGlnbmVkIEkvT3MgdGhhdCBoaXQgYSBzaW5nbGUgY29udGlndW91cyBleHRlbnQgb24gZGlzayB3aXRoaW4gdGhlIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBvcHRpbWl6YXRpb24gaW52b2x2ZXMgdHdvIG5ldyBmdW5jdGlvbnMsIGBpb21hcF9kaW9fc2ltcGxlKClgIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKWAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBpb21hcF9kaW9fcncoKWAuIFRoZSBpbXBsaWNhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHRvIHRoZSBrZXJuZWwncyBkaXJlY3QgSS9PIHBhdGgsIHdoaWNoIHVzZXJzIGFjY2VzcyB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBsaWtlIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgd2l0aCB0aGUgYE9fRElSRUNUYCBmbGFnLlxuXG5HaXZlbiB0aGF0IHRoaXMgdG91Y2hlcyBjb3JlIFZGUyBhbmQgaW9tYXAgbG9naWMsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UgbmVlZCB0byBleHBvc2UgdGhpcyB0byBhcyBtYW55IHN0cmVzcyB0ZXN0cyBhcyB3ZSBjYW4gdG8gc2hha2Ugb3V0IGFueSBlZGdlIGNhc2VzLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTdGFydGluZyB3aXRoIHRoZSBmaWxlIGxvY2F0aW9uIGl0c2VsZiwgYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gRGl2aW5nIGludG8gdGhlIGBmcy9pb21hcC9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYGlvbWFwLSQoQ09ORklHX0JMT0NLKSArPSBkaXJlY3QtaW8ub2AuIFNvIGBDT05GSUdfQkxPQ0tgIGlzIHRoZSBwcmltYXJ5IHJlcXVpcmVtZW50LiBUaGF0IGlzIGEgKnZlcnkqIGdlbmVyYWwgY29uZmlnLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgYWJvdXQgdGhhdC4gVGhlIG1vcmUgcmVsZXZhbnQgcmVxdWlyZW1lbnQgaXMgYENPTkZJR19GU19JT01BUGAuIFRoaXMgaXMgdGhlIGNvcmUgaW9tYXAgY29uZmlndXJhdGlvbiwgYW5kIGl0IGlzIHNlbGVjdGVkIGJ5IG51bWVyb3VzIGZpbGUgc3lzdGVtcyBsaWtlIGV4dDQsIHhmcywgYW5kIGJ0cmZzLCB3aGljaCBtZWFucyBpdHMgcHJldHR5IGJyb2FkbHkgdXNlZC4gTm93LCB3YWl0IGEgbWludXRlLi4uIHdoZXJlIGlzIHRoZSBLY29uZmlnIGZvciB0aGUgaW9tYXAgc3Vic3lzdGVtIGl0c2VsZj8gSXQgZG9lc24ndCBhcHBlYXIgdG8gZXhpc3QgaW4gYGZzL2lvbWFwL2AuIEknbGwgaGF2ZSB0byBjaGVjayBgZnMvS2NvbmZpZ2AgZm9yIHRoZSBpb21hcCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDYzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjAwOjE4LjQ1OTMzMDU5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODY5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG4tLVxcbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxcbi0tXFxuZnMvS2NvbmZpZy02MS1cXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTYzLVxcdHNlbGVjdCBEQVhcXG4tLVxcbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcXG4tLVxcbmZzL2J0cmZzL0tjb25maWctMTQtXFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbmZzL2J0cmZzL0tjb25maWc6MTU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cXHRzZWxlY3QgUkFJRDZfUFFcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXFxuZnMvZXJvZnMvS2NvbmZpZzo5OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Vyb2ZzL0tjb25maWctMTAtXFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZz0zPWNvbmZpZyBFWEZBVF9GU1xcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG5mcy9leGZhdC9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXhmYXQvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuLS1cXG5mcy9leHQyL0tjb25maWctNC1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9leHQyL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQyL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTctXFx0c2VsZWN0IENSQzMyXFxuZnMvZXh0NC9LY29uZmlnOjg6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXh0NC9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuLS1cXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xcbi0tXFxuZnMvZjJmcy9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuZnMvZjJmcy9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2YyZnMvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTFo0X0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0XFxuLS1cXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xcbi0tXFxuZnMvZnVzZS9LY29uZmlnLTQtXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbmZzL2Z1c2UvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Z1c2UvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXFxuLS1cXG5mcy9nZnMyL0tjb25maWctNy1cXHRzZWxlY3QgUVVPVEFDVExcXG5mcy9nZnMyL0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9nZnMyL0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xcbi0tXFxuZnMvaHBmcy9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaHBmcy9LY29uZmlnOjY6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvaHBmcy9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZnMvaW9tYXAvTWFrZWZpbGU9Nz1jY2ZsYWdzLXkgKz0gLUkgJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL2lvbWFwL01ha2VmaWxlLTgtXFxuZnMvaW9tYXAvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfRlNfSU9NQVApXFx0XFx0Kz0gaW9tYXAub1xcbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00LVxcdHNlbGVjdCBOTFNcXG5mcy9udGZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9udGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9udGZzL2lvbWFwLmM9MzYzPXN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmMtNTQwLVxcbmZzL250ZnMvaW9tYXAuYzo1NDE6I2RlZmluZSBOVEZTX0lPTUFQX0ZMQUdTX0JFR0lOXFx0XFx0QklUKDEpXFxuZnMvbnRmcy9pb21hcC5jOjU0MjojZGVmaW5lIE5URlNfSU9NQVBfRkxBR1NfRElPXFx0XFx0QklUKDIpXFxuZnMvbnRmcy9pb21hcC5jOjU0MzojZGVmaW5lXFx0TlRGU19JT01BUF9GTEFHU19NS1dSSVRFXFx0QklUKDMpXFxuZnMvbnRmcy9pb21hcC5jOjU0NDojZGVmaW5lXFx0TlRGU19JT01BUF9GTEFHU19XUklURUJBQ0tcXHRCSVQoNClcXG5mcy9udGZzL2lvbWFwLmMtNTQ1LVxcbmZzL250ZnMvaW9tYXAuYz01NDY9c3RhdGljIGludCBudGZzX3dyaXRlX2RhX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTU2MS1cXG5mcy9udGZzL2lvbWFwLmM6NTYyOlxcdHVwZGF0ZV9tcCA9IG50ZnNfaW9tYXBfZmxhZ3MgXFx1MDAyNiAoTlRGU19JT01BUF9GTEFHU19ESU8gfCBOVEZTX0lPTUFQX0ZMQUdTX01LV1JJVEUpIHx8XFxuZnMvbnRmcy9pb21hcC5jLTU2My1cXHRcXHRcXHROSW5vQXR0cihuaSkgfHwgbmktXFx1MDAzZW1mdF9ubyBcXHUwMDNjIEZJTEVfZmlyc3RfdXNlcjtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYy01NjYtXFx0XFx0XFx0bWF4X2NsdV9jb3VudCwgXFx1MDAyNmJhbGxvYywgdXBkYXRlX21wLFxcbmZzL250ZnMvaW9tYXAuYzo1Njc6XFx0XFx0XFx0bnRmc19pb21hcF9mbGFncyBcXHUwMDI2IE5URlNfSU9NQVBfRkxBR1NfV1JJVEVCQUNLKTtcXG5mcy9udGZzL2lvbWFwLmMtNTY4LVxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYy01OTQtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9NQVBfRElSRUNUIHx8XFxuZnMvbnRmcy9pb21hcC5jOjU5NTpcXHRcXHQgICAgbnRmc19pb21hcF9mbGFncyBcXHUwMDI2IE5URlNfSU9NQVBfRkxBR1NfTUtXUklURSkge1xcbmZzL250ZnMvaW9tYXAuYy01OTYtXFx0XFx0XFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbmd0aDtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYy02MjAtXFxuZnMvbnRmcy9pb21hcC5jOjYyMTpcXHRpZiAobnRmc19pb21hcF9mbGFncyBcXHUwMDI2IE5URlNfSU9NQVBfRkxBR1NfTUtXUklURSBcXHUwMDI2XFx1MDAyNlxcbmZzL250ZnMvaW9tYXAuYy02MjItXFx0ICAgIGlvbWFwLVxcdTAwM2VvZmZzZXQgKyBpb21hcC1cXHUwMDNlbGVuZ3RoIFxcdTAwM2UgbmktXFx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYz02NzQ9c3RhdGljIGludCBudGZzX3dyaXRlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY3OS1cXG5mcy9udGZzL2lvbWFwLmM6NjgwOlxcdGlmIChudGZzX2lvbWFwX2ZsYWdzIFxcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfQkVHSU4gfCBOVEZTX0lPTUFQX0ZMQUdTX0RJTykgXFx1MDAyNlxcdTAwMjZcXG5mcy9udGZzL2lvbWFwLmMtNjgxLVxcdCAgICBvZmZzZXQgKyBsZW5ndGggXFx1MDAzZSBuaS1cXHUwMDNlaW5pdGlhbGl6ZWRfc2l6ZSkge1xcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY4Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICBudGZzX2lvbWFwX2ZsYWdzIFxcdTAwMjZcXG5mcy9udGZzL2lvbWFwLmM6Njg3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE5URlNfSU9NQVBfRkxBR1NfRElPKTtcXG5mcy9udGZzL2lvbWFwLmMtNjg4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY5Mi1cXHRtdXRleF9sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG5mcy9udGZzL2lvbWFwLmM6NjkzOlxcdGlmIChudGZzX2lvbWFwX2ZsYWdzIFxcdTAwMjYgTlRGU19JT01BUF9GTEFHU19CRUdJTilcXG5mcy9udGZzL2lvbWFwLmMtNjk0LVxcdFxcdHJldHVybiAgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KGlub2RlLCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmM9NzAzPXN0YXRpYyBpbnQgX19udGZzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmMtNzEyLVxcbmZzL250ZnMvaW9tYXAuYzo3MTM6XFx0aWYgKG50ZnNfaW9tYXBfZmxhZ3MgXFx1MDAyNiAoTlRGU19JT01BUF9GTEFHU19CRUdJTiB8IE5URlNfSU9NQVBfRkxBR1NfRElPKSBcXHUwMDI2XFx1MDAyNlxcbmZzL250ZnMvaW9tYXAuYy03MTQtXFx0ICAgIGVuZCBcXHUwMDNlIG5pLVxcdTAwM2VkYXRhX3NpemUpIHtcXG4tLVxcbmZzL250ZnMvaW9tYXAuYz03Mzg9c3RhdGljIGludCBudGZzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9udGZzL2lvbWFwLmMtNzQyLVxcdHJldHVybiBfX250ZnNfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsXFxuZnMvbnRmcy9pb21hcC5jOjc0MzpcXHRcXHRcXHROVEZTX0lPTUFQX0ZMQUdTX0JFR0lOKTtcXG5mcy9udGZzL2lvbWFwLmMtNzQ0LX1cXG4tLVxcbmZzL250ZnMvaW9tYXAuYz03NzI9c3RhdGljIGludCBudGZzX3BhZ2VfbWt3cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTc3Ni1cXHRyZXR1cm4gX19udGZzX3dyaXRlX2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLFxcbmZzL250ZnMvaW9tYXAuYzo3Nzc6XFx0XFx0XFx0TlRGU19JT01BUF9GTEFHU19NS1dSSVRFKTtcXG5mcy9udGZzL2lvbWFwLmMtNzc4LX1cXG4tLVxcbmZzL250ZnMvaW9tYXAuYz03ODU9c3RhdGljIGludCBudGZzX2Rpb19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTc4OS1cXHRyZXR1cm4gX19udGZzX3dyaXRlX2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLFxcbmZzL250ZnMvaW9tYXAuYzo3OTA6XFx0XFx0XFx0TlRGU19JT01BUF9GTEFHU19ESU8pO1xcbmZzL250ZnMvaW9tYXAuYy03OTEtfVxcbi0tXFxuZnMvbnRmcy9pb21hcC5jPTc5OD1zdGF0aWMgc3NpemVfdCBudGZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTgwNy1cXHRcXHRcXHRcXHRJT01BUF9XUklURSwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsXFxuZnMvbnRmcy9pb21hcC5jOjgwODpcXHRcXHRcXHRcXHROVEZTX0lPTUFQX0ZMQUdTX1dSSVRFQkFDSyk7XFxuZnMvbnRmcy9pb21hcC5jLTgwOS1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9udGZzL2lvbWFwLmgtNS1cXG5mcy9udGZzL2lvbWFwLmg6NjojaWZuZGVmIF9MSU5VWF9OVEZTX0lPTUFQX0hcXG5mcy9udGZzL2lvbWFwLmg6NzojZGVmaW5lIF9MSU5VWF9OVEZTX0lPTUFQX0hcXG5mcy9udGZzL2lvbWFwLmgtOC1cXG4tLVxcbmZzL250ZnMvaW9tYXAuaD0yMj1leHRlcm4gaW50IG50ZnNfZGlvX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCk7XFxuZnMvbnRmcy9pb21hcC5oOjIzOiNlbmRpZiAvKiBfTElOVVhfTlRGU19JT01BUF9IICovXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcXG4tLVxcbmZzL3hmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMveGZzL0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy94ZnMvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL3hmcy94ZnNfaW9tYXAuaC01LSAqL1xcbmZzL3hmcy94ZnNfaW9tYXAuaDo2OiNpZm5kZWYgX19YRlNfSU9NQVBfSF9fXFxuZnMveGZzL3hmc19pb21hcC5oOjc6I2RlZmluZSBfX1hGU19JT01BUF9IX19cXG5mcy94ZnMveGZzX2lvbWFwLmgtOC1cXG4tLVxcbmZzL3hmcy94ZnNfaW9tYXAuaD02MD1leHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyB4ZnNfaW9tYXBfd3JpdGVfb3BzO1xcbmZzL3hmcy94ZnNfaW9tYXAuaC02MS1cXG5mcy94ZnMveGZzX2lvbWFwLmg6NjI6I2VuZGlmIC8qIF9fWEZTX0lPTUFQX0hfXyovXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuZnMvem9uZWZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy96b25lZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTowMDoxOC44NzUyMDUyMjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMzQwMjAzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxOTk4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6MDA6MzEuMjA5MjI4MTY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExOTk4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX3NpbXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9ODk1PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTYtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODk3OnN0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04OTgtXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2I7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTEtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcilcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQyLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk0MzpzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk0NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTQ2OlxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ3LVxcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVxcdTAwM2Vpb2NiO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTQ5LVxcdFdSSVRFX09OQ0UoaW9jYi1cXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTUwOlxcdGlvY2ItXFx1MDAzZWtpX2NvbXBsZXRlKGlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NTEtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Mi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NTM6c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1NC17XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU1OlxcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTU2OlxcdFxcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk1Ny1cXHRzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci1cXHUwMDNlaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2MS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NjI6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzci1cXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05NjMtXFx0XFx0cXVldWVfd29yayhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19kaW9fZG9uZV93cSwgXFx1MDAyNnNyLVxcdTAwM2V3b3JrKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk2Ny1cXHRXUklURV9PTkNFKGlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjk2ODpcXHRpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShpb2NiLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTY5LX1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk3MT1zdGF0aWMgaW5saW5lIGJvb2xcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5NzI6aW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTczLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwNi0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMDc6ICogaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoKSBlbmZvcmNlcyB0aGUgY2hlYXAgdXAtZnJvbnQgY29uc3RyYWludHMgYmVmb3JlXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAwOC0gKiBlbnRlcmluZyB0aGlzIHBhdGguXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDEzLSAqIGZpbGVzeXN0ZW0tcHJpdmF0ZSB3cmFwcGVyIGFyb3VuZCB0aGUgYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDE0OiAqIGZyb20gdGhlIHNoYXJlZCBpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIHdob3NlIGZyb250X3BhZCBtYXRjaGVzIHN0cnVjdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMTU6ICogaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90IGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAxNi0gKiBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW4gdGhhdCBjYXNlLlxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAyOS0gKlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzA6ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpIHdoZW4gaXRcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDMxLSAqIGRlY2lkZXMgdGhlIHJlcXVlc3QgZG9lcyBub3QgZml0IHRoZSBmYXN0IHBhdGguICBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0b1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTAzNj1zdGF0aWMgc3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMzc6aW9tYXBfZGlvX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDM4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDUwLVxcdH07XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA1MTpcXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA1Mi1cXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA5Ny1cXHRcXHRcXHQgICAgICAgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKGl0ZXIsIEJJT19NQVhfVkVDUyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA5ODpcXHRcXHRcXHQgICAgICAgUkVRX09QX1JFQUQsIEdGUF9LRVJORUwsIFxcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwOTk6XFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTAwLVxcdHNyLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzItXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTEzMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExMzQtXFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTEzOS1cXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTQwOlxcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTQxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTE1NT1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYxLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExNjI6XFx0aWYgKGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRvcHMsIGRpb19mbGFncyxcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTYzLVxcdFxcdFxcdFxcdCAgICAgICBkb25lX2JlZm9yZSkpIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTY0OlxcdFxcdHJldCA9IGlvbWFwX2Rpb19zaW1wbGUoaW9jYiwgaXRlciwgb3BzLCBwcml2YXRlLCBkaW9fZmxhZ3MpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTExNjUtXFx0XFx0aWYgKHJldCAhPSAtRU5PVEJMSylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTExNzc9c3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMTc4LXtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMTc5OlxcdHJldHVybiBiaW9zZXRfaW5pdChcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjExODA6XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTE4MS1cXHRcXHRcXHQgICBCSU9TRVRfTkVFRF9CVkVDUyB8IEJJT1NFVF9QRVJDUFVfQ0FDSEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTowMDozMS40MDA0MzI1MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk2NDA2MDE0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IERpcmVjdCBJL08gUGF0aCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIGEgXCJzaW1wbGVcIiBkaXJlY3QgSS9PIHBhdGgsIHNwZWNpZmljYWxseSBgaW9tYXBfZGlvX3NpbXBsZWAsIHdpdGhpbiB0aGUgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBmaWxlLiBUaGlzIG5ldyBwYXRoIGlzIGRlc2lnbmVkIGZvciBoYW5kbGluZyBmYXN0IHBhdGgsIHNtYWxsLCBibG9jay1hbGlnbmVkIGRpcmVjdCBJL09zIHRoYXQgbWFwIHRvIGEgc2luZ2xlIGNvbnRpZ3VvdXMgZXh0ZW50IG9uIGRpc2suIE15IGluaXRpYWwgdGhvdWdodD8gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQuXG5cblRoZSBgaW9tYXBfZGlvX3NpbXBsZWAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYGlvbWFwX2Rpb19yd2AsIHdoaWNoIGlzLCBhcyB3ZSBrbm93LCBhIGZ1bmN0aW9uIHVzZWQgYnkgbnVtZXJvdXMgZmlsZXN5c3RlbXMsIGluY2x1ZGluZyBidHJmcywgZXh0NCwgeGZzLCBmMmZzLCBhbmQgZ2ZzMi4gVGhhdCBpbW1lZGlhdGVseSBleHBhbmRzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCBhdHRhY2sgc3VyZmFjZSwgYW5kIG1lYW5zIGl0IHNob3VsZCBiZSB2ZXJ5IHdlbGwgdGVzdGVkLCBhbmQgdGh1cyBmdXp6ZWQuXG5cblRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYWxsIHRoaXMgaXMgYEZTX0lPTUFQYC4gVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgbWFueSBmaWxlc3lzdGVtcywgd2hpY2ggaXMgZ29vZCwgYnV0IGluIG15IGV4cGVyaWVuY2UsIGl0IG1pZ2h0IGFsc28gYmUgd29ydGgga2VlcGluZyBhbiBleWUgb24gdGhlIHNlbGVjdGVkIGZpbGVzeXN0ZW1zLiBTaW5jZSBgRlNfSU9NQVBgIGlzIGEgYm9vbCBjb25maWcsIGxpc3RpbmcgaXQgaXMgZmluZS4gSXQgd291bGQgYWxzbyBiZSB1c2VmdWwgdG8ga2VlcCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBgQlRSRlNfRlNgIGluIG1pbmQuXG5cblNvLCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoaXMgbmV3IHBhdGgsIGFuZCB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gYmUuXG5cblRoZSBwYXRjaCBpbmNsdWRlcyBgaW9tYXBfZGlvX3NpbXBsZWAgYW5kIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAsIHNvIHRoaXMgaXMgYSBzb2xpZCBhZGRpdGlvbi5cblxuVGhlcmVmb3JlLCBmb3IgbXkgZnV6emluZyBhc3Nlc3NtZW50OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgXG4qICAgKipFbmFibGVDb25maWdzKio6IGBGU19JT01BUGAgYW5kLCB3YWl0LCBzaW5jZSB0aGUgYGRpcmVjdC1pby5vYCBmaWxlIGFsc28gcmVxdWlyZXMgYENPTkZJR19CTE9DS2AsIEkgc2hvdWxkIGFkZCB0aGF0IHRvby4gYEJMT0NLYFxuXG4qKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcsIGZhc3RlciBwYXRoIGZvciBoYW5kbGluZyBzcGVjaWZpYyB0eXBlcyBvZiBkaXJlY3QgSS9PcyB3aXRoaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gQmVjYXVzZSB0aGlzIHBhdGggYWRkcyBuZXcgY29yZSBsb2dpYywgYW5kIGJlY2F1c2UgaXQgaXMgcmVhY2hhYmxlIHZpYSBzZXZlcmFsIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBpdCBzaG91bGQgYmUgZnV6emVkIGFzIHBhcnQgb2YgYSBwcm9wZXIgc2VjdXJpdHkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNDEsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjAwOjUxLjA0MTAzODMwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDEzMTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfZGlvX3NpbXBsZVwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBhZGRzIG5ldyBjb3JlIGxvZ2ljIGZvciBkaXJlY3QgSS9PIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB2YXJpb3VzIGZpbGVzeXN0ZW1zIChleHQ0LCB4ZnMsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZFwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZVwiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGFkZHMgbmV3IGNvcmUgbG9naWMgZm9yIGRpcmVjdCBJL08gaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgdmlhIHZhcmlvdXMgZmlsZXN5c3RlbXMgKGV4dDQsIHhmcywgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[1] Phase: Succeeded StartedAt: 2026-07-01 09:02:44 +0000 UTC FinishedAt: 2026-07-01 09:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 09:02:44 +0000 UTC FinishedAt: 2026-07-01 09:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2] Phase: Succeeded StartedAt: 2026-07-01 09:02:44 +0000 UTC FinishedAt: 2026-07-01 13:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 09:02:45 +0000 UTC FinishedAt: 2026-07-01 13:13:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 09:02:45 +0000 UTC FinishedAt: 2026-07-01 09:03:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 09:02:45 +0000 UTC FinishedAt: 2026-07-01 09:02:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7f556/series-workflow7f556-convert-artifact-1189243660/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 09:03:06 +0000 UTC FinishedAt: 2026-07-01 09:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 09:03:06 +0000 UTC FinishedAt: 2026-07-01 09:25:34 +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:*fb10d83d-48a0-441e-bf0c-6b49d969ddd5,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-workflow7f556/series-workflow7f556-convert-artifact-1189243660/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": "b01dfeb8-4bcc-48fa-83f7-1fe40b8db44a", "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-workflow7f556/series-workflow7f556-build-action-1568747834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 09:03:06 +0000 UTC FinishedAt: 2026-07-01 09:25:24 +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:*fb10d83d-48a0-441e-bf0c-6b49d969ddd5,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-workflow7f556/series-workflow7f556-convert-artifact-1189243660/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": "b01dfeb8-4bcc-48fa-83f7-1fe40b8db44a", "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-workflow7f556/series-workflow7f556-build-action-1568747834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 09:25:34 +0000 UTC FinishedAt: 2026-07-01 09:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 09:25:34 +0000 UTC FinishedAt: 2026-07-01 09:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 09:25:34 +0000 UTC FinishedAt: 2026-07-01 09:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 09:25:34 +0000 UTC FinishedAt: 2026-07-01 09:25:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7f556/series-workflow7f556-convert-artifact-22556747/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 09:25:44 +0000 UTC FinishedAt: 2026-07-01 09:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 09:25:44 +0000 UTC FinishedAt: 2026-07-01 09:27:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b01dfeb8-4bcc-48fa-83f7-1fe40b8db44a,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-workflow7f556/series-workflow7f556-build-action-1568747834/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-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 09:27:46 +0000 UTC FinishedAt: 2026-07-01 09:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 09:27:46 +0000 UTC FinishedAt: 2026-07-01 09:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 09:27:46 +0000 UTC FinishedAt: 2026-07-01 10:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 09:27:46 +0000 UTC FinishedAt: 2026-07-01 10:03:20 +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:*fb10d83d-48a0-441e-bf0c-6b49d969ddd5,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-workflow7f556/series-workflow7f556-convert-artifact-22556747/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": "2886b136-d11b-4964-8dbd-a8f33b387876", "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-workflow7f556/series-workflow7f556-build-action-2899727599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 09:27:46 +0000 UTC FinishedAt: 2026-07-01 10:02:58 +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:*fb10d83d-48a0-441e-bf0c-6b49d969ddd5,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-workflow7f556/series-workflow7f556-convert-artifact-22556747/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": "2886b136-d11b-4964-8dbd-a8f33b387876", "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-workflow7f556/series-workflow7f556-build-action-2899727599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 10:03:20 +0000 UTC FinishedAt: 2026-07-01 10:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 10:03:20 +0000 UTC FinishedAt: 2026-07-01 10:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 10:03:20 +0000 UTC FinishedAt: 2026-07-01 10:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 10:03:20 +0000 UTC FinishedAt: 2026-07-01 10:05:16 +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:*2886b136-d11b-4964-8dbd-a8f33b387876,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-workflow7f556/series-workflow7f556-build-action-2899727599/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-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 10:05:27 +0000 UTC FinishedAt: 2026-07-01 13:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 10:05:27 +0000 UTC FinishedAt: 2026-07-01 13:13:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"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:*b01dfeb8-4bcc-48fa-83f7-1fe40b8db44a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2886b136-d11b-4964-8dbd-a8f33b387876,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-workflow7f556/series-workflow7f556-build-action-1568747834/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-workflow7f556/series-workflow7f556-build-action-2899727599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 10:05:27 +0000 UTC FinishedAt: 2026-07-01 10:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 10:05:27 +0000 UTC FinishedAt: 2026-07-01 10:05:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"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-workflow7f556/series-workflow7f556-convert-artifact-2565446372/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 10:05:27 +0000 UTC FinishedAt: 2026-07-01 10:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 10:05:27 +0000 UTC FinishedAt: 2026-07-01 10:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 10:05:27 +0000 UTC FinishedAt: 2026-07-01 10:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 10:06:42 +0000 UTC FinishedAt: 2026-07-01 13:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f556[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_supported","iomap_dio_simple_complete","iomap_dio_simple_end_io","iomap_dio_simple_complete_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_IOMAP","BLOCK"],"series_id":"cd5d4089-d327-48fd-9643-ac2536637271","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 10:06:42 +0000 UTC FinishedAt: 2026-07-01 13:13:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b01dfeb8-4bcc-48fa-83f7-1fe40b8db44a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2886b136-d11b-4964-8dbd-a8f33b387876,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-workflow7f556/series-workflow7f556-build-action-1568747834/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-workflow7f556/series-workflow7f556-build-action-2899727599/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-workflow7f556/series-workflow7f556-convert-artifact-2565446372/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,}